@openscout/scout 0.2.78 → 0.2.79
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/README.md +19 -0
- package/bin/scoutd +0 -0
- package/dist/build-manifest.json +3 -3
- package/dist/client/assets/ActivityScreen-DnqqRSlS.js +1 -0
- package/dist/client/assets/{AddProjectForm-DMnobKch.js → AddProjectForm-BoVtelSP.js} +1 -1
- package/dist/client/assets/{AgentAvatar-D90c1Rzk.js → AgentAvatar-CufDA4A-.js} +1 -1
- package/dist/client/assets/AgentConfigurationScreen-CJqoMA0J.js +1 -0
- package/dist/client/assets/AgentDefinitionsWorkspace-FpEkb-tu.js +1 -0
- package/dist/client/assets/{AgentDetailCard-BcRBRp88.js → AgentDetailCard-DxxVkgT1.js} +1 -1
- package/dist/client/assets/AgentFloorView-CycUn0Lv.js +1 -0
- package/dist/client/assets/AgentInfoScreen-CAQAxpAK.js +1 -0
- package/dist/client/assets/{AgentLaneCard-RrNnDZu8.js → AgentLaneCard-DTUvE96I.js} +1 -1
- package/dist/client/assets/{AgentLaneChrome-D9ZwUKrl.js → AgentLaneChrome-BfVygkgL.js} +1 -1
- package/dist/client/assets/{AgentLaneDetailSheet-BXbPls9N.js → AgentLaneDetailSheet-CWs9wKWk.js} +1 -1
- package/dist/client/assets/{AgentLaneSummaryResize-BhFmGNzT.js → AgentLaneSummaryResize-CMgzYvAA.js} +1 -1
- package/dist/client/assets/AgentLanesEmbedScreen-BUCW4nUj.js +1 -0
- package/dist/client/assets/{AgentLanesPreflight-eSAoDsPi.js → AgentLanesPreflight-KWfLcaNB.js} +1 -1
- package/dist/client/assets/AgentLanesView-CxfbV8Kd.js +2 -0
- package/dist/client/assets/{AgentLiveActions-DBtnD0qE.js → AgentLiveActions-CZdAInEu.js} +1 -1
- package/dist/client/assets/{AgentSessions-DyqOf4nG.js → AgentSessions-Bkr0lyry.js} +2 -2
- package/dist/client/assets/AgentsConsole-WtFVqaPJ.js +1 -0
- package/dist/client/assets/AgentsScreen-BMXvuiA2.js +1 -0
- package/dist/client/assets/AgentsSubnav-BTNjPYoA.js +1 -0
- package/dist/client/assets/{AtopView-BCkae3e1.js → AtopView-_OKDlZ1h.js} +1 -1
- package/dist/client/assets/BackToPicker-CkUmHuuo.js +1 -0
- package/dist/client/assets/{BriefingDetailScreen-BwFyysT8.js → BriefingDetailScreen-i54EtZKW.js} +1 -1
- package/dist/client/assets/{BriefingsScreen-BQEevztH.js → BriefingsScreen-CBrHojlQ.js} +1 -1
- package/dist/client/assets/{BrokerMetadataPanel-7UjcuNjd.js → BrokerMetadataPanel-opTLuZU6.js} +1 -1
- package/dist/client/assets/{BrokerScreen-7ekklu88.js → BrokerScreen-CObCQvoy.js} +2 -2
- package/dist/client/assets/{ChatCollapsedStrip-CQSYSd8s.js → ChatCollapsedStrip-Dr2vmKXQ.js} +1 -1
- package/dist/client/assets/CodeDiffPane-CLOGjwul.js +1 -0
- package/dist/client/assets/{CodeProjectPicker-DqKFCpLU.js → CodeProjectPicker-DTV8hR6A.js} +1 -1
- package/dist/client/assets/CodeScreen-BXqi72NK.js +1 -0
- package/dist/client/assets/{ContextMenu-bARZqTzD.js → ContextMenu-BlBQhpax.js} +1 -1
- package/dist/client/assets/{ConversationComposer-Bla3DDvM.js → ConversationComposer-BBNPa5S9.js} +1 -1
- package/dist/client/assets/ConversationFeedRows-BuejHMCY.js +1 -0
- package/dist/client/assets/ConversationHeader-DXMT-YXv.js +1 -0
- package/dist/client/assets/ConversationPanels-DHCtilQF.js +2 -0
- package/dist/client/assets/ConversationScreen-DSxIt9pq.css +1 -0
- package/dist/client/assets/ConversationScreen-Dz2d_Z_F.js +1 -0
- package/dist/client/assets/ConversationStatus-DSgdVofa.js +1 -0
- package/dist/client/assets/{DataTable-E8s_MmoA.js → DataTable-0DwuXyvW.js} +1 -1
- package/dist/client/assets/{DispatchAftermath-Dpe88DFX.js → DispatchAftermath-BrreQifA.js} +1 -1
- package/dist/client/assets/{DocumentFocusViewer-BeVwwl26.js → DocumentFocusViewer-DU_9BHsD.js} +1 -1
- package/dist/client/assets/{EmbeddableSurfacesLab-BQqFQVnI.js → EmbeddableSurfacesLab-DdaswbfI.js} +1 -1
- package/dist/client/assets/{EmptyState-4F9XDFQm.js → EmptyState-CoL-QuUO.js} +1 -1
- package/dist/client/assets/{FileViewerPane-CLgUhSm4.js → FileViewerPane-C9Ly01Ef.js} +1 -1
- package/dist/client/assets/{FleetSearch-Dz5euQJe.js → FleetSearch-DlWTLl-v.js} +1 -1
- package/dist/client/assets/FlightObserveScreen-C-9S0nA5.js +1 -0
- package/dist/client/assets/{FollowScreen-DZ4qfYOY.js → FollowScreen--Q04xSSE.js} +1 -1
- package/dist/client/assets/{HarnessMark-Cbv3Ib0c.js → HarnessMark-Dm_qm1Ku.js} +1 -1
- package/dist/client/assets/HarnessesScreen-Y54viPX8.js +1 -0
- package/dist/client/assets/{HomeHero-B3uYd-pP.js → HomeHero-Cfsow7qL.js} +1 -1
- package/dist/client/assets/KnowledgeSearchInspector-DKashKoH.js +1 -0
- package/dist/client/assets/KnowledgeSearchScreen-DsdDz8wY.js +1 -0
- package/dist/client/assets/{LaneToolHoverCard-Bla0gBdm.js → LaneToolHoverCard-BzehBmdi.js} +1 -1
- package/dist/client/assets/LaneTraceDetailSheet-CBf_aNZx.js +1 -0
- package/dist/client/assets/{LaneTraceEventFocus-BF9ERP5O.js → LaneTraceEventFocus-DYvHfs_3.js} +1 -1
- package/dist/client/assets/{MeshCanvas-DFEPkpqY.js → MeshCanvas-DIjlrMPU.js} +2 -2
- package/dist/client/assets/{MeshCanvasMinimap-CyVFYixr.js → MeshCanvasMinimap-DEq-PkF0.js} +1 -1
- package/dist/client/assets/MeshScreen-TgDtz-1l.js +1 -0
- package/dist/client/assets/{MeshTopologyView-CalkZghg.js → MeshTopologyView-BMHpH5BU.js} +2 -2
- package/dist/client/assets/{MessageComposerSuggestions-DpxN9WiB.js → MessageComposerSuggestions-zAUUcLOv.js} +1 -1
- package/dist/client/assets/MessagesScreen-BTQL0UcE.js +1 -0
- package/dist/client/assets/{MissionControlView-lUeAiSVg.js → MissionControlView-D59SPnAm.js} +1 -1
- package/dist/client/assets/{MissionFocusOverlay-wlCmWDCT.js → MissionFocusOverlay-C7cPt6eU.js} +1 -1
- package/dist/client/assets/MissionLeftAgentRow-CxlH3dON.js +1 -0
- package/dist/client/assets/{MissionLogPane-__MVtEl9.js → MissionLogPane-Ye3YlF9s.js} +1 -1
- package/dist/client/assets/{NewAgentModal-Bg-eWHpY.js → NewAgentModal-DprvD4EK.js} +1 -1
- package/dist/client/assets/NewChatComposer-B5FnPyzS.js +19 -0
- package/dist/client/assets/{NewChatOrigin-Bk2OyVjI.js → NewChatOrigin--pHWUb4V.js} +1 -1
- package/dist/client/assets/ObserveEmbedScreen-CfvrnOiZ.js +2 -0
- package/dist/client/assets/{ObserveTextFlow-rsFj_rVo.js → ObserveTextFlow-CBitljxi.js} +2 -2
- package/dist/client/assets/{ObservedTopologyPanel-DyUeV98H.js → ObservedTopologyPanel-Dv6fbHzW.js} +1 -1
- package/dist/client/assets/OpenScoutAppShell-BIp0WitK.js +87 -0
- package/dist/client/assets/OpsAgentsView-CoBfAigH.js +1 -0
- package/dist/client/assets/OpsScreen-Bbo0W64T.js +1 -0
- package/dist/client/assets/OpsSubnav-CoN8utF8.js +1 -0
- package/dist/client/assets/{PlanView-C1CjH3PG.js → PlanView-DYtt8H37.js} +1 -1
- package/dist/client/assets/ProjectAgentProfile-FiiIcB5R.js +1 -0
- package/dist/client/assets/{ProjectAgentProfileBar-CtTpj6fU.js → ProjectAgentProfileBar-B3IvVbqS.js} +1 -1
- package/dist/client/assets/ProjectAgentProfileHero-D5E8yvDj.js +1 -0
- package/dist/client/assets/ProjectsInbox-BWiXjGi7.js +2 -0
- package/dist/client/assets/{ProjectsRail-BgiuV4LR.js → ProjectsRail-DEDS-M1c.js} +1 -1
- package/dist/client/assets/ProjectsScreen-Cxk4CuYn.js +1 -0
- package/dist/client/assets/ProjectsThreadAside-BF66ugT5.js +1 -0
- package/dist/client/assets/Provider-tFc3jqZ4.js +1 -0
- package/dist/client/assets/{RailRow-BoGxAHNF.js → RailRow-BTlVAnHS.js} +1 -1
- package/dist/client/assets/RawSessionsTable-BsGVgZB3.js +1 -0
- package/dist/client/assets/RealtimeVoiceScreen-B0Bem5Rc.js +1 -0
- package/dist/client/assets/{RepoDiffEmbedScreen-C0rumUME.js → RepoDiffEmbedScreen-CtTdlQ2A.js} +1 -1
- package/dist/client/assets/{RepoDiffPageScreen-DMv6DioL.js → RepoDiffPageScreen-BRvaVYoC.js} +1 -1
- package/dist/client/assets/RepoDiffViewer-Bo0gREMj.js +7 -0
- package/dist/client/assets/RepoDiffViewerLazy-C8UPk4oo.js +2 -0
- package/dist/client/assets/{ReposScreen-CB_YBWYf.js → ReposScreen-BBkJf8xT.js} +2 -2
- package/dist/client/assets/{ScoutDeckSurface-CxIYFyWx.js → ScoutDeckSurface-Bi9ov9Bm.js} +1 -1
- package/dist/client/assets/{ScoutSurface-CYz_TcWC.js → ScoutSurface-DEQg_7Io.js} +1 -1
- package/dist/client/assets/{ScoutbotBroadcastChip-L_R9atj0.js → ScoutbotBroadcastChip-DJXuyn73.js} +1 -1
- package/dist/client/assets/{ScoutbotFxLab-CgiZMDMW.js → ScoutbotFxLab-BgsuLDjo.js} +1 -1
- package/dist/client/assets/{ScoutbotRealtimeVoiceCall-FMQOr1Np.js → ScoutbotRealtimeVoiceCall-Bzyl0BCS.js} +1 -1
- package/dist/client/assets/{SecondaryNav-B3-nh5dM.js → SecondaryNav-Bks0CO2h.js} +1 -1
- package/dist/client/assets/SessionEmbedScreen-b0Zgmfx5.js +1 -0
- package/dist/client/assets/SessionObserve-CLrHfAKZ.css +1 -0
- package/dist/client/assets/SessionObserve-Dlx5vDaV.js +12 -0
- package/dist/client/assets/SessionObserveEvidence-ChBD1d4c.js +1 -0
- package/dist/client/assets/SessionRefScreen-D7TfPYPN.js +1 -0
- package/dist/client/assets/SessionsScreen-BlknOWAd.js +1 -0
- package/dist/client/assets/{SettingsDrawer-XfdAa_nD.js → SettingsDrawer-C587L1i1.js} +3 -3
- package/dist/client/assets/SettingsDrawer-UX7pFJU_.css +1 -0
- package/dist/client/assets/SettingsScreen-BIlYxv_a.js +1 -0
- package/dist/client/assets/{ShikiPane-Ap1iPxYb.js → ShikiPane-I_OTW5NO.js} +1 -1
- package/dist/client/assets/{SlidePanel-COwtoJqR.js → SlidePanel-FCqT1zO3.js} +1 -1
- package/dist/client/assets/SpriteAvatar-CQs-jC-v.js +1 -0
- package/dist/client/assets/{StatusPill-DhBL__p8.js → StatusPill-CbABggnQ.js} +1 -1
- package/dist/client/assets/{TailView-DGj_5HA9.js → TailView-C_MXVSum.js} +2 -2
- package/dist/client/assets/Terminal-DwZyo8kA.js +1 -0
- package/dist/client/assets/TerminalEmbedScreen-Czp3tQyd.js +1 -0
- package/dist/client/assets/{TextDocumentSurface-BpAw4eQS.js → TextDocumentSurface-C-9EtYqt.js} +1 -1
- package/dist/client/assets/{TmuxPeek-m1osv33Q.js → TmuxPeek-Dz1gJ2pU.js} +1 -1
- package/dist/client/assets/{VoicePermissionsPanel-DsK53ar4.js → VoicePermissionsPanel-MfICy9kk.js} +1 -1
- package/dist/client/assets/{WorkDetailScreen-Bx0JimPC.js → WorkDetailScreen-Cs7kdllj.js} +3 -3
- package/dist/client/assets/{WorkFilesViewer-Btl6C2Q1.js → WorkFilesViewer-CF-nhtZ4.js} +1 -1
- package/dist/client/assets/{activity-CA8qS6PI.js → activity-WhBf3FXP.js} +1 -1
- package/dist/client/assets/{addon-fit-BZ-kXjeN.js → addon-fit-q-x_HytU.js} +1 -1
- package/dist/client/assets/{addon-webgl-D9-EQVEK.js → addon-webgl-fhhvEA9h.js} +1 -1
- package/dist/client/assets/{agent-essentials-BSY1o46q.js → agent-essentials-DyJiUGpZ.js} +1 -1
- package/dist/client/assets/agent-identity-xQHedtLl.js +1 -0
- package/dist/client/assets/agent-lane-card-BkWVDYM8.css +1 -0
- package/dist/client/assets/{agent-lane-card-model-r2frk57c.js → agent-lane-card-model-BCIwPjEh.js} +1 -1
- package/dist/client/assets/{agent-lane-detail-Djm3YJEa.js → agent-lane-detail-Cw4QVAgH.js} +1 -1
- package/dist/client/assets/{agent-lane-preview-CmHVe3dU.js → agent-lane-preview-BtnfNyFR.js} +1 -1
- package/dist/client/assets/{agent-lanes-model-B4YTt4OF.js → agent-lanes-model-Bl6xfviL.js} +1 -1
- package/dist/client/assets/{arc.es-CQBb-dVu.js → arc.es-DPJ0xRV6.js} +1 -1
- package/dist/client/assets/{arrow-down-BPLe0am9.js → arrow-down-DsD-dYj-.js} +1 -1
- package/dist/client/assets/{arrow-left-DEZzHiPS.js → arrow-left-WjQIN9J6.js} +1 -1
- package/dist/client/assets/{arrow-up-right-ClxBnsi7.js → arrow-up-right-CtTDrZJr.js} +1 -1
- package/dist/client/assets/{bot-eu8pBNvI.js → bot-B_Uzf4_O.js} +1 -1
- package/dist/client/assets/{check-DjgFiBxb.js → check-BbgHJX8u.js} +1 -1
- package/dist/client/assets/{chevron-down-BGk5qoEw.js → chevron-down-BFai6ZfE.js} +1 -1
- package/dist/client/assets/{chevron-right-XiIHsk4m.js → chevron-right-CyUa1zXx.js} +1 -1
- package/dist/client/assets/chunk-HRAB3GC3-CvwpNg-G.js +1 -0
- package/dist/client/assets/{chunk-T65CQEWV-CrzwSeEt.js → chunk-T65CQEWV-DI4NKdNq.js} +1 -1
- package/dist/client/assets/{chunk-YOZR3KYS-Bet8khjg.js → chunk-YOZR3KYS-BW85tiCr.js} +3 -3
- package/dist/client/assets/clock-DviOalxA.js +1 -0
- package/dist/client/assets/{code-xml-B6jOCM4V.js → code-xml-05TD3uOC.js} +1 -1
- package/dist/client/assets/content-2u_eV3fX.js +1 -0
- package/dist/client/assets/content-5irOghrY.js +1 -0
- package/dist/client/assets/content-8Z_0CwtD.js +1 -0
- package/dist/client/assets/content-B38YRDBu.js +1 -0
- package/dist/client/assets/content-BE3uK0LB.js +1 -0
- package/dist/client/assets/{content-C2EwTb2y.js → content-BtIxSqVY.js} +1 -1
- package/dist/client/assets/content-CFsPAihU.js +1 -0
- package/dist/client/assets/content-CKj5g5tu.js +1 -0
- package/dist/client/assets/{content-D5kJmfgl.js → content-CLDWXf9Z.js} +1 -1
- package/dist/client/assets/content-CRr73E0r.js +1 -0
- package/dist/client/assets/content-CVR75_Uj.js +1 -0
- package/dist/client/assets/content-Czdp7_JQ.js +1 -0
- package/dist/client/assets/content-D0_EJ6nP.js +1 -0
- package/dist/client/assets/content-DNmxpNhD.js +1 -0
- package/dist/client/assets/content-XpbI9uxd.js +1 -0
- package/dist/client/assets/content-cyxWdgKQ.js +1 -0
- package/dist/client/assets/{context-budget-CbB4BDcO.js → context-budget-DX_fwUs3.js} +1 -1
- package/dist/client/assets/{conversation-icons-IIG5ha6D.js → conversation-icons-DohQL6GI.js} +1 -1
- package/dist/client/assets/conversation-model-C4yb6_FA.js +1 -0
- package/dist/client/assets/conversation-motion-features-CifSdJtm.js +1 -0
- package/dist/client/assets/{copy-CQGYbxdu.js → copy-CwCAivnc.js} +1 -1
- package/dist/client/assets/{createLucideIcon-OpA4Amw5.js → createLucideIcon-DlxlBfLC.js} +1 -1
- package/dist/client/assets/discover-DoiAJo4Z.js +2 -0
- package/dist/client/assets/embed-entry-D1Or9S4d.js +2 -0
- package/dist/client/assets/{external-link-CXBytO9o.js → external-link-CnjcXf32.js} +1 -1
- package/dist/client/assets/{eye-0PvebX_a.js → eye-So8tNNK6.js} +1 -1
- package/dist/client/assets/{file-text-BODxCjcz.js → file-text-i3xTDUjJ.js} +1 -1
- package/dist/client/assets/{gestures-CcwOTu8C.js → gestures-CgvAMd6F.js} +1 -1
- package/dist/client/assets/{home-moving-signal-CK147hxn.js → home-moving-signal-BdkERL6B.js} +1 -1
- package/dist/client/assets/home-now-card-lLkv6nQs.js +1 -0
- package/dist/client/assets/{home-now-card-nano-BcjnOU9H.js → home-now-card-nano-CkLHUQ4J.js} +1 -1
- package/dist/client/assets/hooks-BPLDD9yu.js +2 -0
- package/dist/client/assets/inbox-thread-redesign-B_1ocqaX.css +1 -0
- package/dist/client/assets/index-DGoLx89y.js +1 -0
- package/dist/client/assets/index-DITWsjFb.css +1 -0
- package/dist/client/assets/index-m6dFtY5f.js +1 -0
- package/dist/client/assets/index-pY8-Mz7y.js +1 -0
- package/dist/client/assets/{index-DMiGbrBt.js → index-sUomXsrf.js} +6 -6
- package/dist/client/assets/{inspector-panel-DPoCWxKs.js → inspector-panel-DhXd-YbT.js} +2 -2
- package/dist/client/assets/{keyboard-nav-2kv_tGUS.js → keyboard-nav-BhZZ5HEq.js} +1 -1
- package/dist/client/assets/knowledge-search-D_bLoYtC.css +1 -0
- package/dist/client/assets/{lane-observe-D0rfKDnU.js → lane-observe-DrhKkQ3A.js} +1 -1
- package/dist/client/assets/{lane-roster-store-D8x1jac2.js → lane-roster-store-NE15Oe6M.js} +1 -1
- package/dist/client/assets/left-B6eawimv.js +1 -0
- package/dist/client/assets/left-BL2uBHe0.js +2 -0
- package/dist/client/assets/left-BNJguPDG.js +1 -0
- package/dist/client/assets/left-BvCtvN0f.js +1 -0
- package/dist/client/assets/left-CfBb6bxM.js +1 -0
- package/dist/client/assets/left-DTrlBF0h.js +2 -0
- package/dist/client/assets/left-agents-DsOHgDCY.js +1 -0
- package/dist/client/assets/left-d4hlBBxY.js +1 -0
- package/dist/client/assets/left-default-BRCwoCJr.js +1 -0
- package/dist/client/assets/left-lanes-DNtoRzoV.js +1 -0
- package/dist/client/assets/left-mission-DsTu2X5Y.js +1 -0
- package/dist/client/assets/left-plan-CtySjsXC.js +2 -0
- package/dist/client/assets/library-CLpgWNJO.js +1 -0
- package/dist/client/assets/{loader-circle-CbHjZsz1.js → loader-circle-lWOOKezu.js} +1 -1
- package/dist/client/assets/{local-agents--00gLMqr.js → local-agents-C7fDHLVC.js} +1 -1
- package/dist/client/assets/{mentions-jSuTGeet.js → mentions-CY_wPZc5.js} +1 -1
- package/dist/client/assets/mesh-ops-B1kDjizF.css +1 -0
- package/dist/client/assets/mesh-ops-Kn8pCtyJ.js +1 -0
- package/dist/client/assets/{mesh-view-store-CWidRbTE.js → mesh-view-store-D14ihwkF.js} +1 -1
- package/dist/client/assets/{message-circle-CG-96zts.js → message-circle-C5UZ6fO7.js} +1 -1
- package/dist/client/assets/{message-markup-3J9pi3nx.js → message-markup-C8Nx04sP.js} +1 -1
- package/dist/client/assets/{message-square-DSaGpjFU.js → message-square-BD-4UUdc.js} +1 -1
- package/dist/client/assets/{mission-control-store-BlnEhiCq.js → mission-control-store-xQHVQdm8.js} +1 -1
- package/dist/client/assets/{model-CpAxGuis.js → model-IGCUEsMy.js} +1 -1
- package/dist/client/assets/{observe-CuLGD9Zp.js → observe-uJfIlIUV.js} +1 -1
- package/dist/client/assets/{page-status-DpkedE1F.js → page-status-BymFEFai.js} +1 -1
- package/dist/client/assets/paperclip-DL9BXPp2.js +1 -0
- package/dist/client/assets/{plus--b1raV_O.js → plus-C9lTjsgd.js} +1 -1
- package/dist/client/assets/profile-BqY5tesX.js +1 -0
- package/dist/client/assets/{projects-inbox-CHyUFQ6w.js → projects-inbox-DfVmGFFk.js} +1 -1
- package/dist/client/assets/{radio-Bz8ZePxj.js → radio-DedMyP8J.js} +1 -1
- package/dist/client/assets/{refresh-cw-BBmAnCB7.js → refresh-cw-D8PFyhUa.js} +1 -1
- package/dist/client/assets/repo-diff-DyYmQMSA.css +1 -0
- package/dist/client/assets/resolve-panes-1xeZMuaw.js +1 -0
- package/dist/client/assets/resolve-sidebar-context-PLr32WHN.js +1 -0
- package/dist/client/assets/right-1x7HzabC.js +1 -0
- package/dist/client/assets/{right-DjRXbnRP.js → right-C1sIsSHR.js} +1 -1
- package/dist/client/assets/right-CFzPUzlF.js +1 -0
- package/dist/client/assets/right-CRKyeJDk.js +1 -0
- package/dist/client/assets/right-CagzkLWg.js +1 -0
- package/dist/client/assets/right-CsV149pN.js +1 -0
- package/dist/client/assets/right-DITNyG2s.js +1 -0
- package/dist/client/assets/right-E3nNcLE3.js +1 -0
- package/dist/client/assets/right-eUQvSjd7.js +1 -0
- package/dist/client/assets/right-ozp4nM44.js +1 -0
- package/dist/client/assets/{rocket-BSNS_rLs.js → rocket-CriBwkHM.js} +1 -1
- package/dist/client/assets/router-Dja9_ygK.js +1 -0
- package/dist/client/assets/{runtime-picker-Bcl5iIX5.js → runtime-picker-DOZpZOlt.js} +1 -1
- package/dist/client/assets/{scope-views-U-ucT9m0.js → scope-views-BF_RvGKU.js} +1 -1
- package/dist/client/assets/{scout-voice-CU5c0LGi.js → scout-voice-BZ4KqADJ.js} +1 -1
- package/dist/client/assets/{scroll-text-D6Pdnar7.js → scroll-text-BIYf6g6N.js} +1 -1
- package/dist/client/assets/{search-CWfZtOt2.js → search-DCT_EvPr.js} +1 -1
- package/dist/client/assets/secondaryNavConfig-Drb7wPG4.js +1 -0
- package/dist/client/assets/{selection-bridge-16pk1qyG.js → selection-bridge-CJOTyYQs.js} +1 -1
- package/dist/client/assets/{send-horizontal-Bg5-QggH.js → send-horizontal-DDwOgEs3.js} +1 -1
- package/dist/client/assets/{server-CPp4ZJhZ.js → server-CHZCp3cF.js} +1 -1
- package/dist/client/assets/{session-catalog-BmoyVTJ_.js → session-catalog-XhGxCtP-.js} +1 -1
- package/dist/client/assets/{session-table-DZcrKoIH.js → session-table-sAVe44a4.js} +1 -1
- package/dist/client/assets/{sliders-horizontal-1oW76Xc9.js → sliders-horizontal-B9Nj-Y4J.js} +1 -1
- package/dist/client/assets/sparkles-up7pVlX-.js +1 -0
- package/dist/client/assets/{sse-CjIkKo46.js → sse-CVoGDiKW.js} +1 -1
- package/dist/client/assets/{tail-events-D19uAGe3.js → tail-events-CTipUIli.js} +1 -1
- package/dist/client/assets/{terminal-B9AOZQKR.js → terminal-DXQISjZn.js} +1 -1
- package/dist/client/assets/{terminal-relay-CWbJ1RCW.js → terminal-relay-B5Sma7fK.js} +1 -1
- package/dist/client/assets/{terminal-takeover-B8UeD9OX.js → terminal-takeover-X97KCSJk.js} +1 -1
- package/dist/client/assets/{time-DltNTpLl.js → time-Dhsh_2EG.js} +1 -1
- package/dist/client/assets/{use-conversation-list-Byab41G6.js → use-conversation-list-B1T6J_qE.js} +1 -1
- package/dist/client/assets/{use-fleet-active-asks-BIbQx5AS.js → use-fleet-active-asks-DLofGhhK.js} +1 -1
- package/dist/client/assets/use-mesh-ops-items-ByGZk8rU.js +1 -0
- package/dist/client/assets/{use-reduced-motion-RRBkmVkk.js → use-reduced-motion-Cvk-HRKg.js} +1 -1
- package/dist/client/assets/use-scout-dev-flags-BHvg3G2c.js +1 -0
- package/dist/client/assets/{useAgentHoverCard-DMrbBif0.js → useAgentHoverCard-D5e8Qg1z.js} +1 -1
- package/dist/client/assets/useContentSecondaryNav-ZfBNi3d4.js +1 -0
- package/dist/client/assets/usePierreRuntime-DIVunfX0.js +50 -0
- package/dist/client/assets/{wrench-Bkc_0lKF.js → wrench-pEVd8JnN.js} +1 -1
- package/dist/client/assets/{x-D3GElQbe.js → x-0XjXwGqq.js} +1 -1
- package/dist/client/assets/{xterm-BKR8oAkR.js → xterm-CRLlV1Xp.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/drizzle/0007_lean_venus.sql +26 -0
- package/dist/drizzle/0008_luxuriant_ted_forrester.sql +1 -0
- package/dist/drizzle/meta/0007_snapshot.json +5767 -0
- package/dist/drizzle/meta/0008_snapshot.json +5774 -0
- package/dist/drizzle/meta/_journal.json +14 -0
- package/dist/main.mjs +27836 -4437
- package/dist/node/main.mjs +31770 -12098
- package/dist/pairing-runtime-controller.mjs +37653 -16847
- package/dist/runtime/base-daemon.mjs +109 -18
- package/dist/runtime/broker-daemon.mjs +22018 -2739
- package/dist/runtime/broker-process-manager.mjs +122 -12
- package/dist/runtime/mesh-discover.mjs +90 -13
- package/dist/scout-control-plane-web.mjs +22453 -3299
- package/dist/scout-web-server.mjs +22453 -3299
- package/dist/statusline.mjs +2 -0
- package/package.json +3 -1
- package/dist/client/assets/ActivityScreen-Cu_1V4bq.js +0 -1
- package/dist/client/assets/AgentConfigurationScreen-BqfOz90D.js +0 -1
- package/dist/client/assets/AgentDefinitionsWorkspace-CUpUrY57.js +0 -1
- package/dist/client/assets/AgentFloorView-8LoAEBwS.js +0 -1
- package/dist/client/assets/AgentInfoScreen-DZs2_ibL.js +0 -1
- package/dist/client/assets/AgentLanesEmbedScreen-W3qs022h.js +0 -1
- package/dist/client/assets/AgentLanesView-B9vuEEmZ.js +0 -2
- package/dist/client/assets/AgentsConsole-BgiYP2wR.js +0 -1
- package/dist/client/assets/AgentsScreen-DBi8x4MB.js +0 -1
- package/dist/client/assets/AgentsSubnav-DIEO4NPx.js +0 -1
- package/dist/client/assets/BackToPicker-BRvfostO.js +0 -1
- package/dist/client/assets/CodeDiffPane-DDPt6KPh.js +0 -1
- package/dist/client/assets/CodeScreen-BxCrpRHd.js +0 -1
- package/dist/client/assets/ConversationFeedRows-B_gPxcqA.js +0 -1
- package/dist/client/assets/ConversationHeader-DE3FC0m-.js +0 -1
- package/dist/client/assets/ConversationPanels-DLek4H6A.js +0 -2
- package/dist/client/assets/ConversationScreen-BDRhx-RU.js +0 -1
- package/dist/client/assets/ConversationScreen-C9yMAMYF.css +0 -1
- package/dist/client/assets/ConversationStatus-BwVLiiO4.js +0 -1
- package/dist/client/assets/FlightObserveScreen-6RpZYwVz.js +0 -1
- package/dist/client/assets/HarnessesScreen-CznAImej.js +0 -1
- package/dist/client/assets/KnowledgeSearchInspector-Dgdkfvvz.js +0 -1
- package/dist/client/assets/KnowledgeSearchScreen-DJDGGaqC.js +0 -1
- package/dist/client/assets/LaneTraceDetailSheet-D1CspRbl.js +0 -1
- package/dist/client/assets/MeshScreen-DFgevn8N.js +0 -1
- package/dist/client/assets/MessagesScreen-C8YKW10Y.js +0 -1
- package/dist/client/assets/MissionLeftAgentRow-BpZWntfl.js +0 -1
- package/dist/client/assets/NewChatComposer-Cs6OsxK6.js +0 -19
- package/dist/client/assets/ObserveEmbedScreen-y2EpuqRZ.js +0 -2
- package/dist/client/assets/OpenScoutAppShell-C_URc8sV.js +0 -87
- package/dist/client/assets/OpsAgentsView-UN7iOscs.js +0 -1
- package/dist/client/assets/OpsScreen-Buf3LKjb.js +0 -1
- package/dist/client/assets/OpsSubnav-DsuXzHah.js +0 -1
- package/dist/client/assets/ProjectAgentProfile-DJusrAV-.js +0 -1
- package/dist/client/assets/ProjectAgentProfileHero-BFwNJo_N.js +0 -1
- package/dist/client/assets/ProjectsInbox-GhVMxOhw.js +0 -2
- package/dist/client/assets/ProjectsScreen-eNUBy4YU.js +0 -1
- package/dist/client/assets/ProjectsThreadAside-CoBgnHmr.js +0 -1
- package/dist/client/assets/Provider-C7UKGHQy.js +0 -1
- package/dist/client/assets/RawSessionsTable-DL8y_eEy.js +0 -1
- package/dist/client/assets/RealtimeVoiceScreen-ffS-39zy.js +0 -1
- package/dist/client/assets/RepoDiffViewer-D_exm6xK.js +0 -7
- package/dist/client/assets/RepoDiffViewerLazy-BPgF92Bg.js +0 -2
- package/dist/client/assets/SessionEmbedScreen-BVC7yvWF.js +0 -1
- package/dist/client/assets/SessionObserve-BpggNO_M.css +0 -1
- package/dist/client/assets/SessionObserve-yfXFafp8.js +0 -12
- package/dist/client/assets/SessionRefScreen-DRgJu7Jo.js +0 -1
- package/dist/client/assets/SessionsScreen-D6XUsZfA.js +0 -1
- package/dist/client/assets/SettingsDrawer-CmJt72ww.css +0 -1
- package/dist/client/assets/SettingsScreen-Cy8z-EuR.js +0 -1
- package/dist/client/assets/SpriteAvatar-DyaGuhik.js +0 -1
- package/dist/client/assets/Terminal-CqvGbjXU.js +0 -1
- package/dist/client/assets/TerminalEmbedScreen-DuZZFFzW.js +0 -1
- package/dist/client/assets/agent-lane-card-Dm7YWoew.css +0 -1
- package/dist/client/assets/content-BDt9VBPk.js +0 -1
- package/dist/client/assets/content-BIXf4cKR.js +0 -1
- package/dist/client/assets/content-BLm0NBJM.js +0 -1
- package/dist/client/assets/content-C5UbLsDF.js +0 -1
- package/dist/client/assets/content-CR3vdrYY.js +0 -1
- package/dist/client/assets/content-CSPVmo2s.js +0 -1
- package/dist/client/assets/content-C_FGqx1X.js +0 -1
- package/dist/client/assets/content-CvlVUOG8.js +0 -1
- package/dist/client/assets/content-DTpQsomG.js +0 -1
- package/dist/client/assets/content-DikVsqLf.js +0 -1
- package/dist/client/assets/content-DlUe5Ono.js +0 -1
- package/dist/client/assets/content-GIBv_55n.js +0 -1
- package/dist/client/assets/content-Q2oclDzi.js +0 -1
- package/dist/client/assets/conversation-model-B47vYmWN.js +0 -1
- package/dist/client/assets/conversation-motion-features-BdAONVls.js +0 -1
- package/dist/client/assets/discover-C1YwpBDE.js +0 -2
- package/dist/client/assets/embed-entry-BAcGL3g9.js +0 -2
- package/dist/client/assets/home-now-card-BgvNWuea.js +0 -1
- package/dist/client/assets/hooks-B6y_O2FB.js +0 -2
- package/dist/client/assets/inbox-thread-redesign-Bz4FjWzr.css +0 -1
- package/dist/client/assets/index-BcuhqXLe.js +0 -1
- package/dist/client/assets/index-CJXzfjo9.js +0 -1
- package/dist/client/assets/index-DQPvraRS.js +0 -1
- package/dist/client/assets/index-DxGoC5l5.css +0 -1
- package/dist/client/assets/knowledge-search-CVxQwxPn.js +0 -1
- package/dist/client/assets/knowledge-search-DjrQdiiW.css +0 -1
- package/dist/client/assets/left-C--GiIh8.js +0 -2
- package/dist/client/assets/left-Cj7Rt89X.js +0 -1
- package/dist/client/assets/left-CpNEtFEg.js +0 -1
- package/dist/client/assets/left-CzXAuK_t.js +0 -2
- package/dist/client/assets/left-agents-Bo9sO1by.js +0 -1
- package/dist/client/assets/left-bN4PCAXa.js +0 -1
- package/dist/client/assets/left-default-DV9GdvYi.js +0 -1
- package/dist/client/assets/left-jYYGAOYD.js +0 -1
- package/dist/client/assets/left-lanes-D0l_Co7V.js +0 -1
- package/dist/client/assets/left-mission-Ci7zREkQ.js +0 -1
- package/dist/client/assets/left-plan-D4U1uflW.js +0 -2
- package/dist/client/assets/library-D-RxGiCw.js +0 -1
- package/dist/client/assets/profile-CVRziEDA.js +0 -1
- package/dist/client/assets/repo-diff-C9Qs-bEn.css +0 -1
- package/dist/client/assets/resolve-panes-r9B3mpW7.js +0 -1
- package/dist/client/assets/resolve-sidebar-context-DcG8xGaB.js +0 -1
- package/dist/client/assets/right-BHeiIaty.js +0 -1
- package/dist/client/assets/right-BkgKo9VT.js +0 -1
- package/dist/client/assets/right-BpEU5jWE.js +0 -1
- package/dist/client/assets/right-CRZXoy-X.js +0 -1
- package/dist/client/assets/right-ChF_pbPy.js +0 -1
- package/dist/client/assets/right-DMoUT3KN.js +0 -1
- package/dist/client/assets/right-T4Ue6EqM.js +0 -1
- package/dist/client/assets/right-wzrLXKur.js +0 -1
- package/dist/client/assets/router-Bq5dwf78.js +0 -1
- package/dist/client/assets/secondaryNavConfig-DqUIp0Es.js +0 -1
- package/dist/client/assets/sparkles-ClfRJQ6w.js +0 -1
- package/dist/client/assets/useContentSecondaryNav-DMl1WNm7.js +0 -1
- package/dist/client/assets/usePierreRuntime-wC-yMtBb.js +0 -50
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as p,j as t}from"./index-DMiGbrBt.js";/* empty css */import{i as J,n as Z,s as ee}from"./colors-BtO5_zlx.js";import{a as A}from"./api-h5zurxmi.js";import{u as te}from"./sse-CjIkKo46.js";import{t as re}from"./time-DltNTpLl.js";import{D as ne}from"./DataTable-E8s_MmoA.js";import{u as ae}from"./useAgentHoverCard-DMrbBif0.js";import{S as se}from"./search-CWfZtOt2.js";import{S as oe}from"./sliders-horizontal-1oW76Xc9.js";import"./index-BWHgHrtv.js";/* empty css */import"./index-CJXzfjo9.js";import"./AgentDetailCard-BcRBRp88.js";import"./AgentLiveActions-DBtnD0qE.js";import"./terminal-takeover-B8UeD9OX.js";import"./Provider-C7UKGHQy.js";import"./router-Bq5dwf78.js";import"./terminal-sessions-D5CIR2OL.js";import"./surface-activity-B1rgWB1i.js";import"./scoutbot-BTIErYHo.js";import"./ContextMenu-bARZqTzD.js";import"./DocumentFocusViewer-BeVwwl26.js";import"./createLucideIcon-OpA4Amw5.js";import"./TextDocumentSurface-BpAw4eQS.js";/* empty css */import"./file-text-BODxCjcz.js";import"./x-D3GElQbe.js";import"./chevron-right-XiIHsk4m.js";import"./code-xml-B6jOCM4V.js";import"./arrow-left-DEZzHiPS.js";import"./scout-voice-CU5c0LGi.js";import"./fx-z37u1o2z.js";import"./keyboard-nav-2kv_tGUS.js";import"./MessageComposerSuggestions-DpxN9WiB.js";import"./NewChatComposer-Cs6OsxK6.js";import"./runtime-picker-Bcl5iIX5.js";import"./voice-levels-Dcr3jglk.js";import"./loader-circle-CbHjZsz1.js";import"./HarnessMark-Cbv3Ib0c.js";import"./conversation-model-B47vYmWN.js";import"./NewChatOrigin-Bk2OyVjI.js";import"./agent-chat-Bfjd9y6c.js";import"./model-Co0zkMIc.js";import"./text-DsBWV_4k.js";import"./chevron-down-BGk5qoEw.js";import"./openContent-C6XO6kr5.js";import"./eye-0PvebX_a.js";import"./terminal-B9AOZQKR.js";const ie=["openai","codex","codex_app_server"],ce=["anthropic","claude","claude-code","claude_stream_json"],W={"openai:gpt-5.5":{provider:"openai",model:"gpt-5.5",inputPerM:5,cachedInputPerM:.5,cacheWritePerM:null,outputPerM:30,webSearchPer1K:10},"openai:gpt-5.5-pro":{provider:"openai",model:"gpt-5.5-pro",inputPerM:30,cachedInputPerM:null,cacheWritePerM:null,outputPerM:180,webSearchPer1K:10},"openai:gpt-5.4":{provider:"openai",model:"gpt-5.4",inputPerM:2.5,cachedInputPerM:.25,cacheWritePerM:null,outputPerM:15,webSearchPer1K:10},"openai:gpt-5.4-mini":{provider:"openai",model:"gpt-5.4-mini",inputPerM:.75,cachedInputPerM:.075,cacheWritePerM:null,outputPerM:4.5,webSearchPer1K:10},"openai:gpt-5.4-nano":{provider:"openai",model:"gpt-5.4-nano",inputPerM:.2,cachedInputPerM:.02,cacheWritePerM:null,outputPerM:1.25,webSearchPer1K:10},"openai:gpt-5.4-pro":{provider:"openai",model:"gpt-5.4-pro",inputPerM:30,cachedInputPerM:null,cacheWritePerM:null,outputPerM:180,webSearchPer1K:10},"openai:gpt-5.3-codex":{provider:"openai",model:"gpt-5.3-codex",inputPerM:1.75,cachedInputPerM:.175,cacheWritePerM:null,outputPerM:14,webSearchPer1K:10},"openai:gpt-5.3-chat-latest":{provider:"openai",model:"gpt-5.3-chat-latest",inputPerM:1.75,cachedInputPerM:.175,cacheWritePerM:null,outputPerM:14,webSearchPer1K:10},"openai:gpt-5.2":{provider:"openai",model:"gpt-5.2",inputPerM:1.75,cachedInputPerM:.175,cacheWritePerM:null,outputPerM:14,webSearchPer1K:10},"openai:gpt-5.2-codex":{provider:"openai",model:"gpt-5.2-codex",inputPerM:1.75,cachedInputPerM:.175,cacheWritePerM:null,outputPerM:14,webSearchPer1K:10},"openai:gpt-5.2-chat-latest":{provider:"openai",model:"gpt-5.2-chat-latest",inputPerM:1.75,cachedInputPerM:.175,cacheWritePerM:null,outputPerM:14,webSearchPer1K:10},"openai:gpt-5.2-pro":{provider:"openai",model:"gpt-5.2-pro",inputPerM:21,cachedInputPerM:null,cacheWritePerM:null,outputPerM:168,webSearchPer1K:10},"openai:gpt-5.1":{provider:"openai",model:"gpt-5.1",inputPerM:1.25,cachedInputPerM:.125,cacheWritePerM:null,outputPerM:10,webSearchPer1K:10},"openai:gpt-5.1-codex":{provider:"openai",model:"gpt-5.1-codex",inputPerM:1.25,cachedInputPerM:.125,cacheWritePerM:null,outputPerM:10,webSearchPer1K:10},"openai:gpt-5.1-codex-max":{provider:"openai",model:"gpt-5.1-codex-max",inputPerM:1.25,cachedInputPerM:.125,cacheWritePerM:null,outputPerM:10,webSearchPer1K:10},"openai:gpt-5.1-chat-latest":{provider:"openai",model:"gpt-5.1-chat-latest",inputPerM:1.25,cachedInputPerM:.125,cacheWritePerM:null,outputPerM:10,webSearchPer1K:10},"openai:gpt-5":{provider:"openai",model:"gpt-5",inputPerM:1.25,cachedInputPerM:.125,cacheWritePerM:null,outputPerM:10,webSearchPer1K:10},"openai:gpt-5-codex":{provider:"openai",model:"gpt-5-codex",inputPerM:1.25,cachedInputPerM:.125,cacheWritePerM:null,outputPerM:10,webSearchPer1K:10},"openai:gpt-5-chat-latest":{provider:"openai",model:"gpt-5-chat-latest",inputPerM:1.25,cachedInputPerM:.125,cacheWritePerM:null,outputPerM:10,webSearchPer1K:10},"openai:gpt-5-mini":{provider:"openai",model:"gpt-5-mini",inputPerM:.25,cachedInputPerM:.025,cacheWritePerM:null,outputPerM:2,webSearchPer1K:10},"openai:gpt-5-nano":{provider:"openai",model:"gpt-5-nano",inputPerM:.05,cachedInputPerM:.005,cacheWritePerM:null,outputPerM:.4,webSearchPer1K:10},"openai:gpt-5-pro":{provider:"openai",model:"gpt-5-pro",inputPerM:15,cachedInputPerM:null,cacheWritePerM:null,outputPerM:120,webSearchPer1K:10},"openai:gpt-4.1":{provider:"openai",model:"gpt-4.1",inputPerM:2,cachedInputPerM:.5,cacheWritePerM:null,outputPerM:8,webSearchPer1K:10},"openai:gpt-4.1-mini":{provider:"openai",model:"gpt-4.1-mini",inputPerM:.4,cachedInputPerM:.1,cacheWritePerM:null,outputPerM:1.6,webSearchPer1K:10},"openai:gpt-4.1-nano":{provider:"openai",model:"gpt-4.1-nano",inputPerM:.1,cachedInputPerM:.025,cacheWritePerM:null,outputPerM:.4,webSearchPer1K:10},"openai:gpt-4o":{provider:"openai",model:"gpt-4o",inputPerM:2.5,cachedInputPerM:1.25,cacheWritePerM:null,outputPerM:10,webSearchPer1K:10},"openai:gpt-4o-mini":{provider:"openai",model:"gpt-4o-mini",inputPerM:.15,cachedInputPerM:.075,cacheWritePerM:null,outputPerM:.6,webSearchPer1K:10},"anthropic:claude-opus-4.6":{provider:"anthropic",model:"claude-opus-4.6",inputPerM:5,cachedInputPerM:.5,cacheWritePerM:6.25,outputPerM:25,webSearchPer1K:10},"anthropic:claude-opus-4.5":{provider:"anthropic",model:"claude-opus-4.5",inputPerM:5,cachedInputPerM:.5,cacheWritePerM:6.25,outputPerM:25,webSearchPer1K:10},"anthropic:claude-opus-4.1":{provider:"anthropic",model:"claude-opus-4.1",inputPerM:15,cachedInputPerM:1.5,cacheWritePerM:18.75,outputPerM:75,webSearchPer1K:10},"anthropic:claude-opus-4":{provider:"anthropic",model:"claude-opus-4",inputPerM:15,cachedInputPerM:1.5,cacheWritePerM:18.75,outputPerM:75,webSearchPer1K:10},"anthropic:claude-sonnet-4.6":{provider:"anthropic",model:"claude-sonnet-4.6",inputPerM:3,cachedInputPerM:.3,cacheWritePerM:3.75,outputPerM:15,webSearchPer1K:10},"anthropic:claude-sonnet-4.5":{provider:"anthropic",model:"claude-sonnet-4.5",inputPerM:3,cachedInputPerM:.3,cacheWritePerM:3.75,outputPerM:15,webSearchPer1K:10},"anthropic:claude-sonnet-4":{provider:"anthropic",model:"claude-sonnet-4",inputPerM:3,cachedInputPerM:.3,cacheWritePerM:3.75,outputPerM:15,webSearchPer1K:10},"anthropic:claude-3-7-sonnet":{provider:"anthropic",model:"claude-3-7-sonnet",inputPerM:3,cachedInputPerM:.3,cacheWritePerM:3.75,outputPerM:15,webSearchPer1K:10},"anthropic:claude-haiku-4.5":{provider:"anthropic",model:"claude-haiku-4.5",inputPerM:1,cachedInputPerM:.1,cacheWritePerM:1.25,outputPerM:5,webSearchPer1K:10}},ue={"claude-sonnet-4-5":"anthropic:claude-sonnet-4.5","claude-sonnet-4-6":"anthropic:claude-sonnet-4.6","claude-opus-4-5":"anthropic:claude-opus-4.5","claude-opus-4-6":"anthropic:claude-opus-4.6","claude-haiku-4-5":"anthropic:claude-haiku-4.5"};function le(e){const r=e.provider?.trim().toLowerCase()??"",s=e.adapterType?.trim().toLowerCase()??"",a=V(e.model)??"",i=[r,s].filter(Boolean);return i.some(o=>ie.some(c=>o.includes(c)))?"openai":i.some(o=>ce.some(c=>o.includes(c)))?"anthropic":a.startsWith("gpt-")||a.startsWith("o")||a.includes("codex")?"openai":a.startsWith("claude-")?"anthropic":"unknown"}function V(e){return e?e.trim().toLowerCase().replace(/^(openai|anthropic)\//,"").replace(/_/g,"-").replace(/-\d{8}$/,""):null}function pe(e){const r=x(e?.inputTokens),s=x(e?.cacheReadInputTokens),a=x(e?.cacheCreationInputTokens),i=x(e?.outputTokens),o=x(e?.reasoningOutputTokens),c=[r,i].reduce((g,b)=>g+(b??0),0),h=x(e?.totalTokens)??(c||null);return{input:r,uncachedInput:r==null?null:Math.max(0,r-(s??0)-(a??0)),cachedInput:s,cacheWrite:a,output:i,reasoningOutput:o,total:h,webSearchRequests:x(e?.webSearchRequests),webFetchRequests:x(e?.webFetchRequests)}}function de(e){const r=le(e),s=V(e.model),a=pe(e.usage),i=he(r,s),o=me(e);if(!i.rateCard)return{provider:r,model:s,rateCard:null,rateCardSource:"unknown",capturedAt:e.capturedAt??Date.now(),usage:a,lineItems:[],totalUsd:null,billedTotalUsd:null,billingMode:o,subscriptionWindows:e.subscriptionWindows??[]};const c=i.rateCard,h=a.uncachedInput??a.input??0,g=a.cachedInput??0,b=a.cacheWrite??0,m=a.output??0,v=a.webSearchRequests??0,f=[j("input","Input",h,c.inputPerM,o),j("cached_input","Cached input",g,c.cachedInputPerM??c.inputPerM,o),j("cache_write","Cache write",b,c.cacheWritePerM??c.inputPerM,o),j("output","Output",m,c.outputPerM,o),{key:"web_search",label:"Web search",quantity:v,unit:"requests",rate:c.webSearchPer1K??0,billedRate:o==="subscription"?0:c.webSearchPer1K??0,costUsd:v/1e3*(c.webSearchPer1K??0),billedCostUsd:o==="subscription"?0:v/1e3*(c.webSearchPer1K??0)}].filter(P=>P.quantity>0);return{provider:r,model:s,rateCard:c,rateCardSource:i.source,capturedAt:e.capturedAt??Date.now(),usage:a,lineItems:f,totalUsd:f.reduce((P,d)=>P+d.costUsd,0),billedTotalUsd:f.reduce((P,d)=>P+d.billedCostUsd,0),billingMode:o,subscriptionWindows:e.subscriptionWindows??[]}}function he(e,r){if(e==="unknown")return{rateCard:null,source:"unknown"};const s=r?`${e}:${r}`:null;if(s&&W[s])return{rateCard:W[s],source:"exact"};const a=r?ue[r]:null;if(a&&W[a])return{rateCard:W[a],source:"alias"};if(e==="anthropic"){if(r?.includes("opus"))return{rateCard:W["anthropic:claude-opus-4.5"],source:"provider-default"};if(r?.includes("haiku"))return{rateCard:W["anthropic:claude-haiku-4.5"],source:"provider-default"};if(r?.includes("sonnet")||!r)return{rateCard:W["anthropic:claude-sonnet-4.5"],source:"provider-default"}}return{rateCard:null,source:"unknown"}}function j(e,r,s,a,i){const o=i==="subscription"?0:a;return{key:e,label:r,quantity:s,unit:"tokens",rate:a,billedRate:o,costUsd:s/1e6*a,billedCostUsd:s/1e6*o}}function x(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function me(e){if(e.billingMode)return e.billingMode;const r=e.adapterType?.trim().toLowerCase();if(r==="claude-code"||r==="claude_stream_json")return"subscription";const s=e.usage?.planType?.trim().toLowerCase();return!s||s==="api"||s.includes("api")?"api":"subscription"}const ge=1500,T=1440*6e4,Pe=90*6e4,E={needs_attention:0,in_turn:1,in_flight:2,callable:3,blocked:4},Me=[{key:"agent",label:"Agent",kind:"custom",sortable:!0,sortValue:e=>e.agent.name.toLowerCase(),defaultWidth:220,minWidth:160,render:e=>t.jsxs("div",{className:"s-ops-agents-agent-cell",children:[t.jsx("span",{className:"s-ops-agents-dot",style:{background:ee(e.state)},"aria-hidden":!0}),t.jsx("span",{className:"s-ops-agents-agent-name",title:e.agent.name,children:e.agent.handle??e.agent.name})]})},{key:"task",label:"Active task",kind:"custom",sortable:!0,sortValue:e=>(e.activeTask??"").toLowerCase()||null,defaultWidth:240,minWidth:140,render:e=>e.activeTask?t.jsx("span",{className:"s-ops-agents-task",title:e.activeTask,children:e.activeTask}):t.jsx("span",{className:"s-ops-agents-task s-ops-agents-task--idle",children:"—"})},{key:"team",label:"Project",kind:"text",defaultWidth:140,minWidth:90,cls:"s-ops-agents-meta",render:e=>t.jsx("span",{className:"s-ops-agents-meta-cell",children:e.team}),sortValue:e=>e.team.toLowerCase()},{key:"machine",label:"Machine",kind:"text",defaultWidth:120,minWidth:88,cls:"s-ops-agents-meta",render:e=>t.jsx("span",{className:"s-ops-agents-meta-cell",children:e.machine}),sortValue:e=>e.machine.toLowerCase()},{key:"active",label:"Active",kind:"number",defaultWidth:90,minWidth:64,cls:"s-ops-agents-num",render:e=>e.activeFlights,sortValue:e=>e.activeFlights},{key:"sessions24h",label:"24h sessions",kind:"number",defaultWidth:108,minWidth:78,cls:"s-ops-agents-num",render:e=>e.sessions24h,sortValue:e=>e.sessions24h},{key:"throughput",label:"Throughput",kind:"custom",sortable:!1,defaultWidth:110,minWidth:90,render:e=>t.jsx(ve,{values:e.throughput,warn:e.errors>0})},{key:"avgLatency",label:"Avg latency",kind:"number",defaultWidth:108,minWidth:80,cls:"s-ops-agents-num",render:e=>D(e.avgLatencyMs),sortValue:e=>e.avgLatencyMs},{key:"input",label:"Input",kind:"number",defaultWidth:88,minWidth:64,cls:"s-ops-agents-num",render:e=>w(e.usage.uncachedInput??e.usage.input),sortValue:e=>e.usage.uncachedInput??e.usage.input??null},{key:"cacheRead",label:"Cache read",kind:"number",defaultWidth:98,minWidth:72,cls:"s-ops-agents-num",render:e=>w(e.usage.cachedInput),sortValue:e=>e.usage.cachedInput??null},{key:"cacheWrite",label:"Cache write",kind:"number",defaultWidth:98,minWidth:72,cls:"s-ops-agents-num",render:e=>w(e.usage.cacheWrite),sortValue:e=>e.usage.cacheWrite??null},{key:"output",label:"Output",kind:"number",defaultWidth:88,minWidth:64,cls:"s-ops-agents-num",render:e=>w(e.usage.output),sortValue:e=>e.usage.output??null},{key:"apiEquiv",label:"API equiv",kind:"number",defaultWidth:92,minWidth:72,cls:"s-ops-agents-num",render:e=>t.jsx("span",{className:e.cost.rateCardSource==="unknown"?"s-ops-agents-num--dim":void 0,children:N(e.cost.totalUsd)}),sortValue:e=>e.cost.totalUsd??null},{key:"billed",label:"Billed",kind:"number",defaultWidth:92,minWidth:72,cls:"s-ops-agents-num",render:e=>t.jsx("span",{className:e.cost.billingMode==="subscription"?"s-ops-agents-num--covered":void 0,children:N(e.cost.billedTotalUsd)}),sortValue:e=>e.cost.billedTotalUsd??null},{key:"errors",label:"Errors",kind:"number",defaultWidth:72,minWidth:58,cls:"s-ops-agents-num",render:e=>t.jsx("span",{className:e.errors>0?"s-ops-agents-num--warn":void 0,children:e.errors}),sortValue:e=>e.errors},{key:"lastActive",label:"Last active",kind:"time",defaultWidth:104,minWidth:78,cls:"s-ops-agents-last",render:e=>e.lastActiveAt?re(e.lastActiveAt):"—",sortValue:e=>e.lastActiveAt}];function U(e){if(!e)return null;const r=e.replace(/\/+$/,""),s=r.lastIndexOf("/");return s>=0?r.slice(s+1):r}function w(e){return e==null?"—":e>=1e6?`${(e/1e6).toFixed(e>=1e7?0:1)}M`:e>=1e3?`${(e/1e3).toFixed(e>=1e4?0:1)}K`:String(e)}function D(e){return e==null?"—":e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(2)}s`}function N(e){return e==null?"$—":e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}function be(e,r){if(!e)return null;const s=e.data.events.filter(i=>i.kind==="message"||i.kind==="tool").filter(i=>r-i.t<=Pe).sort((i,o)=>i.t-o.t);if(s.length<2)return null;const a=[];for(let i=1;i<s.length;i+=1){const o=s[i].t-s[i-1].t;o>0&&o<12e4&&a.push(o)}return a.length===0?null:Math.round(a.reduce((i,o)=>i+o,0)/a.length)}function fe(e,r){const s=new Array(24).fill(0),a=r-T;for(const i of e){if(i.ts<a||i.ts>r)continue;const o=Math.min(23,Math.max(0,Math.floor((i.ts-a)/T*s.length)));s[o]+=1}return s}function ve({values:e,warn:r=!1}){const i=Math.max(1,...e),o=e.map((c,h)=>{const g=h/Math.max(1,e.length-1)*92,b=22-c/i*19-1.5;return`${g.toFixed(1)},${b.toFixed(1)}`}).join(" ");return t.jsx("svg",{className:`s-ops-agents-spark${r?" s-ops-agents-spark--warn":""}`,viewBox:"0 0 92 22","aria-hidden":"true",children:t.jsx("polyline",{points:o,fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round"})})}function ke(e){return e.authorityNodeName??e.homeNodeName??e.authorityNodeId??e.homeNodeId??e.transport??U(e.cwd)??U(e.projectRoot)??"local"}function xe(e){return e.project??e.role??e.agentClass??"Unassigned"}function We(e){if(e.length===0)return null;const r={working:0,needs_attention:1,queued:2,failed:3,completed:4},a=[...e].sort((o,c)=>{const h=r[o.status]-r[c.status];return h!==0?h:(c.updatedAt??0)-(o.updatedAt??0)})[0];return(a.task??a.summary??"").trim()||null}function Se(e,r,s,a,i,o){const c=r.filter(l=>l.agentId===e.id),h=c.filter(l=>{const I=l.lastMessageAt??0;return I>0&&o-I<=T}),g=e.conversationId,b=s.filter(l=>l.actorName===e.name||!!(g&&l.conversationId===g)),m=i.get(e.id),v=m?.data.metadata?.session?.model??null,f=m?.data.metadata?.session?.modelProvider??null,P=de({adapterType:m?.data.metadata?.session?.adapterType,capturedAt:m?.updatedAt??o,model:v,provider:f,usage:m?.data.metadata?.usage}),d=a.filter(l=>l.agentId===e.id);return{agent:e,team:xe(e),machine:ke(e),model:v,provider:f,state:Z(e.state),activeFlights:d.length,activeTask:We(d),sessions24h:h.length,throughput:fe(b,o),avgLatencyMs:be(m,o),usage:P.usage,cost:P,errors:d.filter(l=>l.status==="failed"||l.status==="needs_attention").length,lastActiveAt:Math.max(0,...c.map(l=>l.lastMessageAt??0),...b.map(l=>l.ts),e.updatedAt??0)||null}}function vt({navigate:e,agents:r}){const[s,a]=p.useState(null),[i,o]=p.useState([]),[c,h]=p.useState([]),[g,b]=p.useState([]),[m,v]=p.useState(""),[f,P]=p.useState(()=>Date.now()),d=p.useRef(null),l=p.useCallback(async()=>{const n=r.map(X=>X.id).join(","),[u,k,L,$]=await Promise.allSettled([A("/api/fleet"),A("/api/conversations"),A("/api/activity"),n?A(`/api/observe/agents?ids=${encodeURIComponent(n)}`):Promise.resolve([])]);u.status==="fulfilled"&&a(u.value),k.status==="fulfilled"&&o(k.value),L.status==="fulfilled"&&h(L.value),$.status==="fulfilled"&&b($.value),P(Date.now())},[r]);p.useEffect(()=>{l()},[l]);const I=p.useCallback(()=>{d.current||(d.current=setTimeout(()=>{d.current=null,l()},ge))},[l]);te(I),p.useEffect(()=>()=>{d.current&&(clearTimeout(d.current),d.current=null)},[]),p.useEffect(()=>{const n=setInterval(()=>P(Date.now()),1e3);return()=>clearInterval(n)},[]);const R=p.useMemo(()=>new Map(g.map(n=>[n.agentId,n])),[g]),M=p.useMemo(()=>{const n=s?.activeAsks??[];return r.map(u=>Se(u,i,c,n,R,f))},[c,r,s?.activeAsks,f,R,i]),S=p.useMemo(()=>{const n=m.trim().toLowerCase();return n?M.filter(u=>`${u.agent.name} ${u.team} ${u.machine} ${u.agent.handle??""} ${u.agent.harness??""} ${u.activeTask??""}`.toLowerCase().includes(n)):M},[m,M]),[K,F]=p.useState({key:"lastActive",dir:-1}),O=p.useMemo(()=>K?.key==="agent"?void 0:(n,u)=>E[n.state]-E[u.state],[K?.key]),q=p.useMemo(()=>S.map(n=>n.agent),[S]),B=p.useMemo(()=>S.map(n=>n.agent.id),[S]),y=ae({agents:q,orderedIds:B,navigate:e,selectMode:"preview"}),z=M.filter(n=>n.state==="in_turn"||n.state==="in_flight").length,H=M.filter(n=>J(n.agent.state,n.agent)).length,Y=M.reduce((n,u)=>n+(u.usage.total??0),0),_=M.some(n=>n.cost.totalUsd!=null)?M.reduce((n,u)=>n+(u.cost.totalUsd??0),0):null,G=M.some(n=>n.cost.billedTotalUsd!=null)?M.reduce((n,u)=>n+(u.cost.billedTotalUsd??0),0):null,Q=(()=>{const n=M.map(u=>u.avgLatencyMs).filter(u=>u!=null);return n.length===0?null:Math.round(n.reduce((u,k)=>u+k,0)/n.length)})();return t.jsxs("div",{className:"s-ops-agents",children:[t.jsxs("main",{className:"s-ops-agents-main",children:[t.jsxs("div",{className:"s-ops-agents-toolbar",children:[t.jsxs("div",{className:"s-ops-agents-breadcrumb",children:["Agents ",t.jsx("span",{children:"/"})," Directory"]}),t.jsxs("div",{className:"s-ops-agents-live",children:[t.jsx("span",{className:"s-ops-agents-live-dot"}),H," active"]}),t.jsxs("div",{className:"s-ops-agents-search",children:[t.jsx(se,{size:13}),t.jsx("input",{value:m,onChange:n=>v(n.target.value),placeholder:"Search agents, tasks, projects, machines…"})]}),t.jsx("button",{className:"s-ops-agents-icon-btn",type:"button",title:"Filters",children:t.jsx(oe,{size:14})})]}),t.jsx("section",{className:"s-ops-agents-hero",children:t.jsxs("div",{children:[t.jsx("div",{className:"s-ops-agents-kicker",children:"Agents"}),t.jsx("h1",{children:"All agents"}),t.jsx("p",{children:"Every registered agent across the local fleet, sorted by live status."})]})}),t.jsxs("section",{className:"s-ops-agents-stats",children:[t.jsx(C,{label:"Running",value:String(z),sub:`of ${r.length} total`}),t.jsx(C,{label:"Tokens",value:w(Y||null),sub:_==null?"usage metadata pending":`${N(_)} API equiv`}),t.jsx(C,{label:"Avg latency",value:D(Q),sub:"recent observe events"}),t.jsx(C,{label:"Billed",value:N(G),sub:"subscription usage can mark this down"})]}),t.jsxs("section",{className:"s-ops-agents-table-panel",children:[t.jsxs("div",{className:"s-ops-agents-table-title",children:["Agents ",t.jsx("span",{children:S.length}),t.jsxs("span",{className:"s-ops-agents-hint","aria-hidden":!0,children:[t.jsx("kbd",{children:"↑"}),t.jsx("kbd",{children:"↓"})," navigate · ",t.jsx("kbd",{children:"enter"})," pin · ",t.jsx("kbd",{children:"o"})," open · ",t.jsx("kbd",{children:"esc"})," clear"]})]}),t.jsx("div",{className:"s-ops-agents-table-wrap",ref:y.containerRef,children:t.jsx(ne,{rows:S,columns:Me,rowId:n=>n.agent.id,storageKey:"openscout.opsAgents.cols",sort:K,onSortChange:F,secondarySort:O,density:"compact",rowBindings:n=>{const u=y.bind(n);return{...u,onKeyDown:k=>{k.key!=="Enter"&&k.key!==" "||(k.preventDefault(),u.onClick())}}},rowState:n=>y.getState(n),empty:{title:"No agents match",body:"Adjust the search to find a different slice of the fleet."},className:"s-ops-agents-data-table",ariaLabel:"Agents directory"})})]})]}),y.card]})}function C({label:e,value:r,sub:s,tone:a="default"}){return t.jsxs("div",{className:`s-ops-agents-metric s-ops-agents-metric--${a}`,children:[t.jsx("div",{className:"s-ops-agents-metric-label",children:e}),t.jsx("div",{className:"s-ops-agents-metric-value",children:r}),t.jsx("div",{className:"s-ops-agents-metric-sub",children:s})]})}export{vt as OpsAgentsView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as n,j as t}from"./index-DMiGbrBt.js";/* empty css */import{u as d}from"./Provider-C7UKGHQy.js";/* empty css */import{u as v}from"./page-status-DpkedE1F.js";import{A as x}from"./AgentLanesView-B9vuEEmZ.js";import{MissionControlView as j}from"./MissionControlView-lUeAiSVg.js";import{OpsAgentsView as f}from"./OpsAgentsView-UN7iOscs.js";import{PlanView as w}from"./PlanView-C1CjH3PG.js";import{AtopView as N}from"./AtopView-BCkae3e1.js";import{TailView as c}from"./TailView-DGj_5HA9.js";import{u as g}from"./useContentSecondaryNav-DMl1WNm7.js";import{OpsSubnav as S}from"./OpsSubnav-DsuXzHah.js";import"./router-Bq5dwf78.js";import"./terminal-sessions-D5CIR2OL.js";import"./api-h5zurxmi.js";import"./sse-CjIkKo46.js";import"./index-BWHgHrtv.js";import"./surface-activity-B1rgWB1i.js";import"./colors-BtO5_zlx.js";import"./scoutbot-BTIErYHo.js";import"./ContextMenu-bARZqTzD.js";import"./DocumentFocusViewer-BeVwwl26.js";import"./createLucideIcon-OpA4Amw5.js";import"./TextDocumentSurface-BpAw4eQS.js";/* empty css */import"./file-text-BODxCjcz.js";import"./x-D3GElQbe.js";import"./chevron-right-XiIHsk4m.js";import"./code-xml-B6jOCM4V.js";import"./arrow-left-DEZzHiPS.js";import"./scout-voice-CU5c0LGi.js";import"./fx-z37u1o2z.js";import"./keyboard-nav-2kv_tGUS.js";import"./MessageComposerSuggestions-DpxN9WiB.js";import"./NewChatComposer-Cs6OsxK6.js";import"./runtime-picker-Bcl5iIX5.js";import"./voice-levels-Dcr3jglk.js";import"./loader-circle-CbHjZsz1.js";import"./index-CJXzfjo9.js";import"./HarnessMark-Cbv3Ib0c.js";import"./conversation-model-B47vYmWN.js";import"./time-DltNTpLl.js";import"./NewChatOrigin-Bk2OyVjI.js";import"./agent-chat-Bfjd9y6c.js";import"./model-Co0zkMIc.js";import"./text-DsBWV_4k.js";import"./chevron-down-BGk5qoEw.js";import"./search-CWfZtOt2.js";/* empty css */import"./tail-events-D19uAGe3.js";import"./observe-CuLGD9Zp.js";import"./types-B0PlfpKc.js";import"./AgentAvatar-D90c1Rzk.js";import"./SpriteAvatar-DyaGuhik.js";import"./SessionObserve-yfXFafp8.js";import"./bash-format-BRV5C6Gv.js";import"./tail-display-BdyoLvzY.js";import"./lane-edit-display-C_Aujldz.js";import"./lane-tool-detail-0WhMf4Vj.js";import"./LaneToolHoverCard-Bla0gBdm.js";import"./lane-observe-D0rfKDnU.js";import"./lane-ask-display-B6iCAVcd.js";import"./mentions-jSuTGeet.js";import"./AgentDetailCard-BcRBRp88.js";import"./AgentLiveActions-DBtnD0qE.js";import"./terminal-takeover-B8UeD9OX.js";import"./openContent-C6XO6kr5.js";import"./eye-0PvebX_a.js";import"./terminal-B9AOZQKR.js";import"./message-markup-3J9pi3nx.js";import"./ObservedTopologyPanel-DyUeV98H.js";import"./ObserveTextFlow-rsFj_rVo.js";import"./use-reduced-motion-RRBkmVkk.js";import"./message-circle-CG-96zts.js";import"./wrench-Bkc_0lKF.js";import"./external-link-CXBytO9o.js";import"./AgentFloorView-8LoAEBwS.js";/* empty css */import"./agent-lanes-model-B4YTt4OF.js";import"./context-budget-CbB4BDcO.js";import"./lane-roster-store-D8x1jac2.js";import"./AgentLanesPreflight-eSAoDsPi.js";import"./AgentLaneChrome-D9ZwUKrl.js";import"./AgentLaneCard-RrNnDZu8.js";/* empty css */import"./AgentLaneSummaryResize-BhFmGNzT.js";import"./clipboard-e3fSpeo7.js";import"./agent-lane-card-model-r2frk57c.js";import"./agent-lane-preview-CmHVe3dU.js";import"./AgentLaneDetailSheet-BXbPls9N.js";import"./SlidePanel-COwtoJqR.js";import"./agent-lane-detail-Djm3YJEa.js";import"./LaneTraceDetailSheet-D1CspRbl.js";import"./LaneTraceEventFocus-BF9ERP5O.js";/* empty css */import"./mission-control-store-BlnEhiCq.js";import"./MissionFocusOverlay-wlCmWDCT.js";import"./mission-control-model-C0fByIjm.js";import"./MissionLogPane-__MVtEl9.js";/* empty css */import"./DataTable-E8s_MmoA.js";/* empty css */import"./useAgentHoverCard-DMrbBif0.js";import"./sliders-horizontal-1oW76Xc9.js";/* empty css *//* empty css */import"./SecondaryNav-B3-nh5dM.js";import"./secondaryNavConfig-DqUIp0Es.js";import"./message-square-DSaGpjFU.js";import"./scroll-text-D6Pdnar7.js";const A=220;function F(){const r=v(),o=!!(r.hover||r.content),[i,s]=n.useState(o?{hover:r.hover,content:r.content}:null),[p,m]=n.useState(o?"enter":"hidden"),e=n.useRef(null);if(n.useEffect(()=>{if(o){e.current&&(clearTimeout(e.current),e.current=null),s({hover:r.hover,content:r.content}),m(h=>h==="show"?"show":"enter");const u=requestAnimationFrame(()=>m("show"));return()=>cancelAnimationFrame(u)}return m("leave"),e.current=setTimeout(()=>{m("hidden"),s(null),e.current=null},A),()=>{e.current&&(clearTimeout(e.current),e.current=null)}},[o,r.hover,r.content]),p==="hidden"||!i)return null;const a=i.hover?.label??i.hover?.route??null,l=i.hover?.label&&i.hover?.route?i.hover.route:null;return t.jsxs("div",{className:`s-page-status s-page-status--${p}`,role:"status","aria-live":"polite",children:[t.jsx("div",{className:"s-page-status-left",children:a&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"s-page-status-arrow","aria-hidden":!0,children:"→"}),t.jsx("span",{className:"s-page-status-target",children:a}),l&&t.jsx("span",{className:"s-page-status-route",children:l})]})}),t.jsx("div",{className:"s-page-status-right",children:i.content&&t.jsx("span",{className:"s-page-status-content",children:i.content})})]})}function br({navigate:r,mode:o="mission",tailQuery:i}){const{agents:s,route:p}=d(),m=g(),e=p.view==="ops"&&p.mode==="plan"?p.planDocumentId:void 0;return t.jsxs("div",{className:"s-ops",children:[m?t.jsx("div",{className:"s-ops-header",children:t.jsx(S,{activeRoute:p,navigate:r})}):null,t.jsxs("div",{className:"s-ops-body",children:[o==="mission"&&t.jsx(j,{navigate:r,agents:s}),o==="agents"&&t.jsx(f,{navigate:r,agents:s}),o==="plan"&&t.jsx(w,{navigate:r,agents:s,selectedPlanDocumentId:e}),o==="issues"&&t.jsx(c,{navigate:r,initialFilter:i,variant:"issues"}),o==="tail"&&t.jsx(c,{navigate:r,initialFilter:i,variant:"tail"}),o==="atop"&&t.jsx(N,{}),o==="lanes"&&t.jsx(x,{navigate:r,agents:s})]}),t.jsx(F,{})]})}export{br as OpsScreen};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as t}from"./index-DMiGbrBt.js";import{S as p}from"./SecondaryNav-B3-nh5dM.js";import{O as i}from"./secondaryNavConfig-DqUIp0Es.js";/* empty css */import"./createLucideIcon-OpA4Amw5.js";import"./message-square-DSaGpjFU.js";import"./file-text-BODxCjcz.js";import"./search-CWfZtOt2.js";import"./terminal-B9AOZQKR.js";import"./code-xml-B6jOCM4V.js";import"./scroll-text-D6Pdnar7.js";function j({activeRoute:r,navigate:o}){return t.jsx(p,{ariaLabel:"Ops sections",activeRoute:r,groups:i,navigate:o})}export{j as OpsSubnav};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e,j as o}from"./index-DMiGbrBt.js";import{a as A}from"./api-h5zurxmi.js";import{u as b,e as S}from"./Provider-C7UKGHQy.js";import{b as y}from"./router-Bq5dwf78.js";import{u as P}from"./sse-CjIkKo46.js";import{AgentsSubnav as N}from"./AgentsSubnav-DIEO4NPx.js";import{AgentDetailWithRail as B,AgentProfileSessionsCenter as E}from"./profile-CVRziEDA.js";import{r as R,d as C,b as M}from"./model-Co0zkMIc.js";/* empty css *//* empty css *//* empty css */import{ProjectAgentProfileBar as w}from"./ProjectAgentProfileBar-CtTpj6fU.js";/* empty css */import"./surface-activity-B1rgWB1i.js";import"./colors-BtO5_zlx.js";import"./scoutbot-BTIErYHo.js";import"./ContextMenu-bARZqTzD.js";import"./DocumentFocusViewer-BeVwwl26.js";import"./createLucideIcon-OpA4Amw5.js";import"./TextDocumentSurface-BpAw4eQS.js";/* empty css */import"./file-text-BODxCjcz.js";import"./x-D3GElQbe.js";import"./chevron-right-XiIHsk4m.js";import"./code-xml-B6jOCM4V.js";import"./arrow-left-DEZzHiPS.js";import"./scout-voice-CU5c0LGi.js";import"./fx-z37u1o2z.js";import"./keyboard-nav-2kv_tGUS.js";import"./MessageComposerSuggestions-DpxN9WiB.js";import"./NewChatComposer-Cs6OsxK6.js";import"./runtime-picker-Bcl5iIX5.js";import"./voice-levels-Dcr3jglk.js";import"./loader-circle-CbHjZsz1.js";import"./index-CJXzfjo9.js";import"./HarnessMark-Cbv3Ib0c.js";import"./conversation-model-B47vYmWN.js";import"./time-DltNTpLl.js";import"./NewChatOrigin-Bk2OyVjI.js";import"./agent-chat-Bfjd9y6c.js";import"./chevron-down-BGk5qoEw.js";import"./search-CWfZtOt2.js";import"./terminal-sessions-D5CIR2OL.js";import"./index-BWHgHrtv.js";import"./SecondaryNav-B3-nh5dM.js";import"./secondaryNavConfig-DqUIp0Es.js";import"./message-square-DSaGpjFU.js";import"./terminal-B9AOZQKR.js";import"./scroll-text-D6Pdnar7.js";import"./AgentAvatar-D90c1Rzk.js";import"./SpriteAvatar-DyaGuhik.js";import"./context-budget-CbB4BDcO.js";import"./session-catalog-BmoyVTJ_.js";import"./terminal-relay-CWbJ1RCW.js";import"./BackToPicker-BRvfostO.js";import"./openContent-C6XO6kr5.js";import"./ConversationScreen-BDRhx-RU.js";import"./ConversationComposer-Bla3DDvM.js";import"./message-markup-3J9pi3nx.js";import"./mentions-jSuTGeet.js";import"./AgentDetailCard-BcRBRp88.js";import"./AgentLiveActions-DBtnD0qE.js";import"./terminal-takeover-B8UeD9OX.js";import"./eye-0PvebX_a.js";import"./message-visibility-kJM8XcSG.js";import"./sessionRead-CvFz2RHv.js";import"./clipboard-e3fSpeo7.js";import"./types-B0PlfpKc.js";import"./ConversationHeader-DE3FC0m-.js";import"./ConversationFeedRows-B_gPxcqA.js";import"./ConversationPanels-DLek4H6A.js";import"./use-reduced-motion-RRBkmVkk.js";import"./activity-CA8qS6PI.js";import"./message-circle-CG-96zts.js";import"./tail-display-BdyoLvzY.js";import"./lane-edit-display-C_Aujldz.js";import"./tail-events-D19uAGe3.js";import"./ConversationStatus-BwVLiiO4.js";import"./conversation-icons-IIG5ha6D.js";import"./SessionObserve-yfXFafp8.js";import"./bash-format-BRV5C6Gv.js";import"./lane-tool-detail-0WhMf4Vj.js";import"./LaneToolHoverCard-Bla0gBdm.js";import"./lane-observe-D0rfKDnU.js";import"./lane-ask-display-B6iCAVcd.js";import"./ObservedTopologyPanel-DyUeV98H.js";import"./ObserveTextFlow-rsFj_rVo.js";import"./wrench-Bkc_0lKF.js";import"./external-link-CXBytO9o.js";/* empty css */import"./AgentDefinitionsWorkspace-CUpUrY57.js";import"./text-DsBWV_4k.js";import"./project-overview-helpers-BQTc_Ous.js";import"./FileViewerPane-CLgUhSm4.js";import"./agent-essentials-BSY1o46q.js";import"./model-CpAxGuis.js";import"./agents-project-model-UYiamtrU.js";function So({route:t,navigate:r}){const{agents:m}=b(),p=y(t),n=e.useMemo(()=>S(m,p),[m,p]),[f,g]=e.useState([]),a=e.useCallback(async()=>{const s=await A("/api/conversations").catch(()=>[]);g(s)},[]);e.useEffect(()=>{a()},[a]),P(()=>{a()});const i=R(n,t.agentId),c=!!(t.agentId&&i&&i.id!==t.agentId),{conversationByAgentId:j}=C(f);if(e.useEffect(()=>{!t.agentId||!i||!c||r({...t,view:"agents-v2",agentId:i.id})},[r,t,i,t.agentId,c]),!i)return o.jsx(v,{activeRoute:t,navigate:r,children:o.jsx("div",{className:"av2-empty",children:"Agent not found."})});const d=t.conversationId??j.get(i.id)??i.conversationId??null,l=t.tab??(t.conversationId?"message":"profile");return o.jsx("div",{className:"s-av2-profileShell",children:o.jsx(v,{activeRoute:t,navigate:r,bar:o.jsx(w,{agent:i,conversationId:d,activeTab:l,route:t,navigate:r}),children:o.jsx("div",{className:"av2-profileCanvas",children:o.jsx(B,{agent:i,allAgents:n,conversationId:d,navigate:r,activeTab:l,renderProfile:({agent:s,sessionCatalog:x,conversationId:h,navigate:I,route:u})=>o.jsx(E,{agent:s,name:M(s,n).name,sessionCatalog:x,conversationId:h,navigate:I,route:u,homeView:"agents-v2"})})})})})}function v({activeRoute:t,children:r,navigate:m,bar:p}){return o.jsxs("div",{className:"s-secondary-nav-shell",children:[o.jsx("div",{className:"s-secondary-nav-bar",children:p??o.jsx(N,{activeRoute:t,navigate:m})}),o.jsx("div",{className:"s-secondary-nav-body",children:r})]})}export{So as ProjectAgentProfile};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as c,j as e}from"./index-DMiGbrBt.js";import{i as y,c as L}from"./colors-BtO5_zlx.js";import{a as u}from"./api-h5zurxmi.js";import{u as T}from"./sse-CjIkKo46.js";import{t as P}from"./time-DltNTpLl.js";import{o as R}from"./openContent-C6XO6kr5.js";import{A as E}from"./AgentAvatar-D90c1Rzk.js";import{H as O}from"./HarnessMark-Cbv3Ib0c.js";import{n as V}from"./model-Co0zkMIc.js";import{h as B}from"./model-CpAxGuis.js";import"./index-BWHgHrtv.js";import"./SpriteAvatar-DyaGuhik.js";import"./text-DsBWV_4k.js";import"./agents-project-model-UYiamtrU.js";function U(s){return s?s.startsWith("/Users/")?`~/${s.split("/").slice(3).join("/")}`:s:null}function _(s){const o=s.model?.trim();if(!o)return null;const a=s.harness?.trim();return a&&o.startsWith(`${a}-`)?o.slice(a.length+1).replace(/-\d{8}$/,""):o.replace(/^claude-/,"").replace(/-\d{8}$/,"")}function g(s){const o=new Map;for(const a of s){if(a.kind!=="tool"||!a.tool)continue;const l=a.tool.toLowerCase();o.set(l,(o.get(l)??0)+1)}return[...o.entries()].sort((a,l)=>l[1]-a[1]||a[0].localeCompare(l[0])).map(([a])=>a).slice(0,6)}function r({label:s,value:o,title:a}){return o?.trim()?e.jsxs("div",{className:"av2-coreMetaItem",title:a??o,children:[e.jsx("span",{className:"av2-coreMetaLabel",children:s}),e.jsx("span",{className:"av2-coreMetaValue",children:o})]}):null}function as({agent:s,route:o,navigate:a}){const[l,h]=c.useState(null),[C,v]=c.useState(null),p=c.useCallback(async()=>{const[t,n]=await Promise.all([u(`/api/agents/${encodeURIComponent(s.id)}/observe`).catch(()=>null),u(`/api/agents/${encodeURIComponent(s.id)}/session-catalog`).catch(()=>null)]);h(t),v(n)},[s.id]);c.useEffect(()=>{h(null),v(null),p()},[p]),T(()=>{p()});const d=s.handle?.trim().replace(/^@+/,"")||null,j=d?`@${d}`:s.name,i=s.harness?B(s.harness):null,H=_(s),w=U(s.cwd??s.projectRoot),M=(s.homeNodeName??s.authorityNodeName??"").replace(/\.local$/i,"").replace(/-local-openscout$/i,""),I=y(s.state),k=L(s.state,s),x=l?.data.events??[],m=c.useMemo(()=>g(x),[x]),f=l?.data.metadata?.usage??null,N=(()=>{const t=f?.contextWindowTokens??0,n=f?.contextInputTokens??0;return!t||t<=0||n<=0?null:Math.min(100,Math.max(0,Math.round(n/t*100)))})(),A=C?.sessions?.length??0,$=s.transport==="claude_stream_json"?"stream-json":s.transport==="codex_app_server"?"app-server":s.transport?.trim()||null,S=async()=>{try{const t=await u("/api/sessions",{method:"POST",body:JSON.stringify(V(s))}),n=t.sessionId?.trim();if(n){R(a,{view:"sessions",sessionId:n},{returnTo:o});return}const b=t.conversationId?.trim();a({...o,view:"agents-v2",agentId:t.agentId?.trim()||s.id,...b?{conversationId:b}:{},tab:"message"})}catch{}};return e.jsxs("header",{className:"av2-profileHero",children:[e.jsx(E,{agent:s,size:56,tile:!0,presence:!0}),e.jsxs("div",{className:"av2-profileHeroCore",children:[e.jsxs("div",{className:"av2-profileHeroTop",children:[e.jsxs("div",{className:"av2-profileHeroIdent",children:[e.jsx("h1",{className:"av2-profileHeroTitle",title:j,children:j}),e.jsxs("span",{className:"av2-profileHeroState","data-online":I||void 0,children:[e.jsx("span",{className:"av2-profileHeroDot","aria-hidden":!0}),k,s.updatedAt?` · ${P(s.updatedAt)}`:""]}),d&&s.name.toLowerCase()!==d.toLowerCase()?e.jsx("span",{className:"av2-profileHeroBroker",title:s.id,children:s.name}):e.jsx("span",{className:"av2-profileHeroBroker",title:s.id,children:s.id})]}),e.jsxs("div",{className:"av2-profileHeroActions",children:[e.jsx("button",{type:"button",className:"av2-heroGhost",onClick:()=>a({...o,view:"agents-v2",agentId:s.id,tab:"config"}),children:"Edit config"}),e.jsx("button",{type:"button",className:"av2-heroCta",onClick:()=>{S()},children:"+ New session"})]})]}),e.jsxs("div",{className:"av2-profileHeroMeta",children:[e.jsx(r,{label:"Project",value:s.project?`/${s.project}`:null}),e.jsx(r,{label:"Branch",value:s.branch}),e.jsx(r,{label:"Harness",value:i?i.charAt(0).toUpperCase()+i.slice(1):null,title:s.harness??void 0}),e.jsx(r,{label:"Model",value:H}),e.jsx(r,{label:"Host",value:M||null}),e.jsx(r,{label:"Root",value:w,title:s.cwd??s.projectRoot??void 0}),e.jsx(r,{label:"Transport",value:$})]}),e.jsxs("div",{className:"av2-profileHeroSignal",children:[i?e.jsx("span",{className:"av2-signalMark",title:s.harness??i,children:e.jsx(O,{harness:i,size:12})}):null,e.jsxs("span",{className:"av2-signalChip",children:[e.jsx("span",{className:"av2-signalLabel",children:"Sessions"}),e.jsx("span",{className:"av2-signalValue",children:A})]}),N!=null?e.jsxs("span",{className:"av2-signalChip",children:[e.jsx("span",{className:"av2-signalLabel",children:"Ctx"}),e.jsxs("span",{className:"av2-signalValue",children:[N,"%"]})]}):null,m.length>0?e.jsxs("span",{className:"av2-signalChip av2-signalChip--wide",title:m.join(" · "),children:[e.jsx("span",{className:"av2-signalLabel",children:"Tools"}),e.jsx("span",{className:"av2-signalValue",children:m.join(" · ")})]}):l?e.jsxs("span",{className:"av2-signalChip",children:[e.jsx("span",{className:"av2-signalLabel",children:"Tools"}),e.jsx("span",{className:"av2-signalValue",children:"—"})]}):null]})]})]})}export{as as ProjectAgentProfileHero};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as p,j as s}from"./index-DMiGbrBt.js";import{A as Fe}from"./AgentAvatar-D90c1Rzk.js";import{H as be}from"./HarnessMark-Cbv3Ib0c.js";import{a as $e}from"./api-h5zurxmi.js";import{g as ie,a as De,f as ae,b as Oe}from"./api-BkjHJfgJ.js";import{r as ve,i as Be}from"./ui-LM8pS8qE.js";import{t as q,b as He,n as se}from"./time-DltNTpLl.js";import{p as ze,l as qe,s as _e,f as Ve}from"./terminal-sessions-D5CIR2OL.js";import{u as Ge,A as Ke}from"./Provider-C7UKGHQy.js";import{o as Ue}from"./openContent-C6XO6kr5.js";import{p as Z}from"./model-Co0zkMIc.js";import{SessionRefScreen as Je}from"./SessionRefScreen-DRgJu7Jo.js";import{F as we,A as Xe}from"./AddProjectForm-DMnobKch.js";import{r as J,s as _}from"./project-overview-helpers-BQTc_Ous.js";import{u as Ze,e as Y,d as le,g as Qe,s as ce,a as de,f as Ye,h as Ne,b as es,j as ss,r as ts}from"./projects-inbox-CHyUFQ6w.js";import{f as ns}from"./cache-Dr0why2k.js";import{A as ue}from"./arrow-up-right-ClxBnsi7.js";import{S as ke}from"./search-CWfZtOt2.js";import{C as is}from"./chevron-right-XiIHsk4m.js";import{E as as}from"./external-link-CXBytO9o.js";import{F as os}from"./DocumentFocusViewer-BeVwwl26.js";import"./SpriteAvatar-DyaGuhik.js";import"./colors-BtO5_zlx.js";import"./router-Bq5dwf78.js";import"./sse-CjIkKo46.js";import"./index-BWHgHrtv.js";import"./surface-activity-B1rgWB1i.js";import"./scoutbot-BTIErYHo.js";import"./ContextMenu-bARZqTzD.js";import"./TextDocumentSurface-BpAw4eQS.js";import"./file-text-BODxCjcz.js";import"./createLucideIcon-OpA4Amw5.js";import"./code-xml-B6jOCM4V.js";import"./arrow-left-DEZzHiPS.js";import"./scout-voice-CU5c0LGi.js";import"./fx-z37u1o2z.js";import"./keyboard-nav-2kv_tGUS.js";import"./MessageComposerSuggestions-DpxN9WiB.js";import"./NewChatComposer-Cs6OsxK6.js";import"./runtime-picker-Bcl5iIX5.js";import"./voice-levels-Dcr3jglk.js";import"./loader-circle-CbHjZsz1.js";import"./index-CJXzfjo9.js";import"./conversation-model-B47vYmWN.js";import"./NewChatOrigin-Bk2OyVjI.js";import"./agent-chat-Bfjd9y6c.js";import"./x-D3GElQbe.js";import"./chevron-down-BGk5qoEw.js";import"./text-DsBWV_4k.js";import"./tail-events-D19uAGe3.js";import"./BackToPicker-BRvfostO.js";import"./ConversationScreen-BDRhx-RU.js";import"./ConversationComposer-Bla3DDvM.js";import"./message-markup-3J9pi3nx.js";import"./mentions-jSuTGeet.js";import"./AgentDetailCard-BcRBRp88.js";import"./AgentLiveActions-DBtnD0qE.js";import"./terminal-takeover-B8UeD9OX.js";import"./eye-0PvebX_a.js";import"./terminal-B9AOZQKR.js";import"./message-visibility-kJM8XcSG.js";import"./sessionRead-CvFz2RHv.js";import"./clipboard-e3fSpeo7.js";import"./types-B0PlfpKc.js";/* empty css */import"./ConversationHeader-DE3FC0m-.js";import"./ConversationFeedRows-B_gPxcqA.js";/* empty css */import"./ConversationPanels-DLek4H6A.js";import"./use-reduced-motion-RRBkmVkk.js";import"./activity-CA8qS6PI.js";import"./message-circle-CG-96zts.js";import"./tail-display-BdyoLvzY.js";import"./lane-edit-display-C_Aujldz.js";import"./ConversationStatus-BwVLiiO4.js";import"./conversation-icons-IIG5ha6D.js";import"./SessionObserve-yfXFafp8.js";import"./bash-format-BRV5C6Gv.js";import"./lane-tool-detail-0WhMf4Vj.js";import"./LaneToolHoverCard-Bla0gBdm.js";import"./lane-observe-D0rfKDnU.js";import"./lane-ask-display-B6iCAVcd.js";import"./ObservedTopologyPanel-DyUeV98H.js";import"./ObserveTextFlow-rsFj_rVo.js";import"./wrench-Bkc_0lKF.js";/* empty css */import"./agents-project-model-UYiamtrU.js";import"./model-CpAxGuis.js";function pe(e){const t=e?.trim();if(!t)return null;const i=t.split(/[\\/]/u).filter(Boolean).at(-1)??t;return i.endsWith(".jsonl")?i.slice(0,-6):i}function rs(e){return e.surfaces.filter(t=>t.backend==="tmux")}function ls(e,t){return{terminalSessionId:e.id,terminalSurfaceKey:_e(t),sessionName:t.sessionName}}function cs(e,t){const i=pe(t.agentId),n=new Set(t.sessionRefs.map(pe).filter(r=>!!r)),o=i?.split(".",1)[0]??null;o?.startsWith("session-")&&n.add(o);for(const r of e){const a=rs(r).find(l=>n.has(l.sessionName));if(a)return ls(r,a)}return null}function ds(e,t){const i=ze(e.terminalSurfaceKey);return i?`scout://terminal?${new URLSearchParams({session:e.terminalSessionId,surface:qe(i),mode:t}).toString()}`:null}const us=1e4,ps=2e4,hs=6e4,ms=15e3,fs=45e3,js=["branch","unstaged","staged"];function ee(e){const t=()=>{document.visibilityState==="visible"&&e()};return window.addEventListener("focus",t),document.addEventListener("visibilitychange",t),()=>{window.removeEventListener("focus",t),document.removeEventListener("visibilitychange",t)}}function xs(e,t){const i=new Set;for(const n of[e,...t]){const o=n?.trim();o&&i.add(o.replace(/\/+$/u,""))}return[...i].slice(0,6)}function gs(e){return e.replace(/\/+$/u,"").split("/").pop()?.toLocaleLowerCase()??e.toLocaleLowerCase()}function bs(e,t,i){return e.path===t||i?.worktrees.some(o=>o.path===e.path)?!0:e.repo.split("/").pop()?.toLocaleLowerCase()===(i?.name.toLocaleLowerCase()??gs(t))}function Q(e){return e&&typeof e=="object"&&"name"in e&&e.name==="AbortError"?"The repository scan timed out.":e instanceof Error?e.message:String(e)}function vs(e,t=[]){const i=xs(e,t).join("\0"),n=p.useMemo(()=>i?i.split("\0"):[],[i]),[o,r]=p.useState(()=>ie()),[a,l]=p.useState(()=>De()),[c,g]=p.useState(!!(e&&!J(o,e))),[x,N]=p.useState(!!e),[S,j]=p.useState(!!e),[T,M]=p.useState(null),[y,F]=p.useState(null),[O,$]=p.useState(()=>new Map),[E,L]=p.useState(()=>new Map),[C,k]=p.useState(0),b=p.useRef(null),h=p.useCallback(()=>{b.current=null,k(f=>f+1)},[]);p.useEffect(()=>{if(!e){g(!1),M(null);return}let f=!1,v=!1,P=!0;const D=async()=>{if(v)return;v=!0,f||(g(!0),M(null));let B=null;try{let W=null;const H=C>0&&P;P=!1;try{W=await ae("standard",H,ms)}catch(R){B=Q(R)}if((!W||!J(W,e))&&b.current!==e){b.current=e;try{const R=await ae("expanded",H,fs);J(R,e)&&(W=R)}catch(R){B=Q(R)}}!f&&W&&r(R=>J(W,e)?W:R&&J(R,e)?R:W),!f&&!J(W,e)&&M(B??"Repo Watch did not include this project in its latest scan.")}finally{v=!1,f||g(!1)}};D();const u=window.setInterval(()=>{document.visibilityState==="visible"&&D()},us),I=ee(()=>{D()});return()=>{f=!0,window.clearInterval(u),I()}},[e,C]),p.useEffect(()=>{if(n.length===0){j(!1),L(new Map);return}let f=!1,v=!1,P=!0;const D=async()=>{if(v)return;v=!0,f||j(!0);const B=await Promise.allSettled(n.map(W=>ns(W,[...js],{force:C>0&&P,tier:"summary"})));if(P=!1,!f){const W=new Map,H=new Map;B.forEach((R,K)=>{const V=n[K];R.status==="fulfilled"?W.set(V,R.value.snapshot):H.set(V,Q(R.reason))}),$(R=>{const K=new Map(R);for(const V of n)K.delete(V);for(const[V,te]of W)K.set(V,te);return K}),L(H),j(!1)}v=!1};D();const u=window.setInterval(()=>{document.visibilityState==="visible"&&D()},ps),I=ee(()=>{D()});return()=>{f=!0,window.clearInterval(u),I()}},[n,C]),p.useEffect(()=>{if(n.length===0){N(!1),F(null);return}let f=!1,v=!1;const P=async()=>{if(!v){v=!0;try{const I=await Oe(n);f||(l(I),F(null))}catch(I){f||F(Q(I))}finally{v=!1,f||N(!1)}}};N(!0),F(null),P();const D=window.setInterval(()=>{document.visibilityState==="visible"&&P()},hs),u=ee(()=>{P()});return()=>{f=!0,window.clearInterval(D),u()}},[n,C]);const d=p.useMemo(()=>J(o,e),[e,o]),m=p.useMemo(()=>e?(a?.pullRequests??[]).filter(f=>bs(f,e,d)):[],[d,e,a]),A=p.useMemo(()=>{const f=a?.paths.some(v=>n.includes(v))?a.warnings:[];return y?[y,...f]:f},[n,y,a]);return{project:d,pullRequests:m,pullRequestsLoading:x,pullRequestWarnings:A,repoLoading:c,repoError:T,diffSnapshots:O,diffErrors:E,diffLoading:S,refresh:h}}function ws(e,t){return e.thread===t.thread&&e.crossProject===t.crossProject&&e.selected===t.selected&&e.cursor===t.cursor&&e.nowMs===t.nowMs&&e.workLabel===t.workLabel}const Ns=p.memo(function({thread:t,crossProject:i,selected:n,cursor:o,nowMs:r,onSelect:a,onOpen:l,rowRef:c,workLabel:g}){return s.jsxs("button",{ref:c,type:"button",className:"pi-row","data-state":t.group,"data-selected":n||void 0,"data-cursor":o||void 0,onClick:a,onDoubleClick:l,children:[s.jsx("span",{className:"pi-rowDot","aria-hidden":!0}),s.jsxs("span",{className:"pi-rowBody",children:[s.jsx("span",{className:"pi-rowWork",title:t.work,children:g??t.work}),s.jsxs("span",{className:"pi-rowAttr",children:[s.jsx("span",{className:"pi-rowAvatar",children:s.jsx(Fe,{agent:{name:t.agentName,harness:t.harness,state:t.working?"in_turn":null},placement:"row",size:22})}),s.jsx("span",{className:"pi-rowAgent",title:t.agentName,children:t.agentName}),s.jsx("span",{className:"pi-rowHmark","aria-hidden":!0,children:s.jsx(be,{harness:t.harness,size:11})}),i?s.jsxs("span",{className:"pi-rowChip",title:`/${t.projectTitle}`,children:["/",t.projectTitle]}):t.branch?s.jsx("span",{className:"pi-rowBranch",title:t.branch,children:t.branch}):null]})]}),s.jsxs("span",{className:"pi-rowVitals",children:[t.working?s.jsx("span",{className:"pi-rowLiveTag",children:"live"}):null,s.jsx("span",{className:"pi-rowAgo",children:t.lastActivityAt?q(t.lastActivityAt,r):"—"}),t.contextPct!=null?s.jsxs("span",{className:"pi-rowCtx",children:[t.contextPct,"%"]}):null]}),s.jsxs("span",{className:"pi-rowOpen","aria-hidden":!0,children:[s.jsx("span",{children:"Open"}),s.jsx(is,{size:14,strokeWidth:1.8})]})]})},ws);function he({title:e,detail:t,tone:i="muted"}){return s.jsxs("div",{className:"pi-stateBlock","data-tone":i,role:i==="loading"?"status":"note",children:[s.jsx("span",{className:"pi-statePulse","aria-hidden":!0}),s.jsx("span",{className:"pi-stateTitle",children:e}),t?s.jsx("span",{className:"pi-stateDetail",children:t}):null]})}function ks({rows:e=7}){return s.jsxs("div",{className:"pi-loadingRows","aria-hidden":"true",children:[s.jsxs("div",{className:"pi-sectionHead pi-sectionHead--loading",children:[s.jsx("span",{className:"pi-loadingLine pi-loadingLine--label"}),s.jsx("span",{className:"pi-loadingLine pi-loadingLine--count"})]}),Array.from({length:e},(t,i)=>s.jsxs("div",{className:"pi-row pi-row--loading",children:[s.jsx("span",{className:"pi-rowDot"}),s.jsxs("span",{className:"pi-rowBody",children:[s.jsx("span",{className:"pi-loadingLine pi-loadingLine--title"}),s.jsx("span",{className:"pi-loadingLine pi-loadingLine--meta"})]}),s.jsx("span",{className:"pi-rowVitals",children:s.jsx("span",{className:"pi-loadingLine pi-loadingLine--time"})})]},i))]})}function Ss({route:e,navigate:t,slug:i,model:n,mode:o,repoProject:r}){const a=n.projects.find(y=>y.slug===i)??null,l=Y(n.threads,i),c=l.filter(y=>y.kind==="agent"),g=a?.title??i,x=a?.root??null,N=(a?.agentCount??c.length)>1,S=e.machineId?{machineId:e.machineId}:{},j={view:"agents-v2",projectSlug:i,...S},T=ys(a?.needs??0,a?.working??0,l.length),M=r?.worktrees.length??a?.worktreeCount??0;return s.jsxs("header",{className:"pi-projectHead",children:[s.jsx("div",{className:"pi-projectHeadTop",children:s.jsxs("div",{className:"pi-projectIdent",children:[s.jsx("h1",{className:"pi-projectTitle",children:g}),s.jsxs("div",{className:"pi-projectMeta",children:[x?s.jsx("span",{title:x,children:_(x)}):null,s.jsx("span",{className:"pi-projectDigest",children:T})]})]})}),s.jsxs("div",{className:"pi-projectFacets","aria-label":"Project sections",children:[s.jsx("button",{type:"button",className:"pi-projectFacet","data-selected":o==="overview"||void 0,onClick:()=>t(j),children:s.jsx("span",{children:"Overview"})}),s.jsxs("button",{type:"button",className:"pi-projectFacet","data-selected":o==="sessions"||void 0,onClick:()=>t({...j,indexView:"sessions"}),children:[s.jsx("span",{children:"Sessions"}),s.jsx("b",{children:a?.sessionCount??0})]}),N?s.jsxs("button",{type:"button",className:"pi-projectFacet","data-selected":o==="agents"||void 0,onClick:()=>t({...j,indexView:"agents"}),children:[s.jsx("span",{children:"Agents"}),s.jsx("b",{children:a?.agentCount??c.length})]}):null,s.jsxs("button",{type:"button",className:"pi-projectFacet",title:"Open worktrees in Repos",onClick:()=>t({view:"repos",...x?{root:x}:{},...S}),children:[s.jsx("span",{children:"Worktrees"}),s.jsx("b",{children:M}),s.jsx(ue,{className:"pi-projectFacetOut",size:11,strokeWidth:2,"aria-hidden":!0})]}),s.jsxs("button",{type:"button",className:"pi-projectFacet",disabled:!x,title:x?"Open this project's AGENTS.md":"No project root known",onClick:()=>t({view:"code",project:i,path:"AGENTS.md"}),children:[s.jsx("span",{children:"Rules"}),s.jsx("b",{children:x?"set":"—"}),s.jsx(ue,{className:"pi-projectFacetOut",size:11,strokeWidth:2,"aria-hidden":!0})]})]})]})}function ys(e,t,i){if(i===0)return s.jsx("span",{children:"No conversations yet."});const n=[];return t>0&&n.push(s.jsxs("b",{children:[t," moving"]},"w")),e>0&&n.push(s.jsxs("b",{children:[e," needs you"]},"n")),n.push(s.jsxs("span",{children:[i," conversation",i===1?"":"s"]},"t")),n.reduce((o,r,a)=>(a>0&&o.push(s.jsx("span",{children:" · "},`sep${a}`)),o.push(r),o),[])}function Se(e){if(e.length<=18)return e;const t=e.match(/^([0-9a-f]{8})-[0-9a-f-]{27,}$/iu);return t?t[1]:`${e.slice(0,10)}…${e.slice(-5)}`}function Cs(e,t){return`${t?0:e.projects.length} tracked`}function As({route:e,navigate:t,projects:i}){const{onboarding:n,refreshOnboarding:o,reload:r}=Ge(),a=Rs(n?.defaultHarness),[l,c]=p.useState(""),[g,x]=p.useState(""),[N,S]=p.useState(a),[j,T]=p.useState(!1),[M,y]=p.useState(null),[F,O]=p.useState(null),[$,E]=p.useState(null);p.useEffect(()=>{S(a)},[a]);const L=p.useMemo(()=>Ts(i),[i]),C=p.useMemo(()=>Ls(L,l),[l,L]),k=p.useMemo(()=>L.find(u=>u.slug===g)??fe(L,l),[l,L,g]),b=l.trim(),h=Ms(b)&&!fe(L,b),d=k??(!h&&b?C[0]??null:null),m=d?"Open project":h?"Create project":"Find project",A=!!(d||h||b);p.useEffect(()=>{g&&(L.some(u=>u.slug===g)||x(""))},[L,g]),p.useEffect(()=>{if(!$)return;const u=L.find(I=>Es(I,$));u&&(E(null),t(me(e,u.slug)))},[$,t,L,e]);const f=u=>{x(u.slug),c(u.title),y(null),O(null)},v=u=>{t(me(e,u.slug))},P=async u=>{T(!0),y(null),O(null);try{await $e("/api/onboarding/project",{method:"POST",body:JSON.stringify({contextRoot:u,sourceRoots:[u],defaultHarness:N})}),E(u),O("Project created. Refreshing inventory."),x(""),c(""),ts(),await Promise.all([o(),r()])}catch(I){y(I instanceof Error?I.message:"Could not create project.")}finally{T(!1)}},D=u=>{if(u.preventDefault(),!j){if(d){v(d);return}if(h){P(b);return}if(b){y("No project matches that search. Paste a repo path to create one.");return}y("Choose a project or paste a repo path.")}};return s.jsxs("div",{className:"pi-zero",children:[s.jsxs("div",{className:"pi-zeroHead",children:[s.jsxs("span",{className:"pi-zeroKicker",children:[s.jsx(we,{size:13,strokeWidth:1.9,"aria-hidden":!0}),"Projects"]}),s.jsx("h2",{children:"Pick a project to start."})]}),s.jsxs("form",{className:"pi-zeroComposer",onSubmit:D,children:[s.jsxs("div",{className:"pi-zeroBar",children:[s.jsxs("label",{className:"pi-zeroSelect",children:[s.jsx(ke,{size:13,strokeWidth:1.8,"aria-hidden":!0}),s.jsxs("select",{value:g,"aria-label":"Choose project",onChange:u=>{const I=L.find(B=>B.slug===u.currentTarget.value);I?f(I):x("")},children:[s.jsx("option",{value:"",children:"Choose project"}),L.slice(0,80).map(u=>s.jsx("option",{value:u.slug,children:u.title},u.slug))]})]}),s.jsx("div",{className:"pi-zeroHarness",role:"group","aria-label":"Default harness",children:["claude","codex"].map(u=>s.jsx("button",{type:"button","data-on":N===u||void 0,onClick:()=>S(u),children:u==="claude"?"Claude":"Codex"},u))})]}),s.jsxs("div",{className:"pi-zeroInputRow",children:[s.jsx("textarea",{value:l,rows:2,placeholder:"Find project or paste /path/to/repo","aria-label":"Find or create project",onChange:u=>{c(u.currentTarget.value),x(""),y(null),O(null)},onKeyDown:u=>{u.key==="Enter"&&!u.shiftKey&&(u.preventDefault(),u.currentTarget.form?.requestSubmit())}}),s.jsxs("button",{type:"submit",className:"pi-zeroSend",disabled:j||!A,title:m,children:[s.jsx(Ke,{size:15,strokeWidth:2,"aria-hidden":!0}),s.jsx("span",{children:j?"Working":m})]})]}),C.length>0?s.jsx("div",{className:"pi-zeroMatches","aria-label":"Matching projects",children:C.map(u=>s.jsxs("button",{type:"button",className:"pi-zeroMatch","data-selected":k?.slug===u.slug||void 0,onClick:()=>f(u),onDoubleClick:()=>v(u),children:[s.jsxs("span",{className:"pi-zeroMatchMain",children:[s.jsxs("span",{className:"pi-zeroMatchTitle",children:["/",u.title]}),s.jsx("span",{className:"pi-zeroMatchRoot",title:u.root??void 0,children:u.root?_(u.root):u.slug})]}),s.jsx("span",{className:"pi-zeroMatchMeta",children:Is(u)})]},u.slug))}):b?s.jsx("div",{className:"pi-zeroEmpty",children:"No project matches."}):null,M?s.jsx("div",{className:"pi-zeroError",children:M}):null,F?s.jsx("div",{className:"pi-zeroStatus",children:F}):null]})]})}function Rs(e){return e==="codex"?"codex":"claude"}function me(e,t){return{view:"agents-v2",projectSlug:t,...e.showEphemeral?{showEphemeral:!0}:{},...e.machineId?{machineId:e.machineId}:{}}}function Ts(e){return e.map(t=>({slug:t.slug,title:t.title,root:t.root,agentCount:t.agentCount,sessionCount:t.sessionCount,lastActivityAt:t.lastActivityAt})).sort((t,i)=>i.lastActivityAt-t.lastActivityAt||i.agentCount-t.agentCount||i.sessionCount-t.sessionCount||t.title.localeCompare(i.title))}function Ls(e,t){const i=z(t);return i?e.map(n=>({option:n,score:Ps(n,i)})).filter(n=>n.score!==null).sort((n,o)=>n.score-o.score||o.option.lastActivityAt-n.option.lastActivityAt||n.option.title.localeCompare(o.option.title)).slice(0,6).map(n=>n.option):e.slice(0,6)}function fe(e,t){const i=z(t);return i?e.find(n=>{const o=z(n.root??""),r=z(n.root?Z(n.root):"");return z(n.title)===i||z(n.slug)===i||o===i||r===i||z(n.root?_(n.root):"")===i})??null:null}function Ps(e,t){const i=z(e.title),n=z(e.slug),o=z(e.root??""),r=z(e.root?Z(e.root):"");return i===t||n===t||o===t||r===t?0:i.startsWith(t)||n.startsWith(t)||r.startsWith(t)?1:i.includes(t)||n.includes(t)||r.includes(t)?2:o.includes(t)?3:null}function z(e){return e.trim().toLowerCase().replace(/^~(?=\/)/u,"").replace(/\s+/g," ")}function Ms(e){const t=e.trim();return/^(~\/|\/|\.{1,2}\/)/u.test(t)||t.includes("/")}function Es(e,t){const i=z(t);return i?[e.root??"",e.root?_(e.root):"",e.root?Z(e.root):"",e.slug,e.title].map(z).some(o=>o===i||o.endsWith(i)):!1}function Is(e){return[je(e.agentCount,"agent"),je(e.sessionCount,"session"),e.lastActivityAt?q(e.lastActivityAt):null].filter(Boolean).join(" · ")}function je(e,t){return`${e} ${t}${e===1?"":"s"}`}function Ws(e,t){return t.sessionId?e.find(i=>i.sessionId===t.sessionId||i.conversationId===t.sessionId||i.id===t.sessionId)??null:null}function xe(e){return/^native:process:/iu.test(e??"")}function Fs(e){return e.startsWith("/")||e.startsWith("~/")||e.includes("/")&&/\.(jsonl?|events)$/i.test(e)}function ye(e,t,i){const n=e?.trim()??"";return!n||Fs(n)?t:n}function $s({session:e,sessionRef:t,threads:i,lookup:n,route:o,navigate:r,nowMs:a}){const[l,c]=p.useState(null),g=e?.agentName??o.selectedAgentId??o.agentId??"Session",x=e?.harness??"session",N=n?.kind==="observe"?n.observe.data:null,S=N?.metadata?.session,j=e?.lastActivityAt??n?.session?.lastMessageAt??null,[T,M,y]=p.useMemo(()=>[re(N),Ae(N,j),zs(N,j)],[N,j]),F=S?.gitBranch??n?.session?.currentBranch??e?.branch??null,O=S?.model??null,$=S?.turnCount??N?.metadata?.usage?.assistantMessages??(n?.kind==="conversation"?n.session.messageCount:null),E=M?q(M,a):e?.lastActivityAt?q(e.lastActivityAt,a):"—",L=e?.working?`live · last ${E}`:E!=="—"?`last ${E}`:"trace resolving",C=ye(e?.work,g),k=Se(t),b=n?.session??null,h=n?.kind==="observe"?n.observe.agentId??b?.agentId??e?.agentId:b?.agentId??e?.agentId,d=n?.kind==="observe"?n.observe.sessionId:b?.harnessSessionId,m=[g,x,O,F,T?`started ${He(T)}`:null,y,$!=null?`turn ${w($)}`:null,k].filter(v=>!!v&&v!=="—");p.useEffect(()=>{let v=!0;return c(null),!h&&!d&&!t?()=>{v=!1}:(Ve({includeDiscovered:!0}).then(P=>{v&&c(cs(P,{agentId:h,sessionRefs:[t,d,e?.sessionId]}))}).catch(()=>{v&&c(null)}),()=>{v=!1})},[e?.sessionId,t,h,d]);const A=()=>{l&&Ue(r,{view:"terminal",terminalSessionId:l.terminalSessionId,terminalSurfaceKey:l.terminalSurfaceKey,mode:"takeover"},{returnTo:o})},f=l?ds(l,"takeover"):null;return s.jsxs("section",{className:"pi-sessionOverview","aria-label":"Session overview",children:[s.jsxs("section",{className:"pi-sessionMasthead","data-state":e?.working?"working":"recent",children:[s.jsxs("div",{className:"pi-sessionMastTop",children:[s.jsx("span",{className:"pi-sessionCrumb",children:"Sessions ▸"}),s.jsx("h2",{className:"pi-sessionHeadline",title:C,children:C}),s.jsxs("span",{className:"pi-sessionState",children:[e?.working?s.jsx("span",{className:"pi-sessionLiveDot","aria-hidden":!0}):null,L]})]}),s.jsx("div",{className:"pi-sessionMeta",children:m.map((v,P)=>s.jsxs("span",{title:P===m.length-1?t:v,children:[P===1?s.jsx(be,{harness:x,size:11}):null,v]},`${v}:${P}`))}),l?s.jsxs("div",{className:"pi-sessionTerminalActions","aria-label":"tmux terminal actions",children:[s.jsxs("span",{className:"pi-sessionTerminalName",title:l.sessionName,children:["tmux · ",l.sessionName]}),s.jsx("button",{type:"button",onClick:A,children:"Open in web terminal"}),f?s.jsxs("a",{href:f,children:["Open in native terminal",s.jsx(as,{size:11,strokeWidth:1.8,"aria-hidden":!0})]}):null]}):null]}),s.jsx(Js,{lookup:n,session:e,threads:i,nowMs:a,route:o,navigate:r})]})}function Ds({session:e,sessionRef:t,threads:i,route:n,navigate:o,nowMs:r}){const[a,l]=p.useState(null);return p.useEffect(()=>{l(null)},[t]),s.jsx("main",{className:"pi-sessionDetail","aria-label":"Selected session",children:s.jsxs("div",{className:"pi-sessionContent",children:[s.jsx($s,{session:e,sessionRef:t,threads:i,lookup:a,route:n,navigate:o,nowMs:r}),s.jsx(Je,{sessionRef:t,navigate:o,showObserveRail:!1,onLookup:l})]})})}function w(e){return typeof e!="number"||!Number.isFinite(e)?"—":Math.abs(e)<1e3?e.toLocaleString("en-US"):Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}function Ce(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?"—":`${w(e)} tok`}function G(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:null}function Os(e){const t=G(e?.contextInputTokens),i=G(e?.contextWindowTokens);return t===null||i===null?null:Math.max(0,Math.min(1,t/i))}function Bs(e){const t=[{key:"input",label:"input",value:G(e?.inputTokens)??0},{key:"cache-read",label:"cache rd",value:G(e?.cacheReadInputTokens)??0},{key:"cache-write",label:"cache wr",value:G(e?.cacheCreationInputTokens)??0},{key:"output",label:"output",value:G(e?.outputTokens)??0},{key:"reasoning",label:"reasoning",value:G(e?.reasoningOutputTokens)??0}].filter(r=>r.value>0),i=t.reduce((r,a)=>r+a.value,0),n=t.filter(r=>r.key!=="reasoning"||i>0&&r.value/i>=.02);if(n.length>0)return n;const o=G(e?.totalTokens);return o!==null?[{key:"total",label:"total",value:o}]:[]}function Hs({buckets:e}){const t=e.reduce((i,n)=>i+n.value,0);return e.length===0?null:s.jsxs("div",{className:"pi-sessionGlanceTokens","aria-label":"Token usage",children:[s.jsx("div",{className:"pi-sessionGlanceTokenBars",children:e.map(i=>s.jsx("span",{className:"pi-sessionGlanceTokenSeg","data-kind":i.key,style:{flexGrow:t>0?Math.max(.035,i.value/t):1,flexBasis:0},title:`${i.label}: ${Ce(i.value)}`},i.key))}),s.jsx("div",{className:"pi-sessionGlanceTokenLegend",children:e.map(i=>s.jsxs("span",{children:[s.jsx("i",{"data-kind":i.key,"aria-hidden":!0}),i.label," ",s.jsx("b",{children:w(i.value)})]},i.key))})]})}function re(e){const t=se(e?.metadata?.session?.sessionStart);if(t!==null)return t;for(const i of e?.events??[]){const n=se(i.at);if(n!==null)return n}return null}function Ae(e,t){for(let o=(e?.events.length??0)-1;o>=0;o-=1){const r=se(e?.events[o]?.at);if(r!==null)return r}const i=re(e),n=e?.events.at(-1)?.t;return i!==null&&typeof n=="number"&&Number.isFinite(n)?i+n*1e3:se(t)}function zs(e,t){const i=re(e),n=Ae(e,t);if(i!==null&&n!==null)return oe(Math.max(0,n-i))||"—";const o=e?.events.at(-1)?.t;return typeof o=="number"&&Number.isFinite(o)&&oe(o*1e3)||"—"}function oe(e){if(typeof e!="number"||!Number.isFinite(e)||e<0)return"";const t=Math.floor(e/1e3);if(t<60)return`${t}s`;const i=Math.floor(t/60);if(i<60)return`${i}m`;const n=Math.floor(i/60),o=i%60;if(n<48)return o>0?`${n}h ${o}m`:`${n}h`;const r=Math.floor(n/24),a=n%24;return a>0?`${r}d ${a}h`:`${r}d`}function qs(e){const t=e?.metadata?.topology;if(!t)return null;const i=t.agents.length,n=t.agents.filter(l=>l.role!=="lead").length,o=t.groups.filter(l=>l.kind==="workflow").length,r=t.tasks.length,a=[];return n>0?a.push(`${n} worker${n===1?"":"s"}`):i>0&&a.push(`${i} agent${i===1?"":"s"}`),o>0&&a.push(`${o} workflow${o===1?"":"s"}`),r>0&&a.push(`${r} task${r===1?"":"s"}`),a.length?a.join(" · "):null}function _s(e){return[...e].sort((t,i)=>ge(i.state)-ge(t.state)||i.touches-t.touches||i.lastT-t.lastT||t.path.localeCompare(i.path)).slice(0,5).map(t=>({path:t.path,kind:t.state,detail:[t.touches>1?`${w(t.touches)} touches`:"1 touch",t.lastT>0?`last ${oe(t.lastT*1e3)}`:null].filter(Boolean).join(" · ")}))}function ge(e){switch(e){case"created":return 3;case"modified":return 2;case"read":return 1}}function Vs(e){const t=new Map;for(const i of e){if(i.kind!=="tool")continue;const n=Gs(i.tool||i.text),o=t.get(n)??{count:0,samples:[]};o.count+=1;const r=i.arg||i.detail||i.text;r&&o.samples.length<2&&o.samples.push(r),t.set(n,o)}return[...t.entries()].sort((i,n)=>n[1].count-i[1].count||i[0].localeCompare(n[0])).slice(0,5).map(([i,n])=>({name:i,count:n.count,detail:n.samples.join(" · ")||`${w(n.count)} uses`}))}function Gs(e){return(e.trim().split(/\s+/u)[0]??"tool").replace(/[_-]+/gu," ").toLowerCase()}function Ks({usage:e,contextPct:t,topology:i,workspace:n,projectRoot:o,branch:r}){const a=[];return t!==null&&a.push({label:"Context",value:`${t}%`,detail:t>=80?"approaching limit":"within window",tone:t>=80?"warn":void 0}),(e?.serviceTier||e?.planType||e?.speed)&&a.push({label:"Budget",value:e.serviceTier??e.planType??e.speed??"usage",detail:[e.planType,e.speed].filter(Boolean).join(" · ")||"provider metadata"}),n&&o&&n!==o?a.push({label:"Worktree",value:_(n),detail:"session cwd differs from project root",tone:"warn"}):r&&a.push({label:"Repo",value:r,detail:"session branch"}),i&&a.push({label:"Topology",value:i,detail:"observed harness hierarchy"}),(e?.webSearchRequests||e?.webFetchRequests)&&a.push({label:"Network",value:`${w((e.webSearchRequests??0)+(e.webFetchRequests??0))} req`,detail:[e.webSearchRequests?`${w(e.webSearchRequests)} search`:null,e.webFetchRequests?`${w(e.webFetchRequests)} fetch`:null].filter(Boolean).join(" · ")}),a.slice(0,4)}function Us({session:e,threads:t,nowMs:i}){return t.filter(n=>n.kind==="agent").filter(n=>n.agentId!==e?.agentId||n.work!==e?.work).sort((n,o)=>Number(o.working)-Number(n.working)||o.lastActivityAt-n.lastActivityAt).slice(0,4).map(n=>{const o=!!(e?.branch&&n.branch===e.branch),r=!!(e?.agentName&&n.agentName===e.agentName);return{thread:n,title:ye(n.work,n.agentName,n.id),channel:n.conversationId?Se(n.conversationId):n.agentName,state:n.needs?"needs":n.working?"working":"recent",time:n.lastActivityAt?q(n.lastActivityAt,i):"—",participants:n.agentName,why:o?"same branch":r?"same agent":n.working?"active in project":"project thread"}})}function X({label:e,value:t,title:i,detail:n}){return s.jsxs("span",{className:"pi-sessionGlanceField",title:i,children:[s.jsx("span",{children:e}),s.jsx("b",{children:t}),n?s.jsx("small",{children:n}):null]})}function Js({lookup:e,session:t,threads:i,nowMs:n,route:o,navigate:r}){const[a,l]=p.useState(!1),c=p.useMemo(()=>{const h=e?.kind==="observe"?e.observe.data:null,d=h?.metadata?.session,m=h?.metadata?.usage,A=h?.events??[],f=h?.files??[],v=d?.turnCount??m?.assistantMessages??(e?.kind==="conversation"?e.session.messageCount:null),P=A.filter(U=>U.kind==="tool").length,D=f.filter(U=>U.state==="created").length,u=f.filter(U=>U.state==="modified").length,I=f.filter(U=>U.state==="read").length,B=D+u,W=Os(m),H=W!==null?Math.round(W*100):null,R=d?.cwd??e?.session?.workspaceRoot??t?.projectRoot??null,K=d?.gitBranch??e?.session?.currentBranch??t?.branch??null,V=qs(h),te=Ce(m?.totalTokens??(typeof m?.inputTokens=="number"||typeof m?.outputTokens=="number"?(m?.inputTokens??0)+(m?.outputTokens??0):null)),Te=Bs(m),Le=B>0?[u>0?`${w(u)} mod`:null,D>0?`${w(D)} new`:null].filter(Boolean).join(" · "):I>0?"read-only":"no file trace",Pe=f.length>0?`${w(f.length)} touched`:"—",Me=_s(f),Ee=Vs(A),Ie=Ks({usage:m,contextPct:H,topology:V,workspace:R,projectRoot:t?.projectRoot,branch:K}),We=Us({session:t,threads:i,nowMs:n});return{turnCount:v,toolCount:P,editCount:B,fileCountLabel:Pe,fileStateLabel:Le,workspace:R,contextPct:H,showContext:H!==null,contextWarn:H!==null&&H>=80,tokenTotal:te,buckets:Te,fileSignals:Me,toolSignals:Ee,contextSignals:Ie,threadSignals:We,projectRoot:t?.projectRoot??null}},[e,t,i,n]),{turnCount:g,toolCount:x,editCount:N,fileCountLabel:S,fileStateLabel:j,workspace:T,contextPct:M,showContext:y,contextWarn:F,tokenTotal:O,buckets:$,fileSignals:E,toolSignals:L,contextSignals:C,threadSignals:k,projectRoot:b}=c;return s.jsxs("section",{className:"pi-sessionGlance","aria-label":"Session glance",children:[s.jsxs("div",{className:"pi-sessionVitals","aria-label":"Session vitals",children:[s.jsx(X,{label:"Turns",value:w(g)}),s.jsx(X,{label:"Tools",value:w(x)}),s.jsx(X,{label:"Edits",value:w(N)}),s.jsx(X,{label:"Files",value:S,detail:j!=="no file trace"?j:null}),T&&b&&T!==b?s.jsx(X,{label:"Worktree",value:_(T),title:T}):null,y?s.jsxs("span",{className:"pi-sessionContextVital",title:"Context window usage",children:[s.jsx("span",{children:"Ctx"}),s.jsx("span",{className:"pi-sessionContextBar","aria-hidden":!0,children:s.jsx("span",{"data-warn":F||void 0,style:{width:`${M}%`}})}),s.jsxs("b",{"data-warn":F||void 0,children:[M,"%"]})]}):null,$.length>0?s.jsxs("button",{type:"button",className:"pi-sessionTokenToggle","aria-expanded":a,onClick:()=>l(h=>!h),children:[s.jsx("span",{children:"Tokens"}),s.jsx("b",{children:O}),s.jsx("i",{children:a?"▾":"▸"})]}):null]}),a&&$.length>0?s.jsx(Hs,{buckets:$}):null,s.jsx(Xs,{files:E,tools:L,context:C,threads:k,route:o,navigate:r})]})}function Xs({files:e,tools:t,context:i,threads:n,route:o,navigate:r}){return s.jsxs("section",{className:"pi-sessionSignals","aria-label":"Session work signals",children:[s.jsxs("div",{className:"pi-sessionSignalCol",children:[s.jsxs("div",{className:"pi-sessionSignalHead",children:[s.jsx("span",{children:"Files"}),s.jsx("b",{children:w(e.length)})]}),e.length>0?s.jsx("div",{className:"pi-sessionFileList",children:e.map(a=>s.jsxs("div",{className:"pi-sessionFileRow",children:[s.jsx("span",{"data-kind":a.kind,children:a.kind}),s.jsx("code",{title:a.path,children:a.path}),s.jsx("small",{children:a.detail})]},`${a.kind}:${a.path}`))}):s.jsx("span",{className:"pi-sessionSignalEmpty",children:"No file trace yet."})]}),s.jsxs("div",{className:"pi-sessionSignalCol",children:[s.jsx("div",{className:"pi-sessionSignalHead",children:s.jsx("span",{children:"Tools · Context · Topology"})}),t.length>0?s.jsx("div",{className:"pi-sessionToolGrid",children:t.map(a=>s.jsxs("span",{className:"pi-sessionToolPill",title:a.detail,children:[s.jsx("b",{children:a.name}),s.jsx("em",{children:w(a.count)})]},a.name))}):null,i.length>0?s.jsx("div",{className:"pi-sessionContextList",children:i.map(a=>s.jsxs("div",{className:"pi-sessionContextRow",children:[s.jsx("span",{children:a.label}),s.jsx("b",{"data-tone":a.tone,children:a.value}),s.jsx("small",{children:a.detail})]},`${a.label}:${a.value}`))}):t.length===0?s.jsx("span",{className:"pi-sessionSignalEmpty",children:"Trace metadata is still resolving."}):null]}),s.jsxs("div",{className:"pi-sessionSignalCol",children:[s.jsxs("div",{className:"pi-sessionSignalHead",children:[s.jsx("span",{children:"Recent threads"}),s.jsx("b",{children:w(n.length)})]}),n.length>0?s.jsx("div",{className:"pi-sessionThreadList",children:n.map(a=>s.jsxs("button",{type:"button",className:"pi-sessionThreadRow",onClick:()=>r(Ne(a.thread,o)),children:[s.jsx("span",{className:"pi-sessionThreadTitle",title:a.title,children:a.title}),s.jsxs("span",{className:"pi-sessionThreadMeta",children:[s.jsx("b",{children:a.channel}),s.jsx("em",{children:a.state}),s.jsx("small",{children:a.time})]}),s.jsxs("span",{className:"pi-sessionThreadWhy",children:[a.participants," · ",a.why]})]},a.thread.id))}):s.jsx("span",{className:"pi-sessionSignalEmpty",children:"No recent agent threads."})]})]})}function ne(e){return!e||e==="—"||/^\d+\s+branches$/iu.test(e)?null:e}function Re(e,t,i,n){const o=new Map,r=(l,c)=>{const g=l??e,x=ne(c),N=g??"project",S=o.get(N);if(S)return!S.branch&&x&&(S.branch=x),S;const j={key:N,root:g,branch:x,sessions:0,work:0,moving:0,lastActivityAt:0,repoWatch:null};return o.set(N,j),j};for(const l of t){const c=r(l.root,l.branch);l.working&&(c.moving+=1),c.lastActivityAt=Math.max(c.lastActivityAt,l.lastActivityAt)}const a=(l,c)=>{const g=l??e,x=o.get(g??"project");return x||(t.length>0?o.get(e??"")??o.values().next().value:r(l,c))};for(const l of i){const c=a(l.workspaceRoot??l.projectRoot,l.branch);c.sessions+=1,l.working&&(c.moving+=1,c.branch=ne(l.branch)??c.branch),c.lastActivityAt=Math.max(c.lastActivityAt,l.lastActivityAt)}for(const l of n){const c=a(l.workspaceRoot??l.projectRoot,l.branch);c.work+=1,l.working&&(c.moving+=1,c.branch=ne(l.branch)??c.branch),c.lastActivityAt=Math.max(c.lastActivityAt,l.lastActivityAt)}return o.size===0&&r(e,null),[...o.values()].sort((l,c)=>c.moving-l.moving||c.lastActivityAt-l.lastActivityAt||(l.root??"").localeCompare(c.root??""))}function Zs(e){return e.worktrees.map(t=>({key:t.id,root:t.path,branch:t.branch.name,sessions:t.sessions.length,work:t.agents.length,moving:t.agents.some(Be)?1:0,lastActivityAt:t.lastCommitAt??0,repoWatch:t}))}function Qs({pullRequests:e,loading:t,warnings:i,onRefresh:n,nowMs:o}){return s.jsxs("section",{className:"pi-projectPullRequests","aria-label":"Open pull requests",children:[s.jsxs("div",{className:"pi-projectPullRequestsHead",children:[s.jsx("span",{children:"Open PRs"}),s.jsx("b",{children:t&&e.length===0?"…":w(e.length)})]}),e.length>0?s.jsx("div",{className:"pi-projectPullRequestList",children:e.slice(0,6).map(r=>{const a=r.updatedAt?Date.parse(r.updatedAt):Number.NaN;return s.jsxs("a",{className:"pi-projectPullRequest",href:r.url,target:"_blank",rel:"noreferrer",children:[s.jsxs("span",{className:"pi-projectPullRequestNumber",children:["#",r.number]}),s.jsx("b",{title:r.title,children:r.title}),s.jsxs("span",{className:"pi-projectPullRequestBranch",title:`${r.headRefName} → ${r.baseRefName}`,children:[r.headRefName," → ",r.baseRefName]}),s.jsx("em",{children:r.isDraft?"draft":"open"}),s.jsx("time",{children:Number.isFinite(a)?q(a,o):"updated"})]},r.id)})}):s.jsxs("div",{className:"pi-projectPullRequestState","data-loading":t||void 0,children:[s.jsx("span",{children:t?"Checking GitHub for open pull requests…":i[0]??"No open pull requests for this repository."}),!t&&i.length>0?s.jsx("button",{type:"button",onClick:n,children:"Retry"}):null]})]})}function Ys(e){const t=new Set;let i=0,n=0;const o=[];for(const r of e.layers){r.files.length>0&&o.push(r.kind);for(const a of r.files)t.add(a.newPath??a.oldPath??"unknown"),i+=a.additions??0,n+=a.deletions??0}return{additions:i,deletions:n,files:[...t],layers:o}}function et({additions:e,deletions:t}){return e+t===0?s.jsx("span",{className:"pi-projectWorktreeChurnBar","data-empty":!0}):s.jsxs("span",{className:"pi-projectWorktreeChurnBar","aria-label":`${e} additions and ${t} deletions`,children:[e>0?s.jsx("i",{"data-add":!0,style:{flexGrow:e}}):null,t>0?s.jsx("i",{"data-delete":!0,style:{flexGrow:t}}):null]})}function st({project:e,repoProject:t,repoLoading:i,repoError:n,diffSnapshots:o,diffErrors:r,diffLoading:a,pullRequests:l,pullRequestsLoading:c,pullRequestWarnings:g,onRepositoryRefresh:x,threads:N,sessions:S,route:j,navigate:T,nowMs:M}){const y=e?.root??S[0]?.projectRoot??N[0]?.projectRoot??null,F=N.length,O=e?.sessionCount??S.length,$=e?.agentCount??0,E=Math.max(e?.lastActivityAt??0,S[0]?.lastActivityAt??0,N[0]?.lastActivityAt??0),L=e?.branches.length?e.branches:[...new Set([...S.map(d=>d.branch),...N.map(d=>d.branch)].filter(d=>!!d&&d!=="—"&&d!=="main"))],C=t?.worktrees.length?Zs(t):Re(y,e?.worktrees??[],S,N),k=C.find(d=>d.moving>0&&d.branch)?.branch??C.find(d=>d.branch)?.branch??L[0]??"main",b=y?Z(y):e?.title??j.projectSlug??"project",h=C.find(d=>d.moving>0)?.key??C.find(d=>d.branch===k)?.key??C[0]?.key;return s.jsxs("main",{className:"pi-projectOverview","aria-label":"Project overview",children:[s.jsxs("section",{className:"pi-projectSnapshot","aria-label":"Project snapshot",children:[s.jsxs("div",{className:"pi-projectRepository",children:[s.jsxs("div",{className:"pi-projectRepositoryHead",children:[s.jsx("span",{children:"Repository"}),s.jsx(os,{size:13,strokeWidth:1.7,"aria-hidden":!0})]}),s.jsxs("div",{className:"pi-projectRepositoryIdentity",children:[s.jsx("b",{children:b}),s.jsx("span",{title:y??void 0,children:y?_(y):j.projectSlug??"project"})]}),s.jsxs("div",{className:"pi-projectRepositoryCurrent",children:[C.some(d=>d.moving>0)?s.jsx("span",{className:"pi-projectRepositoryPulse","aria-label":"Active now"}):null,s.jsxs("span",{children:[s.jsx("small",{children:"Current branch"}),s.jsx("b",{title:k,children:k})]}),s.jsx("time",{children:E?q(E,M):"no activity"})]}),O>0||$>0||F>0?s.jsxs("div",{className:"pi-projectRepositoryStats","aria-label":"Repository activity",children:[O>0?s.jsxs("span",{children:[s.jsx("b",{children:w(O)})," sessions"]}):null,$>0?s.jsxs("span",{children:[s.jsx("b",{children:w($)})," agents"]}):null,F>0?s.jsxs("span",{children:[s.jsx("b",{children:w(F)})," threads"]}):null]}):null]}),s.jsxs("div",{className:"pi-projectWorktrees",children:[s.jsxs("div",{className:"pi-projectWorktreesHead",children:[s.jsx("span",{children:"Worktree preview"}),s.jsx("b",{children:w(C.length)})]}),s.jsx("div",{className:"pi-projectWorktreeList",children:C.slice(0,6).map(d=>{const m=d.repoWatch,A=d.root?o.get(d.root)??null:null,f=A?Ys(A):null,v=m?ve(m):null,P=f?.additions??v?.add??0,D=f?.deletions??v?.del??0,u=f?.files.length??(m?Math.max(m.status.changedFiles,v?.files??0):0),I=!!(u>0||m&&(!m.status.clean||m.branch.ahead>0||m.branch.behind>0)),B=l.filter(R=>R.headRefName===d.branch),W=!!(d.root&&a&&!A&&!r.has(d.root)),H=d.root?r.get(d.root)??null:"No worktree path is available.";return s.jsxs("article",{className:"pi-projectWorktree","data-active":d.key===h||void 0,"data-stranded":I||void 0,children:[s.jsx("span",{className:"pi-projectWorktreeTop",children:s.jsx("b",{title:d.branch??"main",children:d.branch??"main"})}),s.jsx("em",{title:d.root??void 0,children:d.root?_(d.root):"workspace"}),A||m?s.jsxs("div",{className:"pi-projectWorktreeDiff","data-clean":!I||void 0,children:[I?s.jsxs(s.Fragment,{children:[s.jsxs("span",{className:"pi-projectWorktreeChurn",children:[s.jsxs("b",{className:"pi-projectWorktreeAdd",children:["+",w(P)]}),s.jsxs("b",{className:"pi-projectWorktreeDel",children:["−",w(D)]}),s.jsx(et,{additions:P,deletions:D})]}),s.jsxs("small",{children:[w(u)," changed"]})]}):s.jsx("small",{children:"clean"}),d.root?s.jsx("button",{type:"button",className:"pi-projectWorktreeOpenDiff",onClick:()=>T({view:"repo-diff",path:d.root}),children:"View diff"}):null]}):s.jsxs("div",{className:"pi-projectWorktreeDiff","data-pending":!0,children:[s.jsx("small",{children:W||i?"Reading worktree diff…":H??n??"No diff data returned."}),!W&&!i?s.jsx("button",{type:"button",className:"pi-projectWorktreeOpenDiff",onClick:x,children:"Retry"}):null]}),f&&f.files.length>0?s.jsxs("span",{className:"pi-projectWorktreeFiles",title:f.files.join(`
|
|
2
|
-
`),children:[f.files.slice(0,2).map(R=>Z(R)).join(" · "),f.files.length>2?` · +${f.files.length-2} more`:""]}):null,s.jsx("span",{className:"pi-projectWorktreeMeta",children:m?s.jsxs(s.Fragment,{children:[s.jsx("small",{children:m.branch.ahead>0||m.branch.behind>0?`${m.branch.ahead}↑ ${m.branch.behind}↓`:"synced"}),m.status.staged>0?s.jsxs("small",{children:[w(m.status.staged)," staged"]}):null,m.status.unstaged>0?s.jsxs("small",{children:[w(m.status.unstaged)," unstaged"]}):null,m.status.untracked>0?s.jsxs("small",{children:[w(m.status.untracked)," untracked"]}):null,m.status.conflicts>0?s.jsxs("small",{children:[w(m.status.conflicts)," conflicts"]}):null,f?.layers.map(R=>s.jsx("small",{children:R},R)),B.length>0?s.jsxs("small",{children:[B.length," PR",B.length===1?"":"s"]}):null]}):s.jsxs(s.Fragment,{children:[s.jsx("small",{children:d.lastActivityAt?q(d.lastActivityAt,M):"idle"}),s.jsxs("small",{children:[w(d.sessions)," sessions"]}),s.jsxs("small",{children:[w(d.work)," threads"]})]})})]},d.key)})}),C.length>6?s.jsxs("div",{className:"pi-projectWorktreeMore",children:["+",C.length-6," more worktrees"]}):null]})]}),s.jsx(Qs,{pullRequests:l,loading:c,warnings:g,onRefresh:x,nowMs:M})]})}const tt=8,nt=6,it=3e4,at=15e3;function ot(){const[e,t]=p.useState(()=>ie()),[i,n]=p.useState(()=>ie()===null);return p.useEffect(()=>{let o=!1,r=!1;const a=async()=>{if(!r){r=!0;try{const g=await ae("standard",!1,at);o||(t(g),n(!1))}catch{o||n(!1)}finally{r=!1}}};a();const l=window.setInterval(()=>{document.visibilityState==="visible"&&a()},it),c=ee(()=>{a()});return()=>{o=!0,window.clearInterval(l),c()}},[]),{snapshot:e,loading:i}}function rt(e){if(!e)return[];const t=[];for(const i of e.projects)for(const n of i.worktrees)n.status.changedFiles<=0&&n.branch.ahead<=0||t.push({projectName:i.name,projectRoot:i.root,worktree:n});return t.sort((i,n)=>n.worktree.status.changedFiles-i.worktree.status.changedFiles||(n.worktree.lastCommitAt??0)-(i.worktree.lastCommitAt??0)||i.projectName.localeCompare(n.projectName))}function lt({model:e,route:t,navigate:i,nowMs:n}){const[o,r]=p.useState(!1),a=t.machineId?{machineId:t.machineId}:{},l=t.showEphemeral?{showEphemeral:!0}:{},c=p.useMemo(()=>[...e.projects].sort((j,T)=>T.lastActivityAt-j.lastActivityAt||j.title.localeCompare(T.title)).slice(0,tt),[e.projects]),{snapshot:g,loading:x}=ot(),N=p.useMemo(()=>rt(g).slice(0,nt),[g]),S=j=>i({view:"agents-v2",projectSlug:j.slug,...a,...l});return s.jsxs("main",{className:"pi-meta","aria-label":"Projects overview",children:[s.jsxs("div",{className:"pi-metaShortcuts",children:[s.jsxs("button",{type:"button",className:"pi-shortcut","aria-expanded":o,onClick:()=>r(j=>!j),children:[s.jsx(we,{size:13,strokeWidth:1.8,"aria-hidden":!0}),"Add project"]}),s.jsxs("button",{type:"button",className:"pi-shortcut",onClick:()=>i({view:"search"}),children:[s.jsx(ke,{size:13,strokeWidth:1.8,"aria-hidden":!0}),"Search agents & sessions"]}),s.jsx("button",{type:"button",className:"pi-shortcut",onClick:()=>i({view:"sessions",...a}),children:"Browse sessions"})]}),o?s.jsx(Xe,{onClose:()=>r(!1)}):null,s.jsxs("section",{className:"pi-metaSection","aria-label":"Recent projects",children:[s.jsxs("div",{className:"pi-sectionHead",children:[s.jsx("span",{className:"pi-sectionLabel",children:"Recent projects"}),s.jsx("span",{className:"pi-sectionCount",children:e.projects.length})]}),c.map(j=>s.jsx(ct,{project:j,nowMs:n,onOpen:()=>S(j)},j.slug))]}),s.jsxs("section",{className:"pi-metaSection","aria-label":"Active diffs",children:[s.jsxs("div",{className:"pi-sectionHead",children:[s.jsx("span",{className:"pi-sectionLabel",children:"Active diffs"}),s.jsx("span",{className:"pi-sectionCount",children:N.length})]}),N.length>0?N.map(j=>s.jsx(dt,{diff:j,machineScope:a,navigate:i},j.worktree.id)):s.jsx("div",{className:"pi-metaEmpty",children:x?"Reading repositories…":"No uncommitted changes across your repos."})]})]})}function ct({project:e,nowMs:t,onOpen:i}){const n=e.needs>0,o=Math.max(e.liveSessionCount,e.working);return s.jsxs("button",{type:"button",className:"pi-recentRow","data-state":n?"needs":o>0?"live":void 0,onClick:i,children:[s.jsx("span",{className:"pi-recentDot","aria-hidden":!0}),s.jsxs("span",{className:"pi-recentMain",children:[s.jsxs("span",{className:"pi-recentTitle",children:["/",e.title]}),s.jsx("span",{className:"pi-recentRoot",children:e.root?_(e.root):"Discovered project"})]}),s.jsxs("span",{className:"pi-recentMeta",children:[n?s.jsxs("b",{children:[e.needs," needs you"]}):null,o>0?s.jsxs("span",{children:[o," live"]}):null,s.jsx("time",{children:e.lastActivityAt?q(e.lastActivityAt,t):"—"})]})]})}function dt({diff:e,machineScope:t,navigate:i}){const n=ve(e.worktree);return s.jsxs("div",{className:"pi-diffRow",children:[s.jsxs("button",{type:"button",className:"pi-diffMain",title:e.worktree.path,onClick:()=>i({view:"repos",root:e.projectRoot,...t}),children:[s.jsxs("span",{className:"pi-diffProject",children:["/",e.projectName]}),s.jsx("span",{className:"pi-diffBranch",children:e.worktree.branch.name??"main"})]}),s.jsxs("span",{className:"pi-diffChurn",children:[s.jsxs("b",{className:"pi-projectWorktreeAdd",children:["+",w(n.add)]}),s.jsxs("b",{className:"pi-projectWorktreeDel",children:["−",w(n.del)]}),s.jsxs("small",{children:[w(e.worktree.status.changedFiles)," changed"]})]}),s.jsx("button",{type:"button",className:"pi-projectWorktreeOpenDiff",onClick:()=>i({view:"repo-diff",path:e.worktree.path}),children:"View diff"})]})}function ut({project:e,threads:t,sessions:i,route:n,navigate:o,nowMs:r}){const a=e?.root??i[0]?.projectRoot??t[0]?.projectRoot??null,l=p.useMemo(()=>Re(a,e?.worktrees??[],i,t).map(g=>g.root).filter(g=>!!g),[e?.worktrees,a,i,t]),c=vs(a,l);return s.jsx(st,{project:e,repoProject:c.project,repoLoading:c.repoLoading,repoError:c.repoError,diffSnapshots:c.diffSnapshots,diffErrors:c.diffErrors,diffLoading:c.diffLoading,pullRequests:c.pullRequests,pullRequestsLoading:c.pullRequestsLoading,pullRequestWarnings:c.pullRequestWarnings,onRepositoryRefresh:c.refresh,threads:t,sessions:i,route:n,navigate:o,nowMs:r})}function Un({route:e,navigate:t,zeroPreview:i=!1}){const{model:n,nowMs:o,loading:r,error:a}=Ze(e),l=!!e.projectSlug,c=l&&!xe(e.sessionId)?e.sessionId??null:null,g=p.useMemo(()=>c?Ws(n.sessions,e):null,[n.sessions,e,c]),x=l?e.indexView==="agents"?"agents":e.indexView==="sessions"?"sessions":"overview":"overview",N=l?n.projects.find(k=>k.slug===e.projectSlug)??null:null,S=p.useMemo(()=>{if(i)return[];if(!l)return[];const k=e.projectSlug,b=Y(n.threads,k),h=le(n.sessions,k);return x==="overview"?[]:x==="agents"?b.filter(d=>d.kind==="agent"):h.length>0?h:b},[n.sessions,n.threads,x,e.projectSlug,l,i]),j=p.useMemo(()=>Qe(S),[S]),T=p.useMemo(()=>j.flatMap(k=>k.items),[j]),M=n.projects.length>0||n.threads.length>0||n.sessions.length>0,y=r&&!M,F=r&&!i,O=!l&&!F&&(i||n.projects.length===0&&S.length===0),$=!l&&!O,[E,L]=p.useState(-1),C=p.useRef(new Map);return p.useEffect(()=>{!l||!e.sessionId||!xe(e.sessionId)||t({...e,indexView:"sessions",sessionId:void 0,selectedAgentId:void 0})},[t,e,l]),p.useEffect(()=>{L(-1)},[e.projectSlug]),p.useEffect(()=>{function k(b){const h=document.activeElement;if(!!h&&(h.tagName==="INPUT"||h.tagName==="TEXTAREA"||h.isContentEditable))return;const m=T.length;if(m){if(b.key==="ArrowDown"||b.key==="j")b.preventDefault(),L(A=>A<0?0:Math.min(m-1,A+1));else if(b.key==="ArrowUp"||b.key==="k")b.preventDefault(),L(A=>A<0?0:Math.max(0,A-1));else if(b.key==="Enter"){const A=T[E<0?0:E];A&&(b.preventDefault(),t(A.kind==="session"?ce(A,e):de(A,e)))}}}return document.addEventListener("keydown",k),()=>document.removeEventListener("keydown",k)},[E,T,t,e]),p.useEffect(()=>{if(E<0)return;const k=T[E];k&&C.current.get(k.id)?.scrollIntoView({block:"nearest"})},[E,T]),s.jsxs("div",{className:"s-pi s-pi-inbox","aria-busy":r||void 0,"data-loading":r||void 0,children:[l?s.jsx(Ss,{route:e,navigate:t,slug:e.projectSlug,model:n,mode:x,repoProject:null}):s.jsx("div",{className:"pi-inboxHead",children:s.jsxs("div",{className:"pi-inboxHeading",children:[s.jsx("h1",{className:"pi-inboxTitle",children:"Projects"}),s.jsx("span",{className:"pi-inboxDigest",children:Cs(n,i)})]})}),c?s.jsx(Ds,{session:g,sessionRef:c,threads:Y(n.threads,e.projectSlug),route:e,navigate:t,nowMs:o}):l&&x==="overview"?s.jsx(ut,{project:N,threads:Y(n.threads,e.projectSlug),sessions:le(n.sessions,e.projectSlug),route:e,navigate:t,nowMs:o}):$?s.jsx(lt,{model:n,route:e,navigate:t,nowMs:o}):s.jsxs("div",{className:"pi-threads",children:[y?s.jsx(ks,{}):null,!y&&j.map(k=>{let b=0;for(const h of j){if(h.group===k.group)break;b+=h.items.length}return s.jsxs("div",{children:[s.jsxs("div",{className:"pi-sectionHead","data-tone":k.group,children:[s.jsx("span",{className:"pi-sectionLabel",children:k.label}),s.jsx("span",{className:"pi-sectionCount",children:k.items.length})]}),k.items.map((h,d)=>{const m=b+d;return s.jsx(Ns,{thread:h,crossProject:!l,selected:h.kind==="session"?es(h,e):ss(h,e),cursor:E===m,nowMs:o,onSelect:()=>{const A=h.kind==="session"?Ye(h,e):Ne(h,e);t(A)},onOpen:()=>t(h.kind==="session"?ce(h,e):de(h,e)),rowRef:A=>{A?C.current.set(h.id,A):C.current.delete(h.id)}},h.id)})]},k.group)}),!y&&S.length===0?a&&!M?s.jsx(he,{tone:"error",title:"Projects unavailable",detail:a}):O?s.jsx("div",{className:"pi-empty",children:s.jsx(As,{route:e,navigate:t,projects:n.projects})}):F?s.jsx("div",{className:"pi-empty",children:"Loading…"}):s.jsx(he,{title:pt(l,x)}):null]})]})}function pt(e,t){return e&&t==="agents"?"No visible agents in this project.":e?"No sessions in this project yet.":"No projects yet."}export{Un as ProjectsInbox,Ns as ThreadRow};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as i}from"./index-DMiGbrBt.js";import{u as e}from"./Provider-C7UKGHQy.js";import{d as s}from"./types-B0PlfpKc.js";import{ProjectsInbox as c}from"./ProjectsInbox-GhVMxOhw.js";import{P as a}from"./ProjectsRail-BgiuV4LR.js";import{ProjectAgentProfile as n}from"./ProjectAgentProfile-DJusrAV-.js";import{i as l}from"./model-CpAxGuis.js";/* empty css */import"./projects-inbox-CHyUFQ6w.js";import"./router-Bq5dwf78.js";import"./terminal-sessions-D5CIR2OL.js";import"./api-h5zurxmi.js";import"./sse-CjIkKo46.js";import"./index-BWHgHrtv.js";import"./surface-activity-B1rgWB1i.js";import"./colors-BtO5_zlx.js";import"./scoutbot-BTIErYHo.js";import"./ContextMenu-bARZqTzD.js";import"./DocumentFocusViewer-BeVwwl26.js";import"./createLucideIcon-OpA4Amw5.js";import"./TextDocumentSurface-BpAw4eQS.js";/* empty css */import"./file-text-BODxCjcz.js";import"./x-D3GElQbe.js";import"./chevron-right-XiIHsk4m.js";import"./code-xml-B6jOCM4V.js";import"./arrow-left-DEZzHiPS.js";import"./scout-voice-CU5c0LGi.js";import"./fx-z37u1o2z.js";import"./keyboard-nav-2kv_tGUS.js";import"./MessageComposerSuggestions-DpxN9WiB.js";import"./NewChatComposer-Cs6OsxK6.js";import"./runtime-picker-Bcl5iIX5.js";import"./voice-levels-Dcr3jglk.js";import"./loader-circle-CbHjZsz1.js";import"./index-CJXzfjo9.js";import"./HarnessMark-Cbv3Ib0c.js";import"./conversation-model-B47vYmWN.js";import"./time-DltNTpLl.js";import"./NewChatOrigin-Bk2OyVjI.js";import"./agent-chat-Bfjd9y6c.js";import"./model-Co0zkMIc.js";import"./text-DsBWV_4k.js";import"./chevron-down-BGk5qoEw.js";import"./search-CWfZtOt2.js";import"./AgentAvatar-D90c1Rzk.js";import"./SpriteAvatar-DyaGuhik.js";import"./api-BkjHJfgJ.js";import"./ui-LM8pS8qE.js";import"./openContent-C6XO6kr5.js";import"./SessionRefScreen-DRgJu7Jo.js";import"./tail-events-D19uAGe3.js";import"./BackToPicker-BRvfostO.js";import"./ConversationScreen-BDRhx-RU.js";import"./ConversationComposer-Bla3DDvM.js";import"./message-markup-3J9pi3nx.js";import"./mentions-jSuTGeet.js";import"./AgentDetailCard-BcRBRp88.js";import"./AgentLiveActions-DBtnD0qE.js";import"./terminal-takeover-B8UeD9OX.js";import"./eye-0PvebX_a.js";import"./terminal-B9AOZQKR.js";import"./message-visibility-kJM8XcSG.js";import"./sessionRead-CvFz2RHv.js";import"./clipboard-e3fSpeo7.js";/* empty css */import"./ConversationHeader-DE3FC0m-.js";import"./ConversationFeedRows-B_gPxcqA.js";import"./ConversationPanels-DLek4H6A.js";import"./use-reduced-motion-RRBkmVkk.js";import"./activity-CA8qS6PI.js";import"./message-circle-CG-96zts.js";import"./tail-display-BdyoLvzY.js";import"./lane-edit-display-C_Aujldz.js";import"./ConversationStatus-BwVLiiO4.js";import"./conversation-icons-IIG5ha6D.js";import"./SessionObserve-yfXFafp8.js";import"./bash-format-BRV5C6Gv.js";import"./lane-tool-detail-0WhMf4Vj.js";import"./LaneToolHoverCard-Bla0gBdm.js";import"./lane-observe-D0rfKDnU.js";import"./lane-ask-display-B6iCAVcd.js";import"./ObservedTopologyPanel-DyUeV98H.js";import"./ObserveTextFlow-rsFj_rVo.js";import"./wrench-Bkc_0lKF.js";import"./external-link-CXBytO9o.js";/* empty css */import"./AddProjectForm-DMnobKch.js";import"./project-overview-helpers-BQTc_Ous.js";import"./cache-Dr0why2k.js";import"./arrow-up-right-ClxBnsi7.js";import"./AgentsSubnav-DIEO4NPx.js";import"./SecondaryNav-B3-nh5dM.js";import"./secondaryNavConfig-DqUIp0Es.js";import"./message-square-DSaGpjFU.js";import"./scroll-text-D6Pdnar7.js";import"./profile-CVRziEDA.js";import"./context-budget-CbB4BDcO.js";import"./session-catalog-BmoyVTJ_.js";import"./terminal-relay-CWbJ1RCW.js";/* empty css */import"./AgentDefinitionsWorkspace-CUpUrY57.js";import"./FileViewerPane-CLgUhSm4.js";import"./agent-essentials-BSY1o46q.js";/* empty css *//* empty css */import"./ProjectAgentProfileBar-CtTpj6fU.js";import"./agents-project-model-UYiamtrU.js";function f({route:o,navigate:r}){const t=l(o),m=t?`profile:${o.agentId}`:"index",p=!t&&j();return i.jsx("div",{className:"s-av2","data-view":t?"profile":"index",children:i.jsx("div",{className:"av2-stagePane",children:t?i.jsx(n,{route:o,navigate:r}):i.jsx(c,{route:o,navigate:r,zeroPreview:p})},m)})}function ur({navigate:o}){const{route:r}=e(),t=r.view==="agents-v2"?r:{view:"agents-v2"};return i.jsxs("div",{className:"pi-projectsEmbedShell",children:[i.jsx(a,{route:t,navigate:o}),i.jsx(f,{route:t,navigate:o})]})}const wr=s({id:"projects",label:"Projects",route:{view:"agents-v2"},webPath:"/projects",screen:"ProjectsEmbedScreen",embed:{path:"/embed/projects",profile:"macos.projects",rootClassName:"s-projects-embed",chrome:{showSecondaryNav:!1,showPageStatusBar:!1},hosts:{macos:!0}}});function j(){if(typeof window>"u")return!1;const o=window.location.hostname.toLowerCase();if(o!=="localhost"&&o!=="127.0.0.1"&&o!=="::1")return!1;const r=new URLSearchParams(window.location.search).get("zero")?.trim().toLowerCase();return r==="projects"||r==="project"||r==="1"||r==="true"}export{ur as ProjectsEmbedScreen,f as ProjectsScreen,wr as scoutSurface};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as s}from"./index-DMiGbrBt.js";import{A as R}from"./AgentAvatar-D90c1Rzk.js";import{H as O}from"./HarnessMark-Cbv3Ib0c.js";import{t as P}from"./time-DltNTpLl.js";import{s as y}from"./project-overview-helpers-BQTc_Ous.js";import{u as H,t as T,a as B,s as C}from"./projects-inbox-CHyUFQ6w.js";import{A as g}from"./arrow-up-right-ClxBnsi7.js";import"./SpriteAvatar-DyaGuhik.js";import"./colors-BtO5_zlx.js";import"./api-h5zurxmi.js";import"./router-Bq5dwf78.js";import"./terminal-sessions-D5CIR2OL.js";import"./sse-CjIkKo46.js";import"./index-BWHgHrtv.js";import"./surface-activity-B1rgWB1i.js";import"./Provider-C7UKGHQy.js";import"./scoutbot-BTIErYHo.js";import"./ContextMenu-bARZqTzD.js";import"./DocumentFocusViewer-BeVwwl26.js";import"./createLucideIcon-OpA4Amw5.js";import"./TextDocumentSurface-BpAw4eQS.js";/* empty css */import"./file-text-BODxCjcz.js";import"./x-D3GElQbe.js";import"./chevron-right-XiIHsk4m.js";import"./code-xml-B6jOCM4V.js";import"./arrow-left-DEZzHiPS.js";import"./scout-voice-CU5c0LGi.js";import"./fx-z37u1o2z.js";import"./keyboard-nav-2kv_tGUS.js";import"./MessageComposerSuggestions-DpxN9WiB.js";import"./NewChatComposer-Cs6OsxK6.js";import"./runtime-picker-Bcl5iIX5.js";import"./voice-levels-Dcr3jglk.js";import"./loader-circle-CbHjZsz1.js";import"./index-CJXzfjo9.js";import"./conversation-model-B47vYmWN.js";import"./NewChatOrigin-Bk2OyVjI.js";import"./agent-chat-Bfjd9y6c.js";import"./model-Co0zkMIc.js";import"./text-DsBWV_4k.js";import"./chevron-down-BGk5qoEw.js";import"./search-CWfZtOt2.js";import"./agents-project-model-UYiamtrU.js";import"./model-CpAxGuis.js";function L(i,r,t){if(t.sessionId){const d=r.find(a=>a.sessionId===t.sessionId||a.conversationId===t.sessionId||a.id===t.sessionId);if(d)return{kind:"session",session:d};const o=i.find(a=>a.kind==="native"&&a.sessionId===t.sessionId)??null;if(o)return{kind:"thread",thread:o}}if(t.selectedAgentId){const d=i.find(a=>a.agentId===t.selectedAgentId)??null;if(d)return{kind:"thread",thread:d};const o=r.find(a=>!a.sessionId&&a.agentId===t.selectedAgentId)??null;if(o)return{kind:"session",session:o}}return null}function p({label:i,value:r}){return s.jsxs("span",{className:"pi-stat",children:[s.jsx("span",{className:"pi-statLabel",children:i}),s.jsx("span",{className:"pi-statValue",children:r})]})}function Rs({route:i,navigate:r}){const{model:t,nowMs:d,loading:o,error:a}=H(i);if(!i.sessionId&&!i.selectedAgentId)return null;const l=L(t.threads,t.sessions,i);if(!l)return s.jsxs("div",{className:"s-pi s-pi-aside",children:[s.jsx("header",{className:"pi-asideHead",children:s.jsxs("div",{className:"pi-asideIdent",children:[s.jsx("div",{className:"pi-asideTop",children:s.jsx("span",{className:"pi-asideName",children:o?"Resolving selection":a?"Project data unavailable":"Selection unavailable"})}),s.jsx("div",{className:"pi-asideSub",children:s.jsxs("span",{className:"pi-asideStatus","data-tone":o?"working":"recent",children:[o?s.jsx("span",{className:"pi-asidePulse","aria-hidden":!0}):null,o?"loading":"idle"]})})]})}),s.jsx("div",{className:"pi-asideBody",children:s.jsx("p",{className:"pi-asideMuted",children:a??"The selected item is not in the current project snapshot."})})]});const n=l.kind==="thread"?l.thread:null,e=l.kind==="session"?l.session:null,m=n?.agentName??e?.agentName??"Session",h=n?.harness??e?.harness??"session",I=n?.projectTitle??e?.projectTitle??i.projectSlug??"project",x=n?.branch??e?.branch??null,c=n?.working??e?.working??!1,f=n?.needs?"needs":c?"working":"recent",b=n?.needs?"your turn":c?"working":e?"selected":"idle",k=n?.work??e?.work??"No session detail available.",v=n?.lastActivityAt??e?.lastActivityAt??0,j=e?.sessionId??n?.sessionId??null,u=n?.projectRoot??e?.projectRoot??null,N=n?T(n,i):null,w=n?B(n,i):e?C(e,i):i,A=e?e.route?.view==="conversation"?"Open conversation":e.route?.view==="sessions"?"Open session":e.agentId?"Open agent":"Open project":n?.kind==="native"?"Open session":n?.conversationId?"Open conversation":"Open agent",S={view:"agents-v2",...i.projectSlug?{projectSlug:i.projectSlug}:{},...i.indexView?{indexView:i.indexView}:{},...i.machineId?{machineId:i.machineId}:{},...i.showEphemeral?{showEphemeral:!0}:{}};return s.jsxs("div",{className:"s-pi s-pi-aside",children:[s.jsxs("header",{className:"pi-asideHead",children:[s.jsx("span",{className:"pi-asideAvatar",children:s.jsx(R,{agent:{name:m,harness:h,state:c?"in_turn":null},placement:"row",size:38})}),s.jsxs("div",{className:"pi-asideIdent",children:[s.jsxs("div",{className:"pi-asideTop",children:[s.jsx("span",{className:"pi-asideName",title:m,children:m}),s.jsx("span",{className:"pi-asideHmark","aria-hidden":!0,children:s.jsx(O,{harness:h,size:13})}),s.jsxs("span",{className:"pi-asideProj",children:["/",I]})]}),s.jsxs("div",{className:"pi-asideSub",children:[x?s.jsx("span",{className:"pi-asideBranch",children:x}):null,s.jsxs("span",{className:"pi-asideStatus","data-tone":f,children:[c?s.jsx("span",{className:"pi-asidePulse","aria-hidden":!0}):null,b]})]})]})]}),s.jsxs("div",{className:"pi-asideBody",children:[s.jsx("h2",{className:"pi-asideHeadline",children:k}),s.jsxs("div",{className:"pi-asideReadouts",children:[s.jsx(p,{label:"Last active",value:v?P(v,d):"—"}),s.jsx(p,{label:e?"Session":"Conversations",value:e?"1":String(n?.sessionCount??0)}),s.jsx(p,{label:"Harness",value:h}),n?.contextPct!=null?s.jsx(p,{label:"Context",value:`${n.contextPct}%`}):null]}),e?s.jsxs("div",{className:"pi-asideSection",children:[s.jsx("div",{className:"pi-asideSectionHead",children:"Session context"}),s.jsxs("div",{className:"pi-asideLine",children:[j?s.jsxs("span",{title:j,children:["ref · ",j]}):s.jsx("span",{children:"No stable session reference yet."}),u?s.jsxs("span",{title:u,children:["root · ",y(u)]}):null,e.conversationId?s.jsxs("span",{title:e.conversationId,children:["conversation · ",e.conversationId]}):null]})]}):null,s.jsxs("div",{className:"pi-asideActions",children:[s.jsxs("button",{type:"button",className:"pi-asideBtn pi-asideBtnPrimary",onClick:()=>r(w),children:[A,s.jsx(g,{size:13,strokeWidth:2,"aria-hidden":!0})]}),N?s.jsxs("button",{type:"button",className:"pi-asideBtn",onClick:()=>r(N),children:["Observe",s.jsx(g,{size:13,strokeWidth:2,"aria-hidden":!0})]}):null,s.jsx("button",{type:"button",className:"pi-asideBtn",onClick:()=>r(S),children:"Clear"})]})]})]})}export{Rs as ProjectsThreadAside};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as o,j as c,J as Te,b as tt,K as nt,L as rt,C as ot}from"./index-DMiGbrBt.js";import{u as Pe,b as st,a3 as it}from"./router-Bq5dwf78.js";import{a as $}from"./api-h5zurxmi.js";import{u as at}from"./sse-CjIkKo46.js";import{o as ct,i as Re}from"./surface-activity-B1rgWB1i.js";import{i as lt}from"./colors-BtO5_zlx.js";import{e as Me,s as ut,i as Ie,r as dt,a as ft,f as pt}from"./scoutbot-BTIErYHo.js";import{C as ht}from"./ContextMenu-bARZqTzD.js";import{F as mt,a as vt,D as gt}from"./DocumentFocusViewer-BeVwwl26.js";import{c as Fe,T as Ue}from"./TextDocumentSurface-BpAw4eQS.js";import{C as wt}from"./chevron-right-XiIHsk4m.js";import{F as bt}from"./file-text-BODxCjcz.js";import{c as Be}from"./createLucideIcon-OpA4Amw5.js";import{C as yt}from"./code-xml-B6jOCM4V.js";import{A as St}from"./arrow-left-DEZzHiPS.js";import{h as Ct}from"./scout-voice-CU5c0LGi.js";import{i as Et}from"./keyboard-nav-2kv_tGUS.js";import{d as pe,b as Ne,i as Oe}from"./MessageComposerSuggestions-DpxN9WiB.js";import{n as kt,N as xt}from"./NewChatComposer-Cs6OsxK6.js";function At(e){const t=e instanceof Error?e.message:String(e);return Rt(t)?"Scout server is unreachable":t}function Tt(e){return e==="Scout server is unreachable"}function Rt(e){return/failed to fetch|fetch failed|networkerror|load failed|couldn'?t connect|could not connect|connection refused|econnrefused|server is unreachable/i.test(e)}var It="hudson.theme",Nt="system",Ot="hudson",be=o.createContext(null);function _t(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function qe(){if(typeof window>"u")return{};try{const e=new URLSearchParams(window.location.search),t=e.get("theme"),n=e.get("template");return{theme:t==="light"||t==="dark"||t==="system"?t:void 0,template:n&&/^[a-z][a-z0-9-]{1,64}$/.test(n)?n:void 0}}catch{return{}}}function Lt(){const e=qe();return!!(e.theme||e.template)}function ve(e,t,n){if(typeof window>"u")return{theme:t,template:n};const r=qe();try{const s=JSON.parse(window.localStorage.getItem(e)||"{}");return{theme:r.theme??s.theme??t,template:r.template??s.template??n}}catch{return{theme:r.theme??t,template:r.template??n}}}var jt=()=>()=>{},Dt=()=>!0,Pt=()=>!1;function Mt(){return o.useSyncExternalStore(jt,Dt,Pt)}function Ft(e){return e==="system"?typeof window<"u"?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":"dark":e}function Ut(e){return e==="system"?"dark":e}function Bt(e,t,n){const r=n??document.documentElement;r.dataset.hudsonTheme=e,r.dataset.hudsonTemplate=t}function qt(e,t,n){if(!Lt())try{const r=JSON.parse(window.localStorage.getItem(e)||"{}"),s=_t(r)?{...r,theme:t,template:n}:{theme:t,template:n};window.localStorage.setItem(e,JSON.stringify(s))}catch{}}function xr({children:e,defaultTheme:t=Nt,defaultTemplate:n=Ot,storageKey:r=It,rootElement:s}){const i=o.useContext(be),[a,u]=o.useState(t),[h,E]=o.useState(n),[m,R]=o.useState(()=>Ut(t)),[A,L]=o.useState(!1),f=Mt();o.useEffect(()=>{if(i)return;let p=!1;return queueMicrotask(()=>{if(p)return;const T=ve(r,t,n);u(T.theme??t),E(T.template??n),L(!0)}),()=>{p=!0}},[n,t,i,r]),o.useEffect(()=>{if(i)return;const p=window.matchMedia("(prefers-color-scheme: dark)"),T=()=>{R(Ft(a))};return T(),p.addEventListener("change",T),()=>p.removeEventListener("change",T)},[i,a]),o.useEffect(()=>{i||!A||Bt(m,h,s)},[A,i,m,s,h]),o.useEffect(()=>{i||!A||qt(r,a,h)},[A,i,r,h,a]),o.useEffect(()=>{if(i)return;const p=b=>{if(b.key!==r)return;const y=ve(r,t,n);u(y.theme??t),E(y.template??n)},T=b=>{if(b.detail?.key!==r)return;const _=ve(r,t,n);u(_.theme??t),E(_.template??n)};return window.addEventListener("storage",p),window.addEventListener("hudson:saved",T),()=>{window.removeEventListener("storage",p),window.removeEventListener("hudson:saved",T)}},[n,t,i,r]);const v=o.useMemo(()=>({theme:a,resolvedTheme:f?m:void 0,template:h,setTheme:u,setTemplate:E}),[f,m,h,a]);return i?c.jsx(c.Fragment,{children:e}):c.jsx(be.Provider,{value:v,children:e})}function Ht(){return o.useContext(be)}const Vt=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],$t=Be("arrow-right",Vt);const Jt=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],zt=Be("chevron-up",Jt),Gt={id:"audio",canHandle:e=>e.kind==="file"&&e.mediaType.startsWith("audio/"),render:({resource:e})=>{const t=e;return c.jsx("div",{className:"s-file-preview-media-wrap",children:c.jsx("div",{className:"s-file-preview-audio-stage",children:c.jsx("audio",{className:"s-file-preview-audio",src:t.rawUrl,controls:!0})})})}},Wt={id:"binary",canHandle:()=>!0,render:({resource:e})=>{const t=e;return c.jsxs("div",{className:"s-file-preview-callout",children:[c.jsxs("div",{className:"s-file-preview-callout-title",children:[t.previewReason," — open in OS"]}),c.jsxs("div",{className:"s-file-preview-callout-copy",children:["Scout can resolve this file, but it does not have an inline preview for ",t.mediaType," yet."]})]})}},Kt=new Set(["text/typescript","text/javascript","text/css","text/html","application/json","text/yaml","text/toml","text/x-shellscript","text/plain"]),Qt={id:"code",canHandle:e=>e.kind==="file"&&e.previewable&&Kt.has(e.mediaType),render:({resource:e})=>{const t=e,n=Fe({id:t.realPath,title:t.title,uri:t.realPath,mediaType:t.mediaType,value:t.content,filename:t.title,kind:"code",readOnly:!0});return c.jsx(Ue,{document:n,mode:"read",className:"s-doc-focus-document"})}},Yt={id:"directory",canHandle:e=>e.kind==="directory",render:({resource:e,openFilePreview:t})=>{const n=e,r=Xt(n.realPath,n.rootPath);return c.jsxs("div",{className:"s-file-preview-directory",children:[c.jsx("div",{className:"s-file-preview-breadcrumb","aria-label":"Directory breadcrumb",children:r.map((s,i)=>{const a=i===r.length-1;return c.jsxs("div",{className:"s-file-preview-breadcrumb-item",children:[i>0&&c.jsx(wt,{size:12,"aria-hidden":"true"}),a?c.jsx("span",{className:"s-file-preview-breadcrumb-current",children:s.label}):c.jsx("button",{type:"button",className:"s-file-preview-breadcrumb-link",onClick:()=>t(s.path),children:s.label})]},s.path)})}),c.jsxs("div",{className:"s-file-preview-directory-list",role:"list",children:[n.entries.map(s=>c.jsxs("button",{type:"button",className:"s-file-preview-entry",onClick:()=>t(s.path),children:[c.jsx("span",{className:"s-file-preview-entry-icon","aria-hidden":"true",children:s.kind==="directory"?c.jsx(mt,{size:14}):c.jsx(bt,{size:14})}),c.jsx("span",{className:"s-file-preview-entry-name",children:s.name}),c.jsx("span",{className:"s-file-preview-entry-kind",children:s.kind==="directory"?"dir":"file"})]},s.realPath)),n.entries.length===0&&c.jsx("div",{className:"s-file-preview-directory-empty",children:"This directory is empty."})]})]})}};function Xt(e,t){const n=t==="/"?"/":t.replace(/\/+$/u,""),r=e==="/"?"/":e.replace(/\/+$/u,""),s=n.split("/").filter(Boolean),i=r.split("/").filter(Boolean),a=[{label:s[s.length-1]??"/",path:n||"/"}];let u=n||"/";for(let h=s.length;h<i.length;h+=1){const E=i[h];E&&(u=u==="/"?`/${E}`:`${u}/${E}`,a.push({label:E,path:u}))}return a}const Zt={id:"html",canHandle:e=>e.kind==="file"&&e.previewable&&e.mediaType==="text/html",render:({resource:e})=>c.jsx("div",{className:"s-file-preview-html-wrap",children:c.jsx("iframe",{className:"s-file-preview-html-frame",src:e.kind==="file"?e.rawUrl:"",title:e.title,sandbox:"allow-forms allow-popups allow-popups-to-escape-sandbox allow-scripts",referrerPolicy:"no-referrer"})})},en={id:"image",canHandle:e=>e.kind==="file"&&e.mediaType.startsWith("image/"),render:({resource:e})=>c.jsx("div",{className:"s-file-preview-image-wrap",children:c.jsx("div",{className:"s-file-preview-image-stage",children:c.jsx("img",{className:"s-file-preview-image",src:e.kind==="file"?e.rawUrl:"",alt:e.title})})})},tn={id:"markdown",canHandle:e=>e.kind==="file"&&e.previewable&&e.mediaType==="text/markdown",render:({resource:e})=>{const t=e,n=Fe({id:t.realPath,title:t.title,uri:t.realPath,mediaType:t.mediaType,value:t.content,filename:t.title,kind:"markdown",readOnly:!0});return c.jsx(Ue,{document:n,mode:"preview",className:"s-doc-focus-document"})}},nn={id:"video",canHandle:e=>e.kind==="file"&&e.mediaType.startsWith("video/"),render:({resource:e})=>{const t=e;return c.jsx("div",{className:"s-file-preview-media-wrap",children:c.jsx("div",{className:"s-file-preview-media-stage",children:c.jsx("video",{className:"s-file-preview-video",src:t.rawUrl,controls:!0})})})}},rn=[Yt,tn,Zt,Qt,en,nn,Gt,Wt];function on({path:e,onOpenPath:t,onOpenInCode:n,onClose:r}){const[s,i]=o.useState(null),[a,u]=o.useState(null),[h,E]=o.useState(!1),[m,R]=o.useState(null),A=o.useRef(null);o.useEffect(()=>{A.current=m},[m]),o.useEffect(()=>{if(!e){i(null),u(null),E(!1);return}let d=!1;return E(!0),u(null),i(null),$(`/api/file/preview?path=${encodeURIComponent(e)}`).then(g=>{d||(i(g),sn(g,A.current,R))}).catch(g=>{d||u(g instanceof Error?g.message:"could not load file")}).finally(()=>{d||E(!1)}),()=>{d=!0}},[e]);const{currentIndex:L,prevPath:f,nextPath:v}=o.useMemo(()=>{if(!s||s.kind!=="file"||!m)return{currentIndex:-1,prevPath:null,nextPath:null};const d=m.files.findIndex(g=>g.realPath===s.realPath);return d<0?{currentIndex:-1,prevPath:null,nextPath:null}:{currentIndex:d,prevPath:d>0?m.files[d-1].path:null,nextPath:d<m.files.length-1?m.files[d+1].path:null}},[s,m]);if(o.useEffect(()=>{if(!e)return;const d=g=>{if(g.key==="Escape"){r();return}if(g.target instanceof HTMLElement){const k=g.target.tagName;if(k==="INPUT"||k==="TEXTAREA"||g.target.isContentEditable)return}g.metaKey||g.ctrlKey||g.altKey||(g.key==="ArrowLeft"&&f?(g.preventDefault(),t(f)):g.key==="ArrowRight"&&v?(g.preventDefault(),t(v)):g.key==="Backspace"&&m&&s?.kind==="file"&&(g.preventDefault(),t(m.dirPath)))};return window.addEventListener("keydown",d),()=>window.removeEventListener("keydown",d)},[e,r,t,f,v,m,s]),!e)return null;const p=()=>{$("/api/file/reveal",{method:"POST",body:JSON.stringify({path:s?.realPath??e})}).catch(d=>{u(d instanceof Error?d.message:"reveal failed")})},T=s?rn.find(d=>d.canHandle(s))??null:null,b=!!(s&&s.kind==="file"&&m&&L>=0&&m.files.length>1),y=[];b&&m&&y.push({label:`Folder: ${m.dirTitle}`,icon:c.jsx(zt,{size:12}),onClick:()=>t(m.dirPath),title:`Back to ${m.dirTitle} (Backspace)`}),y.push({label:"Open in Code",icon:c.jsx(yt,{size:12}),onClick:()=>{s?.kind==="file"&&n(s.realPath,s.rootPath)},title:"Continue with this file in Scout’s Code browser",disabled:s?.kind!=="file"}),y.push({label:"Show in folder",icon:c.jsx(vt,{size:12}),onClick:p,title:"Show this file in its operating system folder",hideLabel:!0});const _=s?cn(s):[];b&&_.unshift(`${L+1} / ${m.files.length}`);const O=s&&T?T.render({resource:s,openFilePreview:t}):null;return c.jsx(gt,{open:!0,kind:an(s),document:null,title:s?.title??e.split("/").pop()??"File",eyebrow:"File preview",subtitle:s?.realPath??e,meta:_,state:h?"Loading…":null,error:a,body:O?c.jsxs("div",{className:`s-file-preview-shell${b?" s-file-preview-shell-nav":""}`,children:[b&&c.jsx("button",{type:"button",className:"s-file-preview-side-nav s-file-preview-side-nav-left",onClick:()=>f&&t(f),disabled:!f,"aria-label":"Previous file",title:"Previous file (←)",children:c.jsx(St,{size:18,strokeWidth:1.8,"aria-hidden":"true"})}),c.jsx("div",{className:"s-file-preview-shell-body",children:O}),b&&c.jsx("button",{type:"button",className:"s-file-preview-side-nav s-file-preview-side-nav-right",onClick:()=>v&&t(v),disabled:!v,"aria-label":"Next file",title:"Next file (→)",children:c.jsx($t,{size:18,strokeWidth:1.8,"aria-hidden":"true"})})]}):null,actions:y,onClose:r})}function sn(e,t,n){if(e.kind==="directory"){const s=e.entries.filter(i=>i.kind==="file");n({dirPath:e.path,dirTitle:e.title,files:s});return}if(!t){n(null);return}t.files.some(s=>s.realPath===e.realPath)||n(null)}function an(e){return!e||e.kind==="directory"||e.mediaType==="text/markdown"||e.mediaType==="text/plain"?"doc":"code"}function cn(e){return e.kind==="directory"?[`${e.entries.length} ${e.entries.length===1?"entry":"entries"}`]:[...e.previewable&&e.truncated?["truncated"]:[],ln(e.sizeBytes),e.mediaType]}function ln(e){return e<1024?`${e} B`:e<1024*1024?`${Math.round(e/1024)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}const He={activity:"idle",brief:{lastDeliveredAt:null},reminders:{dueCount:0,upcomingCount:0,due:[],next:null},voice:{available:null,setupBlocked:!1,replies:!1},error:null,session:{title:null,lastActivityAt:null},conversation:{messageCount:0,loading:!0}},z=()=>{},Ve={focusScoutbot:z,triggerBrief:z,triggerAskState:z,toggleVoiceReplies:z,openScoutbotSettings:z,startNewChat:z,dismissReminder:z,askReminderStatus:z},ye=o.createContext(null);function un({children:e}){const[t,n]=o.useState(He),r=o.useRef(Ve),s=o.useCallback(h=>{n(E=>dn(E,h)?E:h)},[]),i=o.useCallback(h=>{r.current=h},[]),a=o.useMemo(()=>({focusScoutbot:()=>r.current.focusScoutbot(),triggerBrief:()=>r.current.triggerBrief(),triggerAskState:()=>r.current.triggerAskState(),toggleVoiceReplies:()=>r.current.toggleVoiceReplies(),openScoutbotSettings:()=>r.current.openScoutbotSettings(),startNewChat:()=>r.current.startNewChat(),dismissReminder:h=>r.current.dismissReminder(h),askReminderStatus:h=>r.current.askReminderStatus(h)}),[]),u=o.useMemo(()=>({state:t,actions:a,publishState:s,registerActions:i}),[t,a,s,i]);return c.jsx(ye.Provider,{value:u,children:e})}function Ar(){const e=o.useContext(ye);return e?{state:e.state,actions:e.actions}:{state:He,actions:Ve}}function Tr(){const e=o.useContext(ye);return e?{publishState:e.publishState,registerActions:e.registerActions}:null}function dn(e,t){return e.activity===t.activity&&e.brief.lastDeliveredAt===t.brief.lastDeliveredAt&&e.reminders.dueCount===t.reminders.dueCount&&e.reminders.upcomingCount===t.reminders.upcomingCount&&fn(e.reminders.due,t.reminders.due)&&$e(e.reminders.next,t.reminders.next)&&e.voice.available===t.voice.available&&e.voice.setupBlocked===t.voice.setupBlocked&&e.voice.replies===t.voice.replies&&e.error===t.error&&e.session.title===t.session.title&&e.session.lastActivityAt===t.session.lastActivityAt&&e.conversation.messageCount===t.conversation.messageCount&&e.conversation.loading===t.conversation.loading}function fn(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(!$e(e[n],t[n]))return!1;return!0}function $e(e,t){return e===t?!0:!e||!t?!1:e.id===t.id&&e.body===t.body&&e.status===t.status&&e.dueAt===t.dueAt}const pn="/api/voice/realtime/call",Je="/api/voice/realtime/lease",hn="x-openscout-realtime-voice-lease",ze="surface.realtime-voice",Rr="scout:realtime-voice-stop",mn={noise_reduction:{type:"far_field"},turn_detection:{type:"server_vad",threshold:.6,prefix_padding_ms:300,silence_duration_ms:500,create_response:!0,interrupt_response:!0}},vn={noise_reduction:{type:"near_field"},turn_detection:{type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:500,create_response:!0,interrupt_response:!0}},gn="/api/scoutbot/chat",wn=25e3;async function bn(e={}){if(se(e.signal),!globalThis.RTCPeerConnection||!navigator.mediaDevices?.getUserMedia)throw new Error("This browser does not support realtime audio calls.");e.onState?.("connecting");const t=new RTCPeerConnection,n=new Audio;n.autoplay=!0;let r=!1,s=null,i=null,a=null,u=0,h=0;const E=(f,v,p="voice")=>{h+=1,e.onTrace?.({id:`voice-${h}`,at:Date.now(),kind:p,label:f,...v?{detail:v}:{}})};let m=null;const R=()=>{if(m)return m;r=!0,e.signal?.removeEventListener("abort",L),a&&clearInterval(a),a=null,s?.getTracks().forEach(v=>v.stop()),n.pause(),n.srcObject=null,t.close();const f=i;return i=null,m=(async()=>{f&&await Nn(f),e.onState?.("ended")})(),m},A=()=>{R().catch(f=>{e.onError?.(f instanceof Error?f.message:"Could not release the realtime voice lease."),e.onState?.("error")})},L=()=>{A()};e.signal?.addEventListener("abort",L,{once:!0}),t.ontrack=({streams:f})=>{const v=f[0];if(!v||r)return;const[p]=v.getAudioTracks();p&&p.addEventListener("ended",()=>{r||e.onError?.("Realtime voice audio ended unexpectedly.")}),n.srcObject=v,n.play().catch(()=>{e.onError?.("Browser playback was blocked. Interact with the page, then start the call again.")})},t.onconnectionstatechange=()=>{r||(t.connectionState==="connected"?(e.onState?.("live"),E("Realtime channel connected","Scoutbot bridge is ready")):(t.connectionState==="failed"||t.connectionState==="disconnected")&&(e.onError?.("Realtime voice connection ended unexpectedly."),A()))};try{s=await Rn(e.inputDeviceName,e.signal),se(e.signal);for(const w of s.getTracks())t.addTrack(w,s);const f=t.createDataChannel("oai-events"),v=new Set;let p=Promise.resolve(),T=!1,b=null;const y=[],_=w=>{if(r||f.readyState!=="open")return!1;try{return f.send(JSON.stringify(w)),!0}catch{return e.onError?.("Realtime voice events channel closed unexpectedly."),!1}},O=()=>{if(T||b||y.length===0)return;const w=y.shift();if(w){if(b=w,!_({type:"response.create",response:{instructions:w}})){b=null,y.unshift(w);return}T=!0}},d=w=>{y.push(w),O()};f.addEventListener("open",()=>{if(r)return;const w=Tn(e.inputDeviceName);if(!_({type:"session.update",session:{type:"realtime",audio:{input:w}}})){e.onError?.("Could not configure Scout's realtime microphone processing.");return}E("Scoutbot bridge ready","Live fleet context is available"),d("Open with one brief audible greeting: 'Hi, I’m Scoutbot. I can check the fleet and coordinate through Scout. What would you like to work on?'")}),f.addEventListener("error",()=>{r||e.onError?.("Realtime voice events channel closed unexpectedly.")}),f.addEventListener("message",w=>{const j=Sn(w.data);if(j?.type==="error"){if(Ge(j.message)){b&&(y.unshift(b),b=null),T=!0,E("Scoutbot reply queued","Waiting for the current spoken response to finish","scoutbot");return}e.onError?.(j.message??"OpenAI Realtime reported an error.");return}if(j?.type==="response.created"){T=!0,b=null;return}if(j?.type==="response.done"){T=!1,b=null;for(const D of Cn(j))D.name!=="ask_scoutbot"||v.has(D.callId)||(v.add(D.callId),p=p.then(()=>yn({functionCall:D,route:e.getRoute?.()??e.route,uiContext:e.getUiContext?.(),onReply:e.onScoutbotReply,onTrace:E,send:_,requestResponse:d})).catch(V=>{e.onError?.(V instanceof Error?V.message:"Scoutbot could not complete the voice request.")}));O()}});const g=await he(t.createOffer(),e.signal);if(await he(t.setLocalDescription(g),e.signal),!g.sdp)throw new Error("Could not create a WebRTC offer.");const k=await fetch(pn,{method:"POST",headers:{"content-type":"application/sdp"},body:g.sdp,signal:e.signal});i=k.headers.get(hn)?.trim()||null;const C=await he(k.text(),e.signal);if(!k.ok)throw new Error(xn(C,k.status));if(!i)throw new Error("Scout started the audio connection without a concurrency lease. Please try again.");return a=setInterval(()=>{if(!i||r)return;const w=i;In(w).then(j=>{if(!(r||w!==i)){if(j){u=0;return}e.onError?.("Realtime voice lost its server lease. Reconnect to continue safely."),A()}}).catch(()=>{u+=1,!(u<2||r)&&(e.onError?.("Realtime voice could not renew its server lease. Check the connection and try again."),A())})},wn),await he(t.setRemoteDescription({type:"answer",sdp:C}),e.signal),se(e.signal),{leaseId:i,stop:R}}catch(f){throw await R(),f}}async function yn(e){const t=En(e.functionCall.arguments);if(!t){e.onTrace("Scoutbot request could not be read",void 0,"error"),ge(e,{ok:!1,error:"The voice request did not include a usable Scoutbot prompt."});return}e.onTrace("Scoutbot is checking the control plane",t,"scoutbot");try{const n=await fetch(gn,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({body:t,route:e.route,uiContext:e.uiContext})}),r=await n.text();if(!n.ok)throw new Error(kn(r,n.status));const s=JSON.parse(r),i=typeof s.reply?.body=="string"?s.reply.body.trim():"";if(!i)throw new Error("Scoutbot returned an empty reply.");const a=Me(i).filter(E=>E.type==="ask-agent").length,u=e.onReply?await e.onReply(i):{agentRequests:{requested:a,sent:0,failed:a}},h=ut(i);e.onTrace("Scoutbot reply ready",void 0,"scoutbot"),ge(e,{ok:!0,reply:h,...u.agentRequests.requested>0?{agentRequests:u.agentRequests}:{}})}catch(n){const r=n instanceof Error?n.message:"Scoutbot could not complete the voice request.";e.onTrace("Scoutbot request failed",r,"error"),ge(e,{ok:!1,error:r})}}function ge(e,t){if(!e.send({type:"conversation.item.create",item:{type:"function_call_output",call_id:e.functionCall.callId,output:JSON.stringify(t)}}))return;const r=t.agentRequests;e.requestResponse(t.ok?r&&r.requested>0?r.failed>0?"Answer using the Scoutbot result. Say clearly that Scoutbot tried to send the agent request automatically but delivery failed, and tell the operator to check the activity log. Be concise and do not mention tools, JSON, fences, or implementation details.":"Answer using the Scoutbot result. Say clearly that the agent request was sent automatically. Do not claim the requested work is complete. Be concise and do not mention tools, JSON, fences, or implementation details.":"Answer using the Scoutbot result. Speak the useful answer naturally and concisely. Do not mention tools, JSON, fences, or implementation details.":"Briefly tell the operator that Scoutbot could not complete the live lookup and state the returned error plainly.")}function Ge(e){const t=e?.toLowerCase()??"";return t.includes("active response in progress")||t.includes("conversation already has an active response")||t.includes("response is already in progress")}function Sn(e){if(typeof e!="string")return null;try{const t=JSON.parse(e);return{...typeof t.type=="string"?{type:t.type}:{},...typeof t.error?.message=="string"?{message:t.error.message}:{},...t.response&&typeof t.response=="object"?{response:t.response}:{}}}catch{return null}}function Cn(e){return Array.isArray(e.response?.output)?e.response.output.flatMap(t=>{if(!t||typeof t!="object")return[];const n=t;return n.type!=="function_call"||typeof n.call_id!="string"||typeof n.name!="string"||typeof n.arguments!="string"?[]:[{callId:n.call_id,name:n.name,arguments:n.arguments}]}):[]}function En(e){try{const t=JSON.parse(e);if(typeof t.request!="string")return null;const n=t.request.trim();return n?n.slice(0,8e3):null}catch{return null}}function kn(e,t){try{const n=JSON.parse(e);if(typeof n.error=="string"&&n.error.trim())return n.error}catch{}return`Scoutbot could not complete the live lookup (HTTP ${t}).`}function xn(e,t){try{const n=JSON.parse(e);if(typeof n.error=="string"&&n.error.trim())return n.error}catch{}return`Could not start realtime voice (HTTP ${t}).`}async function he(e,t){return t?(se(t),new Promise((n,r)=>{const s=()=>r(Se(t));t.addEventListener("abort",s,{once:!0}),e.then(i=>{t.removeEventListener("abort",s),n(i)},i=>{t.removeEventListener("abort",s),r(i)})})):e}async function _e(e,t){return t?(se(t),new Promise((n,r)=>{let s=!1;const i=()=>{s=!0,r(Se(t))};t.addEventListener("abort",i,{once:!0}),e.then(a=>{if(t.removeEventListener("abort",i),s||t.aborted){a.getTracks().forEach(u=>u.stop());return}n(a)},a=>{t.removeEventListener("abort",i),s||r(a)})})):e}const Le={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,channelCount:1},An=/\b(?:airpods?|earbuds?|earphones?|headsets?|headphones?|buds?|hands[- ]?free)\b/iu;function Tn(e){return An.test(e?.trim()??"")?vn:mn}async function Rn(e,t){const n=await je(e);let r=await _e(navigator.mediaDevices.getUserMedia({audio:{...Le,...n?{deviceId:{exact:n.deviceId}}:{}}}),t);if(!n&&e?.trim()){const s=await je(e),i=r.getAudioTracks?.()[0]?.label?.trim().toLocaleLowerCase()??"";if(s&&s.label.trim().toLocaleLowerCase()!==i)try{const a=await _e(navigator.mediaDevices.getUserMedia({audio:{...Le,deviceId:{exact:s.deviceId}}}),t);r.getTracks().forEach(u=>u.stop()),r=a}catch(a){if(t?.aborted)throw r.getTracks().forEach(u=>u.stop()),a}}for(const s of r.getAudioTracks?.()??[])s.contentHint="speech";return r}async function je(e){const t=e?.trim().toLocaleLowerCase();if(!t||typeof navigator.mediaDevices.enumerateDevices!="function")return null;try{const n=(await navigator.mediaDevices.enumerateDevices()).filter(r=>r.kind==="audioinput"&&r.deviceId&&r.label.trim());return n.find(r=>r.label.trim().toLocaleLowerCase()===t)??n.find(r=>{const s=r.label.trim().toLocaleLowerCase();return s.includes(t)||t.includes(s)})??null}catch{return null}}function se(e){if(e?.aborted)throw Se(e)}function Se(e){return e.reason instanceof Error?e.reason:new DOMException("Realtime voice connection was cancelled.","AbortError")}async function In(e){return(await fetch(`${Je}/${encodeURIComponent(e)}`,{method:"PUT"})).ok}async function Nn(e){const t=await fetch(`${Je}/${encodeURIComponent(e)}`,{method:"DELETE",keepalive:!0});if(!t.ok&&t.status!==404)throw new Error(`Could not release realtime voice lease (HTTP ${t.status}).`)}const On=[{id:"home",label:"Home",description:"Fleet overview, briefings, and recent activity.",route:{view:"inbox"}},{id:"projects",label:"Projects",description:"Projects, agents, and project-scoped work.",route:{view:"agents-v2"},deepActions:["Open a project by projectSlug.","Open an agent by agentId."]},{id:"sessions",label:"Sessions",description:"Active and recent harness sessions.",route:{view:"sessions"},deepActions:["Open a session by sessionId."]},{id:"messages",label:"Messages",description:"Direct conversations and channels.",route:{view:"messages"},deepActions:["Open a conversation by conversationId.","Filter by all, direct messages, or channels."]},{id:"dispatch",label:"Dispatch",description:"Requests, flights, work, and delivery state.",route:{view:"broker"}},{id:"search",label:"Search",description:"Knowledge and indexed workspace search.",route:{view:"search"}},{id:"operations",label:"Operations",description:"Mission Control, live activity, agent lanes, runtime, and mesh health.",route:{view:"ops",mode:"mission"}},{id:"repositories",label:"Repositories",description:"Repository and worktree status, including diffs.",route:{view:"repos"},deepActions:["Open a repository by absolute root."]},{id:"code-browser",label:"Code Browser",description:"Read files in a project or worktree.",route:{view:"code"},deepActions:["Select a project with the project field; it accepts the displayed project name or slug.","Open a file inside it with path and optional wt.","Alternatively use absolute root and file fields.","Focus a line with line and optional endLine.","Deep links: scout://{project}/{path}, scout:///{absolute/path}, or legacy scout://code/{project}/{path}."]},{id:"terminals",label:"Terminals",description:"Observe or take over terminal sessions.",route:{view:"terminal"}},{id:"settings",label:"Settings",description:"Connections, agents, communications, credentials, voice, and devices.",route:{view:"settings"}}],_n=[{id:"comms",label:"Comms",description:"Native conversations and channels.",route:{view:"messages"},deepActions:["Open a conversation by conversationId.","Open a channel by channelId."]},{id:"projects",label:"Projects",description:"Native project and agent browser.",route:{view:"agents-v2"},deepActions:["Filter to a project by projectSlug.","Select an agent by agentId."]},{id:"terminals",label:"Terminals",description:"Native terminal workspace.",route:{view:"terminal"},deepActions:["Select an agent terminal by agentId."]},{id:"tail",label:"Tail",description:"Live agent and harness activity.",route:{view:"ops",mode:"tail"}},{id:"dispatch",label:"Dispatch",description:"Dispatch and coordination overview.",route:{view:"broker"}},{id:"agent-lanes",label:"Agent Lanes",description:"Native lane overview for active agents.",route:{view:"ops",mode:"lanes"}},{id:"repositories",label:"Repositories",description:"Native repository and worktree status.",route:{view:"repos"}},{id:"code-browser",label:"Code Browser",description:"Embedded read-only project browser.",route:{view:"code"},deepActions:["Select a project with the project field; it accepts the displayed project name or slug.","Open a file inside it with path and optional wt.","Alternatively use absolute root and file fields.","Focus a line with line and optional endLine.","Deep links: scout://{project}/{path}, scout:///{absolute/path}, or legacy scout://code/{project}/{path}."]},{id:"settings",label:"Settings",description:"Native app settings; Voice is directly addressable.",route:{view:"settings"},deepActions:["Open Voice settings with section=voice."]}];function Ln(e){const t=e==="macos";return{host:e,shellLabel:t?"Scout for macOS":"OpenScout web",destinations:t?_n:On,rules:["When asked what navigation is available, list only these human labels and short descriptions.","Never expose internal Route.view names, aliases, URL fragments, or implementation vocabulary in the human reply.","Emit only a destination route or deep action explicitly described by this host context.","If the requested destination or deep action is absent, say it is not available in this app instead of approximating it with another page."]}}const jn="scout:scoutbot-realtime-reply",me="scout:scoutbot-session-changed",Dn={enabled:!1,open:!1,state:"idle",leaseId:null,error:null,trace:[],chatState:null,sessionAction:null,setOpen:()=>{},startCall:async()=>{},endCall:async()=>!0,startNewChat:async()=>{},switchChat:async()=>{},updatePreferredModel:async e=>e,clearTrace:()=>{},openVoiceSettings:()=>{}},We=o.createContext(Dn);function Pn({children:e}){const{route:t,applyScoutbotUiAction:n}=Ye(),r=Pe(ze,!1),[s,i]=o.useState(!1),[a,u]=o.useState("idle"),[h,E]=o.useState(null),[m,R]=o.useState(null),[A,L]=o.useState([]),[f,v]=o.useState(null),[p,T]=o.useState(null),b=o.useRef(null),y=o.useRef(null),_=o.useRef(null),O=o.useRef(0),d=o.useRef(!1),g=o.useRef(!1),k=o.useRef({route:t,applyScoutbotUiAction:n});k.current={route:t,applyScoutbotUiAction:n};const C=o.useCallback((S,x,N="voice")=>{L(P=>[...P,{id:`voice-ui-${Date.now()}-${P.length}`,at:Date.now(),kind:N,label:S,...x?{detail:x}:{}}].slice(-100))},[]),w=o.useCallback(()=>L([]),[]),j=o.useCallback(async()=>{const S=await $("/api/scoutbot/session");return d.current||v(S),S},[]);o.useEffect(()=>{if(!r)return;const S=()=>{j().catch(x=>{d.current||R(x instanceof Error?x.message:"Could not load Scoutbot chats.")})};return S(),window.addEventListener(me,S),()=>window.removeEventListener(me,S)},[r,j]);const D=o.useCallback(async()=>{O.current+=1;const S=_.current;y.current?.abort(),y.current=null;const x=b.current;b.current=null;try{await x?.stop(),await S}catch(N){return d.current||(u("error"),R(N instanceof Error?N.message:"Could not end realtime voice cleanly.")),!1}return d.current||(E(null),u("ended"),C("Live voice ended","Microphone and host lease released","voice")),!0},[C]);o.useEffect(()=>{r||(i(!1),(b.current||a==="connecting"||a==="live")&&D())},[r,D,a]),o.useEffect(()=>(d.current=!1,()=>{d.current=!0,O.current+=1,y.current?.abort(),y.current=null,b.current?.stop().catch(()=>{}),b.current=null}),[]);const V=o.useCallback(async S=>{window.dispatchEvent(new CustomEvent(jn,{detail:{body:S}}));const x=S.replace(/```[\s\S]*?```/gu,"").trim();x&&C("Scoutbot replied",x.slice(0,2e3),"scoutbot");let N=0,P=0,B=0;for(const M of Me(S))if(M.type==="ask-agent")N+=1,await Bn(M,C,R)?P+=1:B+=1;else if(M.type!=="reminder"){const F=Un(M),H=M.type==="navigate"||M.type==="view-file"?"navigation":"scoutbot";C(Fn(M),F,H),k.current.applyScoutbotUiAction(M),C(Ie()?"Action sent to Scout for macOS":"Action applied in OpenScout",F,H)}return await j().catch(()=>null),{agentRequests:{requested:N,sent:P,failed:B}}},[C,j]),ee=o.useCallback(()=>{const S={type:"navigate",route:{view:"settings",section:"voice"}};C("Voice settings requested",void 0,"navigation"),k.current.applyScoutbotUiAction(S)},[C]),te=o.useCallback(async()=>{if(!r){R("Turn on live voice in Settings → Voice before starting a call."),i(!1);return}if(g.current||a==="connecting"||a==="live")return;g.current=!0,y.current?.abort();const S=b.current;b.current=null;try{await S?.stop(),E(null)}catch(F){u("error"),R(F instanceof Error?F.message:"Could not end the previous realtime voice call."),g.current=!1;return}const x=new AbortController;y.current=x;const N=O.current+1;O.current=N;let P=()=>{};const B=new Promise(F=>{P=F});_.current=B;let M=!1;R(null),L([{id:"connecting",at:Date.now(),label:"Connecting secure audio"}]),u("connecting");try{const F=await Ct().then(({settings:U})=>U.inputDeviceName).catch(()=>null),H=await bn({signal:x.signal,inputDeviceName:F,getRoute:()=>k.current.route,getUiContext:()=>Ln(Ie()?"macos":"web"),onState:U=>{!d.current&&O.current===N&&u(U)},onError:U=>{if(!(d.current||O.current!==N)){if(Ge(U)){C("Scoutbot reply queued","Waiting for the current spoken response to finish","scoutbot");return}R(U),C("Voice issue",U,"error")}},onTrace:U=>{!d.current&&O.current===N&&L(ae=>[...ae,U].slice(-100))},onScoutbotReply:U=>!d.current&&O.current===N?V(U):{agentRequests:{requested:0,sent:0,failed:0}}});if(d.current||x.signal.aborted||O.current!==N){await H.stop();return}b.current=H,E(H.leaseId),M=!0}catch(F){if(!d.current&&O.current===N&&!Mn(F)){u("error");const H=F instanceof Error?F.message:"Could not start realtime voice.";R(H),C("Live voice could not start",H,"error")}}finally{!M&&y.current===x&&(y.current=null),P(),_.current===B&&(_.current=null),g.current=!1}},[C,V,r,a]),ne=o.useCallback(async()=>{if(!p){T("new"),R(null);try{if((b.current||a==="connecting"||a==="live")&&!await D())return;if(f?.session.messages.length===0){L([{id:`voice-chat-${Date.now()}`,at:Date.now(),kind:"scoutbot",label:"New live chat ready"}]);return}const S=await $("/api/scoutbot/session/reset",{method:"POST"});v(S),L([{id:`voice-chat-${Date.now()}`,at:Date.now(),kind:"scoutbot",label:"New live chat ready"}]),window.dispatchEvent(new CustomEvent(me,{detail:{id:S.session.id}}))}catch(S){const x=S instanceof Error?S.message:"Could not start a new Scoutbot chat.";R(x),C("Could not start a new live chat",x,"error")}finally{T(null)}}},[C,f?.session.messages.length,D,p,a]),K=o.useCallback(async S=>{if(!(!S||p||S===f?.session.id)){T(S),R(null);try{if((b.current||a==="connecting"||a==="live")&&!await D())return;const x=await $("/api/scoutbot/session/switch",{method:"POST",body:JSON.stringify({id:S})});v(x),L([{id:`voice-chat-${Date.now()}`,at:Date.now(),kind:"scoutbot",label:"Live chat restored",detail:x.session.title}]),window.dispatchEvent(new CustomEvent(me,{detail:{id:x.session.id}}))}catch(x){const N=x instanceof Error?x.message:"Could not switch Scoutbot chats.";R(N),C("Could not restore the live chat",N,"error")}finally{T(null)}}},[C,f?.session.id,D,p,a]),Q=o.useCallback(async S=>{const x=S.trim();if(!x)throw new Error("Preferred model is required.");const N=await $("/api/scoutbot/config",{method:"POST",body:JSON.stringify({model:x})});return v(P=>P&&{...P,config:{...P.config,...N.config}}),C("Scoutbot preferred model updated",N.config.model,"scoutbot"),N.config.model},[C]),ie=o.useMemo(()=>({enabled:r,open:s,state:a,leaseId:h,error:m,trace:A,chatState:f,sessionAction:p,setOpen:i,startCall:te,endCall:D,startNewChat:ne,switchChat:K,updatePreferredModel:Q,clearTrace:w,openVoiceSettings:ee}),[r,s,a,h,m,A,f,p,te,D,ne,K,Q,w,ee]);return c.jsx(We.Provider,{value:ie,children:e})}function Mn(e){return(e instanceof DOMException||e instanceof Error)&&e.name==="AbortError"}function Ir(){return o.useContext(We)}function Fn(e){return e.type==="navigate"?"Navigation requested":e.type==="open-scoutbot"?"Scoutbot opened its panel":e.type==="refresh"?"Scoutbot refreshed live state":"Scoutbot opened the requested file"}function Un(e){return e.type==="navigate"?JSON.stringify(e.route):e.type==="view-file"?e.path:e.reason?.trim()||e.type}async function Bn(e,t,n){t("Scoutbot is coordinating",`Asking ${e.targetLabel}`,"agent");try{const r=await $("/api/scoutbot/actions/ask",{method:"POST",body:JSON.stringify({targetLabel:e.targetLabel,targetAgentId:e.targetAgentId,body:e.body,channel:e.channel})});return t("Scoutbot sent the request",r.flightId?`${r.targetAgentId??r.targetLabel} · run ${r.flightId}`:r.targetAgentId??r.targetLabel,"agent"),!0}catch(r){const s=r instanceof Error?r.message:"Could not send to agent.";return t("Scoutbot could not send the request",s,"error"),n(s),!1}}function we(e,t){const n=t?.trim();n&&e.add(n)}function qn(e,t){const n=new Set;return we(n,e.authorityNodeId),we(n,e.homeNodeId),n.size===0&&we(n,t),n}function Ke(e,t,n){return t?qn(e,n).has(t):!0}function Hn(e,t,n){return t?e.filter(r=>Ke(r,t,n)):e}function Nr(e,t,n){return t?new Set(e.filter(r=>Ke(r,t,n)).map(r=>r.id)):null}function W(e,t,n){return!t&&!n||n&&e.authorityNodeId===n?!0:t?e.agentId&&t.has(e.agentId)||e.actorId&&t.has(e.actorId)||e.ownerId&&t.has(e.ownerId)||e.nextMoveOwnerId&&t.has(e.nextMoveOwnerId)?!0:!!e.participantIds?.some(r=>t.has(r)):!1}function Vn(e,t,n){return W(e,t,n)}function Or(e,t,n){return!t&&!n?e:e.filter(r=>Vn(r,t,n))}function $n(e,t){return W(e,t)}function Jn(e,t){return t?e.filter(n=>$n(n,t)):e}function De(e,t){return W(e,t)}function _r(e,t){if(!e||!t)return e;const n=e.activeAsks.filter(a=>W(a,t)),r=e.recentCompleted.filter(a=>W(a,t)),s=e.needsAttention.filter(a=>W(a,t)),i=Jn(e.activity,t);return{...e,totals:{active:n.length,recentCompleted:r.length,needsAttention:s.length,activity:i.length},activeAsks:n,recentCompleted:r,needsAttention:s,activity:i}}function Lr(e,t){if(!t)return e;const n=e.activeFlights.filter(i=>W(i,t)),r=e.childWork.filter(i=>De(i,t));return De(e,t)||n.length>0||r.length>0?{...e,activeFlights:n,childWork:r}:null}function zn(e){return!!(e&&(e.message.trim().length>0||e.files.length>0||e.forwardContext))}function Gn(e){return[e.name,e.type,e.size,e.lastModified].join(":")}function Wn(e,t){const n=new Set;return[...e,...t].filter(r=>{const s=Gn(r);return n.has(s)?!1:(n.add(s),!0)})}function Kn(e,t){const n=t.intent??e?.intent??"new-task",r=n==="route-capture",s=n==="forward-message";return{intent:n,...r&&(t.agentId??e?.agentId)?{agentId:t.agentId??e?.agentId}:{},...r&&(t.conversationId??e?.conversationId)?{conversationId:t.conversationId??e?.conversationId}:{},message:t.message??e?.message??"",files:Wn(e?.files??[],t.files??[]),attachmentFeedback:t.attachmentFeedback??e?.attachmentFeedback??null,mode:r?t.preferExistingChat===void 0?e?.mode??"new-session":t.preferExistingChat?"existing-chat":"new-session":"new-session",projectPath:t.projectPath??e?.projectPath??"",projectQuery:e?.projectQuery??"",...s&&(t.forwardContext??e?.forwardContext)?{forwardContext:t.forwardContext??e?.forwardContext}:{},forwardContextMode:s?t.forwardContextMode??e?.forwardContextMode??"selected-message":"selected-message"}}function Qn({request:e,onClose:t,onOpenCapture:n}){const{agents:r,route:s,navigate:i}=Ye(),a=st(s),u=Hn(r,a),h=kt(s,u),[E,m]=o.useState(0),[R,A]=o.useState(null),[L,f]=o.useState(null),v=o.useRef(0),p=e?Kn(L,e):null,T=o.useCallback((y,_)=>{if(y.length===0)return;const O=!!(h.agentId||h.conversationId);n({intent:O?"route-capture":"new-task",files:y,attachmentFeedback:_,agentId:h.agentId??void 0,conversationId:h.conversationId??void 0,preferExistingChat:h.canUseExistingChat})},[n,h]);o.useEffect(()=>{if(!R)return;const y=window.setTimeout(()=>A(null),5e3);return()=>window.clearTimeout(y)},[R]),o.useEffect(()=>{const y=k=>{pe(k.dataTransfer)&&(k.preventDefault(),v.current+=1,m(v.current))},_=k=>{pe(k.dataTransfer)&&(k.preventDefault(),k.dataTransfer&&(k.dataTransfer.dropEffect="copy"))},O=()=>{v.current!==0&&(v.current=Math.max(0,v.current-1),m(v.current))},d=k=>{if(!pe(k.dataTransfer))return;k.preventDefault();const C=Ne(k.dataTransfer),w=C.filter(Oe),j=C.length-w.length;if(v.current=0,m(0),w.length===0){A(C.length===0?"Scout could not read that file. Try the attachment picker instead.":"That file type is not supported. Drop markdown, code, an image, or a video clip.");return}const D=w.length===1?`Dropped ${w[0]?.name||"1 attachment"}.`:`Dropped ${w.length} attachments.`,V=j>0?`${D} Skipped ${j} unsupported ${j===1?"file":"files"}.`:D;A(null),T(w,V)},g=k=>{if(Et(k.target)||!pe(k.clipboardData))return;k.preventDefault();const C=Ne(k.clipboardData),w=C.filter(Oe);if(w.length===0){A(C.length===0?"Scout could not read that pasted file. Try the attachment picker instead.":"That pasted file type is not supported. Paste an image or video, or attach markdown or code.");return}T(w,w.length===1?`Pasted ${w[0]?.name||"1 attachment"}.`:`Pasted ${w.length} attachments.`)};return window.addEventListener("dragenter",y),window.addEventListener("dragover",_),window.addEventListener("dragleave",O),window.addEventListener("drop",d),window.addEventListener("paste",g),()=>{window.removeEventListener("dragenter",y),window.removeEventListener("dragover",_),window.removeEventListener("dragleave",O),window.removeEventListener("drop",d),window.removeEventListener("paste",g)}},[T]);const b=E>0&&!e;return c.jsxs(c.Fragment,{children:[b?c.jsx("div",{className:"s-capture-drop",role:"presentation",children:c.jsxs("div",{className:"s-capture-drop-card",children:[c.jsx("div",{className:"s-capture-drop-title",children:"Route capture"}),c.jsx("div",{className:"s-capture-drop-copy",children:"Drop markdown, code, an image, or a video clip to send it to the right agent or chat."})]})}):null,R?c.jsx("div",{className:"s-capture-feedback",role:"alert",children:R}):null,e?c.jsx(xt,{agents:u,route:s,navigate:i,onClose:t,initialAgentId:p?.agentId,initialConversationId:p?.conversationId,initialMessage:p?.message,initialFiles:p?.files,initialAttachmentFeedback:p?.attachmentFeedback??void 0,initialIntent:p?.intent,initialProjectPath:p?.projectPath,initialProjectQuery:p?.projectQuery,initialForwardContext:p?.forwardContext,initialForwardContextMode:p?.forwardContextMode,defaultMode:p?.mode,draftRestored:zn(L),onDraftChange:f,onDraftConsumed:()=>f(null)}):null]})}const Qe=o.createContext(null),Yn=["hello","node.upserted","actor.registered","agent.registered","agent.endpoint.upserted","invocation.requested","flight.updated","delivery.state.changed","scout.dispatched"],Xn=new Set(Yn),Zn=3e4,er=250;function tr(e,t){try{return JSON.stringify(e)===JSON.stringify(t)?e:t}catch{return t}}const nr={"--hud-bg":"oklch(0.132 0.004 260)","--hud-surface":"oklch(0.178 0.005 260)","--hud-ink":"oklch(0.965 0.006 260)","--hud-muted":"oklch(0.72 0.008 260)","--hud-dim":"oklch(0.57 0.007 260)","--hud-border":"oklch(0.965 0.006 260 / 0.04)","--hud-accent":"oklch(0.86 0.17 125)","--hud-accent-soft":"oklch(0.86 0.17 125 / 0.08)","--hud-shadow-soft":"oklch(0.08 0.004 260 / 0.42)","--hud-chrome-border":"oklch(0.965 0.006 260 / 0.012)","--hud-shadow-panel":"0 12px 34px oklch(0.08 0.004 260 / 0.45)","--hud-shadow-panel-hover":"0 14px 38px oklch(0.08 0.004 260 / 0.52)","--hud-shadow-bar":"0 -10px 28px oklch(0.08 0.004 260 / 0.38)","--hud-shadow-nav":"0 8px 24px oklch(0.08 0.004 260 / 0.32)","--hud-shadow-minimap":"0 10px 24px oklch(0.08 0.004 260 / 0.38)","--hud-status-ok":"oklch(0.80 0.15 155)","--hud-status-warn":"oklch(0.82 0.15 85)","--hud-status-error":"oklch(0.72 0.18 25)","--scrim":"rgba(0, 0, 0, 0.5)","--scrim-soft":"rgba(0, 0, 0, 0.3)","--info":"#62b6ff","--shadow-card":"0 8px 22px rgba(0, 0, 0, 0.22)","--shadow-card-hover":"0 14px 36px rgba(0, 0, 0, 0.30)","--cat-gold":"#d7a978","--cat-purple":"#c58cff","--cat-sky":"#38bdf8","--scout-chrome-ink-strong":"color-mix(in srgb, var(--hud-ink) 92%, transparent)","--scout-chrome-ink":"color-mix(in srgb, var(--hud-ink) 78%, transparent)","--scout-chrome-ink-soft":"color-mix(in srgb, var(--hud-ink) 58%, transparent)","--scout-chrome-ink-faint":"color-mix(in srgb, var(--hud-ink) 55%, transparent)","--scout-chrome-ink-ghost":"color-mix(in srgb, var(--hud-ink) 48%, transparent)","--scout-chrome-hover":"color-mix(in srgb, var(--hud-ink) 4%, transparent)","--scout-chrome-active":"color-mix(in srgb, var(--hud-ink) 8%, transparent)","--scout-chrome-border-soft":"color-mix(in srgb, var(--hud-ink) 4%, transparent)","--scout-chrome-avatar-ink":"#111111","--hud-font-sans":"'Inter', ui-sans-serif, system-ui, sans-serif","--hud-font-mono":"'JetBrains Mono', ui-monospace, Menlo, monospace","--hud-font-serif":"'Spectral', 'Cormorant Garamond', Georgia, serif","--hud-font-accent-title":"'Inter Tight', var(--hud-font-sans)"},rr={"--hud-bg":"oklch(0.978 0.004 85)","--hud-surface":"oklch(0.992 0.003 85)","--hud-ink":"oklch(0.24 0.01 80)","--hud-muted":"oklch(0.56 0.014 80)","--hud-dim":"oklch(0.72 0.01 80)","--hud-border":"oklch(0.88 0.008 82 / 0.95)","--hud-accent":"oklch(0.72 0.16 125)","--hud-accent-soft":"oklch(0.72 0.16 125 / 0.11)","--hud-shadow-soft":"oklch(0.42 0.01 80 / 0.12)","--hud-status-ok":"oklch(0.64 0.16 155)","--hud-status-warn":"oklch(0.72 0.15 85)","--hud-status-error":"oklch(0.62 0.19 25)","--scrim":"rgba(20, 22, 26, 0.32)","--scrim-soft":"rgba(20, 22, 26, 0.18)","--info":"#2f7fd6","--shadow-card":"0 8px 22px oklch(0.42 0.01 80 / 0.10)","--shadow-card-hover":"0 14px 36px oklch(0.42 0.01 80 / 0.14)","--cat-gold":"#a9824f","--cat-purple":"#8b5cf6","--cat-sky":"#0ea5e9","--scout-chrome-ink-strong":"color-mix(in srgb, var(--hud-ink) 94%, transparent)","--scout-chrome-ink":"color-mix(in srgb, var(--hud-ink) 78%, transparent)","--scout-chrome-ink-soft":"color-mix(in srgb, var(--hud-ink) 60%, transparent)","--scout-chrome-ink-faint":"color-mix(in srgb, var(--hud-ink) 56%, transparent)","--scout-chrome-ink-ghost":"color-mix(in srgb, var(--hud-ink) 50%, transparent)","--scout-chrome-hover":"color-mix(in srgb, var(--hud-ink) 4%, transparent)","--scout-chrome-active":"color-mix(in srgb, var(--hud-ink) 8%, transparent)","--scout-chrome-border-soft":"color-mix(in srgb, var(--hud-border) 80%, transparent)","--scout-chrome-avatar-ink":"#ffffff","--hud-font-sans":"'Inter', ui-sans-serif, system-ui, sans-serif","--hud-font-mono":"'JetBrains Mono', ui-monospace, Menlo, monospace","--hud-font-serif":"'Spectral', 'Cormorant Garamond', Georgia, serif","--hud-font-accent-title":"'Inter Tight', var(--hud-font-sans)"},or=new Set(["--hud-bg","--hud-surface","--hud-ink","--hud-muted","--hud-dim","--hud-border","--hud-accent","--hud-accent-soft","--hud-shadow-soft","--hud-chrome-border","--hud-shadow-panel","--hud-shadow-panel-hover","--hud-shadow-bar","--hud-shadow-nav","--hud-shadow-minimap","--hud-status-ok","--hud-status-warn","--hud-status-error"]);function sr(e){return Object.fromEntries(Object.entries(e==="light"?rr:nr).filter(([n])=>!or.has(n)))}function Ye(){const e=o.useContext(Qe);if(!e)throw new Error("useScout must be used inside ScoutProvider");return e}function jr({children:e,initialTheme:t="dark"}){const{route:n,navigate:r}=it(),s=Ht(),i=Pe(ze,!1),[a,u]=o.useState([]),[h,E]=o.useState(!1),[m,R]=o.useState({status:"checking",message:null,lastCheckedAt:null}),[A,L]=o.useState(Te),[f,v]=o.useState(null),[p,T]=o.useState(!1),[b,y]=o.useState(null),[_,O]=o.useState(null),[d,g]=o.useState(""),[k,C]=o.useState(null),w=n.view==="settings",j=o.useMemo(()=>n.view!=="broker"||!n.attemptId?null:b?.id===n.attemptId?b:null,[b,n]),D=o.useMemo(()=>n.view!=="search"||!n.hitId?null:_?.id===n.hitId?_:null,[_,n]),V=o.useMemo(()=>n.view==="agents-v2"&&n.agentId&&n.sessionId?{agentId:n.agentId,sessionId:n.sessionId}:n.view==="sessions"&&n.sessionId?{agentId:n.agentId??"",sessionId:n.sessionId}:null,[n]),ee=o.useCallback((l,I)=>{if(n.view==="agents-v2"&&n.agentId===l){r({...n,sessionId:I},{replace:!0});return}if(n.view==="sessions"){r({view:"sessions",sessionId:I,agentId:l},{replace:!0});return}r({view:"agents-v2",agentId:l,sessionId:I},{replace:!0})},[r,n]),te=o.useCallback(()=>{r({view:"settings",section:"appearance"})},[r]),ne=o.useCallback(()=>{n.view==="settings"&&r({view:"inbox"})},[r,n.view]),K=o.useCallback(l=>{C(l??{intent:"new-task"})},[]),Q=o.useCallback(()=>C(null),[]),ie=o.useCallback(l=>{y(l),!(n.view==="broker"&&n.attemptId===l.id)&&r({view:"broker",attemptId:l.id,...n.view==="broker"&&n.filter?{filter:n.filter}:{}},{replace:n.view==="broker"})},[r,n]),S=o.useCallback(()=>{y(null),n.view==="broker"&&n.attemptId&&r({view:"broker",...n.filter?{filter:n.filter}:{}},{replace:!0})},[r,n]),x=o.useCallback((l,I)=>{O(l),typeof I=="string"&&g(I.trim()),!(n.view==="search"&&n.hitId===l.id)&&r({view:"search",...n.view==="search"&&n.mode?{mode:n.mode}:{},hitId:l.id},{replace:n.view==="search"})},[r,n]),N=o.useCallback(()=>{O(null),g(""),n.view==="search"&&n.hitId&&r({view:"search",...n.mode?{mode:n.mode}:{}},{replace:!0})},[r,n]),P=o.useMemo(()=>tt(),[]),B=s?.resolvedTheme??t,M=s?.template??"hudson",F=o.useMemo(()=>({...sr(B),...P??{}}),[P,B]),H=o.useCallback(l=>{L(I=>({...I,...l}))},[]);o.useEffect(()=>{nt(B,M,A),rt(A)},[M,A,B]),o.useEffect(()=>{const l=I=>{I.key!==null&&I.key!==ot||L(Te())};return window.addEventListener("storage",l),()=>window.removeEventListener("storage",l)},[]);const U=o.useMemo(()=>dt(a),[a]),ae=U?.id??ft(a),Ce=U?.conversationId??null,ce=o.useRef(null),Y=o.useRef(null),le=n.view==="ops"?"/api/agents":"/api/agents?detail=summary",ue=o.useCallback(()=>{R({status:"online",message:null,lastCheckedAt:Date.now()})},[]),de=o.useCallback(l=>{const I=At(l);R({status:Tt(I)?"offline":"degraded",message:I,lastCheckedAt:Date.now()})},[]),J=o.useCallback(async()=>{const l=ce.current;if(l&&(await l.promise,l.url===le))return;const I=(async()=>{try{const q=await $(le);u(G=>tr(G,q)),ue()}catch(q){de(q)}finally{E(!0)}})();ce.current={url:le,promise:I};try{await I}finally{ce.current?.promise===I&&(ce.current=null)}},[le,de,ue]),X=o.useCallback(async()=>{try{const l=await $("/api/onboarding/state");v(l),ue()}catch(l){de(l),v({hasLocalConfig:!0,hasProjectConfig:!0,hasOperatorName:!0,localConfigPath:null,projectRoot:null,currentDirectory:null,operatorName:null,operatorNameSuggestion:null})}},[de,ue]),Ee=o.useCallback(()=>{T(!0),$("/api/onboarding/skip",{method:"POST",body:"{}"}).then(()=>X()).catch(()=>null)},[X]);o.useEffect(()=>{J(),X()},[J,X]),o.useEffect(()=>{const l=()=>{Re()&&J()},I=window.setInterval(l,Zn),q=ct(l);return()=>{window.clearInterval(I),q()}},[J]);const ke=o.useMemo(()=>a.filter(l=>lt(l.state)).length,[a]),[Xe,xe]=o.useState(null),re=o.useCallback(l=>{l?.trim()&&xe(l.trim())},[]),oe=o.useCallback(()=>xe(null),[]),Z=o.useCallback(l=>{if(!pt(l))switch(l.type){case"navigate":r(l.route);break;case"focus-composer":window.dispatchEvent(new CustomEvent("scout:composer-focus"));break;case"open-scoutbot":window.dispatchEvent(new CustomEvent("scout:scoutbot-panel-open",{detail:l}));break;case"refresh":J();break;case"view-file":re(l.path);break}},[r,re,J]),Ze=o.useCallback((l,I)=>{const q=l.trim(),G=I.trim();if(!q||!G)return;const Ae=n.view==="conversation"||n.view==="messages"?n.conversationId:window.location.pathname==="/embed/thread"&&new URLSearchParams(window.location.search).get("conversationId")?.trim()||void 0;oe(),Z({type:"navigate",route:{view:"code",root:G,file:q,...Ae?{returnConversationId:Ae}:{}}})},[Z,oe,n]),fe=o.useRef({applyScoutbotUiAction:Z});fe.current={applyScoutbotUiAction:Z},at(l=>{Re()&&Xn.has(l.kind)&&(Y.current!==null&&window.clearTimeout(Y.current),Y.current=window.setTimeout(()=>{Y.current=null,J()},er))}),o.useEffect(()=>()=>{Y.current!==null&&window.clearTimeout(Y.current)},[]),o.useEffect(()=>{const l=I=>{const q=I.detail,G=q&&typeof q=="object"&&"type"in q?q:null;G&&fe.current.applyScoutbotUiAction(G)};return window.addEventListener("scout:scoutbot-ui-action",l),window.scoutScoutbot={applyUiAction:I=>fe.current.applyScoutbotUiAction(I),navigate:I=>fe.current.applyScoutbotUiAction({type:"navigate",route:I})},()=>{window.removeEventListener("scout:scoutbot-ui-action",l),window.scoutScoutbot?.applyUiAction&&delete window.scoutScoutbot}},[]);const et=o.useMemo(()=>({route:n,navigate:r,agents:a,agentsLoaded:h,onlineCount:ke,apiConnection:m,reload:J,appearanceDetails:A,updateAppearanceDetails:H,onboarding:f,refreshOnboarding:X,onboardingSkipped:p,skipOnboarding:Ee,settingsOpen:w,openSettings:te,closeSettings:ne,scoutbotAgentId:ae,scoutbotConversationId:Ce,applyScoutbotUiAction:Z,selectedBrokerAttempt:j,inspectBrokerAttempt:ie,clearBrokerAttempt:S,selectedKnowledgeHit:D,selectedKnowledgeQuery:d,inspectKnowledgeHit:x,clearKnowledgeHit:N,focusedSession:V,focusSession:ee,openFilePreview:re,closeFilePreview:oe,openContextCapture:K,closeContextCapture:Q}),[n,r,a,h,ke,m,J,A,H,f,X,p,Ee,w,te,ne,ae,Ce,Z,j,ie,S,D,d,x,N,V,ee,re,oe,K,Q]);return c.jsx(Qe.Provider,{value:et,children:c.jsx("div",{"data-scout-theme-mode":B,"data-scout-palette":A.palette,"data-scout-contrast":A.contrast,"data-scout-accent":A.accent,"data-hudson-theme":B,"data-hudson-template":M,style:{...F},children:c.jsx("div",{"data-scout-theme":B,style:{display:"contents"},children:c.jsx(ht,{children:c.jsxs(un,{children:[i?c.jsx(Pn,{children:e}):e,c.jsx(on,{path:Xe,onOpenPath:re,onOpenInCode:Ze,onClose:oe}),c.jsx(Qn,{request:k,onClose:Q,onOpenCapture:K})]})})})})})}export{$t as A,zt as C,nr as D,rr as L,Qe as S,xr as T,ze as a,Ir as b,Rr as c,Jn as d,Hn as e,At as f,Or as g,_r as h,Tt as i,jr as j,Lr as k,Ar as l,Nr as m,Ht as n,Tr as o,me as p,jn as q,Ln as s,Ye as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as o,j as n}from"./index-DMiGbrBt.js";/* empty css */import{D as O}from"./DataTable-E8s_MmoA.js";import{p as W,a as L}from"./api-h5zurxmi.js";import{t as U,n as R,f as Y}from"./time-DltNTpLl.js";import{u as G}from"./tail-events-D19uAGe3.js";import{o as Q}from"./openContent-C6XO6kr5.js";import{u as X}from"./Provider-C7UKGHQy.js";/* empty css */import"./index-BWHgHrtv.js";import"./router-Bq5dwf78.js";import"./terminal-sessions-D5CIR2OL.js";import"./sse-CjIkKo46.js";import"./surface-activity-B1rgWB1i.js";import"./colors-BtO5_zlx.js";import"./scoutbot-BTIErYHo.js";import"./ContextMenu-bARZqTzD.js";import"./DocumentFocusViewer-BeVwwl26.js";import"./createLucideIcon-OpA4Amw5.js";import"./TextDocumentSurface-BpAw4eQS.js";/* empty css */import"./file-text-BODxCjcz.js";import"./x-D3GElQbe.js";import"./chevron-right-XiIHsk4m.js";import"./code-xml-B6jOCM4V.js";import"./arrow-left-DEZzHiPS.js";import"./scout-voice-CU5c0LGi.js";import"./fx-z37u1o2z.js";import"./keyboard-nav-2kv_tGUS.js";import"./MessageComposerSuggestions-DpxN9WiB.js";import"./NewChatComposer-Cs6OsxK6.js";import"./runtime-picker-Bcl5iIX5.js";import"./voice-levels-Dcr3jglk.js";import"./loader-circle-CbHjZsz1.js";import"./index-CJXzfjo9.js";import"./HarnessMark-Cbv3Ib0c.js";import"./conversation-model-B47vYmWN.js";import"./NewChatOrigin-Bk2OyVjI.js";import"./agent-chat-Bfjd9y6c.js";import"./model-Co0zkMIc.js";import"./text-DsBWV_4k.js";import"./chevron-down-BGk5qoEw.js";import"./search-CWfZtOt2.js";const q=1e4,J=500,$=1e3,Z=6e4,D="/api/tail/discover",_=`/api/tail/recent?limit=${J}`,P=3e4,tt=[{key:"status",label:"status",cls:"s-atop-col-status",kind:"text",sortable:!1,defaultWidth:96,minWidth:70,render:t=>n.jsxs("span",{className:`s-atop-status s-atop-status--${t.status}`,children:[n.jsx("span",{className:"s-atop-status-dot","aria-hidden":"true"}),t.statusLabel]})},{key:"session",label:"session",cls:"s-atop-col-agent",kind:"text",sortable:!1,defaultWidth:168,minWidth:110,maxWidth:280,render:t=>n.jsxs("div",{className:"s-atop-agent-cell",title:t.sessionId??t.refId,children:[n.jsx("span",{className:`s-atop-chip s-atop-chip--harness s-atop-chip--harness-${st(t.source)}`,children:t.source}),n.jsx("span",{className:"s-atop-agent-id",children:t.refId.slice(0,8)})]})},{key:"project",label:"project",cls:"s-atop-col-project",kind:"text",sortable:!1,defaultWidth:200,minWidth:96,maxWidth:360,render:t=>n.jsx("span",{title:t.cwd??t.project,children:t.project})},{key:"updated",label:"updated",cls:"s-atop-col-last",kind:"time",sortable:!1,defaultWidth:86,minWidth:64,render:t=>n.jsx("span",{title:Y(t.mtimeMs),children:U(Math.max(R(t.mtimeMs)??0,R(t.lastEvent?.ts)??0))||"-"})},{key:"size",label:"size",cls:"s-atop-col-runtime",kind:"number",sortable:!1,defaultWidth:80,minWidth:64,render:t=>nt(t.size)},{key:"path",label:"path",kind:"text",sortable:!1,defaultWidth:360,minWidth:160,maxWidth:800,render:t=>n.jsx("span",{title:t.transcriptPath,children:t.cwd??t.transcriptPath})}];function z(t){const i=t?.trim();if(!i)return null;const r=F(i);return r.endsWith(".jsonl")?r.slice(0,-6):r}function F(t){const i=t.replace(/[\\/]+$/,"");return i.split(/[\\/]/).filter(Boolean).at(-1)??i}function et(t){const r=t.replace(/[\\/]+$/,"").split(/[\\/]/).filter(Boolean);return r.pop(),r.at(-1)??""}function st(t){return t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"unknown"}function nt(t){if(!Number.isFinite(t)||t<0)return"-";if(t<1024)return`${t} B`;const i=t/1024;if(i<1024)return`${i.toFixed(i>=10?0:1)} KiB`;const r=i/1024;return`${r.toFixed(r>=10?0:1)} MiB`}function at(t,i){return i?[t.refId,t.sessionId??"",t.source,t.project,t.cwd??"",t.transcriptPath,t.lastEvent?.summary??"",t.process?.command??""].join(" ").toLowerCase().includes(i.toLowerCase()):!0}function B(t){return`${t.source}\0${t.cwd??""}`}function ot(t){return`${t.source}\0${t.cwd??""}`}function it(t,i,r){if(!t?.transcripts?.length)return[];const d=new Map;for(const s of i){const l=d.get(s.sessionId);(!l||s.ts>l.ts)&&d.set(s.sessionId,s)}const h=new Map;for(const s of t.processes){if(!s.cwd)continue;const l=h.get(B(s));(!l||s.pid<l.pid)&&h.set(B(s),s)}return t.transcripts.map(s=>{const l=z(s.sessionId)??z(s.transcriptPath);if(!l)return null;const u=s.sessionId?d.get(s.sessionId)??null:null,x=h.get(ot(s))??null,m=Math.max(s.mtimeMs,u?.ts??0),j=!!x||r-m<=Z,p=s.project?.trim()||(s.cwd?F(s.cwd):et(s.transcriptPath))||"unknown";return{refId:l,source:s.source||"unknown",project:p,cwd:s.cwd,transcriptPath:s.transcriptPath,sessionId:s.sessionId,mtimeMs:s.mtimeMs,size:s.size,status:j?"run":"idle",statusLabel:j?"active":"idle",lastEvent:u,process:x}}).filter(s=>s!==null).sort((s,l)=>{const u=Math.max(s.mtimeMs,s.lastEvent?.ts??0);return Math.max(l.mtimeMs,l.lastEvent?.ts??0)-u||s.project.localeCompare(l.project)})}function Xt({navigate:t}){const{route:i}=X(),[r]=o.useState(()=>W(D,P)),[d,h]=o.useState(r),[s,l]=o.useState(()=>W(_,P)?.events??[]),[u,x]=o.useState(r===null),[m,j]=o.useState(""),[p,S]=o.useState("all"),[y,k]=o.useState(0),[N,C]=o.useState(null),[T,V]=o.useState(Date.now()),b=o.useRef(null),I=o.useCallback(async()=>{C(null);try{h(await L(D))}catch(e){C(e instanceof Error?e.message:String(e))}finally{x(!1)}},[]);o.useEffect(()=>{I();const e=setInterval(()=>{I()},q);return()=>clearInterval(e)},[I]),o.useEffect(()=>{let e=!1;return(async()=>{try{const a=await L(_);e||l(a.events??[])}catch{}})(),()=>{e=!0}},[]),G(e=>{l(a=>a.length>=$?[...a.slice(a.length-$+1),e]:[...a,e])}),o.useEffect(()=>{const e=setInterval(()=>V(Date.now()),15e3);return()=>clearInterval(e)},[]);const f=o.useMemo(()=>it(d,s,T),[d,s,T]),H=o.useMemo(()=>[...new Set(f.map(e=>e.source))].sort(),[f]),c=o.useMemo(()=>f.filter(e=>(p==="all"||e.source===p)&&at(e,m.trim())),[f,p,m]);o.useEffect(()=>{y>=c.length&&k(Math.max(0,c.length-1))},[c.length,y]);const M=o.useCallback(e=>{e&&Q(t,{view:"sessions",sessionId:e.refId},{returnTo:i})},[t,i]);o.useEffect(()=>{const e=a=>{const E=a.target,A=E instanceof HTMLInputElement||E instanceof HTMLTextAreaElement||(E?.isContentEditable??!1);if(a.key==="/"&&!A){a.preventDefault(),b.current?.focus();return}if(A){a.key==="Escape"&&E===b.current&&(j(""),b.current?.blur());return}if(a.key==="ArrowDown"||a.key==="j"){a.preventDefault(),k(w=>c.length===0?0:Math.min(c.length-1,w+1));return}if(a.key==="ArrowUp"||a.key==="k"){a.preventDefault(),k(w=>Math.max(0,w-1));return}(a.key==="Enter"||a.key==="o")&&(a.preventDefault(),M(c[y]))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[c,y,M]);const K=N?[]:c,g=o.useCallback(e=>`${e.source}:${e.transcriptPath}`,[]),v=o.useMemo(()=>new Map(c.map((e,a)=>[g(e),a])),[c,g]);return n.jsxs("div",{className:"s-atop s-atop--sessions",children:[n.jsxs("div",{className:"s-atop-fbar",children:[n.jsxs("label",{className:"s-atop-search",children:[n.jsx("span",{className:"s-atop-search-prompt",children:"/"}),n.jsx("input",{ref:b,className:"s-atop-search-input",placeholder:"filter sessions",value:m,onChange:e=>j(e.target.value)}),n.jsx("kbd",{className:"s-atop-search-kbd",children:"/"})]}),n.jsx("span",{className:"s-atop-fbar-label",children:"source"}),n.jsxs("button",{type:"button",className:`s-atop-pill${p==="all"?" s-atop-pill--on":""}`,onClick:()=>S("all"),children:["all",n.jsx("span",{className:"s-atop-pill-ct",children:f.length})]}),H.map(e=>n.jsxs("button",{type:"button",className:`s-atop-pill${p===e?" s-atop-pill--on":""}`,onClick:()=>S(e),children:[e,n.jsx("span",{className:"s-atop-pill-ct",children:f.filter(a=>a.source===e).length})]},e)),n.jsx("div",{className:"s-atop-fbar-spacer"})]}),n.jsx(O,{rows:K,columns:tt,rowId:g,storageKey:"openscout.sessions.cols",rowBindings:e=>({onMouseEnter:()=>{const a=v.get(e);a!=null&&k(a)},onFocus:()=>{const a=v.get(e);a!=null&&k(a)}}),onRowClick:e=>M(e),rowClassName:e=>v.get(g(e))===y?"s-atop-row--selected":void 0,empty:N?{title:"Discovery failed",body:N}:{title:"No raw sessions",body:m?"No sessions match the current filter.":"No transcript sessions were discovered."},loading:u,density:"compact",className:"s-atop-data-table",ariaLabel:"Raw sessions"}),n.jsxs("div",{className:"s-atop-keys",children:[n.jsxs("span",{children:[n.jsx("kbd",{children:"/"}),"filter"]}),n.jsxs("span",{children:[n.jsx("kbd",{children:"j/k"}),"select"]}),n.jsxs("span",{children:[n.jsx("kbd",{children:"enter"}),"open"]}),n.jsx("span",{className:"s-atop-keys-spacer"}),n.jsxs("span",{className:"s-atop-keys-count",children:[n.jsx("strong",{children:c.length})," sessions"]})]})]})}export{Xt as RawSessionsTable};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e,r}from"./index-DMiGbrBt.js";import{u as w}from"./router-Bq5dwf78.js";import{a as p,b,c as g}from"./Provider-C7UKGHQy.js";import{S as j,a as E}from"./ScoutbotRealtimeVoiceCall-FMQOr1Np.js";import{d as _}from"./types-B0PlfpKc.js";import"./terminal-sessions-D5CIR2OL.js";import"./api-h5zurxmi.js";import"./sse-CjIkKo46.js";import"./index-BWHgHrtv.js";import"./surface-activity-B1rgWB1i.js";import"./colors-BtO5_zlx.js";import"./scoutbot-BTIErYHo.js";import"./ContextMenu-bARZqTzD.js";import"./DocumentFocusViewer-BeVwwl26.js";import"./createLucideIcon-OpA4Amw5.js";import"./TextDocumentSurface-BpAw4eQS.js";/* empty css */import"./file-text-BODxCjcz.js";import"./x-D3GElQbe.js";import"./chevron-right-XiIHsk4m.js";import"./code-xml-B6jOCM4V.js";import"./arrow-left-DEZzHiPS.js";import"./scout-voice-CU5c0LGi.js";import"./fx-z37u1o2z.js";import"./keyboard-nav-2kv_tGUS.js";import"./MessageComposerSuggestions-DpxN9WiB.js";import"./NewChatComposer-Cs6OsxK6.js";import"./runtime-picker-Bcl5iIX5.js";import"./voice-levels-Dcr3jglk.js";import"./loader-circle-CbHjZsz1.js";import"./index-CJXzfjo9.js";import"./HarnessMark-Cbv3Ib0c.js";import"./conversation-model-B47vYmWN.js";import"./time-DltNTpLl.js";import"./NewChatOrigin-Bk2OyVjI.js";import"./agent-chat-Bfjd9y6c.js";import"./model-Co0zkMIc.js";import"./text-DsBWV_4k.js";import"./chevron-down-BGk5qoEw.js";import"./search-CWfZtOt2.js";import"./radio-Bz8ZePxj.js";import"./plus--b1raV_O.js";function N({dictationActive:t=!1,autoStart:c=!1}){const a=w(p,!1),{enabled:l,state:i,leaseId:u,startCall:f,endCall:x}=b(),h=r.useRef(!1),n=r.useRef(null),[m,S]=r.useState(()=>window.innerWidth>=720&&window.innerHeight>=520?"page":"compact"),s=window.webkit?.messageHandlers?.scoutRealtimeVoice;return r.useEffect(()=>{const o=()=>{S(window.innerWidth>=720&&window.innerHeight>=520?"page":"compact")};return o(),window.addEventListener("resize",o),()=>window.removeEventListener("resize",o)},[]),r.useEffect(()=>{s?.postMessage({kind:"session-state",state:i,leaseId:u})},[u,s,i]),r.useEffect(()=>{const o=()=>{if(n.current)return n.current;const d=x().finally(()=>{n.current===d&&(n.current=null)});return n.current=d,d},v=()=>{o()};return window.__scoutRealtimeVoiceStop=o,window.addEventListener(g,v),window.__scoutRealtimeVoiceStopRequested&&o(),()=>{window.removeEventListener(g,v),window.__scoutRealtimeVoiceStop===o&&delete window.__scoutRealtimeVoiceStop}},[x]),r.useEffect(()=>{!c||t||!a||!l||h.current||i!=="idle"&&i!=="ended"&&i!=="error"||(h.current=!0,f())},[c,t,a,l,f,i]),a?l?e.jsxs("div",{className:"flex h-full flex-col overflow-hidden",children:[e.jsx(j,{state:i,onMinimize:s?()=>s.postMessage("minimize"):void 0,onExpand:s?()=>s.postMessage(m==="page"?"restore":"expand"):void 0,layout:m}),e.jsx(E,{dictationActive:t,layout:m})]}):e.jsxs("div",{className:"flex h-full flex-col justify-center gap-2 p-4",children:[e.jsx("p",{className:"font-mono text-xs uppercase tracking-[0.12em] text-[var(--scout-chrome-ink-faint)]",children:"Live voice is disabled"}),e.jsx("p",{className:"text-sm leading-snug text-[var(--scout-chrome-ink-faint)]",children:"Enable realtime voice in Settings → Voice. The footer Voice control starts and manages calls."})]}):e.jsxs("div",{className:"flex h-full flex-col justify-center gap-2 p-4",children:[e.jsx("p",{className:"font-mono text-xs uppercase tracking-[0.12em] text-[var(--scout-chrome-ink-faint)]",children:"Live voice is off"}),e.jsxs("p",{className:"text-sm leading-snug text-[var(--scout-chrome-ink-faint)]",children:["Turn on the ",e.jsx("span",{className:"font-mono",children:p})," flag to hold live conversations with Scoutbot. Calls use the configured OpenAI API account."]})]})}function fe(){const t=w(p,!1),{enabled:c,state:a}=b();return!t||!c?e.jsx(N,{}):e.jsxs("main",{className:"flex h-full min-h-0 flex-col overflow-hidden bg-[var(--scout-chrome-bg)]",children:[e.jsxs("div",{className:"border-b border-[var(--scout-chrome-border-soft)] px-6 py-5",children:[e.jsx("p",{className:"font-mono text-xs uppercase tracking-[0.14em] text-[var(--scout-chrome-ink-faint)]",children:"Scoutbot"}),e.jsx("h1",{className:"mt-1 text-3xl font-medium text-[var(--scout-chrome-ink-strong)]",children:"Live voice"}),e.jsx("p",{className:"mt-1 max-w-2xl text-xs leading-relaxed text-[var(--scout-chrome-ink-faint)]",children:"Hold a live conversation, inspect navigation attempts, and audit what Scoutbot tried without leaving the call."})]}),e.jsx("div",{className:"min-h-0 flex-1 p-5",children:e.jsxs("section",{className:"mx-auto flex h-full min-h-[26rem] w-full max-w-5xl flex-col overflow-hidden rounded-xl border border-[color-mix(in_srgb,var(--hud-ink)_11%,transparent)] bg-[color-mix(in_srgb,var(--scout-chrome-bg)_96%,black)] shadow-[0_18px_48px_rgba(0,0,0,0.24)]",children:[e.jsx(j,{state:a,layout:"page"}),e.jsx(E,{dictationActive:!1,layout:"page"})]})})]})}const xe=_({id:"voice",label:"Live voice",route:{view:"voice"},webPath:"/voice",screen:"RealtimeVoiceScreen",embed:{path:"/embed/voice",profile:"macos.voice",rootClassName:"s-voice-embed",chrome:{showSecondaryNav:!1,showPageStatusBar:!1},hosts:{macos:!0},resolveEmbedProps:t=>({dictationActive:t.get("dictationActive")==="1",autoStart:t.get("autoStart")==="1"})}});export{fe as RealtimeVoicePage,N as RealtimeVoiceScreen,xe as scoutSurface};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{r as l,j as n}from"./index-DMiGbrBt.js";import{a as X,p as Z}from"./ui-LM8pS8qE.js";/* empty css */import{a as T,s as q,l as ee,L as te,f as K,S as ne,r as se,b as re,c as _,d as ie,u as ae,V as A,C as H,D as le,e as oe}from"./usePierreRuntime-wC-yMtBb.js";import{C as ce}from"./chevron-down-BGk5qoEw.js";import{C as de}from"./check-DjgFiBxb.js";import{L as ue}from"./loader-circle-CbHjZsz1.js";import{S as fe}from"./send-horizontal-Bg5-QggH.js";import{c as he}from"./createLucideIcon-OpA4Amw5.js";import{C as me}from"./code-xml-B6jOCM4V.js";import{X as pe}from"./x-D3GElQbe.js";import{r as O,a as V,f as Y}from"./cache-Dr0why2k.js";import{M as xe}from"./message-square-DSaGpjFU.js";import{R as ge}from"./refresh-cw-BBmAnCB7.js";import{P as be}from"./plus--b1raV_O.js";import{a as B}from"./api-h5zurxmi.js";const ye=[["path",{d:"M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35",key:"1wthlu"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m5 16-3 3 3 3",key:"331omg"}],["path",{d:"m9 22 3-3-3-3",key:"lsp7cz"}]],je=he("file-code-corner",ye);function ke({snapshot:e,selectedFile:t,targets:r,targetId:s,onTargetId:i,draft:c,onDraft:h,contextItems:o,onRemoveContextItem:x,pending:a,status:d,error:g,textareaRef:C,onSubmit:$}){const[u,y]=l.useState(!1),b=l.useRef(null),w=r.find(m=>m.id===s)??null,p=w?.label??"Scout",j=r[0]?.id??null,S=t?T(t):null,v=(c.trim().length>0||o.length>0)&&!a,P=l.useMemo(()=>[...r.map(m=>({id:m.id,label:m.label,suffix:m.id===j?"best context":null})),{id:"scout",label:"Scout",suffix:null}],[j,r]);return l.useEffect(()=>{if(!u)return;const m=k=>{const D=b.current;D&&k.target instanceof Node&&D.contains(k.target)||y(!1)};return document.addEventListener("pointerdown",m),()=>document.removeEventListener("pointerdown",m)},[u]),n.jsxs("div",{className:"rd-comment",children:[o.length>0?n.jsx("div",{className:"rd-comment-context","aria-label":"Included diff context",children:o.map(m=>n.jsx(Ce,{item:m,disabled:a,onRemove:x},m.id))}):null,n.jsxs("div",{className:"rd-comment-main",children:[n.jsxs("div",{className:"rd-target-picker",ref:b,children:[n.jsxs("button",{type:"button",className:"rd-target-button",onClick:()=>y(m=>!m),onKeyDown:m=>{m.stopPropagation(),m.key==="Escape"&&y(!1)},disabled:a,"aria-label":"Diff comment target","aria-haspopup":"listbox","aria-expanded":u,title:"Diff comment target",children:[n.jsx("span",{children:p}),n.jsx(ce,{size:13,strokeWidth:2,"aria-hidden":!0})]}),u?n.jsx("div",{className:"rd-target-menu",role:"listbox","aria-label":"Diff comment target",children:P.map(m=>{const k=m.id===(w?.id??"scout");return n.jsxs("button",{type:"button",className:"rd-target-option",role:"option","aria-selected":k,onClick:()=>{i(m.id),y(!1)},children:[n.jsx("span",{className:"rd-target-option-label",children:m.label}),m.suffix?n.jsx("span",{className:"rd-target-option-suffix",children:m.suffix}):null,n.jsx("span",{className:"rd-target-option-check","aria-hidden":!0,children:k?n.jsx(de,{size:12,strokeWidth:2.2}):null})]},m.id)})}):null]}),n.jsx("textarea",{ref:C,value:c,onChange:m=>h(m.currentTarget.value),onKeyDown:m=>{m.stopPropagation(),(m.metaKey||m.ctrlKey)&&m.key==="Enter"&&(m.preventDefault(),$())},rows:1,disabled:a,placeholder:o.length>0?`Send to ${p} with included context`:"Leave a note on this diff…","aria-label":"Diff comment"}),n.jsxs("button",{type:"button",className:"rd-comment-send",disabled:!v,onClick:$,title:"Send diff comment","aria-label":"Send diff comment",children:[a?n.jsx(ue,{size:13,className:"rd-comment-spin","aria-hidden":!0}):n.jsx(fe,{size:13,"aria-hidden":!0}),n.jsx("span",{children:a?"Sending":"Send"})]})]}),n.jsx("div",{className:"rd-comment-meta",children:g?n.jsx("span",{className:"err",children:g}):d?n.jsx("span",{className:"ok",children:d}):n.jsxs("span",{children:[e.scope?.kind==="session"?"Session diff":"Worktree diff",S?` · ${S}`:""]})})]})}function Ce({item:e,disabled:t,onRemove:r}){const s=e.kind==="file"?je:me;return n.jsxs("div",{className:`rd-context-item ${e.kind}`,children:[n.jsxs("div",{className:"rd-context-head",children:[n.jsx("span",{className:"rd-context-icon","aria-hidden":!0,children:n.jsx(s,{size:12,strokeWidth:2})}),n.jsx("span",{className:"rd-context-label",title:e.label,children:e.label}),n.jsx("span",{className:"rd-context-detail",children:e.detail}),n.jsx("button",{type:"button",className:"rd-context-remove",onClick:()=>r(e.id),disabled:t,title:"Remove included context","aria-label":"Remove included context",children:n.jsx(pe,{size:11,strokeWidth:2.2,"aria-hidden":!0})})]}),e.preview?n.jsx("pre",{className:"rd-context-preview",children:e.preview}):null]})}function $e({heading:e,worktreePath:t,snapshot:r,freshness:s,activeLayer:i,onLayer:c,layout:h,onLayout:o,refreshing:x,onRefresh:a,onFocusComment:d,onClose:g,onOpenAsPage:C}){const{dir:$}=q(t);return n.jsxs("div",{className:"rd-header",children:[n.jsxs("div",{className:"rd-header-id",children:[n.jsxs("div",{className:"rd-header-title",children:[n.jsx("span",{className:"rd-header-name",title:t,children:e}),r.scope?n.jsx(Ne,{snapshot:r}):null,$?n.jsx("span",{className:"rd-header-dir",children:$}):null]}),n.jsx("div",{className:"rd-header-sub",children:n.jsx(ve,{layers:r.layers,activeLayer:i,onLayer:c})}),n.jsx(we,{freshness:s,generatedAt:r.generatedAt})]}),n.jsxs("div",{className:"rd-header-actions",children:[n.jsx("button",{type:"button",className:"rd-close","aria-label":"Comment on diff",title:"Comment on diff",onClick:d,children:n.jsx(xe,{size:14,strokeWidth:2,"aria-hidden":!0})}),n.jsxs("div",{className:"rd-segmented",role:"group","aria-label":"Diff layout",children:[n.jsx("button",{type:"button",className:h==="unified"?"on":"","aria-pressed":h==="unified",onClick:()=>o("unified"),children:"Unified"}),n.jsx("button",{type:"button",className:h==="split"?"on":"","aria-pressed":h==="split",onClick:()=>o("split"),children:"Split"})]}),n.jsx("button",{type:"button",className:`rd-close${x?" spinning":""}`,"aria-label":"Refresh diff",title:"Fetch fresh diff",onClick:a,disabled:x,children:n.jsx(ge,{size:14,strokeWidth:2,"aria-hidden":!0})}),C?n.jsx("button",{type:"button",className:"rd-close","aria-label":"Open diff as page",title:"Open as full page",onClick:C,children:"↗"}):null,g?n.jsx("button",{type:"button",className:"rd-close","aria-label":"Close",onClick:g,children:"✕"}):null]})]})}function Se({snapshot:e}){const t=[];e.coverage.truncatedLayers>0&&t.push({level:"warning",text:`${e.coverage.truncatedLayers} layer${e.coverage.truncatedLayers===1?"":"s"} truncated — the native diff hit a size budget; some files or hunks are omitted.`}),e.coverage.scanBudgetReached&&t.push({level:"warning",text:"Scan budget reached — this diff is partial."});for(const r of e.diagnostics)t.push({level:r.level,text:r.path?`${r.message} (${r.path})`:r.message});return t.length===0?null:n.jsx(n.Fragment,{children:t.map((r,s)=>n.jsxs("div",{className:`rd-banner ${r.level}`,children:[n.jsx("span",{className:"rd-banner-dot","aria-hidden":!0}),n.jsx("span",{children:r.text})]},s))})}function Ne({snapshot:e}){const t=e.scope;if(!t)return null;const r=t.kind==="session"?`Session · ${t.filteredPaths.length} files`:t.filteredPaths.length>0?`Filtered · ${t.filteredPaths.length} files`:"Worktree",s=t.kind==="session"?`${t.label}: path-filtered diff from ${t.changedFiles} changed / ${t.touchedFiles} touched session files`:t.label;return n.jsx("span",{className:`rd-scope-pill ${t.kind}`,title:s,children:r})}function we({freshness:e,generatedAt:t}){const r=e?.fetchedAt??t,s=Math.max(0,Date.now()-r),i=e?.cacheHit?`Prefetched ${O(s)}`:`Updated ${O(s)}`;return n.jsxs("div",{className:"rd-freshness",title:new Date(r).toLocaleString(),children:[n.jsx("span",{children:i}),e?.refreshing?n.jsx("span",{children:"Refreshing…"}):null,e?.refreshError?n.jsx("span",{children:"Refresh failed"}):null]})}function ve({layers:e,activeLayer:t,onLayer:r}){return n.jsx("div",{className:"rd-layers",role:"tablist","aria-label":"Diff layers",children:e.map(s=>{const i=ee(s);return n.jsxs("button",{type:"button",role:"tab","aria-selected":s.kind===t,className:"rd-layer-tab"+(s.kind===t?" on":""),onClick:()=>r(s.kind),title:s.shortstat??void 0,children:[n.jsx("span",{children:te[s.kind]??s.kind}),n.jsx("span",{className:"rd-layer-stat",children:s.files.length===0?"clean":n.jsxs(n.Fragment,{children:[s.files.length,"f"," ",n.jsxs("span",{style:{color:"var(--rd-add)"},children:["+",i.add]})," ",n.jsxs("span",{style:{color:"var(--rd-del)"},children:["−",i.del]}),s.truncated?" ⚠":""]})})]},s.kind)})})}const G="openscout.repo-diff.files-rail-width",U=268,Ie=196,De=520;function Re(e,t){if(e.length<=t)return e;const r=e.lastIndexOf(".");if(r<=0){const x=Math.max(1,Math.floor((t-1)/2)),a=t-x-1;return e.slice(0,x)+"…"+e.slice(-Math.max(1,a))}const s=e.slice(0,r),i=e.slice(r),c=t-i.length-1;if(c<2){const x=Math.max(1,t-i.length-1);return s.slice(0,x)+"…"+i}const h=Math.max(1,Math.floor(c/2)),o=Math.max(1,c-h);return s.slice(0,h)+"…"+s.slice(-o)+i}function Le(e,t){return Math.max(8,Math.floor((e-178-t*14)/6.7))}function W(e){return Math.max(Ie,Math.min(De,Math.round(e)))}function Pe(){if(typeof window>"u")return U;const e=Number(window.localStorage.getItem(G));return Number.isFinite(e)?W(e):U}function Me(e){const t={name:"",path:"",firstIndex:Number.MAX_SAFE_INTEGER,children:new Map,files:[]};for(const r of e){t.firstIndex=Math.min(t.firstIndex,r.index);const s=r.dir?r.dir.split("/").filter(Boolean):[];let i=t;for(const c of s){const h=i.path?`${i.path}/${c}`:c;let o=i.children.get(c);o||(o={name:c,path:h,firstIndex:r.index,children:new Map,files:[]},i.children.set(c,o)),o.firstIndex=Math.min(o.firstIndex,r.index),i=o}i.files.push(r)}return t}function J(e){let t=e.files.length;for(const r of e.children.values())t+=J(r);return t}function Ee({layer:e,selectedFileKey:t,onSelect:r,onIncludeFile:s}){const[i,c]=l.useState(Pe),[h,o]=l.useState(()=>new Set),x=l.useMemo(()=>(e?.files??[]).map((u,y)=>{const b=K(u,y),w=T(u),{name:p,dir:j}=q(w),S=(u.status==="renamed"||u.status==="copied")&&u.oldPath&&u.newPath&&u.oldPath!==u.newPath;return{file:u,index:y,key:b,display:w,name:p,dir:j,renamed:!!S}}),[e]),a=l.useMemo(()=>Me(x),[x]),d=l.useCallback(u=>{o(y=>{const b=new Set(y);return b.has(u)?b.delete(u):b.add(u),b})},[]),g=l.useCallback(u=>{u.preventDefault();const y=u.clientX,b=i,w=j=>{c(W(b+j.clientX-y))},p=()=>{window.removeEventListener("pointermove",w),window.removeEventListener("pointerup",p),c(j=>{const S=W(j);return window.localStorage.setItem(G,String(S)),S})};window.addEventListener("pointermove",w),window.addEventListener("pointerup",p,{once:!0})},[i]),C=(u,y)=>n.jsx(Fe,{entry:u,depth:y,railWidth:i,selected:u.key===t,onSelect:r,onIncludeFile:s},u.key),$=(u,y)=>{const b=[],w=[...u.children.values()].sort((p,j)=>p.firstIndex!==j.firstIndex?p.firstIndex-j.firstIndex:p.name.localeCompare(j.name));for(const p of w){const j=h.has(p.path);b.push(n.jsxs("button",{type:"button",className:"rd-dir-row",style:{paddingLeft:12+y*14},onClick:()=>d(p.path),title:p.path,children:[n.jsx("span",{className:"rd-dir-caret",children:j?"›":"⌄"}),n.jsx("span",{className:"rd-dir-name",children:p.name}),n.jsx("span",{className:"rd-dir-count",children:J(p)})]},`dir:${p.path}`)),j||b.push(...$(p,y+1))}for(const p of u.files)b.push(C(p,y));return b};return n.jsxs("div",{className:"rd-rail",style:{width:i},children:[n.jsx("div",{className:"rd-rail-head",children:e?`Changed files · ${e.files.length}`:"Changed files"}),n.jsx("div",{className:"rd-rail-list",children:$(a,0)}),n.jsx("div",{className:"rd-rail-resizer",role:"separator","aria-orientation":"vertical","aria-label":"Resize file navigation",onPointerDown:g})]})}function Fe({entry:e,depth:t,railWidth:r,selected:s,onSelect:i,onIncludeFile:c}){const{file:h,key:o,display:x,name:a,dir:d,renamed:g}=e,C=Le(r,t),$=Re(a,C);return n.jsxs("div",{className:"rd-file-row"+(s?" on":""),title:g?`${h.oldPath} → ${h.newPath}`:x,children:[n.jsxs("button",{type:"button",className:"rd-file-pick",style:{paddingLeft:18+t*14},onClick:()=>i(o),children:[n.jsx("span",{className:`rd-file-glyph ${h.status}`,children:ne[h.status]}),n.jsxs("span",{className:"rd-file-id",children:[n.jsx("span",{className:"rd-file-name",children:$}),n.jsx("span",{className:"rd-file-dir",children:g?`${h.oldPath} → ${d||a}`:d}),n.jsx(Te,{file:h})]})]}),n.jsx("span",{className:"rd-file-churn",children:h.binary?n.jsx("span",{className:"add",style:{color:"var(--muted)"},children:"bin"}):n.jsxs(n.Fragment,{children:[n.jsxs("span",{className:"add",children:["+",h.additions??0]}),n.jsxs("span",{className:"del",children:["−",h.deletions??0]})]})}),n.jsx("button",{type:"button",className:"rd-file-include",onClick:u=>{u.stopPropagation(),c(h,o)},"aria-label":`Include ${x} in comment`,title:"Include in comment",children:n.jsx(be,{size:12,strokeWidth:2,"aria-hidden":!0})})]})}function Te({file:e}){const t=[];return e.binary&&t.push("BINARY"),e.truncated&&t.push("TRUNCATED"),e.status==="conflict"&&t.push("CONFLICT"),t.length===0?null:n.jsx("span",{className:"rd-file-tags",children:t.map(r=>n.jsx("span",{className:"rd-file-tag",children:r},r))})}function Ae(e){switch(e?.trim().toLowerCase()){case"active":case"working":case"running":case"in_turn":return 80;case"queued":case"waiting":case"waking":case"in_flight":return 50;case"idle":case"available":return 25;case"offline":case"retired":case"stale":return-40;default:return 0}}function Ke(e){return e.newPath??e.oldPath??"(unknown)"}function Q(e){const t=e.scope?.kind==="session"?e.scope.agentId:null,r=new Map;for(const s of e.scout.hints)s.agentId&&r.set(s.agentId,(r.get(s.agentId)??0)+1);return e.scout.agents.map(s=>({id:s.id,label:X(s),score:Ae(s.state)+(s.id===t?1e3:0)+(r.get(s.id)??0)*10})).sort((s,i)=>{const c=i.score-s.score;return c!==0?c:s.label.localeCompare(i.label)})}function We(e){return Q(e)[0]??null}function ze(e){const t=e.files.reduce((r,s)=>({add:r.add+(s.additions??0),del:r.del+(s.deletions??0)}),{add:0,del:0});return`${e.kind}: ${e.files.length} file${e.files.length===1?"":"s"}, +${t.add} -${t.del}${e.truncated?", truncated":""}`}function z(e){const t=e.binary?"binary":`+${e.additions??0} -${e.deletions??0}`;return`${e.status}: ${Ke(e)} (${t}${e.truncated?", truncated":""})`}function _e(e){const t=e.scope;return t?t.kind==="session"?`session ${t.sessionId??t.refId??"(unknown)"} (${t.changedFiles} changed / ${t.touchedFiles} touched files, ${t.include})`:t.filteredPaths.length>0?`filtered worktree (${t.filteredPaths.length} paths)`:"worktree":"worktree"}function He(e){const{comment:t,includedContext:r=[],snapshot:s,activeLayer:i,selectedFile:c}=e,o=((i?s.layers.find(d=>d.kind===i)??null:null)?.files??s.layers.flatMap(d=>d.files)).slice(0,12).map(z),x=s.scout.agents.map(d=>X(d)).slice(0,8),a=["Operator comment on repo diff:",t,"","Repo Diff context:",`- Worktree: ${s.worktreePath}`,`- Scope: ${_e(s)}`,`- Active layer: ${i??"none"}`];return r.length>0&&a.splice(3,0,"Included diff context:",...r.map(d=>d.trim()).filter(Boolean),""),c&&a.push(`- Selected file: ${z(c)}`),a.push(`- Layers: ${s.layers.map(ze).join("; ")}`),x.length>0&&a.push(`- Attached agents: ${x.join(", ")}`),s.scout.sessions.length>0&&a.push(`- Sessions: ${s.scout.sessions.map(d=>d.id).slice(0,8).join(", ")}`),o.length>0&&a.push(`- Changed files: ${o.join(", ")}`),s.diagnostics.length>0&&a.push(`- Diagnostics: ${s.diagnostics.map(d=>d.message).join("; ")}`),a.join(`
|
|
2
|
-
`)}function Oe(e){const{snapshot:t,activeLayer:r,file:s}=e,i=[r??"diff",z(s)];return t.scope?.kind==="session"&&i.push(`session ${t.scope.sessionId??t.scope.refId??"scope"}`),`[Diff context: ${i.join(" · ")}]`}function Be(e,t,r){return!e||!t?null:e.files.find((s,i)=>r(s,i)===t)??null}function Ue(e,t=120){const r=e.replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t-3)}...`:r}function Xe(e,t=7){const r=e.trimEnd().split(`
|
|
3
|
-
`),s=r.slice(0,t),i=r.length-s.length;return i>0?`${s.join(`
|
|
4
|
-
`)}
|
|
5
|
-
... ${i} more line${i===1?"":"s"}`:s.join(`
|
|
6
|
-
`)}function qe(e){return e.newLine!=null?`L${e.newLine}`:e.oldLine!=null?`old L${e.oldLine}`:"line"}function Ve(e){return e.side==="add"?"+":e.side==="del"?"-":" "}function Ye(e){const{snapshot:t,activeLayer:r,file:s}=e,i=T(s),c=s.binary?"binary":`+${s.additions??0} -${s.deletions??0}`;return{id:`file:${r??"diff"}:${i}`,kind:"file",label:i,detail:`${r??"diff"} · ${s.status} · ${c}`,preview:null,snippet:Oe({snapshot:t,activeLayer:r,file:s})}}function Ge(e){const{line:t}=e,r=Ve(t);return{id:`line:${t.layer}:${t.filePath}:${t.side}:${t.oldLine??""}:${t.newLine??""}`,kind:"line",label:`${t.filePath}:${qe(t)}`,detail:`${t.layer} · ${r}`,preview:`${r} ${Ue(t.text,180)}`,snippet:se({line:t})}}function Je(e){const{selection:t}=e,r=t.filePath??"diff selection",s=t.text.trim().split(`
|
|
7
|
-
`).filter(Boolean).length;return{id:`selection:${t.layer??"diff"}:${r}:${t.text}`,kind:"selection",label:r,detail:`${t.layer??"diff"} · ${s} line${s===1?"":"s"}`,preview:Xe(t.text),snippet:re({selection:t})}}function Qe({snapshot:e,activeLayer:t,selectedFile:r,setSelectedFileKey:s,resetKey:i}){const[c,h]=l.useState(""),[o,x]=l.useState([]),[a,d]=l.useState("scout"),[g,C]=l.useState(!1),[$,u]=l.useState(!1),[y,b]=l.useState(null),[w,p]=l.useState(null),j=l.useRef(null),S=l.useMemo(()=>e?Q(e):[],[e]),v=l.useMemo(()=>e?We(e):null,[e]);l.useEffect(()=>{h(""),x([]),C(!1),b(null),p(null)},[i]),l.useEffect(()=>{d(f=>g&&f==="scout"||S.some(N=>N.id===f)?f:v?.id??"scout")},[g,S,v?.id]);const P=l.useCallback(f=>{h(f),b(null),p(null)},[]),m=l.useCallback(f=>{C(!0),d(f)},[]),k=l.useCallback(f=>{x(N=>N.some(F=>F.id===f.id)?N:[...N,f]),b(null),p(null),queueMicrotask(()=>j.current?.focus())},[]),D=l.useCallback(f=>{x(N=>N.filter(F=>F.id!==f)),b(null),p(null)},[]),L=l.useCallback(async()=>{const f=c.trim();if(!f&&o.length===0||$||!e)return;const N=S.find(E=>E.id===a)??null,F=He({comment:f||"Please review the included diff context.",includedContext:o.map(E=>E.snippet),snapshot:e,activeLayer:t,selectedFile:r});u(!0),b(null),p(null);try{N?(await B("/api/ask",{method:"POST",body:JSON.stringify({body:F,targetAgentId:N.id,targetLabel:N.label,metadata:{source:"repo-diff",originSurface:"repo-diff",handoffKind:"repo-diff-comment",targetAgentId:N.id,worktreePath:e.worktreePath,activeLayer:t,selectedFile:r?T(r):null,scopeKind:e.scope?.kind??"worktree"}})}),b(`Sent to ${N.label}`)):(await B("/api/send",{method:"POST",body:JSON.stringify({body:F})}),b("Sent to Scout")),h(""),x([])}catch(E){p(E instanceof Error?E.message:String(E))}finally{u(!1)}},[t,o,c,$,a,S,r,e]),I=l.useCallback((f,N)=>{e&&(s(N),k(Ye({snapshot:e,activeLayer:t,file:f})))},[t,k,s,e]),M=l.useCallback(f=>{e&&k(Ge({line:f}))},[k,e]),R=l.useCallback(f=>{e&&k(Je({selection:f}))},[k,e]);return{targets:S,targetId:a,setTargetId:m,draft:c,setDraft:P,contextItems:o,removeContextItem:D,pending:$,status:y,error:w,textareaRef:j,submit:L,includeFileInComment:I,includeLineInComment:M,includeSelectionInComment:R}}function Ze({path:e,activeLayer:t,selectedFile:r,snapshotKey:s}){const i=r?T(r):null,c=`${e}\0${t??""}\0${i??""}\0${s}`,[h,o]=l.useState({layer:null,phase:"idle",error:null}),x=l.useRef(c),a=l.useMemo(()=>!t||!i?null:V(e,[t],{files:[i],tier:"patch",cacheScope:s}),[t,i,e,s]);return l.useEffect(()=>{if(x.current=c,!t||!i){o({layer:null,phase:"idle",error:null});return}if(a?.fresh){o({layer:a.snapshot.layers[0]??null,phase:"ready",error:null});return}o({layer:null,phase:"loading",error:null}),Y(e,[t],{files:[i],tier:"patch",cacheScope:s}).then(d=>{x.current===c&&o({layer:d.snapshot.layers[0]??null,phase:"ready",error:null})},d=>{x.current===c&&o(g=>({layer:g.layer,phase:"error",error:d instanceof Error?d.message:String(d)}))})},[t,a,i,e,c]),h}function et(e){const[t,r]=l.useState(null),[s,i]=l.useState(null),[c,h]=l.useState("split");l.useEffect(()=>{e&&h(e.render.preferredLayout==="stacked"?"unified":"split")},[e]),l.useEffect(()=>{if(!e)return;const d=e.layers.filter(g=>g.files.length>0)[0]??e.layers[0]??null;r(g=>g&&e.layers.some(C=>C.kind===g)?g:d?d.kind:null)},[e]);const o=l.useMemo(()=>!e||!t?null:e.layers.find(a=>a.kind===t)??null,[e,t]),x=l.useMemo(()=>Be(o,s,K),[o,s]);return l.useEffect(()=>{if(!o){i(null);return}i(a=>{const d=o.files.map((g,C)=>K(g,C));return a&&d.includes(a)?a:d[0]??null})},[o]),{activeLayer:t,setActiveLayer:r,layer:o,selectedFileKey:s,setSelectedFileKey:i,selectedFile:x,layout:c,setLayout:h}}function tt({path:e,layers:t,files:r,session:s,tier:i="summary",forceInitialLoad:c}){const h=t.join(","),o=l.useMemo(()=>h.split(","),[h]),x=(r??[]).join("\0"),a=s?`${s.sessionId??""}\0${s.agentId??""}\0${s.include??"changed"}`:"",d=l.useMemo(()=>({files:x?x.split("\0").filter(Boolean):void 0,tier:i,session:a?{sessionId:s?.sessionId??null,agentId:s?.agentId??null,include:s?.include??"changed"}:null}),[x,s?.agentId,s?.include,s?.sessionId,a,i]),[g,C]=l.useState(null),[$,u]=l.useState("loading"),[y,b]=l.useState(null),[w,p]=l.useState(null),j=l.useRef(null),S=l.useRef(!1);l.useEffect(()=>{j.current=g},[g]);const v=l.useCallback(async(m={})=>{const k=V(e,o,d),D=m.force===!0||c&&!S.current,L=m.preserveCurrent===!0&&j.current!=null;b(null),k&&!D?(C(k.snapshot),p(_(k,!0)),u("ready")):L?(p(I=>({fetchedAt:I?.fetchedAt??Date.now(),cacheHit:I?.cacheHit??!1,refreshing:!0,refreshError:null})),u("ready")):(u("loading"),p(null));try{const I=await Y(e,o,{force:D||k!=null,...d});D&&(S.current=!0),C(I.snapshot),p(ie(I,!1)),u("ready")}catch(I){const M=I instanceof Error?I.message:String(I);k?(p(_(k,!1,M)),u("ready")):L?(p(R=>R&&{...R,refreshing:!1,refreshError:M}),u("ready")):(b(M),u("error"))}},[c,e,o,d]);l.useEffect(()=>{v()},[v]);const P=l.useCallback(()=>{v({force:!0,preserveCurrent:!0})},[v]);return{snapshot:g,fetchPhase:$,fetchError:y,freshness:w,filesKey:x,sessionKey:a,requestedLayers:o,loadSnapshot:v,refreshSnapshot:P}}function bt({path:e,layers:t=oe,files:r,session:s,forceInitialLoad:i=!1,onClose:c,onOpenAsPage:h,className:o,title:x}){const{snapshot:a,fetchPhase:d,fetchError:g,freshness:C,filesKey:$,sessionKey:u,loadSnapshot:y,refreshSnapshot:b}=tt({path:e,layers:t,files:r,session:s,tier:"summary",forceInitialLoad:i}),{pierre:w,pierrePhase:p,pierreError:j,retryPierre:S}=ae(a),{activeLayer:v,setActiveLayer:P,layer:m,selectedFileKey:k,setSelectedFileKey:D,selectedFile:L,layout:I,setLayout:M}=et(a),R=Ze({path:e,activeLayer:v,selectedFile:L,snapshotKey:a?.render.renderKey??""}),f=Qe({snapshot:a,activeLayer:v,selectedFile:L,setSelectedFileKey:D,resetKey:`${e}\0${$}\0${u}`});if(d==="loading"&&!a)return n.jsx(A,{className:o,children:n.jsxs(H,{children:[n.jsx("div",{className:"rd-spinner","aria-hidden":!0}),n.jsxs("div",{className:"rd-center-title",children:["Reading ",s?"session":"worktree"," diff…"]}),n.jsx("div",{className:"rd-center-body",children:e})]})});if(d==="error"&&!a)return n.jsx(A,{className:o,children:n.jsxs(H,{children:[n.jsx("div",{className:"rd-center-title",children:"Couldn’t load the diff"}),n.jsx("div",{className:"rd-center-body",children:g??"The broker did not return a diff snapshot."}),n.jsx("div",{className:"rd-center-action",children:n.jsx("button",{type:"button",className:"rd-btn",onClick:()=>{y()},children:"Retry"})})]})});if(!a)return n.jsx(A,{className:o});const N=x??Z(a.worktreePath);return n.jsxs(A,{className:o,children:[n.jsx($e,{heading:N,worktreePath:a.worktreePath,snapshot:a,freshness:C,activeLayer:v,onLayer:P,layout:I,onLayout:M,refreshing:C?.refreshing===!0,onRefresh:b,onFocusComment:()=>{f.textareaRef.current?.scrollIntoView({block:"nearest"}),f.textareaRef.current?.focus()},onClose:c,onOpenAsPage:h}),n.jsx(Se,{snapshot:a}),n.jsxs("div",{className:"rd-body",children:[n.jsx(Ee,{layer:m,selectedFileKey:k,onSelect:D,onIncludeFile:f.includeFileInComment}),n.jsx(ke,{snapshot:a,selectedFile:L,targets:f.targets,targetId:f.targetId,onTargetId:f.setTargetId,draft:f.draft,onDraft:f.setDraft,contextItems:f.contextItems,onRemoveContextItem:f.removeContextItem,pending:f.pending,status:f.status,error:f.error,textareaRef:f.textareaRef,onSubmit:f.submit}),n.jsx(le,{layer:m,patchLayer:R.layer,patchPhase:R.phase,patchError:R.error,selectedFileKey:k,renderKey:a.render.renderKey,theme:a.render.preferredTheme,layout:I,pierre:w,pierrePhase:p,pierreError:j,onRetryPierre:S,onIncludeLineContext:f.includeLineInComment,onIncludeSelectionContext:f.includeSelectionInComment})]})]})}export{bt as RepoDiffViewer,bt as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RepoDiffViewer-D_exm6xK.js","assets/index-DMiGbrBt.js","assets/index-DxGoC5l5.css","assets/ui-LM8pS8qE.js","assets/usePierreRuntime-wC-yMtBb.js","assets/chevron-down-BGk5qoEw.js","assets/createLucideIcon-OpA4Amw5.js","assets/check-DjgFiBxb.js","assets/loader-circle-CbHjZsz1.js","assets/send-horizontal-Bg5-QggH.js","assets/code-xml-B6jOCM4V.js","assets/x-D3GElQbe.js","assets/cache-Dr0why2k.js","assets/api-h5zurxmi.js","assets/message-square-DSaGpjFU.js","assets/refresh-cw-BBmAnCB7.js","assets/plus--b1raV_O.js","assets/repo-diff-C9Qs-bEn.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{j as e,r as i,_ as s}from"./index-DMiGbrBt.js";/* empty css */const a=i.lazy(()=>s(()=>import("./RepoDiffViewer-D_exm6xK.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17])).then(r=>({default:r.RepoDiffViewer})));function t(){return e.jsx("div",{className:"rd-viewer","data-scout-theme":!0,children:e.jsx("div",{className:"rd-center",children:e.jsxs("div",{className:"rd-center-card",children:[e.jsx("div",{className:"rd-spinner","aria-hidden":!0}),e.jsx("div",{className:"rd-center-title",children:"Opening diff viewer…"})]})})})}function c(r){return e.jsx(i.Suspense,{fallback:e.jsx(t,{}),children:e.jsx(a,{...r})})}export{c as R};
|