@openscout/scout 0.2.91 → 0.2.92
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 +12 -4
- package/bin/scoutd +0 -0
- package/dist/build-manifest.json +3 -3
- package/dist/client/assets/{ActivityScreen-BUeb4ERK.js → ActivityScreen-DkUP7V7M.js} +1 -1
- package/dist/client/assets/{AddProjectForm-DtTfn4Zk.js → AddProjectForm-CpyytDf2.js} +1 -1
- package/dist/client/assets/{AgentAvatar-CneOa70z.js → AgentAvatar-D8ZtMluU.js} +1 -1
- package/dist/client/assets/{AgentConfigurationScreen-CkZ7EjZh.js → AgentConfigurationScreen-BlGI6fuM.js} +1 -1
- package/dist/client/assets/{AgentDefinitionsWorkspace-0Y3kqMtv.js → AgentDefinitionsWorkspace-CfaDVCVt.js} +1 -1
- package/dist/client/assets/{AgentDetailCard-Dtc02KUO.js → AgentDetailCard-BTiOmh-a.js} +1 -1
- package/dist/client/assets/{AgentFloorView-B5raPB_U.js → AgentFloorView-DjNLILLt.js} +1 -1
- package/dist/client/assets/{AgentInfoScreen-DFG4ElZD.js → AgentInfoScreen-DG5dlHb_.js} +1 -1
- package/dist/client/assets/{AgentLaneCard-BRAkw8YJ.js → AgentLaneCard-lfRNb7JD.js} +1 -1
- package/dist/client/assets/{AgentLaneChrome-T8QE5742.js → AgentLaneChrome-Dlwrbq3g.js} +1 -1
- package/dist/client/assets/{AgentLaneDetailSheet-C8RYotnv.js → AgentLaneDetailSheet-BzYzBfcW.js} +1 -1
- package/dist/client/assets/{AgentLaneSummaryResize-FyYweLo_.js → AgentLaneSummaryResize-6SOEWUnr.js} +1 -1
- package/dist/client/assets/AgentLanesEmbedScreen-Crxx1srt.js +1 -0
- package/dist/client/assets/{AgentLanesPreflight-Cil3dNwu.js → AgentLanesPreflight-C3uOiOzd.js} +1 -1
- package/dist/client/assets/{AgentLanesView-DPfO8MOo.js → AgentLanesView-ChNlmY-F.js} +1 -1
- package/dist/client/assets/{AgentLiveActions-DwScaVRF.js → AgentLiveActions-BJ5dIfL3.js} +1 -1
- package/dist/client/assets/{AgentSessions-DKoWA0Lm.js → AgentSessions-DpY0htZV.js} +1 -1
- package/dist/client/assets/{AgentsConsole-DoBIWGoq.js → AgentsConsole-CHyXrjhm.js} +1 -1
- package/dist/client/assets/{AgentsScreen-JuUiSuwY.js → AgentsScreen-BhCjX2lD.js} +1 -1
- package/dist/client/assets/AgentsSubnav-az_VDkri.js +1 -0
- package/dist/client/assets/{AtopView-ycxMrRwp.js → AtopView-BjjPM8OX.js} +1 -1
- package/dist/client/assets/{BackToPicker-D6WgIDb-.js → BackToPicker-D1LV6Cqp.js} +1 -1
- package/dist/client/assets/{BriefingDetailScreen-Zw-taW1s.js → BriefingDetailScreen-B7qJ90Np.js} +1 -1
- package/dist/client/assets/{BriefingsScreen-BerYOoWS.js → BriefingsScreen-CW6N829d.js} +1 -1
- package/dist/client/assets/{BrokerMetadataPanel-Cu93j-Ga.js → BrokerMetadataPanel-BhjECqOK.js} +1 -1
- package/dist/client/assets/{BrokerScreen-CeN90URH.js → BrokerScreen-X3z50712.js} +1 -1
- package/dist/client/assets/{ChatCollapsedStrip-DdKyMSEM.js → ChatCollapsedStrip-DNR9osDy.js} +1 -1
- package/dist/client/assets/{CodeDiffPane-BjCOBLze.js → CodeDiffPane-Bx_2VAzv.js} +1 -1
- package/dist/client/assets/{CodeProjectPicker-NSGdCaK0.js → CodeProjectPicker-C1yOJKvs.js} +1 -1
- package/dist/client/assets/{CodeScreen-CA9Sq6Dx.js → CodeScreen-CIKK1LcZ.js} +1 -1
- package/dist/client/assets/{ContextMenu-DnFcmfMR.js → ContextMenu-CHIuVKz7.js} +1 -1
- package/dist/client/assets/{ConversationComposer-CjRXFkvY.js → ConversationComposer-Bf7Ga_49.js} +1 -1
- package/dist/client/assets/{ConversationFeedRows-CgRTIpAv.js → ConversationFeedRows-Cm1Lgo43.js} +1 -1
- package/dist/client/assets/{ConversationHeader-CRmdtuL7.js → ConversationHeader-B_GXrKR0.js} +1 -1
- package/dist/client/assets/{ConversationPanels-DCkcLIHk.js → ConversationPanels-BTBbEvrP.js} +2 -2
- package/dist/client/assets/{ConversationScreen-Br0QQ3xo.js → ConversationScreen-B3l2m3JI.js} +1 -1
- package/dist/client/assets/{ConversationStatus-BJ1CMbAv.js → ConversationStatus-BqhUHD85.js} +1 -1
- package/dist/client/assets/{DataTable-Dzqiaha4.js → DataTable-CJbbgBdA.js} +1 -1
- package/dist/client/assets/{DispatchAftermath-B0WMg_z3.js → DispatchAftermath-BDA9CrOd.js} +1 -1
- package/dist/client/assets/{DocumentFocusViewer-CZVVIAD5.js → DocumentFocusViewer-B9vodVmG.js} +1 -1
- package/dist/client/assets/{EmbeddableSurfacesLab-C3a7hJWO.js → EmbeddableSurfacesLab-BdsYRDky.js} +1 -1
- package/dist/client/assets/{EmptyState-CYNJZMrZ.js → EmptyState-BRY5jTpz.js} +1 -1
- package/dist/client/assets/{FileViewerPane-Fwt8_KmD.js → FileViewerPane-9Bveqm9c.js} +1 -1
- package/dist/client/assets/{FleetSearch-Dsi_l2KW.js → FleetSearch-Bj9SCl2f.js} +1 -1
- package/dist/client/assets/{FlightObserveScreen-g_tiGmvz.js → FlightObserveScreen-BVMdsiCC.js} +1 -1
- package/dist/client/assets/{FollowScreen-Bb_rcrzi.js → FollowScreen-BifwHWOV.js} +1 -1
- package/dist/client/assets/{HarnessMark-DrE57dUq.js → HarnessMark-BPAphNjx.js} +1 -1
- package/dist/client/assets/{HarnessesScreen-CAsCJ_tG.js → HarnessesScreen-fMnbnrD4.js} +1 -1
- package/dist/client/assets/{HerdrSession-1eVu9Owj.js → HerdrSession-BujfGzrP.js} +1 -1
- package/dist/client/assets/{HomeHero-W445QrG1.js → HomeHero-BgM6S39l.js} +1 -1
- package/dist/client/assets/{KnowledgeSearchInspector-CbPVg3fr.js → KnowledgeSearchInspector-B4ZY24xE.js} +1 -1
- package/dist/client/assets/{KnowledgeSearchScreen-C1lN1xJk.js → KnowledgeSearchScreen-Ch_WENUC.js} +1 -1
- package/dist/client/assets/{LaneToolHoverCard-BkBcDYm-.js → LaneToolHoverCard-B7KdvQvf.js} +1 -1
- package/dist/client/assets/{LaneTraceDetailSheet-CzTd44rf.js → LaneTraceDetailSheet-H3AnN-vN.js} +1 -1
- package/dist/client/assets/{LaneTraceEventFocus-BmMmPTyJ.js → LaneTraceEventFocus-mkMw2wJU.js} +1 -1
- package/dist/client/assets/{MeshCanvas-DwkjsiJ5.js → MeshCanvas-CpKcWxKy.js} +1 -1
- package/dist/client/assets/{MeshCanvasMinimap-vmCpU1sD.js → MeshCanvasMinimap-C9IoGHbe.js} +1 -1
- package/dist/client/assets/{MeshScreen-CkMepUpT.js → MeshScreen-48QkJSDI.js} +1 -1
- package/dist/client/assets/{MeshTopologyView-BD2xLE2C.js → MeshTopologyView-DFzr0IZM.js} +2 -2
- package/dist/client/assets/{MessageComposerSuggestions-qbalTne_.js → MessageComposerSuggestions-FdVHnT_q.js} +1 -1
- package/dist/client/assets/{MessagesScreen-C8UynyLC.js → MessagesScreen-BMOOfbWX.js} +1 -1
- package/dist/client/assets/{MissionContextRail-D5MEP2f4.js → MissionContextRail-Y8QxUZGE.js} +1 -1
- package/dist/client/assets/{MissionControlView-K_I7eftL.js → MissionControlView-BpsHKu1F.js} +1 -1
- package/dist/client/assets/{MissionFocusOverlay-CWKLdUKG.js → MissionFocusOverlay-BPnAEA3F.js} +1 -1
- package/dist/client/assets/{MissionLeftAgentRow-ByGrNAcs.js → MissionLeftAgentRow-iOZ6ds9L.js} +1 -1
- package/dist/client/assets/{MissionLogPane-ZwHJ137T.js → MissionLogPane-B0csI89E.js} +1 -1
- package/dist/client/assets/{NewAgentModal-Do9aVvan.js → NewAgentModal-DBHJR9Qm.js} +1 -1
- package/dist/client/assets/{NewChatComposer-DKlNX1UA.js → NewChatComposer-Hd7pI5Ac.js} +1 -1
- package/dist/client/assets/{NewChatOrigin-DXPvX-hh.js → NewChatOrigin-DmuJ32wa.js} +1 -1
- package/dist/client/assets/{ObserveEmbedScreen-Dghsq2on.js → ObserveEmbedScreen-DyArn7Id.js} +1 -1
- package/dist/client/assets/{ObserveTextFlow-DWNlmTVm.js → ObserveTextFlow-CkMrtT8s.js} +2 -2
- package/dist/client/assets/{ObservedTopologyPanel-BlmGoxCE.js → ObservedTopologyPanel-CaSZZP05.js} +1 -1
- package/dist/client/assets/{OpenScoutAppShell-DDqQi-oe.js → OpenScoutAppShell-BtlKkiuF.js} +1 -1
- package/dist/client/assets/{OpsAgentsView-Bn_fGBdo.js → OpsAgentsView-CnqrwbC2.js} +1 -1
- package/dist/client/assets/OpsScreen-DOlmlVkP.js +1 -0
- package/dist/client/assets/OpsSubnav-Dj3ShAKv.js +1 -0
- package/dist/client/assets/{PlanView-B6gKo543.js → PlanView-BLGdWDx6.js} +1 -1
- package/dist/client/assets/ProjectAgentProfile-Dv1sVnQl.js +1 -0
- package/dist/client/assets/{ProjectAgentProfileBar-C5QWwZCn.js → ProjectAgentProfileBar-BLVg5EeA.js} +1 -1
- package/dist/client/assets/{ProjectAgentProfileHero-DC7Dd8VL.js → ProjectAgentProfileHero-0-GDhsPT.js} +1 -1
- package/dist/client/assets/{ProjectsInbox-DCLrDmj1.js → ProjectsInbox-B3DpAI5b.js} +1 -1
- package/dist/client/assets/{ProjectsRail-C4hiXYSb.js → ProjectsRail-BDl7U9Jq.js} +1 -1
- package/dist/client/assets/ProjectsScreen-Dl2FcGrR.js +1 -0
- package/dist/client/assets/{ProjectsThreadAside-DYmL2dCY.js → ProjectsThreadAside-BcGC5mHE.js} +1 -1
- package/dist/client/assets/{Provider-p-xuaAoE.js → Provider-cJCdHAxu.js} +1 -1
- package/dist/client/assets/{RailRow-bRkkXIpR.js → RailRow-CLcVmywd.js} +1 -1
- package/dist/client/assets/{RawSessionsTable-B7WKmXrk.js → RawSessionsTable-DBto4Ts-.js} +1 -1
- package/dist/client/assets/{RealtimeVoiceScreen-BzP3BQq9.js → RealtimeVoiceScreen-DXEU5v3g.js} +1 -1
- package/dist/client/assets/{RepoDiffEmbedScreen-xjzjcJ_c.js → RepoDiffEmbedScreen-BCDXFE3D.js} +1 -1
- package/dist/client/assets/{RepoDiffPageScreen-DRzIY-dk.js → RepoDiffPageScreen-m62FiWXC.js} +1 -1
- package/dist/client/assets/{RepoDiffViewer-CNDp01KM.js → RepoDiffViewer-PaNeZMhJ.js} +1 -1
- package/dist/client/assets/RepoDiffViewerLazy-CWE5GxMP.js +2 -0
- package/dist/client/assets/{ReposScreen-CpaLC_NU.js → ReposScreen-Cksv1cAD.js} +1 -1
- package/dist/client/assets/{ScoutDeckSurface-DkpZ-0DH.js → ScoutDeckSurface-BCjPl7C4.js} +1 -1
- package/dist/client/assets/{ScoutSurface-BENBUt5-.js → ScoutSurface-CkgT7A-c.js} +1 -1
- package/dist/client/assets/{ScoutbotBroadcastChip-CGZyxS5H.js → ScoutbotBroadcastChip-DkiRCHuK.js} +1 -1
- package/dist/client/assets/{ScoutbotFxLab-Bk2ZsfPp.js → ScoutbotFxLab-D-kV5j4T.js} +1 -1
- package/dist/client/assets/{ScoutbotRealtimeVoiceCall-n63LdBZs.js → ScoutbotRealtimeVoiceCall-1ixiEn1L.js} +1 -1
- package/dist/client/assets/{SecondaryNav-B4IsujYh.js → SecondaryNav-_wyKjwNf.js} +1 -1
- package/dist/client/assets/{SessionEmbedScreen-CPfH-jqN.js → SessionEmbedScreen-CJZmIBV7.js} +1 -1
- package/dist/client/assets/{SessionObserve-B-SkP3tu.js → SessionObserve-yYA8Gy5s.js} +1 -1
- package/dist/client/assets/{SessionObserveEvidence-CF5jnH3-.js → SessionObserveEvidence-cHdjYOJe.js} +1 -1
- package/dist/client/assets/{SessionRefScreen-C-4jjmVG.js → SessionRefScreen-OkTY7Szg.js} +1 -1
- package/dist/client/assets/SessionsScreen-B-GFjxIA.js +1 -0
- package/dist/client/assets/{SettingsDrawer-DATxwZrn.js → SettingsDrawer-Co11RFX0.js} +1 -1
- package/dist/client/assets/{SettingsScreen-Bu53X7J_.js → SettingsScreen-Cn09nq5_.js} +1 -1
- package/dist/client/assets/{ShikiPane-DH8yYDks.js → ShikiPane-dBS9hD-z.js} +1 -1
- package/dist/client/assets/{SlidePanel-RFXJpfUa.js → SlidePanel-CH-3-8_2.js} +1 -1
- package/dist/client/assets/{SpriteAvatar-CEYdCzem.js → SpriteAvatar-DS6Tmyua.js} +1 -1
- package/dist/client/assets/{StatusPill-9uy70ttd.js → StatusPill-C8m9ZymF.js} +1 -1
- package/dist/client/assets/{TailView-6bIrgdxN.js → TailView-B0BSopPs.js} +1 -1
- package/dist/client/assets/{Terminal-BI6km7H4.js → Terminal-U8gjIdm3.js} +1 -1
- package/dist/client/assets/{TerminalEmbedScreen-D4JOWwtm.js → TerminalEmbedScreen-CTmdE7us.js} +1 -1
- package/dist/client/assets/{TextDocumentSurface-BcP9vvji.js → TextDocumentSurface-BWJCGBZf.js} +1 -1
- package/dist/client/assets/{TmuxPeek-IaWqCgyJ.js → TmuxPeek-B4QdHbGm.js} +1 -1
- package/dist/client/assets/{VoicePermissionsPanel-C80iZxgy.js → VoicePermissionsPanel-Dd4ITJy_.js} +1 -1
- package/dist/client/assets/{WorkDetailScreen-CweZ6fEd.js → WorkDetailScreen-mJs0mb99.js} +1 -1
- package/dist/client/assets/{WorkFilesViewer-Dy_-06iI.js → WorkFilesViewer-ODzLXKxj.js} +1 -1
- package/dist/client/assets/{activity-DS0u0Itf.js → activity-CC8JzJNH.js} +1 -1
- package/dist/client/assets/{addon-fit-CN888B3D.js → addon-fit-CaZ-uLrg.js} +1 -1
- package/dist/client/assets/{addon-webgl-CoAnanQS.js → addon-webgl-B8utL3bM.js} +1 -1
- package/dist/client/assets/{agent-essentials-CuK4G_zS.js → agent-essentials-B3wcxg_v.js} +1 -1
- package/dist/client/assets/{arc.es-BET9ev6q.js → arc.es-uFv9UrHn.js} +1 -1
- package/dist/client/assets/{arrow-down-DxxPnPwh.js → arrow-down-w1HPzDSE.js} +1 -1
- package/dist/client/assets/{arrow-left-CXDkJuCg.js → arrow-left-B-3GJ7ct.js} +1 -1
- package/dist/client/assets/{arrow-up-right-Bj8RjSqW.js → arrow-up-right-G6bJXxhK.js} +1 -1
- package/dist/client/assets/{bot-BSGSicKC.js → bot-DzCOGKi6.js} +1 -1
- package/dist/client/assets/{check-BfA0T8UD.js → check-BX8nRgop.js} +1 -1
- package/dist/client/assets/{chevron-down-BVg09D6U.js → chevron-down-B3VVRJcV.js} +1 -1
- package/dist/client/assets/{chevron-right-CaEwYkxE.js → chevron-right-BYMV1511.js} +1 -1
- package/dist/client/assets/{chunk-HRAB3GC3-HhKwnZCi.js → chunk-HRAB3GC3-dRd2eQMJ.js} +1 -1
- package/dist/client/assets/{chunk-JTPDIGGW-DX2eTIQ_.js → chunk-JTPDIGGW-BjX67kHU.js} +3 -3
- package/dist/client/assets/{chunk-T65CQEWV-D-bOfuCH.js → chunk-T65CQEWV-kP6nJjkU.js} +1 -1
- package/dist/client/assets/{chunk-YOZR3KYS-oS9dlQCI.js → chunk-YOZR3KYS-C13bZPVd.js} +1 -1
- package/dist/client/assets/{clock-C3TUL7D7.js → clock-B9ukVaVn.js} +1 -1
- package/dist/client/assets/{code-xml-Dbvjk9Kw.js → code-xml-BFc3TMSm.js} +1 -1
- package/dist/client/assets/{content-CiOMtgQc.js → content-B8gahuBy.js} +1 -1
- package/dist/client/assets/content-BIqX06OQ.js +1 -0
- package/dist/client/assets/content-BKDZ6Fxe.js +1 -0
- package/dist/client/assets/content-C15Ya-iu.js +1 -0
- package/dist/client/assets/content-CDE9tJDF.js +1 -0
- package/dist/client/assets/content-CSAfI-PX.js +1 -0
- package/dist/client/assets/content-CTF9D60D.js +1 -0
- package/dist/client/assets/{content-CJuH5cDP.js → content-CbAGkYQO.js} +1 -1
- package/dist/client/assets/content-CtqLJOVp.js +1 -0
- package/dist/client/assets/content-Dvs1KRfo.js +1 -0
- package/dist/client/assets/content-DyJdVZjI.js +1 -0
- package/dist/client/assets/{content-C2TZOKSE.js → content-Ji7ATaf7.js} +1 -1
- package/dist/client/assets/content-eqZXKWcP.js +1 -0
- package/dist/client/assets/content-iyyQKwvA.js +1 -0
- package/dist/client/assets/content-pDE7Fpb9.js +1 -0
- package/dist/client/assets/content-pPSd2dua.js +1 -0
- package/dist/client/assets/{conversation-icons-DmC_Ak3z.js → conversation-icons-gpsv650H.js} +1 -1
- package/dist/client/assets/conversation-motion-features-DXtKlmuM.js +1 -0
- package/dist/client/assets/{copy-C79v_7D-.js → copy-BFmOcWof.js} +1 -1
- package/dist/client/assets/{createLucideIcon-DCq_3fQn.js → createLucideIcon-CFBn0Sdk.js} +1 -1
- package/dist/client/assets/{discover-IEnbrH8_.js → discover-DKf0aTr_.js} +2 -2
- package/dist/client/assets/embed-entry-RlQUTtc4.js +2 -0
- package/dist/client/assets/{external-link-Dd8xaveL.js → external-link-B1TI5yIt.js} +1 -1
- package/dist/client/assets/{eye-DkU59kfl.js → eye-1J4yOUoG.js} +1 -1
- package/dist/client/assets/{file-text-BITQqGtF.js → file-text-DcYSrI4v.js} +1 -1
- package/dist/client/assets/{gestures-B5rLNRpi.js → gestures-CcEOV6Sr.js} +1 -1
- package/dist/client/assets/{home-moving-signal-Bs635mVw.js → home-moving-signal-Bh2FugbH.js} +1 -1
- package/dist/client/assets/{home-now-card-VxlLjg1A.js → home-now-card-ByRH5fFx.js} +1 -1
- package/dist/client/assets/{home-now-card-nano-C06GMiwD.js → home-now-card-nano-y1EhBvVL.js} +1 -1
- package/dist/client/assets/{hooks-BWiLxTw1.js → hooks-DUZwL3Aq.js} +1 -1
- package/dist/client/assets/index-BBznYVWk.css +1 -0
- package/dist/client/assets/{index-BTj2MguM.js → index-BTuq-8Iv.js} +1 -1
- package/dist/client/assets/index-CmwGCxUk.js +1 -0
- package/dist/client/assets/{index-BZovGpDk.js → index-DmFAhGPj.js} +2 -2
- package/dist/client/assets/{index-vbaJ8sin.js → index-Dtaswdsh.js} +1 -1
- package/dist/client/assets/{inspector-panel-C96HcyK5.js → inspector-panel-DzgS5_Mv.js} +1 -1
- package/dist/client/assets/{keyboard-nav-CHo_xmjw.js → keyboard-nav-h1IdakpD.js} +1 -1
- package/dist/client/assets/{lane-roster-store-B6ybJlHJ.js → lane-roster-store-71vFgAem.js} +1 -1
- package/dist/client/assets/{left-DMJkmJOF.js → left-8NITBvFX.js} +1 -1
- package/dist/client/assets/{left-COMAiMfB.js → left-B2HEqrTM.js} +1 -1
- package/dist/client/assets/{left-C6Zj3cR4.js → left-CTYUvXbe.js} +1 -1
- package/dist/client/assets/{left-BuJ0wJW1.js → left-CwDRT50z.js} +1 -1
- package/dist/client/assets/{left-l92tw5Kc.js → left-CxlDLJlw.js} +1 -1
- package/dist/client/assets/{left-Ce4WKYPK.js → left-XFXxNd4g.js} +1 -1
- package/dist/client/assets/{left-agents-BuSyVNGE.js → left-agents-Ck4Xn-R8.js} +1 -1
- package/dist/client/assets/{left-default-DRHywOKX.js → left-default-BeOyS0bR.js} +1 -1
- package/dist/client/assets/{left-lanes-4-aUyyrV.js → left-lanes-DZp3jJMo.js} +1 -1
- package/dist/client/assets/{left-mission-e849d_Td.js → left-mission-CuKFQ5xL.js} +1 -1
- package/dist/client/assets/left-p1hkO6P0.js +1 -0
- package/dist/client/assets/{left-plan-MchYwAB_.js → left-plan-3rrFENhp.js} +1 -1
- package/dist/client/assets/{library-DygjpA6u.js → library-E--gKzEZ.js} +1 -1
- package/dist/client/assets/{loader-circle-B-l2Wj3-.js → loader-circle-d6PKL_KD.js} +1 -1
- package/dist/client/assets/{local-agents-Wof5knTJ.js → local-agents-B5pq17tZ.js} +1 -1
- package/dist/client/assets/{mentions-BjXfeF7t.js → mentions-agCGDgyA.js} +1 -1
- package/dist/client/assets/{mesh-ops-C1gq8zKf.js → mesh-ops-5pZCYptW.js} +1 -1
- package/dist/client/assets/{mesh-view-store-B56D3f77.js → mesh-view-store-KJzABIkN.js} +1 -1
- package/dist/client/assets/{message-circle-BwVx5X0q.js → message-circle-CJO-pi7b.js} +1 -1
- package/dist/client/assets/{message-markup-DlVX-iuc.js → message-markup-CyRDLdOn.js} +1 -1
- package/dist/client/assets/{message-square-BnkG6tae.js → message-square-D1hMsMj_.js} +1 -1
- package/dist/client/assets/{mission-control-store-CMgIVjLJ.js → mission-control-store-Ce6dOvnZ.js} +1 -1
- package/dist/client/assets/{observe-DVHAcIrv.js → observe-BSWVM8YA.js} +1 -1
- package/dist/client/assets/{page-status-Bg2hd27j.js → page-status-D2FQLJOX.js} +1 -1
- package/dist/client/assets/{paperclip-DblaLD_N.js → paperclip-iZmDMOS5.js} +1 -1
- package/dist/client/assets/{plus-BAI0t5g9.js → plus-gZ0T0eBI.js} +1 -1
- package/dist/client/assets/{profile-3Q4sUtvJ.js → profile-Dxj3VVOM.js} +1 -1
- package/dist/client/assets/{projects-inbox-Da2hYEn6.js → projects-inbox-Dzt_GQDv.js} +1 -1
- package/dist/client/assets/{radio-BGtkyCG9.js → radio-RMLfV4EO.js} +1 -1
- package/dist/client/assets/{refresh-cw-DtF8xPqX.js → refresh-cw-C4x1x6b_.js} +1 -1
- package/dist/client/assets/resolve-panes-C9gF0w4e.js +1 -0
- package/dist/client/assets/resolve-sidebar-context-DxbY5RCH.js +1 -0
- package/dist/client/assets/{right-Dd2DscRz.js → right-5L7Tn0zG.js} +1 -1
- package/dist/client/assets/{right-BU_W1kSH.js → right-CYtkMmRu.js} +1 -1
- package/dist/client/assets/{right-CUP-NIDG.js → right-CreoQzPP.js} +1 -1
- package/dist/client/assets/{right-c4PAdFYZ.js → right-D-k9Z1Fe.js} +1 -1
- package/dist/client/assets/{right-ByptvkVX.js → right-D9xFfy2b.js} +1 -1
- package/dist/client/assets/{right-BlR7h0US.js → right-DI7zHADe.js} +1 -1
- package/dist/client/assets/{right-BwgwTGGd.js → right-DUbJ3WVc.js} +1 -1
- package/dist/client/assets/{right-DmVHd8Xj.js → right-DiybhsiK.js} +1 -1
- package/dist/client/assets/{right-Ch_jrNe2.js → right-Jh_1Q88s.js} +1 -1
- package/dist/client/assets/{right-B8qg3JdB.js → right-udr1qTJG.js} +1 -1
- package/dist/client/assets/{rocket-BWh18pt_.js → rocket-CMM-IdLy.js} +1 -1
- package/dist/client/assets/{router-63XV_E7f.js → router-Cn_s9IGH.js} +1 -1
- package/dist/client/assets/{runtime-picker-BXKJbLot.js → runtime-picker--IW3cRry.js} +1 -1
- package/dist/client/assets/{scope-views-Dm2_-NPi.js → scope-views-BIfMTXU4.js} +1 -1
- package/dist/client/assets/{scout-voice-D8Q5sZOL.js → scout-voice-CwbOz6EN.js} +1 -1
- package/dist/client/assets/{scroll-text-DZb3mmYo.js → scroll-text-DPPYrqB9.js} +1 -1
- package/dist/client/assets/{search-1QMVOxF3.js → search-DAyagUtF.js} +1 -1
- package/dist/client/assets/{secondaryNavConfig-c0cz3MkJ.js → secondaryNavConfig-Dw3gS1jR.js} +1 -1
- package/dist/client/assets/{selection-bridge-O9C4kGfF.js → selection-bridge-BXw09aRF.js} +1 -1
- package/dist/client/assets/{send-horizontal-DbyEkGql.js → send-horizontal-IcG46D2M.js} +1 -1
- package/dist/client/assets/{server-Bncn9S7r.js → server-BySujhDV.js} +1 -1
- package/dist/client/assets/{session-catalog-DC6BlBBC.js → session-catalog-ClS9xf6i.js} +1 -1
- package/dist/client/assets/{session-table-BUPq9Viy.js → session-table-BdpHs1GN.js} +1 -1
- package/dist/client/assets/{sliders-horizontal-CMe8Bay1.js → sliders-horizontal-R5pWUUcH.js} +1 -1
- package/dist/client/assets/{sparkles-_7cTZsIH.js → sparkles-DJOBD_8l.js} +1 -1
- package/dist/client/assets/{sse-Bb0EOcU9.js → sse-CxXt4tqI.js} +1 -1
- package/dist/client/assets/{tail-events-C12pfUax.js → tail-events-BdvqZHLr.js} +1 -1
- package/dist/client/assets/{terminal-xGf_F3y7.js → terminal-DJPUp_Qn.js} +1 -1
- package/dist/client/assets/{terminal-relay-BgfVJXIL.js → terminal-relay-TffuSPGs.js} +1 -1
- package/dist/client/assets/{terminal-takeover--05EYhJm.js → terminal-takeover-BOFPRPjR.js} +1 -1
- package/dist/client/assets/{use-conversation-list-DWX02INv.js → use-conversation-list-C-dPcjQe.js} +1 -1
- package/dist/client/assets/{use-fleet-active-asks-Cnwa4hTK.js → use-fleet-active-asks-BHzeBZSW.js} +1 -1
- package/dist/client/assets/{use-mesh-ops-items-BRFm37oY.js → use-mesh-ops-items-KmaauBr_.js} +1 -1
- package/dist/client/assets/{use-reduced-motion-C8cWvIZ3.js → use-reduced-motion-CYqhYqHO.js} +1 -1
- package/dist/client/assets/{use-scout-dev-flags-FkMreOOb.js → use-scout-dev-flags-BJbw87PK.js} +1 -1
- package/dist/client/assets/{useAgentHoverCard-DvPZSJK3.js → useAgentHoverCard-C6o0tlat.js} +1 -1
- package/dist/client/assets/useContentSecondaryNav-DjHBrgnS.js +1 -0
- package/dist/client/assets/{usePierreRuntime-C8WJ0X3F.js → usePierreRuntime-Cm7-qdm0.js} +1 -1
- package/dist/client/assets/{wrench-_tHBGTop.js → wrench-CvRjjByE.js} +1 -1
- package/dist/client/assets/{x-CrGUKNRv.js → x-C8ayPBtj.js} +1 -1
- package/dist/client/assets/{xterm-Ks-VlLTq.js → xterm-B0ci4Q9a.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/main.mjs +348 -254
- package/dist/scout-web-server.mjs +2 -96660
- package/package.json +3 -3
- package/dist/client/assets/AgentLanesEmbedScreen-Br7cmZVO.js +0 -1
- package/dist/client/assets/AgentsSubnav-BV0WAgzf.js +0 -1
- package/dist/client/assets/OpsScreen-DHnT-Q9R.js +0 -1
- package/dist/client/assets/OpsSubnav-CJRD7MjM.js +0 -1
- package/dist/client/assets/ProjectAgentProfile-Be1VOkI4.js +0 -1
- package/dist/client/assets/ProjectsScreen-jruZRjgD.js +0 -1
- package/dist/client/assets/RepoDiffViewerLazy-b6vjYxez.js +0 -2
- package/dist/client/assets/SessionsScreen-HAjFvmIq.js +0 -1
- package/dist/client/assets/content-BQuEedeL.js +0 -1
- package/dist/client/assets/content-BUae-L_N.js +0 -1
- package/dist/client/assets/content-BfG98J1k.js +0 -1
- package/dist/client/assets/content-BkVTfkAC.js +0 -1
- package/dist/client/assets/content-BsNMos_d.js +0 -1
- package/dist/client/assets/content-CCn98eSk.js +0 -1
- package/dist/client/assets/content-CYnPp9yo.js +0 -1
- package/dist/client/assets/content-CcrUhm4P.js +0 -1
- package/dist/client/assets/content-CxuVONeQ.js +0 -1
- package/dist/client/assets/content-Dmq9n1_L.js +0 -1
- package/dist/client/assets/content-DskHP2NI.js +0 -1
- package/dist/client/assets/content-DvvzL2HK.js +0 -1
- package/dist/client/assets/content-snCAUbwv.js +0 -1
- package/dist/client/assets/conversation-motion-features-DPiGTO21.js +0 -1
- package/dist/client/assets/embed-entry-XUPb-AzL.js +0 -2
- package/dist/client/assets/index-9as_JTUs.css +0 -1
- package/dist/client/assets/index-DiiEQwdc.js +0 -1
- package/dist/client/assets/left-DrCbY6ja.js +0 -1
- package/dist/client/assets/resolve-panes-D4tlKNCT.js +0 -1
- package/dist/client/assets/resolve-sidebar-context-B27lj3Ci.js +0 -1
- package/dist/client/assets/useContentSecondaryNav-CNlrhvvx.js +0 -1
package/dist/main.mjs
CHANGED
|
@@ -69325,6 +69325,9 @@ function classifyProcesses(records, expected, now = Date.now()) {
|
|
|
69325
69325
|
}
|
|
69326
69326
|
return { layers, foreign, expected };
|
|
69327
69327
|
}
|
|
69328
|
+
function readLifecycleTree(expected) {
|
|
69329
|
+
return classifyProcesses(readProcessTable(), expected);
|
|
69330
|
+
}
|
|
69328
69331
|
function layerProcesses(tree, layers) {
|
|
69329
69332
|
return layers.flatMap((layer) => tree.layers[layer]);
|
|
69330
69333
|
}
|
|
@@ -99818,7 +99821,7 @@ var init_stdio2 = __esm(() => {
|
|
|
99818
99821
|
// ../../apps/desktop/src/shared/product.ts
|
|
99819
99822
|
var SCOUT_APP_VERSION;
|
|
99820
99823
|
var init_product = __esm(() => {
|
|
99821
|
-
SCOUT_APP_VERSION = process.env.SCOUT_APP_VERSION?.trim() || "0.2.
|
|
99824
|
+
SCOUT_APP_VERSION = process.env.SCOUT_APP_VERSION?.trim() || "0.2.92";
|
|
99822
99825
|
});
|
|
99823
99826
|
|
|
99824
99827
|
// ../../apps/desktop/src/core/mcp/stdio-server-lifecycle.ts
|
|
@@ -103879,10 +103882,13 @@ var init_inbox2 = __esm(() => {
|
|
|
103879
103882
|
// ../../apps/desktop/src/cli/commands/install.ts
|
|
103880
103883
|
var exports_install = {};
|
|
103881
103884
|
__export(exports_install, {
|
|
103885
|
+
selectLatestAppRelease: () => selectLatestAppRelease,
|
|
103882
103886
|
runInstallCommand: () => runInstallCommand,
|
|
103883
103887
|
renderInstallCommandHelp: () => renderInstallCommandHelp,
|
|
103884
103888
|
parseInstallArgs: () => parseInstallArgs,
|
|
103885
|
-
findAppDmgAsset: () => findAppDmgAsset
|
|
103889
|
+
findAppDmgAsset: () => findAppDmgAsset,
|
|
103890
|
+
assertPublishedAppRelease: () => assertPublishedAppRelease,
|
|
103891
|
+
appVersionFromReleaseTag: () => appVersionFromReleaseTag
|
|
103886
103892
|
});
|
|
103887
103893
|
import { spawnSync as spawnSync8 } from "child_process";
|
|
103888
103894
|
import { existsSync as existsSync39, mkdtempSync, rmSync as rmSync5, writeFileSync as writeFileSync9 } from "fs";
|
|
@@ -103895,11 +103901,12 @@ function renderInstallCommandHelp() {
|
|
|
103895
103901
|
"Usage:",
|
|
103896
103902
|
" scout install # install or update to the latest signed release",
|
|
103897
103903
|
" scout install --check # report installed vs latest, install nothing",
|
|
103898
|
-
" scout install --version <tag> # install a specific release (e.g. v0.2.
|
|
103904
|
+
" scout install --version <tag> # install a specific app release (e.g. app-v0.2.92)",
|
|
103899
103905
|
" scout install --force # reinstall even if already up to date",
|
|
103900
103906
|
" scout install --no-restart # do not relaunch OpenScout after installing",
|
|
103901
103907
|
"",
|
|
103902
103908
|
"Behavior:",
|
|
103909
|
+
" Requires macOS 26 or later on Apple silicon.",
|
|
103903
103910
|
" Downloads the signed + notarized OpenScout.dmg from the GitHub release,",
|
|
103904
103911
|
" installs OpenScout.app (which embeds the menu bar helper) to /Applications,",
|
|
103905
103912
|
" and clears the Gatekeeper quarantine flag so it opens cleanly.",
|
|
@@ -103936,7 +103943,7 @@ function parseInstallArgs(args) {
|
|
|
103936
103943
|
if (arg === "--version" || arg === "--tag") {
|
|
103937
103944
|
const value = args[index2 + 1];
|
|
103938
103945
|
if (!value || value.startsWith("-")) {
|
|
103939
|
-
throw new ScoutCliError(`${arg} requires
|
|
103946
|
+
throw new ScoutCliError(`${arg} requires an app release tag (e.g. ${arg} app-v0.2.92)`);
|
|
103940
103947
|
}
|
|
103941
103948
|
options.version = value;
|
|
103942
103949
|
index2 += 1;
|
|
@@ -103954,9 +103961,20 @@ function parseInstallArgs(args) {
|
|
|
103954
103961
|
}
|
|
103955
103962
|
return options;
|
|
103956
103963
|
}
|
|
103957
|
-
function
|
|
103958
|
-
const
|
|
103959
|
-
|
|
103964
|
+
function appVersionFromReleaseTag(tag) {
|
|
103965
|
+
const match = tag.trim().match(/^app-v(\d+\.\d+\.\d+)$/);
|
|
103966
|
+
if (!match) {
|
|
103967
|
+
throw new ScoutCliError(`invalid OpenScout app release tag: ${tag}`);
|
|
103968
|
+
}
|
|
103969
|
+
return match[1];
|
|
103970
|
+
}
|
|
103971
|
+
function normalizeRequestedAppTag(value) {
|
|
103972
|
+
const trimmed = value.trim();
|
|
103973
|
+
if (/^app-v\d+\.\d+\.\d+$/.test(trimmed))
|
|
103974
|
+
return trimmed;
|
|
103975
|
+
if (/^v?\d+\.\d+\.\d+$/.test(trimmed))
|
|
103976
|
+
return `app-v${trimmed.replace(/^v/, "")}`;
|
|
103977
|
+
throw new ScoutCliError(`invalid OpenScout app version: ${value}`);
|
|
103960
103978
|
}
|
|
103961
103979
|
function formatBytes(bytes) {
|
|
103962
103980
|
if (bytes <= 0)
|
|
@@ -103976,38 +103994,78 @@ function getInstalledVersion() {
|
|
|
103976
103994
|
}
|
|
103977
103995
|
async function fetchRelease(version3) {
|
|
103978
103996
|
const base = `https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases`;
|
|
103979
|
-
const
|
|
103997
|
+
const requestedTag = version3 ? normalizeRequestedAppTag(version3) : null;
|
|
103998
|
+
const apiUrl = requestedTag ? `${base}/tags/${requestedTag}` : `${base}?per_page=100`;
|
|
103980
103999
|
try {
|
|
103981
104000
|
const response = await fetch(apiUrl, {
|
|
103982
104001
|
headers: { Accept: "application/vnd.github+json", "User-Agent": USER_AGENT }
|
|
103983
104002
|
});
|
|
103984
104003
|
if (response.ok) {
|
|
103985
|
-
|
|
104004
|
+
const payload = await response.json();
|
|
104005
|
+
return requestedTag ? assertPublishedAppRelease(payload, requestedTag) : selectLatestAppRelease(payload);
|
|
103986
104006
|
}
|
|
103987
104007
|
} catch {}
|
|
103988
|
-
const apiPath =
|
|
104008
|
+
const apiPath = requestedTag ? `repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases/tags/${requestedTag}` : `repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases?per_page=100`;
|
|
103989
104009
|
const gh = spawnSync8("gh", ["api", apiPath], { encoding: "utf8" });
|
|
103990
104010
|
if ((gh.status ?? 1) === 0 && gh.stdout.trim()) {
|
|
103991
|
-
|
|
104011
|
+
const payload = JSON.parse(gh.stdout);
|
|
104012
|
+
return requestedTag ? assertPublishedAppRelease(payload, requestedTag) : selectLatestAppRelease(payload);
|
|
104013
|
+
}
|
|
104014
|
+
throw new ScoutCliError(version3 ? `app release "${requestedTag}" not found on GitHub (${GITHUB_OWNER}/${GITHUB_REPO})` : `could not fetch the latest OpenScout release from GitHub (${GITHUB_OWNER}/${GITHUB_REPO})`);
|
|
104015
|
+
}
|
|
104016
|
+
function compareAppReleaseVersions(left, right) {
|
|
104017
|
+
const leftParts = appVersionFromReleaseTag(left.tag_name).split(".").map(Number);
|
|
104018
|
+
const rightParts = appVersionFromReleaseTag(right.tag_name).split(".").map(Number);
|
|
104019
|
+
for (let index2 = 0;index2 < 3; index2 += 1) {
|
|
104020
|
+
const difference = (rightParts[index2] ?? 0) - (leftParts[index2] ?? 0);
|
|
104021
|
+
if (difference !== 0)
|
|
104022
|
+
return difference;
|
|
104023
|
+
}
|
|
104024
|
+
return 0;
|
|
104025
|
+
}
|
|
104026
|
+
function assertPublishedAppRelease(release, expectedTag) {
|
|
104027
|
+
if (expectedTag && release.tag_name !== expectedTag) {
|
|
104028
|
+
throw new ScoutCliError(`GitHub returned app release ${release.tag_name || "<missing>"}; expected ${expectedTag}`);
|
|
104029
|
+
}
|
|
104030
|
+
if (release.draft || release.prerelease) {
|
|
104031
|
+
throw new ScoutCliError(`app release ${release.tag_name} is not a published stable release`);
|
|
103992
104032
|
}
|
|
103993
|
-
|
|
104033
|
+
findAppDmgAsset(release);
|
|
104034
|
+
return release;
|
|
103994
104035
|
}
|
|
103995
104036
|
function findAppDmgAsset(release) {
|
|
103996
104037
|
const assets = release.assets ?? [];
|
|
103997
|
-
const
|
|
103998
|
-
const
|
|
103999
|
-
const
|
|
104000
|
-
if (
|
|
104001
|
-
return
|
|
104002
|
-
|
|
104003
|
-
|
|
104004
|
-
|
|
104005
|
-
const
|
|
104006
|
-
|
|
104007
|
-
|
|
104008
|
-
|
|
104038
|
+
const version3 = appVersionFromReleaseTag(release.tag_name);
|
|
104039
|
+
const expectedName = `OpenScout-${version3}.dmg`;
|
|
104040
|
+
const exact = assets.find((asset) => asset.name === expectedName);
|
|
104041
|
+
if (exact)
|
|
104042
|
+
return exact;
|
|
104043
|
+
throw new ScoutCliError(`immutable ${expectedName} not found in app release ${release.tag_name}. Assets: ${assets.map((asset) => asset.name).join(", ") || "(none)"}`);
|
|
104044
|
+
}
|
|
104045
|
+
function selectLatestAppRelease(releases) {
|
|
104046
|
+
const candidates = releases.filter((candidate) => {
|
|
104047
|
+
if (candidate.draft || candidate.prerelease)
|
|
104048
|
+
return false;
|
|
104049
|
+
if (!/^app-v\d+\.\d+\.\d+$/.test(candidate.tag_name))
|
|
104050
|
+
return false;
|
|
104051
|
+
try {
|
|
104052
|
+
findAppDmgAsset(candidate);
|
|
104053
|
+
return true;
|
|
104054
|
+
} catch {
|
|
104055
|
+
return false;
|
|
104056
|
+
}
|
|
104057
|
+
});
|
|
104058
|
+
candidates.sort(compareAppReleaseVersions);
|
|
104059
|
+
const release = candidates[0];
|
|
104060
|
+
if (!release) {
|
|
104061
|
+
throw new ScoutCliError(`no published app-v* release with an immutable OpenScout DMG found on GitHub (${GITHUB_OWNER}/${GITHUB_REPO})`);
|
|
104062
|
+
}
|
|
104063
|
+
return release;
|
|
104009
104064
|
}
|
|
104010
104065
|
async function downloadDmg(asset, destination, context) {
|
|
104066
|
+
if (!Number.isSafeInteger(asset.size) || asset.size <= 0) {
|
|
104067
|
+
throw new ScoutCliError(`release asset ${asset.name} has an invalid reported size: ${asset.size}`);
|
|
104068
|
+
}
|
|
104011
104069
|
context.stderr(`Downloading ${asset.name} (${formatBytes(asset.size)})\u2026`);
|
|
104012
104070
|
const response = await fetch(asset.browser_download_url, {
|
|
104013
104071
|
redirect: "follow",
|
|
@@ -104020,10 +104078,66 @@ async function downloadDmg(asset, destination, context) {
|
|
|
104020
104078
|
if (buffer.length === 0) {
|
|
104021
104079
|
throw new ScoutCliError("download failed: empty response body");
|
|
104022
104080
|
}
|
|
104081
|
+
if (buffer.length !== asset.size) {
|
|
104082
|
+
throw new ScoutCliError(`download failed: ${asset.name} is ${buffer.length} bytes; GitHub reported ${asset.size}`);
|
|
104083
|
+
}
|
|
104023
104084
|
writeFileSync9(destination, buffer);
|
|
104024
104085
|
}
|
|
104086
|
+
function commandOutput(command, args, label) {
|
|
104087
|
+
const result = spawnSync8(command, args, { encoding: "utf8" });
|
|
104088
|
+
const output = `${result.stdout ?? ""}${result.stderr ?? ""}`;
|
|
104089
|
+
if ((result.status ?? 1) !== 0) {
|
|
104090
|
+
throw new ScoutCliError(`${label} failed: ${output.trim() || `${command} exited ${result.status}`}`);
|
|
104091
|
+
}
|
|
104092
|
+
return output;
|
|
104093
|
+
}
|
|
104094
|
+
function verifyDeveloperIdSignature(codePath, label) {
|
|
104095
|
+
commandOutput("codesign", ["--verify", "--deep", "--strict", "--verbose=2", codePath], `${label} signature`);
|
|
104096
|
+
const details = commandOutput("codesign", ["-dvvv", codePath], `${label} signature details`);
|
|
104097
|
+
const team = details.match(/^TeamIdentifier=(.+)$/m)?.[1]?.trim();
|
|
104098
|
+
const authority = details.match(/^Authority=(Developer ID Application:.+)$/m)?.[1]?.trim();
|
|
104099
|
+
if (team !== EXPECTED_TEAM_ID || !authority?.endsWith(`(${EXPECTED_TEAM_ID})`)) {
|
|
104100
|
+
throw new ScoutCliError(`${label} is not signed by OpenScout's Developer ID Application team ${EXPECTED_TEAM_ID}`);
|
|
104101
|
+
}
|
|
104102
|
+
}
|
|
104103
|
+
function plistValue(plistPath, key) {
|
|
104104
|
+
return commandOutput("/usr/libexec/PlistBuddy", ["-c", `Print :${key}`, plistPath], `read ${key}`).trim();
|
|
104105
|
+
}
|
|
104106
|
+
function verifyDmg(dmgPath) {
|
|
104107
|
+
verifyDeveloperIdSignature(dmgPath, "OpenScout DMG");
|
|
104108
|
+
commandOutput("spctl", ["--assess", "--type", "open", "--context", "context:primary-signature", "--verbose=2", dmgPath], "DMG Gatekeeper assessment");
|
|
104109
|
+
}
|
|
104110
|
+
function verifyAppBundle(appPath, expectedVersion) {
|
|
104111
|
+
const infoPlist = join48(appPath, "Contents", "Info.plist");
|
|
104112
|
+
if (plistValue(infoPlist, "CFBundleIdentifier") !== APP_BUNDLE_ID) {
|
|
104113
|
+
throw new ScoutCliError(`mounted app bundle identifier is not ${APP_BUNDLE_ID}`);
|
|
104114
|
+
}
|
|
104115
|
+
if (plistValue(infoPlist, "CFBundleShortVersionString") !== expectedVersion) {
|
|
104116
|
+
throw new ScoutCliError(`mounted app version is not ${expectedVersion}`);
|
|
104117
|
+
}
|
|
104118
|
+
if (plistValue(infoPlist, "LSMinimumSystemVersion") !== MINIMUM_MACOS_VERSION) {
|
|
104119
|
+
throw new ScoutCliError(`mounted app does not require macOS ${MINIMUM_MACOS_VERSION}`);
|
|
104120
|
+
}
|
|
104121
|
+
verifyDeveloperIdSignature(appPath, "OpenScout.app");
|
|
104122
|
+
const helperPath = join48(appPath, "Contents", "Library", "LoginItems", "ScoutMenu.app");
|
|
104123
|
+
if (!existsSync39(helperPath)) {
|
|
104124
|
+
throw new ScoutCliError("mounted app is missing ScoutMenu.app");
|
|
104125
|
+
}
|
|
104126
|
+
const helperInfoPlist = join48(helperPath, "Contents", "Info.plist");
|
|
104127
|
+
if (plistValue(helperInfoPlist, "CFBundleIdentifier") !== HELPER_BUNDLE_ID) {
|
|
104128
|
+
throw new ScoutCliError(`mounted helper bundle identifier is not ${HELPER_BUNDLE_ID}`);
|
|
104129
|
+
}
|
|
104130
|
+
if (plistValue(helperInfoPlist, "CFBundleShortVersionString") !== expectedVersion) {
|
|
104131
|
+
throw new ScoutCliError(`mounted helper version is not ${expectedVersion}`);
|
|
104132
|
+
}
|
|
104133
|
+
if (plistValue(helperInfoPlist, "LSMinimumSystemVersion") !== MINIMUM_MACOS_VERSION) {
|
|
104134
|
+
throw new ScoutCliError(`mounted helper does not require macOS ${MINIMUM_MACOS_VERSION}`);
|
|
104135
|
+
}
|
|
104136
|
+
verifyDeveloperIdSignature(helperPath, "ScoutMenu.app");
|
|
104137
|
+
commandOutput("spctl", ["--assess", "--type", "execute", "--verbose=2", appPath], "app Gatekeeper assessment");
|
|
104138
|
+
}
|
|
104025
104139
|
function mountDmg(dmgPath) {
|
|
104026
|
-
const result = spawnSync8("hdiutil", ["attach", dmgPath, "-
|
|
104140
|
+
const result = spawnSync8("hdiutil", ["attach", dmgPath, "-readonly", "-nobrowse", "-noautoopen", "-plist"], { encoding: "utf8" });
|
|
104027
104141
|
if ((result.status ?? 1) !== 0) {
|
|
104028
104142
|
throw new ScoutCliError(`could not mount ${dmgPath}: ${result.stderr.trim() || "hdiutil attach failed"}`);
|
|
104029
104143
|
}
|
|
@@ -104036,42 +104150,71 @@ function mountDmg(dmgPath) {
|
|
|
104036
104150
|
function unmountDmg(mountPoint) {
|
|
104037
104151
|
spawnSync8("hdiutil", ["detach", mountPoint, "-quiet"], { encoding: "utf8" });
|
|
104038
104152
|
}
|
|
104039
|
-
function copyAppFromMount(mountPoint) {
|
|
104040
|
-
const
|
|
104041
|
-
|
|
104042
|
-
`).map((line) => line.trim()).find((line) => line === APP_NAME) ?? listing.stdout.split(`
|
|
104043
|
-
`).map((line) => line.trim()).find((line) => line.endsWith(".app") && !line.toLowerCase().startsWith("openscoutmenu"));
|
|
104044
|
-
if (!appEntry) {
|
|
104153
|
+
function copyAppFromMount(mountPoint, expectedVersion) {
|
|
104154
|
+
const source = join48(mountPoint, APP_NAME);
|
|
104155
|
+
if (!existsSync39(source)) {
|
|
104045
104156
|
throw new ScoutCliError(`no ${APP_NAME} found in the mounted DMG at ${mountPoint}`);
|
|
104046
104157
|
}
|
|
104047
|
-
|
|
104048
|
-
|
|
104049
|
-
|
|
104050
|
-
|
|
104051
|
-
|
|
104052
|
-
|
|
104053
|
-
}
|
|
104054
|
-
const copied = spawnSync8("cp", ["-R", source, APP_PATH], { encoding: "utf8" });
|
|
104158
|
+
verifyAppBundle(source, expectedVersion);
|
|
104159
|
+
const stagingPath = `/Applications/.OpenScout.scout-install-${process.pid}.app`;
|
|
104160
|
+
const backupPath = `/Applications/.OpenScout.scout-backup-${process.pid}.app`;
|
|
104161
|
+
const hadExistingApp = existsSync39(APP_PATH);
|
|
104162
|
+
spawnSync8("rm", ["-rf", stagingPath, backupPath], { encoding: "utf8" });
|
|
104163
|
+
const copied = spawnSync8("ditto", [source, stagingPath], { encoding: "utf8" });
|
|
104055
104164
|
if ((copied.status ?? 1) !== 0) {
|
|
104056
|
-
throw new ScoutCliError(`could not
|
|
104165
|
+
throw new ScoutCliError(`could not stage ${APP_PATH}: ${copied.stderr.trim() || "permission denied?"}. Try: sudo scout install`);
|
|
104166
|
+
}
|
|
104167
|
+
verifyAppBundle(stagingPath, expectedVersion);
|
|
104168
|
+
let backupCreated = false;
|
|
104169
|
+
try {
|
|
104170
|
+
if (hadExistingApp) {
|
|
104171
|
+
const movedOld = spawnSync8("mv", [APP_PATH, backupPath], { encoding: "utf8" });
|
|
104172
|
+
if ((movedOld.status ?? 1) !== 0) {
|
|
104173
|
+
throw new ScoutCliError(`could not preserve the existing ${APP_PATH}: ${movedOld.stderr.trim() || "permission denied?"}. Try: sudo scout install`);
|
|
104174
|
+
}
|
|
104175
|
+
backupCreated = true;
|
|
104176
|
+
}
|
|
104177
|
+
const installed = spawnSync8("mv", [stagingPath, APP_PATH], { encoding: "utf8" });
|
|
104178
|
+
if ((installed.status ?? 1) !== 0) {
|
|
104179
|
+
if (backupCreated)
|
|
104180
|
+
spawnSync8("mv", [backupPath, APP_PATH], { encoding: "utf8" });
|
|
104181
|
+
throw new ScoutCliError(`could not install ${APP_PATH}; the previous app was preserved`);
|
|
104182
|
+
}
|
|
104183
|
+
verifyAppBundle(APP_PATH, expectedVersion);
|
|
104184
|
+
if (backupCreated)
|
|
104185
|
+
spawnSync8("rm", ["-rf", backupPath], { encoding: "utf8" });
|
|
104186
|
+
} catch (error48) {
|
|
104187
|
+
spawnSync8("rm", ["-rf", stagingPath], { encoding: "utf8" });
|
|
104188
|
+
if (backupCreated && existsSync39(backupPath)) {
|
|
104189
|
+
if (existsSync39(APP_PATH))
|
|
104190
|
+
spawnSync8("rm", ["-rf", APP_PATH], { encoding: "utf8" });
|
|
104191
|
+
spawnSync8("mv", [backupPath, APP_PATH], { encoding: "utf8" });
|
|
104192
|
+
} else if (!hadExistingApp && existsSync39(APP_PATH)) {
|
|
104193
|
+
spawnSync8("rm", ["-rf", APP_PATH], { encoding: "utf8" });
|
|
104194
|
+
}
|
|
104195
|
+
throw error48;
|
|
104057
104196
|
}
|
|
104058
104197
|
}
|
|
104059
104198
|
function removeQuarantine() {
|
|
104060
104199
|
spawnSync8("xattr", ["-rd", "com.apple.quarantine", APP_PATH], { encoding: "utf8" });
|
|
104061
104200
|
}
|
|
104062
|
-
function
|
|
104063
|
-
|
|
104064
|
-
|
|
104065
|
-
|
|
104066
|
-
|
|
104067
|
-
|
|
104068
|
-
});
|
|
104201
|
+
async function stopInstalledAppProcesses() {
|
|
104202
|
+
const tree = readLifecycleTree(resolveAppBundlePaths(APP_PATH));
|
|
104203
|
+
const processes = layerProcesses(tree, ["menu", "app"]);
|
|
104204
|
+
if (processes.length === 0)
|
|
104205
|
+
return false;
|
|
104206
|
+
const pids = [...new Set(processes.map((entry) => entry.pid))];
|
|
104207
|
+
const { survivors } = await terminateProcesses(pids);
|
|
104208
|
+
if (survivors.length > 0) {
|
|
104209
|
+
throw new ScoutCliError(`could not stop the installed OpenScout processes (${survivors.join(", ")}); the app was not replaced`);
|
|
104210
|
+
}
|
|
104211
|
+
return true;
|
|
104069
104212
|
}
|
|
104070
104213
|
function launchApp() {
|
|
104071
|
-
const
|
|
104072
|
-
if ((
|
|
104073
|
-
|
|
104074
|
-
}
|
|
104214
|
+
const byPath = spawnSync8("open", [APP_PATH], { encoding: "utf8" });
|
|
104215
|
+
if ((byPath.status ?? 1) === 0)
|
|
104216
|
+
return true;
|
|
104217
|
+
return (spawnSync8("open", ["-b", APP_BUNDLE_ID], { encoding: "utf8" }).status ?? 1) === 0;
|
|
104075
104218
|
}
|
|
104076
104219
|
function renderInstallResult(result) {
|
|
104077
104220
|
if (result.action === "check") {
|
|
@@ -104088,7 +104231,7 @@ function renderInstallResult(result) {
|
|
|
104088
104231
|
async function runCheck(context, options) {
|
|
104089
104232
|
const installed = getInstalledVersion();
|
|
104090
104233
|
const release = await fetchRelease(options.version);
|
|
104091
|
-
const target2 =
|
|
104234
|
+
const target2 = appVersionFromReleaseTag(release.tag_name);
|
|
104092
104235
|
let status;
|
|
104093
104236
|
let message;
|
|
104094
104237
|
if (!installed) {
|
|
@@ -104111,6 +104254,14 @@ async function runInstallCommand(context, args) {
|
|
|
104111
104254
|
if (process.platform !== "darwin") {
|
|
104112
104255
|
throw new ScoutCliError("scout install is only supported on macOS.");
|
|
104113
104256
|
}
|
|
104257
|
+
if (process.arch !== "arm64") {
|
|
104258
|
+
throw new ScoutCliError("Scout for macOS currently requires Apple silicon (arm64).");
|
|
104259
|
+
}
|
|
104260
|
+
const macosVersion = commandOutput("sw_vers", ["-productVersion"], "macOS version").trim();
|
|
104261
|
+
const macosMajor = Number.parseInt(macosVersion.split(".")[0] ?? "", 10);
|
|
104262
|
+
if (!Number.isInteger(macosMajor) || macosMajor < MINIMUM_MACOS_MAJOR) {
|
|
104263
|
+
throw new ScoutCliError(`Scout requires macOS ${MINIMUM_MACOS_MAJOR} or later (found ${macosVersion}).`);
|
|
104264
|
+
}
|
|
104114
104265
|
const options = parseInstallArgs(args);
|
|
104115
104266
|
if (options.check) {
|
|
104116
104267
|
await runCheck(context, options);
|
|
@@ -104119,7 +104270,7 @@ async function runInstallCommand(context, args) {
|
|
|
104119
104270
|
const installedBefore = getInstalledVersion();
|
|
104120
104271
|
context.stderr(options.version ? `Fetching release ${options.version}\u2026` : "Fetching the latest OpenScout release\u2026");
|
|
104121
104272
|
const release = await fetchRelease(options.version);
|
|
104122
|
-
const target2 =
|
|
104273
|
+
const target2 = appVersionFromReleaseTag(release.tag_name);
|
|
104123
104274
|
if (!options.force && installedBefore && installedBefore === target2) {
|
|
104124
104275
|
context.output.writeValue({
|
|
104125
104276
|
action: "install",
|
|
@@ -104132,15 +104283,21 @@ async function runInstallCommand(context, args) {
|
|
|
104132
104283
|
return;
|
|
104133
104284
|
}
|
|
104134
104285
|
const asset = findAppDmgAsset(release);
|
|
104135
|
-
const wasRunning = isAppRunning();
|
|
104136
104286
|
const workDir = mkdtempSync(join48(tmpdir(), "scout-install-"));
|
|
104137
104287
|
const dmgPath = join48(workDir, asset.name);
|
|
104138
104288
|
let mountPoint = null;
|
|
104289
|
+
let wasRunning = false;
|
|
104139
104290
|
try {
|
|
104140
104291
|
await downloadDmg(asset, dmgPath, context);
|
|
104292
|
+
verifyDmg(dmgPath);
|
|
104141
104293
|
context.stderr(`Installing OpenScout ${target2} to ${APP_PATH}\u2026`);
|
|
104142
104294
|
mountPoint = mountDmg(dmgPath);
|
|
104143
|
-
|
|
104295
|
+
wasRunning = await stopInstalledAppProcesses();
|
|
104296
|
+
copyAppFromMount(mountPoint, target2);
|
|
104297
|
+
} catch (error48) {
|
|
104298
|
+
if (wasRunning)
|
|
104299
|
+
launchApp();
|
|
104300
|
+
throw error48;
|
|
104144
104301
|
} finally {
|
|
104145
104302
|
if (mountPoint)
|
|
104146
104303
|
unmountDmg(mountPoint);
|
|
@@ -104148,8 +104305,9 @@ async function runInstallCommand(context, args) {
|
|
|
104148
104305
|
}
|
|
104149
104306
|
removeQuarantine();
|
|
104150
104307
|
if (wasRunning && options.restart) {
|
|
104151
|
-
|
|
104152
|
-
|
|
104308
|
+
if (!launchApp()) {
|
|
104309
|
+
throw new ScoutCliError(`OpenScout ${target2} was installed, but macOS could not relaunch it. Open ${APP_PATH} manually.`);
|
|
104310
|
+
}
|
|
104153
104311
|
}
|
|
104154
104312
|
const installedAfter = getInstalledVersion() ?? target2;
|
|
104155
104313
|
const status = installedBefore ? "updated" : "installed";
|
|
@@ -104164,9 +104322,10 @@ async function runInstallCommand(context, args) {
|
|
|
104164
104322
|
message: `${verb} OpenScout ${installedAfter} \u2192 ${APP_PATH}${relaunchNote}`
|
|
104165
104323
|
}, renderInstallResult);
|
|
104166
104324
|
}
|
|
104167
|
-
var GITHUB_OWNER = "oscout", GITHUB_REPO = "scout", APP_NAME = "OpenScout.app", APP_PATH, INFO_PLIST_PATH, APP_BUNDLE_ID = "app.openscout.scout",
|
|
104325
|
+
var GITHUB_OWNER = "oscout", GITHUB_REPO = "scout", APP_NAME = "OpenScout.app", APP_PATH, INFO_PLIST_PATH, APP_BUNDLE_ID = "app.openscout.scout", HELPER_BUNDLE_ID = "app.openscout.scout.menu", USER_AGENT = "scout-cli", EXPECTED_TEAM_ID = "2U83JFPW66", MINIMUM_MACOS_MAJOR = 26, MINIMUM_MACOS_VERSION = "26.0", HELP_FLAGS9;
|
|
104168
104326
|
var init_install = __esm(() => {
|
|
104169
104327
|
init_errors();
|
|
104328
|
+
init_app_lifecycle();
|
|
104170
104329
|
APP_PATH = `/Applications/${APP_NAME}`;
|
|
104171
104330
|
INFO_PLIST_PATH = `${APP_PATH}/Contents/Info.plist`;
|
|
104172
104331
|
HELP_FLAGS9 = new Set(["help", "--help", "-h"]);
|
|
@@ -112590,8 +112749,7 @@ __export(exports_menu, {
|
|
|
112590
112749
|
import { spawnSync as spawnSync10 } from "child_process";
|
|
112591
112750
|
import { existsSync as existsSync41 } from "fs";
|
|
112592
112751
|
import { homedir as homedir32 } from "os";
|
|
112593
|
-
import {
|
|
112594
|
-
import { fileURLToPath as fileURLToPath11 } from "url";
|
|
112752
|
+
import { join as join50 } from "path";
|
|
112595
112753
|
function renderMenuCommandHelp() {
|
|
112596
112754
|
return [
|
|
112597
112755
|
"scout menu \u2014 macOS menu bar app",
|
|
@@ -112602,8 +112760,6 @@ function renderMenuCommandHelp() {
|
|
|
112602
112760
|
" scout menu status",
|
|
112603
112761
|
" scout menu restart",
|
|
112604
112762
|
" scout menu quit",
|
|
112605
|
-
" scout menu build",
|
|
112606
|
-
" scout menu dmg",
|
|
112607
112763
|
"",
|
|
112608
112764
|
"Aliases:",
|
|
112609
112765
|
" launch = open = start",
|
|
@@ -112612,14 +112768,13 @@ function renderMenuCommandHelp() {
|
|
|
112612
112768
|
"Behavior:",
|
|
112613
112769
|
" On macOS, `scout menu` loads the menu bar app from the installed OpenScout.app",
|
|
112614
112770
|
" (the menu ships as an embedded helper). If OpenScout.app is not installed, it",
|
|
112615
|
-
" points you to `scout install`.
|
|
112616
|
-
"
|
|
112771
|
+
" points you to `scout install`. Native app build and DMG tooling lives in the",
|
|
112772
|
+
" private OpenScout product repository and is not exposed by the public CLI.",
|
|
112617
112773
|
"",
|
|
112618
112774
|
"Examples:",
|
|
112619
112775
|
" scout menu",
|
|
112620
112776
|
" scout menu status",
|
|
112621
|
-
" scout menu restart"
|
|
112622
|
-
" scout menu build --version 0.2.16"
|
|
112777
|
+
" scout menu restart"
|
|
112623
112778
|
].join(`
|
|
112624
112779
|
`);
|
|
112625
112780
|
}
|
|
@@ -112643,10 +112798,6 @@ function parseMenuCommand(args) {
|
|
|
112643
112798
|
return { action: "quit", passthroughArgs: rest };
|
|
112644
112799
|
case "status":
|
|
112645
112800
|
return { action: "status", passthroughArgs: rest };
|
|
112646
|
-
case "build":
|
|
112647
|
-
return { action: "build", passthroughArgs: rest };
|
|
112648
|
-
case "dmg":
|
|
112649
|
-
return { action: "dmg", passthroughArgs: rest };
|
|
112650
112801
|
default:
|
|
112651
112802
|
throw new ScoutCliError(`unknown subcommand: ${first} (try: scout menu)`);
|
|
112652
112803
|
}
|
|
@@ -112674,25 +112825,6 @@ function runProcess(command, args, options) {
|
|
|
112674
112825
|
status: result.status
|
|
112675
112826
|
};
|
|
112676
112827
|
}
|
|
112677
|
-
function findRepoMenuHelper(startDirectory) {
|
|
112678
|
-
let current = resolve30(startDirectory);
|
|
112679
|
-
while (true) {
|
|
112680
|
-
const candidate = join50(current, "apps", "macos", "bin", "openscout-menu.ts");
|
|
112681
|
-
if (existsSync41(candidate)) {
|
|
112682
|
-
return candidate;
|
|
112683
|
-
}
|
|
112684
|
-
const parent = dirname28(current);
|
|
112685
|
-
if (parent === current) {
|
|
112686
|
-
break;
|
|
112687
|
-
}
|
|
112688
|
-
current = parent;
|
|
112689
|
-
}
|
|
112690
|
-
const sourceRelativeCandidate = fileURLToPath11(new URL("../../../../macos/bin/openscout-menu.ts", import.meta.url).toString());
|
|
112691
|
-
return existsSync41(sourceRelativeCandidate) ? sourceRelativeCandidate : null;
|
|
112692
|
-
}
|
|
112693
|
-
function resolveRepoBundlePath(helperPath) {
|
|
112694
|
-
return resolve30(dirname28(helperPath), "..", "dist", "Scout.app", EMBEDDED_MENU_RELATIVE_PATH);
|
|
112695
|
-
}
|
|
112696
112828
|
function menuProcesses(helperBundlePath) {
|
|
112697
112829
|
const expected = helperBundlePath ? join50(helperBundlePath, "Contents", "MacOS", MENU_PROCESS_NAME) : null;
|
|
112698
112830
|
const ours = [];
|
|
@@ -112708,24 +112840,20 @@ function menuProcesses(helperBundlePath) {
|
|
|
112708
112840
|
return { ours, others };
|
|
112709
112841
|
}
|
|
112710
112842
|
function isMenuRunning(helperBundlePath) {
|
|
112711
|
-
|
|
112712
|
-
|
|
112843
|
+
if (!helperBundlePath)
|
|
112844
|
+
return false;
|
|
112845
|
+
return menuProcesses(helperBundlePath).ours.length > 0;
|
|
112713
112846
|
}
|
|
112714
112847
|
async function stopRunningMenu(helperBundlePath) {
|
|
112715
|
-
|
|
112716
|
-
|
|
112848
|
+
if (!helperBundlePath)
|
|
112849
|
+
return true;
|
|
112850
|
+
const targets = menuProcesses(helperBundlePath).ours;
|
|
112717
112851
|
if (targets.length === 0)
|
|
112718
112852
|
return true;
|
|
112719
112853
|
const { survivors } = await terminateProcesses(targets);
|
|
112720
112854
|
return survivors.length === 0;
|
|
112721
112855
|
}
|
|
112722
|
-
function resolveInstalledAppBundlePath(
|
|
112723
|
-
const spotlight = runProcess("mdfind", [`kMDItemCFBundleIdentifier == '${APP_BUNDLE_ID2}'`], { env, allowFailure: true });
|
|
112724
|
-
const indexedPath = spotlight.stdout.split(`
|
|
112725
|
-
`).map((line) => line.trim()).find(Boolean);
|
|
112726
|
-
if (indexedPath) {
|
|
112727
|
-
return indexedPath;
|
|
112728
|
-
}
|
|
112856
|
+
function resolveInstalledAppBundlePath() {
|
|
112729
112857
|
for (const candidate of COMMON_APP_BUNDLE_PATHS) {
|
|
112730
112858
|
if (existsSync41(candidate)) {
|
|
112731
112859
|
return candidate;
|
|
@@ -112737,12 +112865,11 @@ function resolveEmbeddedMenuBundlePath(appBundlePath) {
|
|
|
112737
112865
|
return join50(appBundlePath, EMBEDDED_MENU_RELATIVE_PATH);
|
|
112738
112866
|
}
|
|
112739
112867
|
function openInstalledMenuApp(helperPath, env) {
|
|
112740
|
-
const bundleAttempts = [
|
|
112741
|
-
{ command: "open", args: ["-b", MENU_BUNDLE_ID] }
|
|
112742
|
-
];
|
|
112868
|
+
const bundleAttempts = [];
|
|
112743
112869
|
if (helperPath) {
|
|
112744
112870
|
bundleAttempts.push({ command: "open", args: [helperPath] });
|
|
112745
112871
|
}
|
|
112872
|
+
bundleAttempts.push({ command: "open", args: ["-b", MENU_BUNDLE_ID] });
|
|
112746
112873
|
let lastFailure = "OpenScout is not installed.";
|
|
112747
112874
|
for (const attempt of bundleAttempts) {
|
|
112748
112875
|
const result = runProcess(attempt.command, attempt.args, { env, allowFailure: true });
|
|
@@ -112751,7 +112878,7 @@ function openInstalledMenuApp(helperPath, env) {
|
|
|
112751
112878
|
}
|
|
112752
112879
|
lastFailure = result.stderr || result.stdout || lastFailure;
|
|
112753
112880
|
}
|
|
112754
|
-
throw new ScoutCliError(`${lastFailure} Run \`scout install\` to download the OpenScout app
|
|
112881
|
+
throw new ScoutCliError(`${lastFailure} Run \`scout install\` to download the OpenScout app.`);
|
|
112755
112882
|
}
|
|
112756
112883
|
function renderMenuResult(result) {
|
|
112757
112884
|
if (result.action === "status") {
|
|
@@ -112780,10 +112907,6 @@ function renderMenuResult(result) {
|
|
|
112780
112907
|
}
|
|
112781
112908
|
function renderActionMessage(action) {
|
|
112782
112909
|
switch (action) {
|
|
112783
|
-
case "build":
|
|
112784
|
-
return "Built the OpenScout menu app bundle.";
|
|
112785
|
-
case "dmg":
|
|
112786
|
-
return "Built the OpenScout menu app DMG.";
|
|
112787
112910
|
case "restart":
|
|
112788
112911
|
return "Restarted the OpenScout menu app.";
|
|
112789
112912
|
case "quit":
|
|
@@ -112796,42 +112919,15 @@ function renderActionMessage(action) {
|
|
|
112796
112919
|
}
|
|
112797
112920
|
}
|
|
112798
112921
|
async function ensureMenuProviderTelemetry(context, action) {
|
|
112799
|
-
if (action === "
|
|
112922
|
+
if (action === "quit") {
|
|
112800
112923
|
return;
|
|
112801
112924
|
}
|
|
112802
112925
|
try {
|
|
112803
112926
|
await ensureProviderTelemetryBootstrap({ env: context.env });
|
|
112804
112927
|
} catch {}
|
|
112805
112928
|
}
|
|
112806
|
-
async function runWithRepoHelper(context, helperPath, command) {
|
|
112807
|
-
const bundlePath = resolveRepoBundlePath(helperPath);
|
|
112808
|
-
if (command.action === "quit" || command.action === "restart") {
|
|
112809
|
-
await stopRunningMenu(bundlePath);
|
|
112810
|
-
}
|
|
112811
|
-
if (command.action !== "quit") {
|
|
112812
|
-
runProcess(process.execPath, [helperPath, command.action, ...command.passthroughArgs], {
|
|
112813
|
-
cwd: defaultScoutContextDirectory(context),
|
|
112814
|
-
env: context.env
|
|
112815
|
-
});
|
|
112816
|
-
}
|
|
112817
|
-
const running = command.action === "quit" ? false : isMenuRunning(bundlePath);
|
|
112818
|
-
const installed = existsSync41(bundlePath) || running;
|
|
112819
|
-
return {
|
|
112820
|
-
action: command.action,
|
|
112821
|
-
mode: "repo-helper",
|
|
112822
|
-
bundleId: MENU_BUNDLE_ID,
|
|
112823
|
-
bundlePath,
|
|
112824
|
-
helperPath,
|
|
112825
|
-
installed,
|
|
112826
|
-
running,
|
|
112827
|
-
message: renderActionMessage(command.action)
|
|
112828
|
-
};
|
|
112829
|
-
}
|
|
112830
112929
|
async function runWithInstalledApp(context, command) {
|
|
112831
|
-
|
|
112832
|
-
throw new ScoutCliError(`scout menu ${command.action} requires an OpenScout repo checkout. Run from the repo root or use bun run macos:${command.action}.`);
|
|
112833
|
-
}
|
|
112834
|
-
const appBundlePath = resolveInstalledAppBundlePath(context.env);
|
|
112930
|
+
const appBundlePath = resolveInstalledAppBundlePath();
|
|
112835
112931
|
const helperPath = appBundlePath ? resolveEmbeddedMenuBundlePath(appBundlePath) : null;
|
|
112836
112932
|
if (!appBundlePath && command.action !== "status") {
|
|
112837
112933
|
throw new ScoutCliError("OpenScout is not installed. Run `scout install` to download the macOS app.");
|
|
@@ -112877,15 +112973,13 @@ async function runMenuCommand(context, args) {
|
|
|
112877
112973
|
}
|
|
112878
112974
|
const command = parseMenuCommand(args);
|
|
112879
112975
|
await ensureMenuProviderTelemetry(context, command.action);
|
|
112880
|
-
const
|
|
112881
|
-
const result = helperPath ? await runWithRepoHelper(context, helperPath, command) : await runWithInstalledApp(context, command);
|
|
112976
|
+
const result = await runWithInstalledApp(context, command);
|
|
112882
112977
|
context.output.writeValue(result, renderMenuResult);
|
|
112883
112978
|
}
|
|
112884
|
-
var MENU_BUNDLE_ID = "app.openscout.scout.menu", MENU_PROCESS_NAME = "ScoutMenu",
|
|
112979
|
+
var MENU_BUNDLE_ID = "app.openscout.scout.menu", MENU_PROCESS_NAME = "ScoutMenu", APP_BUNDLE_NAME = "OpenScout.app", EMBEDDED_MENU_RELATIVE_PATH, HELP_FLAGS14, COMMON_APP_BUNDLE_PATHS;
|
|
112885
112980
|
var init_menu = __esm(() => {
|
|
112886
112981
|
init_src3();
|
|
112887
112982
|
init_app_lifecycle();
|
|
112888
|
-
init_context();
|
|
112889
112983
|
init_errors();
|
|
112890
112984
|
EMBEDDED_MENU_RELATIVE_PATH = join50("Contents", "Library", "LoginItems", "ScoutMenu.app");
|
|
112891
112985
|
HELP_FLAGS14 = new Set(["help", "--help", "-h"]);
|
|
@@ -113599,7 +113693,7 @@ var init_mesh = () => {};
|
|
|
113599
113693
|
|
|
113600
113694
|
// ../../apps/desktop/src/core/mesh/enroll-pending.ts
|
|
113601
113695
|
import { existsSync as existsSync42, mkdirSync as mkdirSync12, readFileSync as readFileSync19, rmSync as rmSync6, writeFileSync as writeFileSync10 } from "fs";
|
|
113602
|
-
import { dirname as
|
|
113696
|
+
import { dirname as dirname28, join as join51 } from "path";
|
|
113603
113697
|
function pendingMeshEnrollmentPath(supportDirectory) {
|
|
113604
113698
|
const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
|
|
113605
113699
|
return join51(dir, PENDING_FILE);
|
|
@@ -113609,7 +113703,7 @@ function savePendingMeshEnrollment(handshake, supportDirectory) {
|
|
|
113609
113703
|
assertTestIsolatedUserData("write the pending mesh enrollment", "OPENSCOUT_SUPPORT_DIRECTORY");
|
|
113610
113704
|
}
|
|
113611
113705
|
const path = pendingMeshEnrollmentPath(supportDirectory);
|
|
113612
|
-
mkdirSync12(
|
|
113706
|
+
mkdirSync12(dirname28(path), { recursive: true });
|
|
113613
113707
|
writeFileSync10(path, `${JSON.stringify(handshake, null, 2)}
|
|
113614
113708
|
`, { encoding: "utf8", mode: 384 });
|
|
113615
113709
|
}
|
|
@@ -113838,7 +113932,7 @@ async function runMeshRevokeCommand(context, args) {
|
|
|
113838
113932
|
async function promptSasApproval(question) {
|
|
113839
113933
|
const rl = createInterface3({ input: process.stdin, output: process.stderr });
|
|
113840
113934
|
try {
|
|
113841
|
-
const answer = await new Promise((
|
|
113935
|
+
const answer = await new Promise((resolve30) => rl.question(question, resolve30));
|
|
113842
113936
|
return ["y", "yes"].includes(answer.trim().toLowerCase());
|
|
113843
113937
|
} finally {
|
|
113844
113938
|
rl.close();
|
|
@@ -114470,12 +114564,12 @@ async function runBridge(context, args) {
|
|
|
114470
114564
|
});
|
|
114471
114565
|
context.stderr(`bridge: node=${config2.node} relay=${config2.relayUrl}`);
|
|
114472
114566
|
context.stderr("bridge: running \u2014 Ctrl-C to stop");
|
|
114473
|
-
await new Promise((
|
|
114567
|
+
await new Promise((resolve30) => {
|
|
114474
114568
|
const stop2 = () => {
|
|
114475
114569
|
const force = setTimeout(() => process.exit(0), 5000);
|
|
114476
114570
|
handle.close().finally(() => {
|
|
114477
114571
|
clearTimeout(force);
|
|
114478
|
-
|
|
114572
|
+
resolve30();
|
|
114479
114573
|
});
|
|
114480
114574
|
};
|
|
114481
114575
|
process.once("SIGINT", stop2);
|
|
@@ -117394,7 +117488,7 @@ var init_web_handoff = __esm(() => {
|
|
|
117394
117488
|
// ../../apps/desktop/src/core/pairing/runtime/bridge/artifact-presentation.ts
|
|
117395
117489
|
import { randomBytes as randomBytes8 } from "crypto";
|
|
117396
117490
|
import { realpathSync as realpathSync3, statSync as statSync10 } from "fs";
|
|
117397
|
-
import { basename as basename18, dirname as
|
|
117491
|
+
import { basename as basename18, dirname as dirname29, isAbsolute as isAbsolute5, relative as relative5, resolve as resolve30, sep as sep3 } from "path";
|
|
117398
117492
|
function createArtifactPresentation(input, options) {
|
|
117399
117493
|
const now = options.now ?? Date.now();
|
|
117400
117494
|
purgeExpiredArtifactPresentations(now);
|
|
@@ -117407,9 +117501,9 @@ function createArtifactPresentation(input, options) {
|
|
|
117407
117501
|
throw new Error("sourcePath is outside the session workspace");
|
|
117408
117502
|
}
|
|
117409
117503
|
const source = statSync10(sourcePath);
|
|
117410
|
-
const rootPath = source.isDirectory() ? sourcePath :
|
|
117504
|
+
const rootPath = source.isDirectory() ? sourcePath : dirname29(sourcePath);
|
|
117411
117505
|
const entryPath = normalizeRelativeEntry(source.isDirectory() ? input.entryPath?.trim() || "index.html" : basename18(sourcePath));
|
|
117412
|
-
const entryTarget = requiredRealPath(
|
|
117506
|
+
const entryTarget = requiredRealPath(resolve30(rootPath, entryPath), "entryPath");
|
|
117413
117507
|
if (!isPathInside2(rootPath, entryTarget)) {
|
|
117414
117508
|
throw new Error("entryPath leaves the presentation root");
|
|
117415
117509
|
}
|
|
@@ -117450,7 +117544,7 @@ function serveArtifactPresentation(req, url2, now = Date.now()) {
|
|
|
117450
117544
|
}
|
|
117451
117545
|
let target2;
|
|
117452
117546
|
try {
|
|
117453
|
-
target2 = requiredRealPath(
|
|
117547
|
+
target2 = requiredRealPath(resolve30(grant.rootPath, parsed.relativePath), "artifact path");
|
|
117454
117548
|
} catch {
|
|
117455
117549
|
return presentationResponse("Not found", 404);
|
|
117456
117550
|
}
|
|
@@ -117460,7 +117554,7 @@ function serveArtifactPresentation(req, url2, now = Date.now()) {
|
|
|
117460
117554
|
const targetStat = statSync10(target2);
|
|
117461
117555
|
if (targetStat.isDirectory()) {
|
|
117462
117556
|
try {
|
|
117463
|
-
target2 = requiredRealPath(
|
|
117557
|
+
target2 = requiredRealPath(resolve30(target2, "index.html"), "artifact index");
|
|
117464
117558
|
} catch {
|
|
117465
117559
|
return presentationResponse("Not found", 404);
|
|
117466
117560
|
}
|
|
@@ -118966,10 +119060,10 @@ var init_db_queries = __esm(() => {
|
|
|
118966
119060
|
});
|
|
118967
119061
|
|
|
118968
119062
|
// ../../apps/desktop/src/core/mobile/service.ts
|
|
118969
|
-
import { basename as basename19, resolve as
|
|
119063
|
+
import { basename as basename19, resolve as resolve31 } from "path";
|
|
118970
119064
|
import { statSync as statSync12 } from "fs";
|
|
118971
119065
|
async function getScoutMobileRuntimeCapabilities(projectRoot) {
|
|
118972
|
-
const normalizedProjectRoot = projectRoot?.trim() ?
|
|
119066
|
+
const normalizedProjectRoot = projectRoot?.trim() ? resolve31(projectRoot) : null;
|
|
118973
119067
|
const liveCatalog = await readScoutRuntimeCatalog();
|
|
118974
119068
|
const runtimeCatalog = liveCatalog?.catalog ?? SCOUT_RUNTIME_CATALOG;
|
|
118975
119069
|
const defaultHarness = scoutRuntimeDefaultHarness(runtimeCatalog);
|
|
@@ -119130,16 +119224,16 @@ function isDirectory2(path2) {
|
|
|
119130
119224
|
}
|
|
119131
119225
|
}
|
|
119132
119226
|
function rehomeScoutMobileWorkspacePath(requestedPath, currentHome) {
|
|
119133
|
-
const requested =
|
|
119134
|
-
const home =
|
|
119227
|
+
const requested = resolve31(requestedPath);
|
|
119228
|
+
const home = resolve31(currentHome);
|
|
119135
119229
|
const requestedMatch = requested.match(/^\/Users\/[^/]+(\/.*)?$/);
|
|
119136
119230
|
if (!requestedMatch || !/^\/Users\/[^/]+$/.test(home))
|
|
119137
119231
|
return null;
|
|
119138
119232
|
const suffix = requestedMatch[1] ?? "";
|
|
119139
|
-
return
|
|
119233
|
+
return resolve31(home, `.${suffix || "/"}`);
|
|
119140
119234
|
}
|
|
119141
119235
|
async function resolveMobileWorkspaceRoot(rawWorkspaceId, currentDirectory) {
|
|
119142
|
-
const requested =
|
|
119236
|
+
const requested = resolve31(rawWorkspaceId);
|
|
119143
119237
|
if (isDirectory2(requested))
|
|
119144
119238
|
return requested;
|
|
119145
119239
|
const currentHome = process.env.HOME?.trim();
|
|
@@ -119150,7 +119244,7 @@ async function resolveMobileWorkspaceRoot(rawWorkspaceId, currentDirectory) {
|
|
|
119150
119244
|
const inventory = await loadMobileWorkspaceInventory(currentDirectory);
|
|
119151
119245
|
const matches = inventory.filter((workspace) => isDirectory2(workspace.root) && [basename19(workspace.root), workspace.projectName, workspace.title].some((value) => value.toLowerCase() === requestedName));
|
|
119152
119246
|
if (matches.length === 1)
|
|
119153
|
-
return
|
|
119247
|
+
return resolve31(matches[0].root);
|
|
119154
119248
|
throw new Error(`Workspace is not available on this Mac: ${rawWorkspaceId}. Choose a project from the current workspace list.`);
|
|
119155
119249
|
}
|
|
119156
119250
|
function latestMessageByConversation(snapshot) {
|
|
@@ -120500,7 +120594,7 @@ var init_mobile_terminal_provision = __esm(() => {
|
|
|
120500
120594
|
|
|
120501
120595
|
// ../../apps/desktop/src/core/pairing/runtime/bridge/server.ts
|
|
120502
120596
|
import { readdirSync as readdirSync6, readFileSync as readFileSync28, realpathSync as realpathSync5, statSync as statSync13 } from "fs";
|
|
120503
|
-
import { basename as basename20, isAbsolute as isAbsolute7, join as join60, relative as relative7, resolve as
|
|
120597
|
+
import { basename as basename20, isAbsolute as isAbsolute7, join as join60, relative as relative7, resolve as resolve32 } from "path";
|
|
120504
120598
|
import { homedir as homedir41 } from "os";
|
|
120505
120599
|
function replaySyncEvents(bridge, sessionId, lastSeq) {
|
|
120506
120600
|
return bridge.replay(sessionId, lastSeq);
|
|
@@ -120825,7 +120919,7 @@ async function handleRPCInner(bridge, req, rpcContext = {}) {
|
|
|
120825
120919
|
}
|
|
120826
120920
|
try {
|
|
120827
120921
|
const grant = createArtifactPresentation({
|
|
120828
|
-
sourcePath: isAbsolute7(p.sourcePath) ? p.sourcePath :
|
|
120922
|
+
sourcePath: isAbsolute7(p.sourcePath) ? p.sourcePath : resolve32(workspaceRoot, p.sourcePath),
|
|
120829
120923
|
entryPath: p.entryPath,
|
|
120830
120924
|
title: p.title,
|
|
120831
120925
|
ttlMs: p.ttlMs
|
|
@@ -121315,7 +121409,7 @@ var init_tail_fanout = __esm(() => {
|
|
|
121315
121409
|
|
|
121316
121410
|
// ../../apps/desktop/src/core/pairing/runtime/bridge/router.ts
|
|
121317
121411
|
import { readFileSync as readFileSync29, readdirSync as readdirSync7, realpathSync as realpathSync6, statSync as statSync14 } from "fs";
|
|
121318
|
-
import { basename as basename21, isAbsolute as isAbsolute8, join as join61, relative as relative8, resolve as
|
|
121412
|
+
import { basename as basename21, isAbsolute as isAbsolute8, join as join61, relative as relative8, resolve as resolve33 } from "path";
|
|
121319
121413
|
import { homedir as homedir42 } from "os";
|
|
121320
121414
|
function resolveMobileCurrentDirectory2() {
|
|
121321
121415
|
const config2 = resolveConfig();
|
|
@@ -121397,23 +121491,23 @@ function bridgeEventIterable(bridge, signal3) {
|
|
|
121397
121491
|
return {
|
|
121398
121492
|
[Symbol.asyncIterator]() {
|
|
121399
121493
|
const buffer = [];
|
|
121400
|
-
let
|
|
121494
|
+
let resolve34 = null;
|
|
121401
121495
|
let done = false;
|
|
121402
121496
|
const unsub = bridge.onEvent((event) => {
|
|
121403
121497
|
if (done)
|
|
121404
121498
|
return;
|
|
121405
121499
|
buffer.push(event);
|
|
121406
|
-
if (
|
|
121407
|
-
|
|
121408
|
-
|
|
121500
|
+
if (resolve34) {
|
|
121501
|
+
resolve34();
|
|
121502
|
+
resolve34 = null;
|
|
121409
121503
|
}
|
|
121410
121504
|
});
|
|
121411
121505
|
const cleanup = () => {
|
|
121412
121506
|
done = true;
|
|
121413
121507
|
unsub();
|
|
121414
|
-
if (
|
|
121415
|
-
|
|
121416
|
-
|
|
121508
|
+
if (resolve34) {
|
|
121509
|
+
resolve34();
|
|
121510
|
+
resolve34 = null;
|
|
121417
121511
|
}
|
|
121418
121512
|
};
|
|
121419
121513
|
signal3?.addEventListener("abort", cleanup, { once: true });
|
|
@@ -121426,7 +121520,7 @@ function bridgeEventIterable(bridge, signal3) {
|
|
|
121426
121520
|
return { done: false, value: buffer.shift() };
|
|
121427
121521
|
}
|
|
121428
121522
|
await new Promise((r) => {
|
|
121429
|
-
|
|
121523
|
+
resolve34 = r;
|
|
121430
121524
|
});
|
|
121431
121525
|
}
|
|
121432
121526
|
},
|
|
@@ -121449,23 +121543,23 @@ function tailEventIterable(signal3) {
|
|
|
121449
121543
|
return {
|
|
121450
121544
|
[Symbol.asyncIterator]() {
|
|
121451
121545
|
const buffer = [];
|
|
121452
|
-
let
|
|
121546
|
+
let resolve34 = null;
|
|
121453
121547
|
let done = false;
|
|
121454
121548
|
const unsub = getTailFanout().subscribe((event) => {
|
|
121455
121549
|
if (done)
|
|
121456
121550
|
return;
|
|
121457
121551
|
buffer.push(event);
|
|
121458
|
-
if (
|
|
121459
|
-
|
|
121460
|
-
|
|
121552
|
+
if (resolve34) {
|
|
121553
|
+
resolve34();
|
|
121554
|
+
resolve34 = null;
|
|
121461
121555
|
}
|
|
121462
121556
|
});
|
|
121463
121557
|
const cleanup = () => {
|
|
121464
121558
|
done = true;
|
|
121465
121559
|
unsub();
|
|
121466
|
-
if (
|
|
121467
|
-
|
|
121468
|
-
|
|
121560
|
+
if (resolve34) {
|
|
121561
|
+
resolve34();
|
|
121562
|
+
resolve34 = null;
|
|
121469
121563
|
}
|
|
121470
121564
|
};
|
|
121471
121565
|
signal3?.addEventListener("abort", cleanup, { once: true });
|
|
@@ -121478,7 +121572,7 @@ function tailEventIterable(signal3) {
|
|
|
121478
121572
|
return { done: false, value: buffer.shift() };
|
|
121479
121573
|
}
|
|
121480
121574
|
await new Promise((r) => {
|
|
121481
|
-
|
|
121575
|
+
resolve34 = r;
|
|
121482
121576
|
});
|
|
121483
121577
|
}
|
|
121484
121578
|
},
|
|
@@ -121956,7 +122050,7 @@ var init_router = __esm(() => {
|
|
|
121956
122050
|
}
|
|
121957
122051
|
try {
|
|
121958
122052
|
const grant = createArtifactPresentation({
|
|
121959
|
-
sourcePath: isAbsolute8(input.sourcePath) ? input.sourcePath :
|
|
122053
|
+
sourcePath: isAbsolute8(input.sourcePath) ? input.sourcePath : resolve33(workspaceRoot, input.sourcePath),
|
|
121960
122054
|
entryPath: input.entryPath,
|
|
121961
122055
|
title: input.title,
|
|
121962
122056
|
ttlMs: input.ttlMs
|
|
@@ -124656,8 +124750,8 @@ function startBridgeServerTRPC(options) {
|
|
|
124656
124750
|
}
|
|
124657
124751
|
const iterable = isObservable(result) ? observableToAsyncIterable(result, abortController.signal) : result;
|
|
124658
124752
|
const iterator = iterable[Symbol.asyncIterator]();
|
|
124659
|
-
const abortPromise = new Promise((
|
|
124660
|
-
abortController.signal.addEventListener("abort", () =>
|
|
124753
|
+
const abortPromise = new Promise((resolve34) => {
|
|
124754
|
+
abortController.signal.addEventListener("abort", () => resolve34("abort"), {
|
|
124661
124755
|
once: true
|
|
124662
124756
|
});
|
|
124663
124757
|
});
|
|
@@ -126555,8 +126649,8 @@ async function runPairCommand(context, args) {
|
|
|
126555
126649
|
process.on("SIGINT", handleSignal);
|
|
126556
126650
|
process.on("SIGTERM", handleSignal);
|
|
126557
126651
|
try {
|
|
126558
|
-
await new Promise((
|
|
126559
|
-
controller.signal.addEventListener("abort", () =>
|
|
126652
|
+
await new Promise((resolve34) => {
|
|
126653
|
+
controller.signal.addEventListener("abort", () => resolve34(), { once: true });
|
|
126560
126654
|
});
|
|
126561
126655
|
} finally {
|
|
126562
126656
|
process.off("SIGINT", handleSignal);
|
|
@@ -127787,7 +127881,7 @@ import { spawnSync as spawnSync11 } from "child_process";
|
|
|
127787
127881
|
import { createHash as createHash14 } from "crypto";
|
|
127788
127882
|
import { mkdirSync as mkdirSync22 } from "fs";
|
|
127789
127883
|
import { homedir as homedir46 } from "os";
|
|
127790
|
-
import { basename as basename22, join as join63, resolve as
|
|
127884
|
+
import { basename as basename22, join as join63, resolve as resolve34 } from "path";
|
|
127791
127885
|
async function runSessionCommand(context, args) {
|
|
127792
127886
|
const action = args[0];
|
|
127793
127887
|
if (!action || action === "help" || action === "--help" || action === "-h") {
|
|
@@ -128079,8 +128173,8 @@ function readOptionValue(args, index2, flag) {
|
|
|
128079
128173
|
}
|
|
128080
128174
|
function resolveProjectPath2(context, projectPath) {
|
|
128081
128175
|
const rawPath = projectPath?.trim() || context.cwd;
|
|
128082
|
-
const expanded = rawPath === "~" ? context.env.HOME?.trim() || homedir46() : rawPath.startsWith("~/") ?
|
|
128083
|
-
return
|
|
128176
|
+
const expanded = rawPath === "~" ? context.env.HOME?.trim() || homedir46() : rawPath.startsWith("~/") ? resolve34(context.env.HOME?.trim() || homedir46(), rawPath.slice(2)) : rawPath;
|
|
128177
|
+
return resolve34(context.cwd, expanded);
|
|
128084
128178
|
}
|
|
128085
128179
|
function resolveControlPlaneDbPath2(context) {
|
|
128086
128180
|
const explicitPath = context.env.OPENSCOUT_CONTROL_PLANE_DB?.trim();
|
|
@@ -128520,8 +128614,8 @@ __export(exports_server, {
|
|
|
128520
128614
|
import { spawn as spawn10 } from "child_process";
|
|
128521
128615
|
import { existsSync as existsSync52, mkdirSync as mkdirSync23, openSync as openSync2, writeFileSync as writeFileSync17 } from "fs";
|
|
128522
128616
|
import { homedir as homedir47 } from "os";
|
|
128523
|
-
import { dirname as
|
|
128524
|
-
import { fileURLToPath as
|
|
128617
|
+
import { dirname as dirname30, join as join64, resolve as resolve35 } from "path";
|
|
128618
|
+
import { fileURLToPath as fileURLToPath11 } from "url";
|
|
128525
128619
|
function renderServerCommandHelp() {
|
|
128526
128620
|
return [
|
|
128527
128621
|
"scout server \u2014 Scout web UI (Bun runtime)",
|
|
@@ -128580,7 +128674,7 @@ function resolveScoutControlPlaneWebServerEntry() {
|
|
|
128580
128674
|
startDirectories: [
|
|
128581
128675
|
process.env.OPENSCOUT_SETUP_CWD,
|
|
128582
128676
|
process.cwd(),
|
|
128583
|
-
|
|
128677
|
+
dirname30(fileURLToPath11(import.meta.url))
|
|
128584
128678
|
]
|
|
128585
128679
|
});
|
|
128586
128680
|
const source = resolveRepoEntrypoint(repoRoot, "packages/web/server/index.ts");
|
|
@@ -129102,14 +129196,14 @@ __export(exports_setup, {
|
|
|
129102
129196
|
});
|
|
129103
129197
|
import { existsSync as existsSync53 } from "fs";
|
|
129104
129198
|
import { homedir as homedir48 } from "os";
|
|
129105
|
-
import { dirname as
|
|
129199
|
+
import { dirname as dirname31, join as join65, resolve as resolve36 } from "path";
|
|
129106
129200
|
import { createInterface as createInterface4 } from "readline/promises";
|
|
129107
129201
|
function findGitRoot2(startDirectory) {
|
|
129108
|
-
let current =
|
|
129202
|
+
let current = resolve36(startDirectory);
|
|
129109
129203
|
while (true) {
|
|
129110
129204
|
if (existsSync53(join65(current, ".git")))
|
|
129111
129205
|
return current;
|
|
129112
|
-
const parent =
|
|
129206
|
+
const parent = dirname31(current);
|
|
129113
129207
|
if (parent === current)
|
|
129114
129208
|
return null;
|
|
129115
129209
|
current = parent;
|
|
@@ -129117,8 +129211,8 @@ function findGitRoot2(startDirectory) {
|
|
|
129117
129211
|
}
|
|
129118
129212
|
function suggestProjectSourceRoot(currentDirectory, homeDirectory = homedir48()) {
|
|
129119
129213
|
const gitRoot = findGitRoot2(currentDirectory);
|
|
129120
|
-
if (gitRoot &&
|
|
129121
|
-
return
|
|
129214
|
+
if (gitRoot && resolve36(gitRoot) !== resolve36(homeDirectory))
|
|
129215
|
+
return dirname31(gitRoot);
|
|
129122
129216
|
for (const candidate of [
|
|
129123
129217
|
join65(homeDirectory, "dev"),
|
|
129124
129218
|
join65(homeDirectory, "Developer"),
|
|
@@ -129127,7 +129221,7 @@ function suggestProjectSourceRoot(currentDirectory, homeDirectory = homedir48())
|
|
|
129127
129221
|
if (existsSync53(candidate))
|
|
129128
129222
|
return candidate;
|
|
129129
129223
|
}
|
|
129130
|
-
return
|
|
129224
|
+
return resolve36(currentDirectory);
|
|
129131
129225
|
}
|
|
129132
129226
|
function expandHome(value, homeDirectory = homedir48()) {
|
|
129133
129227
|
if (value === "~")
|
|
@@ -129156,7 +129250,7 @@ async function resolveSetupSourceRoots(context, currentDirectory, sourceRoots, e
|
|
|
129156
129250
|
const selectedRoot = (await ask(suggestedRoot, Math.max(0, existing.roots.length - 1))).trim();
|
|
129157
129251
|
if (!selectedRoot && existing.roots.length > 0)
|
|
129158
129252
|
return existing.roots;
|
|
129159
|
-
return [
|
|
129253
|
+
return [resolve36(currentDirectory, expandHome(selectedRoot || suggestedRoot))];
|
|
129160
129254
|
}
|
|
129161
129255
|
async function runSetupCommand(context, args) {
|
|
129162
129256
|
const options = parseSetupCommandOptions(args, defaultScoutContextDirectory(context));
|
|
@@ -129276,7 +129370,7 @@ function writeStatusline(value) {
|
|
|
129276
129370
|
`);
|
|
129277
129371
|
}
|
|
129278
129372
|
function runDelegateStatusline(command, input, env) {
|
|
129279
|
-
return new Promise((
|
|
129373
|
+
return new Promise((resolve37) => {
|
|
129280
129374
|
const child = spawn11("sh", ["-lc", command], {
|
|
129281
129375
|
env: {
|
|
129282
129376
|
...env,
|
|
@@ -129291,7 +129385,7 @@ function runDelegateStatusline(command, input, env) {
|
|
|
129291
129385
|
return;
|
|
129292
129386
|
settled = true;
|
|
129293
129387
|
clearTimeout(timer);
|
|
129294
|
-
|
|
129388
|
+
resolve37(value?.trimEnd() || null);
|
|
129295
129389
|
};
|
|
129296
129390
|
const timer = setTimeout(() => {
|
|
129297
129391
|
child.kill("SIGTERM");
|
|
@@ -130036,8 +130130,8 @@ import { EventEmitter } from "events";
|
|
|
130036
130130
|
import { Buffer as Buffer2 } from "buffer";
|
|
130037
130131
|
import { Buffer as Buffer3 } from "buffer";
|
|
130038
130132
|
import { EventEmitter as EventEmitter2 } from "events";
|
|
130039
|
-
import { resolve as
|
|
130040
|
-
import { fileURLToPath as
|
|
130133
|
+
import { resolve as resolve37, dirname as dirname32 } from "path";
|
|
130134
|
+
import { fileURLToPath as fileURLToPath12 } from "url";
|
|
130041
130135
|
import { resolve as resolve210, isAbsolute as isAbsolute9, parse as parse8 } from "path";
|
|
130042
130136
|
import { existsSync as existsSync54 } from "fs";
|
|
130043
130137
|
import { basename as basename23, join as join66 } from "path";
|
|
@@ -133172,13 +133266,13 @@ class DebounceController {
|
|
|
133172
133266
|
}
|
|
133173
133267
|
debounce(id, ms, fn) {
|
|
133174
133268
|
const scopeMap = TIMERS_MAP.get(this.scopeId);
|
|
133175
|
-
return new Promise((
|
|
133269
|
+
return new Promise((resolve39, reject) => {
|
|
133176
133270
|
if (scopeMap.has(id)) {
|
|
133177
133271
|
clearTimeout(scopeMap.get(id));
|
|
133178
133272
|
}
|
|
133179
133273
|
const timerId = setTimeout(() => {
|
|
133180
133274
|
try {
|
|
133181
|
-
|
|
133275
|
+
resolve39(fn());
|
|
133182
133276
|
} catch (error48) {
|
|
133183
133277
|
reject(error48);
|
|
133184
133278
|
}
|
|
@@ -133268,25 +133362,25 @@ function getParsers() {
|
|
|
133268
133362
|
filetype: "javascript",
|
|
133269
133363
|
aliases: ["javascriptreact"],
|
|
133270
133364
|
queries: {
|
|
133271
|
-
highlights: [
|
|
133365
|
+
highlights: [resolve37(dirname32(fileURLToPath12(import.meta.url)), highlights_default)]
|
|
133272
133366
|
},
|
|
133273
|
-
wasm:
|
|
133367
|
+
wasm: resolve37(dirname32(fileURLToPath12(import.meta.url)), tree_sitter_javascript_default)
|
|
133274
133368
|
},
|
|
133275
133369
|
{
|
|
133276
133370
|
filetype: "typescript",
|
|
133277
133371
|
aliases: ["typescriptreact"],
|
|
133278
133372
|
queries: {
|
|
133279
|
-
highlights: [
|
|
133373
|
+
highlights: [resolve37(dirname32(fileURLToPath12(import.meta.url)), highlights_default2)]
|
|
133280
133374
|
},
|
|
133281
|
-
wasm:
|
|
133375
|
+
wasm: resolve37(dirname32(fileURLToPath12(import.meta.url)), tree_sitter_typescript_default)
|
|
133282
133376
|
},
|
|
133283
133377
|
{
|
|
133284
133378
|
filetype: "markdown",
|
|
133285
133379
|
queries: {
|
|
133286
|
-
highlights: [
|
|
133287
|
-
injections: [
|
|
133380
|
+
highlights: [resolve37(dirname32(fileURLToPath12(import.meta.url)), highlights_default3)],
|
|
133381
|
+
injections: [resolve37(dirname32(fileURLToPath12(import.meta.url)), injections_default)]
|
|
133288
133382
|
},
|
|
133289
|
-
wasm:
|
|
133383
|
+
wasm: resolve37(dirname32(fileURLToPath12(import.meta.url)), tree_sitter_markdown_default),
|
|
133290
133384
|
injectionMapping: {
|
|
133291
133385
|
nodeTypes: {
|
|
133292
133386
|
inline: "markdown_inline",
|
|
@@ -133309,16 +133403,16 @@ function getParsers() {
|
|
|
133309
133403
|
{
|
|
133310
133404
|
filetype: "markdown_inline",
|
|
133311
133405
|
queries: {
|
|
133312
|
-
highlights: [
|
|
133406
|
+
highlights: [resolve37(dirname32(fileURLToPath12(import.meta.url)), highlights_default4)]
|
|
133313
133407
|
},
|
|
133314
|
-
wasm:
|
|
133408
|
+
wasm: resolve37(dirname32(fileURLToPath12(import.meta.url)), tree_sitter_markdown_inline_default)
|
|
133315
133409
|
},
|
|
133316
133410
|
{
|
|
133317
133411
|
filetype: "zig",
|
|
133318
133412
|
queries: {
|
|
133319
|
-
highlights: [
|
|
133413
|
+
highlights: [resolve37(dirname32(fileURLToPath12(import.meta.url)), highlights_default5)]
|
|
133320
133414
|
},
|
|
133321
|
-
wasm:
|
|
133415
|
+
wasm: resolve37(dirname32(fileURLToPath12(import.meta.url)), tree_sitter_zig_default)
|
|
133322
133416
|
}
|
|
133323
133417
|
];
|
|
133324
133418
|
}
|
|
@@ -144288,7 +144382,7 @@ var init_index_vy1rm1x3 = __esm(async () => {
|
|
|
144288
144382
|
if (this.initializePromise) {
|
|
144289
144383
|
return this.initializePromise;
|
|
144290
144384
|
}
|
|
144291
|
-
this.initializePromise = new Promise((
|
|
144385
|
+
this.initializePromise = new Promise((resolve39, reject) => {
|
|
144292
144386
|
const timeoutMs = this.options.initTimeout ?? 1e4;
|
|
144293
144387
|
const timeoutId = setTimeout(() => {
|
|
144294
144388
|
const error48 = new Error("Worker initialization timed out");
|
|
@@ -144296,7 +144390,7 @@ var init_index_vy1rm1x3 = __esm(async () => {
|
|
|
144296
144390
|
this.initializeResolvers = undefined;
|
|
144297
144391
|
reject(error48);
|
|
144298
144392
|
}, timeoutMs);
|
|
144299
|
-
this.initializeResolvers = { resolve:
|
|
144393
|
+
this.initializeResolvers = { resolve: resolve39, reject, timeoutId };
|
|
144300
144394
|
this.worker?.postMessage({
|
|
144301
144395
|
type: "INIT",
|
|
144302
144396
|
dataPath: this.options.dataPath
|
|
@@ -144337,8 +144431,8 @@ var init_index_vy1rm1x3 = __esm(async () => {
|
|
|
144337
144431
|
}
|
|
144338
144432
|
async getPerformance() {
|
|
144339
144433
|
const messageId = `performance_${this.messageIdCounter++}`;
|
|
144340
|
-
return new Promise((
|
|
144341
|
-
this.messageCallbacks.set(messageId,
|
|
144434
|
+
return new Promise((resolve39) => {
|
|
144435
|
+
this.messageCallbacks.set(messageId, resolve39);
|
|
144342
144436
|
this.worker?.postMessage({ type: "GET_PERFORMANCE", messageId });
|
|
144343
144437
|
});
|
|
144344
144438
|
}
|
|
@@ -144351,8 +144445,8 @@ var init_index_vy1rm1x3 = __esm(async () => {
|
|
|
144351
144445
|
}
|
|
144352
144446
|
}
|
|
144353
144447
|
const messageId = `oneshot_${this.messageIdCounter++}`;
|
|
144354
|
-
return new Promise((
|
|
144355
|
-
this.messageCallbacks.set(messageId,
|
|
144448
|
+
return new Promise((resolve39) => {
|
|
144449
|
+
this.messageCallbacks.set(messageId, resolve39);
|
|
144356
144450
|
this.worker?.postMessage({
|
|
144357
144451
|
type: "ONESHOT_HIGHLIGHT",
|
|
144358
144452
|
content,
|
|
@@ -144468,8 +144562,8 @@ var init_index_vy1rm1x3 = __esm(async () => {
|
|
|
144468
144562
|
}
|
|
144469
144563
|
async preloadParser(filetype) {
|
|
144470
144564
|
const messageId = `has_parser_${this.messageIdCounter++}`;
|
|
144471
|
-
const response = await new Promise((
|
|
144472
|
-
this.messageCallbacks.set(messageId,
|
|
144565
|
+
const response = await new Promise((resolve39) => {
|
|
144566
|
+
this.messageCallbacks.set(messageId, resolve39);
|
|
144473
144567
|
this.worker?.postMessage({
|
|
144474
144568
|
type: "PRELOAD_PARSER",
|
|
144475
144569
|
filetype,
|
|
@@ -144496,8 +144590,8 @@ var init_index_vy1rm1x3 = __esm(async () => {
|
|
|
144496
144590
|
}
|
|
144497
144591
|
this.buffers.set(id, { id, content, filetype, version: version3, hasParser: false });
|
|
144498
144592
|
const messageId = `init_${this.messageIdCounter++}`;
|
|
144499
|
-
const response = await new Promise((
|
|
144500
|
-
this.messageCallbacks.set(messageId,
|
|
144593
|
+
const response = await new Promise((resolve39) => {
|
|
144594
|
+
this.messageCallbacks.set(messageId, resolve39);
|
|
144501
144595
|
this.worker?.postMessage({
|
|
144502
144596
|
type: "INITIALIZE_PARSER",
|
|
144503
144597
|
bufferId: id,
|
|
@@ -144553,9 +144647,9 @@ var init_index_vy1rm1x3 = __esm(async () => {
|
|
|
144553
144647
|
this.editQueues.delete(bufferId);
|
|
144554
144648
|
}
|
|
144555
144649
|
if (this.worker) {
|
|
144556
|
-
await new Promise((
|
|
144650
|
+
await new Promise((resolve39) => {
|
|
144557
144651
|
const messageId = `dispose_${bufferId}`;
|
|
144558
|
-
this.messageCallbacks.set(messageId,
|
|
144652
|
+
this.messageCallbacks.set(messageId, resolve39);
|
|
144559
144653
|
try {
|
|
144560
144654
|
this.worker.postMessage({
|
|
144561
144655
|
type: "DISPOSE_BUFFER",
|
|
@@ -144563,13 +144657,13 @@ var init_index_vy1rm1x3 = __esm(async () => {
|
|
|
144563
144657
|
});
|
|
144564
144658
|
} catch (error48) {
|
|
144565
144659
|
console.error("Error disposing buffer", error48);
|
|
144566
|
-
|
|
144660
|
+
resolve39(false);
|
|
144567
144661
|
}
|
|
144568
144662
|
setTimeout(() => {
|
|
144569
144663
|
if (this.messageCallbacks.has(messageId)) {
|
|
144570
144664
|
this.messageCallbacks.delete(messageId);
|
|
144571
144665
|
console.warn({ bufferId }, "Timed out waiting for buffer to be disposed");
|
|
144572
|
-
|
|
144666
|
+
resolve39(false);
|
|
144573
144667
|
}
|
|
144574
144668
|
}, 3000);
|
|
144575
144669
|
});
|
|
@@ -144626,12 +144720,12 @@ var init_index_vy1rm1x3 = __esm(async () => {
|
|
|
144626
144720
|
this.options.dataPath = dataPath;
|
|
144627
144721
|
if (this.initialized && this.worker) {
|
|
144628
144722
|
const messageId = `update_datapath_${this.messageIdCounter++}`;
|
|
144629
|
-
return new Promise((
|
|
144723
|
+
return new Promise((resolve39, reject) => {
|
|
144630
144724
|
this.messageCallbacks.set(messageId, (response) => {
|
|
144631
144725
|
if (response.error) {
|
|
144632
144726
|
reject(new Error(response.error));
|
|
144633
144727
|
} else {
|
|
144634
|
-
|
|
144728
|
+
resolve39();
|
|
144635
144729
|
}
|
|
144636
144730
|
});
|
|
144637
144731
|
this.worker.postMessage({
|
|
@@ -144647,12 +144741,12 @@ var init_index_vy1rm1x3 = __esm(async () => {
|
|
|
144647
144741
|
throw new Error("Cannot clear cache: client is not initialized");
|
|
144648
144742
|
}
|
|
144649
144743
|
const messageId = `clear_cache_${this.messageIdCounter++}`;
|
|
144650
|
-
return new Promise((
|
|
144744
|
+
return new Promise((resolve39, reject) => {
|
|
144651
144745
|
this.messageCallbacks.set(messageId, (response) => {
|
|
144652
144746
|
if (response.error) {
|
|
144653
144747
|
reject(new Error(response.error));
|
|
144654
144748
|
} else {
|
|
144655
|
-
|
|
144749
|
+
resolve39();
|
|
144656
144750
|
}
|
|
144657
144751
|
});
|
|
144658
144752
|
this.worker.postMessage({
|
|
@@ -162554,14 +162648,14 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
|
|
|
162554
162648
|
prevActScopeDepth !== actScopeDepth - 1 && console.error("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. ");
|
|
162555
162649
|
actScopeDepth = prevActScopeDepth;
|
|
162556
162650
|
}
|
|
162557
|
-
function recursivelyFlushAsyncActWork(returnValue,
|
|
162651
|
+
function recursivelyFlushAsyncActWork(returnValue, resolve39, reject) {
|
|
162558
162652
|
var queue = ReactSharedInternals.actQueue;
|
|
162559
162653
|
if (queue !== null)
|
|
162560
162654
|
if (queue.length !== 0)
|
|
162561
162655
|
try {
|
|
162562
162656
|
flushActQueue(queue);
|
|
162563
162657
|
enqueueTask(function() {
|
|
162564
|
-
return recursivelyFlushAsyncActWork(returnValue,
|
|
162658
|
+
return recursivelyFlushAsyncActWork(returnValue, resolve39, reject);
|
|
162565
162659
|
});
|
|
162566
162660
|
return;
|
|
162567
162661
|
} catch (error48) {
|
|
@@ -162569,7 +162663,7 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
|
|
|
162569
162663
|
}
|
|
162570
162664
|
else
|
|
162571
162665
|
ReactSharedInternals.actQueue = null;
|
|
162572
|
-
0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) :
|
|
162666
|
+
0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) : resolve39(returnValue);
|
|
162573
162667
|
}
|
|
162574
162668
|
function flushActQueue(queue) {
|
|
162575
162669
|
if (!isFlushing) {
|
|
@@ -162745,14 +162839,14 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
|
|
|
162745
162839
|
didAwaitActCall || didWarnNoAwaitAct || (didWarnNoAwaitAct = true, console.error("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"));
|
|
162746
162840
|
});
|
|
162747
162841
|
return {
|
|
162748
|
-
then: function(
|
|
162842
|
+
then: function(resolve39, reject) {
|
|
162749
162843
|
didAwaitActCall = true;
|
|
162750
162844
|
thenable.then(function(returnValue) {
|
|
162751
162845
|
popActScope(prevActQueue, prevActScopeDepth);
|
|
162752
162846
|
if (prevActScopeDepth === 0) {
|
|
162753
162847
|
try {
|
|
162754
162848
|
flushActQueue(queue), enqueueTask(function() {
|
|
162755
|
-
return recursivelyFlushAsyncActWork(returnValue,
|
|
162849
|
+
return recursivelyFlushAsyncActWork(returnValue, resolve39, reject);
|
|
162756
162850
|
});
|
|
162757
162851
|
} catch (error$0) {
|
|
162758
162852
|
ReactSharedInternals.thrownErrors.push(error$0);
|
|
@@ -162763,7 +162857,7 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
|
|
|
162763
162857
|
reject(_thrownError);
|
|
162764
162858
|
}
|
|
162765
162859
|
} else
|
|
162766
|
-
|
|
162860
|
+
resolve39(returnValue);
|
|
162767
162861
|
}, function(error48) {
|
|
162768
162862
|
popActScope(prevActQueue, prevActScopeDepth);
|
|
162769
162863
|
0 < ReactSharedInternals.thrownErrors.length ? (error48 = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(error48)) : reject(error48);
|
|
@@ -162779,11 +162873,11 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
|
|
|
162779
162873
|
if (0 < ReactSharedInternals.thrownErrors.length)
|
|
162780
162874
|
throw callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback;
|
|
162781
162875
|
return {
|
|
162782
|
-
then: function(
|
|
162876
|
+
then: function(resolve39, reject) {
|
|
162783
162877
|
didAwaitActCall = true;
|
|
162784
162878
|
prevActScopeDepth === 0 ? (ReactSharedInternals.actQueue = queue, enqueueTask(function() {
|
|
162785
|
-
return recursivelyFlushAsyncActWork(returnValue$jscomp$0,
|
|
162786
|
-
})) :
|
|
162879
|
+
return recursivelyFlushAsyncActWork(returnValue$jscomp$0, resolve39, reject);
|
|
162880
|
+
})) : resolve39(returnValue$jscomp$0);
|
|
162787
162881
|
}
|
|
162788
162882
|
};
|
|
162789
162883
|
};
|
|
@@ -165264,8 +165358,8 @@ It can also happen if the client has a browser extension installed which messes
|
|
|
165264
165358
|
currentEntangledActionThenable = {
|
|
165265
165359
|
status: "pending",
|
|
165266
165360
|
value: undefined,
|
|
165267
|
-
then: function(
|
|
165268
|
-
entangledListeners.push(
|
|
165361
|
+
then: function(resolve39) {
|
|
165362
|
+
entangledListeners.push(resolve39);
|
|
165269
165363
|
}
|
|
165270
165364
|
};
|
|
165271
165365
|
}
|
|
@@ -165289,8 +165383,8 @@ It can also happen if the client has a browser extension installed which messes
|
|
|
165289
165383
|
status: "pending",
|
|
165290
165384
|
value: null,
|
|
165291
165385
|
reason: null,
|
|
165292
|
-
then: function(
|
|
165293
|
-
listeners.push(
|
|
165386
|
+
then: function(resolve39) {
|
|
165387
|
+
listeners.push(resolve39);
|
|
165294
165388
|
}
|
|
165295
165389
|
};
|
|
165296
165390
|
thenable.then(function() {
|
|
@@ -193552,7 +193646,7 @@ async function runScoutMonitorApp(options) {
|
|
|
193552
193646
|
const renderer = await createCliRenderer();
|
|
193553
193647
|
const root = createRoot(renderer);
|
|
193554
193648
|
let closed = false;
|
|
193555
|
-
await new Promise((
|
|
193649
|
+
await new Promise((resolve39) => {
|
|
193556
193650
|
const close = () => {
|
|
193557
193651
|
if (closed) {
|
|
193558
193652
|
return;
|
|
@@ -193567,7 +193661,7 @@ async function runScoutMonitorApp(options) {
|
|
|
193567
193661
|
process.stdin.setRawMode?.(false);
|
|
193568
193662
|
process.stdin.pause();
|
|
193569
193663
|
}
|
|
193570
|
-
|
|
193664
|
+
resolve39();
|
|
193571
193665
|
};
|
|
193572
193666
|
process.once("SIGINT", close);
|
|
193573
193667
|
process.once("SIGTERM", close);
|
|
@@ -193618,7 +193712,7 @@ __export(exports_up, {
|
|
|
193618
193712
|
runUpCommand: () => runUpCommand
|
|
193619
193713
|
});
|
|
193620
193714
|
import { existsSync as existsSync55 } from "fs";
|
|
193621
|
-
import { resolve as
|
|
193715
|
+
import { resolve as resolve39 } from "path";
|
|
193622
193716
|
function looksLikePath(value) {
|
|
193623
193717
|
return value.includes("/") || value.startsWith(".") || value.startsWith("~");
|
|
193624
193718
|
}
|
|
@@ -193726,8 +193820,8 @@ async function runUpCommand(context, args) {
|
|
|
193726
193820
|
throw new ScoutCliError(`usage: scout up <name|path> [--name <alias>] [--harness <${SUPPORTED_LOCAL_AGENT_HARNESSES.join("|")}>] [--provider <provider>] [--model <model>] [--reasoning-effort <effort>] [--permission-profile <${formatScoutPermissionProfiles()}>]`);
|
|
193727
193821
|
}
|
|
193728
193822
|
let projectPath;
|
|
193729
|
-
if (looksLikePath(target2) || existsSync55(
|
|
193730
|
-
projectPath =
|
|
193823
|
+
if (looksLikePath(target2) || existsSync55(resolve39(target2))) {
|
|
193824
|
+
projectPath = resolve39(target2);
|
|
193731
193825
|
} else {
|
|
193732
193826
|
const resolved = await resolveLocalAgentByName(target2);
|
|
193733
193827
|
if (!resolved) {
|
|
@@ -194481,7 +194575,7 @@ init_options();
|
|
|
194481
194575
|
// ../../apps/desktop/src/cli/broker-update.ts
|
|
194482
194576
|
import { randomUUID as randomUUID7 } from "crypto";
|
|
194483
194577
|
import { mkdir as mkdir15, readFile as readFile18, rename, rm as rm6, stat as stat6, writeFile as writeFile12 } from "fs/promises";
|
|
194484
|
-
import { basename as basename26, dirname as
|
|
194578
|
+
import { basename as basename26, dirname as dirname35, join as join70 } from "path";
|
|
194485
194579
|
|
|
194486
194580
|
// ../../apps/desktop/src/cli/runtime-freshness.ts
|
|
194487
194581
|
function isRecord16(value) {
|
|
@@ -194523,7 +194617,7 @@ var BROKER_UPDATE_LOCK_WAIT_GRACE_MS = 15000;
|
|
|
194523
194617
|
var BROKER_UPDATE_LOCK_WAIT_MS = SCOUTD_RESTART_TIMEOUT_MS + BROKER_UPDATE_LOCK_WAIT_GRACE_MS;
|
|
194524
194618
|
var BROKER_UPDATE_LOCK_POLL_MS = 50;
|
|
194525
194619
|
function sleep2(ms) {
|
|
194526
|
-
return new Promise((
|
|
194620
|
+
return new Promise((resolve40) => setTimeout(resolve40, ms));
|
|
194527
194621
|
}
|
|
194528
194622
|
function errorCode2(error48) {
|
|
194529
194623
|
return error48 && typeof error48 === "object" && "code" in error48 ? String(error48.code ?? "") : "";
|
|
@@ -194621,7 +194715,7 @@ async function tryCreateOwnedLock(lockPath) {
|
|
|
194621
194715
|
};
|
|
194622
194716
|
}
|
|
194623
194717
|
async function tryReclaimDeadLock(lockPath, observedOwner) {
|
|
194624
|
-
const reclaimPath = join70(
|
|
194718
|
+
const reclaimPath = join70(dirname35(lockPath), BROKER_UPDATE_RECLAIM_DIRECTORY);
|
|
194625
194719
|
const reclaimGuard = await tryCreateOwnedLock(reclaimPath);
|
|
194626
194720
|
if (!reclaimGuard.acquired) {
|
|
194627
194721
|
return false;
|
|
@@ -194663,7 +194757,7 @@ async function waitForBrokerUpdateLockRelease(lockPath, deadline) {
|
|
|
194663
194757
|
return false;
|
|
194664
194758
|
}
|
|
194665
194759
|
async function acquireBrokerUpdateLock(lockPath, waitTimeoutMs) {
|
|
194666
|
-
await mkdir15(
|
|
194760
|
+
await mkdir15(dirname35(lockPath), { recursive: true });
|
|
194667
194761
|
const waitDeadline = Date.now() + waitTimeoutMs;
|
|
194668
194762
|
for (;; ) {
|
|
194669
194763
|
const created = await tryCreateOwnedLock(lockPath);
|
|
@@ -194690,7 +194784,7 @@ async function acquireBrokerUpdateLock(lockPath, waitTimeoutMs) {
|
|
|
194690
194784
|
}
|
|
194691
194785
|
}
|
|
194692
194786
|
async function writeCliMtimeCheckpointAtomically(checkpointPath, mtime) {
|
|
194693
|
-
const checkpointDirectory =
|
|
194787
|
+
const checkpointDirectory = dirname35(checkpointPath);
|
|
194694
194788
|
await mkdir15(checkpointDirectory, { recursive: true });
|
|
194695
194789
|
const temporaryPath = join70(checkpointDirectory, `.${basename26(checkpointPath)}.${process.pid}.${randomUUID7()}.tmp`);
|
|
194696
194790
|
try {
|
|
@@ -194727,7 +194821,7 @@ async function ensureBrokerUptodate(options) {
|
|
|
194727
194821
|
const report = options.report ?? (() => {
|
|
194728
194822
|
return;
|
|
194729
194823
|
});
|
|
194730
|
-
const lockPath = join70(
|
|
194824
|
+
const lockPath = join70(dirname35(options.checkpointPath), BROKER_UPDATE_LOCK_DIRECTORY);
|
|
194731
194825
|
let lock;
|
|
194732
194826
|
try {
|
|
194733
194827
|
lock = await acquireBrokerUpdateLock(lockPath, options.lockWaitTimeoutMs ?? BROKER_UPDATE_LOCK_WAIT_MS);
|