@openscout/scout 0.2.84 → 0.2.86
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 +1 -1
- package/bin/scoutd +0 -0
- package/dist/build-manifest.json +3 -3
- package/dist/client/assets/ActivityScreen-C7AwUogt.js +1 -0
- package/dist/client/assets/{AddProjectForm-Czb5uwou.js → AddProjectForm-BNRpRPod.js} +1 -1
- package/dist/client/assets/AgentAvatar-B1xvQ7ej.js +1 -0
- package/dist/client/assets/AgentConfigurationScreen-BoBQpyz5.js +1 -0
- package/dist/client/assets/AgentDefinitionsWorkspace-rw3vh8Lm.js +1 -0
- package/dist/client/assets/{AgentDetailCard-Biq8b2gv.js → AgentDetailCard-FelCxQrT.js} +1 -1
- package/dist/client/assets/AgentFloorView-Crdw8Uo5.js +1 -0
- package/dist/client/assets/AgentInfoScreen-Cge7HHbV.js +1 -0
- package/dist/client/assets/{AgentLaneCard-C4DMQR-c.js → AgentLaneCard-CRDG74C1.js} +1 -1
- package/dist/client/assets/{AgentLaneChrome-D1xNNf7A.js → AgentLaneChrome-CWFqUdch.js} +1 -1
- package/dist/client/assets/AgentLaneDetailSheet-DCIIg3Zp.js +4 -0
- package/dist/client/assets/{AgentLaneSummaryResize-C9loK-st.js → AgentLaneSummaryResize-yTM4GQAJ.js} +1 -1
- package/dist/client/assets/AgentLanesEmbedScreen-BJLwXSNp.js +1 -0
- package/dist/client/assets/{AgentLanesPreflight-M7iDXdP2.js → AgentLanesPreflight-DJeDRTAN.js} +1 -1
- package/dist/client/assets/AgentLanesView-CbY9qD0z.js +2 -0
- package/dist/client/assets/{AgentLiveActions-0iy8QZ1T.js → AgentLiveActions-Bn3zeZBN.js} +1 -1
- package/dist/client/assets/AgentSessions-czl5zT7A.js +6 -0
- package/dist/client/assets/AgentsConsole-CoT2crwq.js +1 -0
- package/dist/client/assets/{AgentsScreen-Bww6HgFs.js → AgentsScreen-BcPM-z1T.js} +1 -1
- package/dist/client/assets/AgentsSubnav-3_vpn2bT.js +1 -0
- package/dist/client/assets/AstronautSuit-BADl7m8x.js +1 -0
- package/dist/client/assets/{AtopView-h_aFoNkP.js → AtopView-DymBCiXv.js} +1 -1
- package/dist/client/assets/{BackToPicker-BXp5E2ck.js → BackToPicker-CqYhOaLB.js} +1 -1
- package/dist/client/assets/BriefingDetailScreen-DDfZ8ci1.js +1 -0
- package/dist/client/assets/{BriefingsScreen-BTsvr5fv.js → BriefingsScreen-CLvSOJjy.js} +1 -1
- package/dist/client/assets/{BrokerMetadataPanel-jg7odHQp.js → BrokerMetadataPanel-DFAH-NO6.js} +1 -1
- package/dist/client/assets/BrokerScreen-Bkvu92jk.js +5 -0
- package/dist/client/assets/{Canvas-BePL08RR.js → Canvas-KyTsDJlB.js} +1 -1
- package/dist/client/assets/ChatCollapsedStrip-Bjjqa30K.js +1 -0
- package/dist/client/assets/{CodeDiffPane-86odpBSt.js → CodeDiffPane-C9HT1dCT.js} +1 -1
- package/dist/client/assets/{CodeProjectPicker-8svr_S_A.js → CodeProjectPicker-5Y3GvXkM.js} +1 -1
- package/dist/client/assets/{CodeScreen-CJ2RgB32.js → CodeScreen-DpN9kQvm.js} +1 -1
- package/dist/client/assets/ConversationComposer-Ce7Byw48.js +1 -0
- package/dist/client/assets/ConversationFeedRows-DygDfQn_.js +1 -0
- package/dist/client/assets/ConversationHeader-C3sg0ULI.js +1 -0
- package/dist/client/assets/ConversationPanels-Dg4Y2GgX.js +6 -0
- package/dist/client/assets/ConversationScreen-BP5tdz2k.css +1 -0
- package/dist/client/assets/ConversationScreen-CjWWmuuh.js +1 -0
- package/dist/client/assets/ConversationStatus-BhVIYQza.js +1 -0
- package/dist/client/assets/CrewWorkspaces-B6YIyw1z.css +1 -0
- package/dist/client/assets/CrewWorkspaces-CDU-wy1Y.js +1 -0
- package/dist/client/assets/{DataTable-CGw5CECG.js → DataTable-oJP339bX.js} +1 -1
- package/dist/client/assets/{DispatchAftermath-DowTb7uO.js → DispatchAftermath-CH02HAVw.js} +1 -1
- package/dist/client/assets/DocumentFocusViewer-DmtFisY9.js +1 -0
- package/dist/client/assets/{EmbeddableSurfacesLab-CxfJXS2g.js → EmbeddableSurfacesLab-84b9I3fy.js} +1 -1
- package/dist/client/assets/{EmptyState-BUvllvA6.js → EmptyState-BnDda92b.js} +1 -1
- package/dist/client/assets/{FileViewerPane-BM4AD_bo.js → FileViewerPane-Dg7_88pv.js} +1 -1
- package/dist/client/assets/FlightObserveScreen-DL3Xhl0h.js +1 -0
- package/dist/client/assets/{FollowScreen-DG0osbUp.js → FollowScreen-DcFBqr6l.js} +1 -1
- package/dist/client/assets/{HarnessMark-MztYnrGK.js → HarnessMark-DGZ6o6Ct.js} +1 -1
- package/dist/client/assets/{HarnessesScreen-BWqirBjK.js → HarnessesScreen-DTDL-XaA.js} +1 -1
- package/dist/client/assets/{HerdrSession-6sFln7WX.js → HerdrSession-DV2hD6Yh.js} +1 -1
- package/dist/client/assets/HomeHero-7JwycwFY.css +1 -0
- package/dist/client/assets/HomeHero-CENwVZ45.js +1 -0
- package/dist/client/assets/HostAdvisorView-PgiZUkd_.js +1 -0
- package/dist/client/assets/{KnowledgeSearchInspector-BOIhFWd2.js → KnowledgeSearchInspector-DNQjeWZO.js} +1 -1
- package/dist/client/assets/KnowledgeSearchScreen-Bj80IgR0.js +1 -0
- package/dist/client/assets/{LaneToolHoverCard-CcEiQC6B.js → LaneToolHoverCard-197xYmRp.js} +1 -1
- package/dist/client/assets/LaneTraceDetailSheet-BztwvOv9.js +1 -0
- package/dist/client/assets/{LaneTraceEventFocus-Bl9L0EYb.js → LaneTraceEventFocus-C9cmqxnK.js} +1 -1
- package/dist/client/assets/{MeshCanvas-ZjIuMiRo.js → MeshCanvas-C3_2p9B6.js} +2 -2
- package/dist/client/assets/{MeshCanvasMinimap-C-LQtiX6.js → MeshCanvasMinimap-ZTjYWXTZ.js} +1 -1
- package/dist/client/assets/{MeshScreen-Bs3soujg.js → MeshScreen-lJKaOyGB.js} +1 -1
- package/dist/client/assets/{MeshTopologyView-C0LUyT3K.js → MeshTopologyView-CBjHbAZw.js} +2 -2
- package/dist/client/assets/MessagesScreen-D6MVLvdg.js +1 -0
- package/dist/client/assets/{MissionContextRail-CjGAEGu8.js → MissionContextRail-DXkrbcnZ.js} +1 -1
- package/dist/client/assets/MissionControlView-BCH-Zsp4.js +1 -0
- package/dist/client/assets/MissionFocusOverlay-DbAliOSF.js +1 -0
- package/dist/client/assets/MissionLeftAgentRow-Bx6Pg8_O.js +1 -0
- package/dist/client/assets/MissionLogPane-D06c29Y8.js +1 -0
- package/dist/client/assets/{NewAgentModal-D5e0YUAo.js → NewAgentModal-C18Ajovd.js} +1 -1
- package/dist/client/assets/NewChatComposer-Bgqes0UQ.js +19 -0
- package/dist/client/assets/{NewChatOrigin-BEz6jyqf.js → NewChatOrigin-DpHS2Wmt.js} +1 -1
- package/dist/client/assets/ObserveEmbedScreen-Cmhwai4X.js +2 -0
- package/dist/client/assets/ObserveTextFlow-C1f5oize.js +2 -0
- package/dist/client/assets/ObservedTopologyPanel-D85P6RAk.js +2 -0
- package/dist/client/assets/OpenScoutAppShell-IDI4fuUE.js +88 -0
- package/dist/client/assets/OpsAgentsView-yt0JavoB.js +1 -0
- package/dist/client/assets/OpsScreen-C3yNQqJE.js +1 -0
- package/dist/client/assets/OpsSubnav-BijKI3yG.js +1 -0
- package/dist/client/assets/ProjectAgentProfile-DnIeC16r.js +1 -0
- package/dist/client/assets/{ProjectAgentProfileBar-B1VpwzGD.js → ProjectAgentProfileBar-IDEpKZvI.js} +1 -1
- package/dist/client/assets/ProjectAgentProfileHero-Bh_aISs-.js +1 -0
- package/dist/client/assets/ProjectsInbox-B8Srlklk.js +2 -0
- package/dist/client/assets/ProjectsRail-DqAbdvCf.js +1 -0
- package/dist/client/assets/ProjectsScreen-DKHQ2iEv.js +1 -0
- package/dist/client/assets/ProjectsThreadAside-DpkjYLL2.js +1 -0
- package/dist/client/assets/Provider-Ve8yXaWR.js +1 -0
- package/dist/client/assets/RailRow-B0sRaJc6.css +1 -0
- package/dist/client/assets/RailRow-C4GNGR80.js +1 -0
- package/dist/client/assets/RawSessionsTable-Co3vzwsf.js +1 -0
- package/dist/client/assets/RealtimeVoiceScreen-DMd1CBAf.js +9 -0
- package/dist/client/assets/{RepoDiffEmbedScreen-VLg4caej.js → RepoDiffEmbedScreen-C97Euf4s.js} +1 -1
- package/dist/client/assets/{RepoDiffPageScreen-BelnvgnP.js → RepoDiffPageScreen-DUKLzkrW.js} +1 -1
- package/dist/client/assets/RepoDiffViewer-CovKjSgb.js +7 -0
- package/dist/client/assets/RepoDiffViewerLazy-zIiEmh-e.js +2 -0
- package/dist/client/assets/{ReposScreen-IINK-CFn.js → ReposScreen-BR1LqTf1.js} +6 -6
- package/dist/client/assets/ScoutDeckSurface-BGsVicc2.js +1 -0
- package/dist/client/assets/{ScoutSurface-x_QbcRyk.js → ScoutSurface-BMKW7hSu.js} +1 -1
- package/dist/client/assets/{ScoutbotFxLab-7t9JVvZg.js → ScoutbotFxLab-0O2iDRrF.js} +1 -1
- package/dist/client/assets/{SecondaryNav-Dj30epYF.js → SecondaryNav-cYTw2p39.js} +1 -1
- package/dist/client/assets/{SessionEmbedScreen-s2mJ5Fg9.js → SessionEmbedScreen-mNjT0R6j.js} +1 -1
- package/dist/client/assets/{SessionObserve-DaUrJCMq.js → SessionObserve-zAlFbwFn.js} +1 -1
- package/dist/client/assets/{SessionObserveEvidence-ClUW8jpV.js → SessionObserveEvidence-BVawzqoE.js} +1 -1
- package/dist/client/assets/SessionRefScreen-BmKhf29o.js +1 -0
- package/dist/client/assets/SessionsScreen-CsSqjIY2.js +1 -0
- package/dist/client/assets/SettingsDrawer-Dsj-On_x.css +1 -0
- package/dist/client/assets/SettingsDrawer-DwYQTGi8.js +3 -0
- package/dist/client/assets/SettingsScreen-Btaku7YM.js +1 -0
- package/dist/client/assets/{ShikiPane-Dkwyx--r.js → ShikiPane-DyEJdcvb.js} +1 -1
- package/dist/client/assets/{SlidePanel-CuTeirnk.js → SlidePanel-Dg8_styW.js} +1 -1
- package/dist/client/assets/{SpriteAvatar-DQ3PTb8L.js → SpriteAvatar-DMrSssNZ.js} +1 -1
- package/dist/client/assets/{StatusPill-BJ1ierIR.js → StatusPill-NFFnphtx.js} +1 -1
- package/dist/client/assets/{TailView-CufWcrvf.js → TailView-BfObcZu3.js} +2 -2
- package/dist/client/assets/Terminal-Dr-M9U4u.js +1 -0
- package/dist/client/assets/TerminalEmbedScreen-BmyZkonh.js +1 -0
- package/dist/client/assets/{TerminalRelay-rvUzI9Ek.js → TerminalRelay-lJ2KdMCW.js} +3 -3
- package/dist/client/assets/{TextDocumentSurface-Bc-kHPgG.js → TextDocumentSurface-C7fGlzY8.js} +1 -1
- package/dist/client/assets/{TmuxPeek-DLyDkq_D.js → TmuxPeek-BSeKIjnX.js} +1 -1
- package/dist/client/assets/{VoicePermissionsPanel-CD903y9K.js → VoicePermissionsPanel-BkIGTzgw.js} +1 -1
- package/dist/client/assets/{WorkDetailScreen-D51oI0dH.js → WorkDetailScreen-Cwe-KWK4.js} +3 -3
- package/dist/client/assets/WorkFilesViewer-BBtKRBPv.js +1 -0
- package/dist/client/assets/{activity-BvGruxWG.js → activity-D4W2XZY2.js} +1 -1
- package/dist/client/assets/{addon-fit-Cfq4Ayjd.js → addon-fit-Celjj2yn.js} +1 -1
- package/dist/client/assets/{addon-webgl-B8sIf9-s.js → addon-webgl-Cu4tJ21-.js} +1 -1
- package/dist/client/assets/{ScoutbotBroadcastChip-CxtYZWPZ.css → agent-autocomplete-C7xwIcwd.css} +1 -1
- package/dist/client/assets/agent-autocomplete-Dv-_9dAw.js +2 -0
- package/dist/client/assets/{agent-essentials-yb4wIJlX.js → agent-essentials-CngjUhQj.js} +1 -1
- package/dist/client/assets/agent-identity-DzHGhLdJ.js +1 -0
- package/dist/client/assets/{agent-lane-card-model-q4cwzLX4.js → agent-lane-card-model-CSugZCdy.js} +1 -1
- package/dist/client/assets/{agent-lane-detail-BNNm6FNu.js → agent-lane-detail-D5EIlX7_.js} +1 -1
- package/dist/client/assets/{agent-lane-preview-C33Dwpn7.js → agent-lane-preview-BhplDYGf.js} +1 -1
- package/dist/client/assets/{agent-lanes-BDNktFBZ.css → agent-lanes-DlqcEf0l.css} +1 -1
- package/dist/client/assets/{agent-lanes-model-VYQ5a68i.js → agent-lanes-model-BKOs_32K.js} +2 -2
- package/dist/client/assets/agent-specialization-CNrsRbKA.js +1 -0
- package/dist/client/assets/{api-BkjHJfgJ.js → api-BHHEUSS3.js} +1 -1
- package/dist/client/assets/api-DEHEgJ9m.js +1 -0
- package/dist/client/assets/{arc.es-BBTfhvLE.js → arc.es-DNT50Y-_.js} +1 -1
- package/dist/client/assets/archive-DH49QqFG.js +1 -0
- package/dist/client/assets/{arrow-left-BOht-YQu.js → arrow-left-i-h6JAgs.js} +1 -1
- package/dist/client/assets/arrow-right-B0Yi01Zr.js +1 -0
- package/dist/client/assets/{arrow-up-right-hoR8_oUz.js → arrow-up-right-RBC6k8nn.js} +1 -1
- package/dist/client/assets/{bot-BUK7dOPS.js → bot-r2IuAuJd.js} +1 -1
- package/dist/client/assets/broker-display-Q75fupqG.js +2 -0
- package/dist/client/assets/{cache-Dr0why2k.js → cache-BO2Bd_LV.js} +1 -1
- package/dist/client/assets/{check--esHw52j.js → check-Bfs7hMb1.js} +1 -1
- package/dist/client/assets/{chevron-down-NAhBUkFd.js → chevron-down-Da5tV19_.js} +1 -1
- package/dist/client/assets/{chevron-right-C10o7t_X.js → chevron-right-BMqtBds_.js} +1 -1
- package/dist/client/assets/{chunk-HRAB3GC3-DF8R9rPv.js → chunk-HRAB3GC3-BUVYXXAp.js} +1 -1
- package/dist/client/assets/{clock-of01sAB6.js → clock-DaKLp6Xd.js} +1 -1
- package/dist/client/assets/{code-xml-CLn3TDWF.js → code-xml-ByQsfOI_.js} +1 -1
- package/dist/client/assets/collapsed-strip-raJWthAH.css +1 -0
- package/dist/client/assets/compass-BepM5iWH.js +1 -0
- package/dist/client/assets/{content-Cgj5AWqT.js → content-5hnDC9WE.js} +1 -1
- package/dist/client/assets/content-BRFZ-a6m.js +1 -0
- package/dist/client/assets/content-BYykncDo.js +1 -0
- package/dist/client/assets/content-Be6yyWbJ.js +1 -0
- package/dist/client/assets/content-Bgl_X3ao.js +1 -0
- package/dist/client/assets/content-BopJW1Zx.js +1 -0
- package/dist/client/assets/content-Bv2sfg0w.js +1 -0
- package/dist/client/assets/content-CMBiIZTg.js +1 -0
- package/dist/client/assets/content-CPVqvf5o.js +1 -0
- package/dist/client/assets/content-CbwyFqdI.js +1 -0
- package/dist/client/assets/content-ClQjAWYi.js +1 -0
- package/dist/client/assets/content-Cv2tSAbv.js +1 -0
- package/dist/client/assets/content-DFFe3-Ot.js +1 -0
- package/dist/client/assets/content-DY5hwBmm.js +1 -0
- package/dist/client/assets/content-_IXoxGno.js +1 -0
- package/dist/client/assets/content-j_tewJdE.js +1 -0
- package/dist/client/assets/{conversation-icons-ClBJi21l.js → conversation-icons-C4amK8Sa.js} +1 -1
- package/dist/client/assets/conversation-model-CigSPlKA.js +1 -0
- package/dist/client/assets/conversation-motion-features-_95aZx_1.js +1 -0
- package/dist/client/assets/{copy-Dty8ZYsM.js → copy-De4s38o2.js} +1 -1
- package/dist/client/assets/cpu-Bc268H9Q.js +1 -0
- package/dist/client/assets/{createLucideIcon-Bt67PWH-.js → createLucideIcon-DLlxGjKt.js} +1 -1
- package/dist/client/assets/credentials-qwds23lv.js +1 -0
- package/dist/client/assets/ctx-panel-D_HJ3nhb.css +1 -0
- package/dist/client/assets/discover-DOlk1hG7.js +2 -0
- package/dist/client/assets/embed-entry-BqDJfa87.js +2 -0
- package/dist/client/assets/{external-link-Dem738OJ.js → external-link-BGHC_naA.js} +1 -1
- package/dist/client/assets/{eye-B3lBIwJZ.js → eye-BeCSqJn1.js} +1 -1
- package/dist/client/assets/file-code-corner-CX53Cd9y.js +1 -0
- package/dist/client/assets/{file-text-iF0hyVyU.js → file-text-BVhkMWyC.js} +1 -1
- package/dist/client/assets/gauge-CPcEPmNt.js +1 -0
- package/dist/client/assets/gestures-BXIGYk_p.js +1 -0
- package/dist/client/assets/git-branch-q8Ayc8py.js +1 -0
- package/dist/client/assets/home-moving-signal-DMguaRWR.css +1 -0
- package/dist/client/assets/home-moving-signal-Dm2Z2x0p.js +1 -0
- package/dist/client/assets/{home-now-card-nano-hZl9klbP.js → home-now-card-nano-Djhy6ax0.js} +1 -1
- package/dist/client/assets/home-now-card-xU5LGP7q.js +1 -0
- package/dist/client/assets/hooks-CdKx1CxP.js +2 -0
- package/dist/client/assets/host-advisor-B2Fqs5Dd.css +1 -0
- package/dist/client/assets/index-Bli6bTLU.js +10 -0
- package/dist/client/assets/index-D7UEHxaY.js +1 -0
- package/dist/client/assets/index-DFdlQs_c.js +1 -0
- package/dist/client/assets/index-DhfOMK0D.js +1 -0
- package/dist/client/assets/index-DzlEgstl.css +1 -0
- package/dist/client/assets/index-wLwc74Pu.css +1 -0
- package/dist/client/assets/inspector-panel-B8pigRsg.js +2 -0
- package/dist/client/assets/{keyboard-nav-Chf51dns.js → keyboard-nav-7iEtvu9P.js} +1 -1
- package/dist/client/assets/{lane-observe-BA3g9aVd.js → lane-observe-vfyACHi0.js} +1 -1
- package/dist/client/assets/{lane-roster-store-BiIVlYmG.js → lane-roster-store-pHT3TAVs.js} +1 -1
- package/dist/client/assets/layers-BiZA-Clc.js +1 -0
- package/dist/client/assets/layout-grid-DMpv9CZM.js +1 -0
- package/dist/client/assets/left-BayK4ocL.js +1 -0
- package/dist/client/assets/left-BhZhSrS2.js +1 -0
- package/dist/client/assets/left-BhgU6NOA.js +1 -0
- package/dist/client/assets/left-CY_FGnN7.js +1 -0
- package/dist/client/assets/left-Cq8mjamr.js +1 -0
- package/dist/client/assets/left-DH44V4I_.css +1 -0
- package/dist/client/assets/left-Dnqla0b5.js +2 -0
- package/dist/client/assets/left-Dy403II2.js +2 -0
- package/dist/client/assets/left-R2OOE7VG.css +1 -0
- package/dist/client/assets/left-advisor-oOAtJ9YE.js +1 -0
- package/dist/client/assets/left-agents-TIKe8vW8.js +1 -0
- package/dist/client/assets/left-default-owH0Lwxo.js +1 -0
- package/dist/client/assets/left-lanes-BE_co2lP.js +1 -0
- package/dist/client/assets/left-mission-C_nWUtfA.js +1 -0
- package/dist/client/assets/library-BSVrjn_m.js +1 -0
- package/dist/client/assets/{loader-circle-4LDsy4Ke.js → loader-circle-DoT8gpw6.js} +1 -1
- package/dist/client/assets/{local-agents-DIi2EacM.js → local-agents-BMadXuP1.js} +1 -1
- package/dist/client/assets/mentions-Cd6XticV.js +1 -0
- package/dist/client/assets/{mesh-ops-JZwGuAPn.js → mesh-ops-C0zCLTR8.js} +1 -1
- package/dist/client/assets/{mesh-view-store-Du7VqIT_.js → mesh-view-store-Cpqil_2D.js} +1 -1
- package/dist/client/assets/{message-circle-BM3XgevU.js → message-circle-44KSmbvQ.js} +1 -1
- package/dist/client/assets/{message-markup-BcY1lShv.js → message-markup-DAnnGpWr.js} +1 -1
- package/dist/client/assets/{message-square-ER1_q2pe.js → message-square-DlY4EneU.js} +1 -1
- package/dist/client/assets/mission-control-CnU7dNt1.css +1 -0
- package/dist/client/assets/{mission-control-store-C6w5iVfg.js → mission-control-store-DtjtRs9Z.js} +1 -1
- package/dist/client/assets/{observe-3-jn4SXb.js → observe-DL5_8-Zj.js} +1 -1
- package/dist/client/assets/{operator-attention-BwSPeheT.js → operator-attention-BqoWAlhp.js} +1 -1
- package/dist/client/assets/{page-status-0LPfBC8S.js → page-status-CW8co39E.js} +1 -1
- package/dist/client/assets/persistent-state-DYjP8lqN.js +1 -0
- package/dist/client/assets/{plus-C-2gTcPK.js → plus-64n9qucr.js} +1 -1
- package/dist/client/assets/profile-BkmuseW7.js +1 -0
- package/dist/client/assets/projects-inbox-C0umZMSY.js +1 -0
- package/dist/client/assets/{provider-BvAxRQfE.js → provider-CX9EWecp.js} +1 -1
- package/dist/client/assets/proxy-C35W-YHZ.js +1 -0
- package/dist/client/assets/{radio-v7UAMZGh.js → radio-BjpQTKT0.js} +1 -1
- package/dist/client/assets/{refresh-cw-B5To7b6B.js → refresh-cw-IgN2fZLM.js} +1 -1
- package/dist/client/assets/resolve-panes-CCqRkQdM.js +1 -0
- package/dist/client/assets/resolve-sidebar-context-JkxY8qsV.js +1 -0
- package/dist/client/assets/right-B3PQUHd5.js +1 -0
- package/dist/client/assets/right-B96CBzrV.js +1 -0
- package/dist/client/assets/right-BPirlFC8.js +1 -0
- package/dist/client/assets/right-BUP2Ro_M.js +1 -0
- package/dist/client/assets/right-BVWYPIFX.js +1 -0
- package/dist/client/assets/right-BoAJxwA3.js +1 -0
- package/dist/client/assets/right-C2aOC2li.js +1 -0
- package/dist/client/assets/right-CtPJjgOV.js +1 -0
- package/dist/client/assets/{right-BvoGOUKH.js → right-DqiVyo8v.js} +1 -1
- package/dist/client/assets/right-SfSu0zHC.js +1 -0
- package/dist/client/assets/{rocket-BQQQv2L5.js → rocket-DnmN_YOD.js} +1 -1
- package/dist/client/assets/{router-C65cZYPn.js → router-B0YclXYg.js} +1 -1
- package/dist/client/assets/{scope-views-BOOmgmwx.js → scope-views-Z8aoAmtU.js} +1 -1
- package/dist/client/assets/scout-voice-DvG_3stJ.js +1 -0
- package/dist/client/assets/{scoutbot-BTIErYHo.js → scoutbot-D4vuKzOL.js} +2 -2
- package/dist/client/assets/scoutbot-markdown-BJJyaPu2.js +6 -0
- package/dist/client/assets/{scroll-text-BuneRiAD.js → scroll-text-DRidbcse.js} +1 -1
- package/dist/client/assets/{search-7_n7CxWl.js → search-BbgsEMXa.js} +1 -1
- package/dist/client/assets/secondaryNavConfig-DyC_P9Wx.js +1 -0
- package/dist/client/assets/{selection-bridge-SlGsgHw2.js → selection-bridge-CpzFGx3-.js} +1 -1
- package/dist/client/assets/{send-horizontal-DP16OOIW.js → send-horizontal-BXo2uz3Z.js} +1 -1
- package/dist/client/assets/{server-pYOMFjrT.js → server-Dt3tpiBj.js} +1 -1
- package/dist/client/assets/{session-catalog-_QfQ7fhZ.js → session-catalog-CUQ8LUJY.js} +1 -1
- package/dist/client/assets/{session-table-CYN8e4s3.js → session-table-B4JOKevn.js} +1 -1
- package/dist/client/assets/settings-BzWCF3NF.js +1 -0
- package/dist/client/assets/{sliders-horizontal-D2Z8gz6J.js → sliders-horizontal-7V8B3xsf.js} +1 -1
- package/dist/client/assets/{sparkles-Bth2iK7t.js → sparkles-ytTwpCbZ.js} +1 -1
- package/dist/client/assets/{sse-CL6gctHY.js → sse-CSozY6mp.js} +1 -1
- package/dist/client/assets/system-surfaces-redesign-QVXNeGYw.css +1 -0
- package/dist/client/assets/{tail-display-BRcJltQa.js → tail-display-DcliDVkW.js} +1 -1
- package/dist/client/assets/{tail-events-NLIWLq27.js → tail-events-CrN-Rmxj.js} +1 -1
- package/dist/client/assets/{terminal-By1Lw2i2.js → terminal-BiNIXhna.js} +1 -1
- package/dist/client/assets/{terminal-relay-CjkI5aUy.js → terminal-relay-pSm7_An6.js} +1 -1
- package/dist/client/assets/{terminal-sessions-AmSgHklm.js → terminal-sessions-D4dHTRkt.js} +1 -1
- package/dist/client/assets/{terminal-takeover-7AvNpnkC.js → terminal-takeover-CtA3wcXh.js} +1 -1
- package/dist/client/assets/{runtime-picker-eDEvx2Mz.js → text-BR9Bap0E.js} +1 -1
- package/dist/client/assets/text-rLpBg4_z.css +1 -0
- package/dist/client/assets/{use-conversation-list-BCzY032j.js → use-conversation-list-C0bEXFeH.js} +1 -1
- package/dist/client/assets/{use-fleet-active-asks-CJ6-oj5k.js → use-fleet-active-asks-CK4aw-3G.js} +1 -1
- package/dist/client/assets/{use-mesh-ops-items-D5L-CKe_.js → use-mesh-ops-items-QixBijmT.js} +1 -1
- package/dist/client/assets/use-reduced-motion-BLn59zLn.js +1 -0
- package/dist/client/assets/{use-scout-dev-flags-BohC8seq.js → use-scout-dev-flags-JKb1EhFh.js} +1 -1
- package/dist/client/assets/{useAgentHoverCard-RsLUYyeh.js → useAgentHoverCard-6N8b7qsU.js} +1 -1
- package/dist/client/assets/useContentSecondaryNav-D-hVKzM9.js +1 -0
- package/dist/client/assets/{usePersistentState-D3M4m2Ou.js → usePersistentState-DOEahRlt.js} +1 -1
- package/dist/client/assets/{usePierreRuntime-B4hbNWTz.js → usePierreRuntime-Bq6mXrgd.js} +1 -1
- package/dist/client/assets/{wrench-M4G7WtYB.js → wrench-CQvdf7KT.js} +1 -1
- package/dist/client/assets/{x-ynOfVadO.js → x-BJyPzFnn.js} +1 -1
- package/dist/client/assets/{xterm-DZHyijPp.js → xterm-D6dE_wMr.js} +1 -1
- package/dist/client/assets/zap-rw7uwZht.js +1 -0
- package/dist/client/index.html +2 -2
- package/dist/main.mjs +629 -167
- package/dist/node/main.mjs +454 -270
- package/dist/pairing-runtime-controller.mjs +607 -357
- package/dist/runtime/base-daemon.mjs +384 -21
- package/dist/runtime/broker-daemon.mjs +11024 -10023
- package/dist/runtime/broker-process-manager.mjs +9 -3
- package/dist/runtime/mesh-discover.mjs +9 -3
- package/dist/scout-control-plane-web.mjs +1590 -984
- package/dist/scout-web-server.mjs +1590 -984
- package/package.json +4 -4
- package/dist/client/assets/ActivityScreen-aewI4Ul1.js +0 -1
- package/dist/client/assets/AgentAvatar-DMov24_o.js +0 -1
- package/dist/client/assets/AgentConfigurationScreen-BjG6ECjl.js +0 -1
- package/dist/client/assets/AgentDefinitionsWorkspace-D4MbSMXp.js +0 -1
- package/dist/client/assets/AgentFloorView-h9KDJdw0.js +0 -1
- package/dist/client/assets/AgentInfoScreen-SjhK_SBh.js +0 -1
- package/dist/client/assets/AgentLaneDetailSheet-DnAKe4e3.js +0 -4
- package/dist/client/assets/AgentLanesEmbedScreen-BNOYF16R.js +0 -1
- package/dist/client/assets/AgentLanesView-Ct-Gz5WD.js +0 -2
- package/dist/client/assets/AgentSessions-CDfSfNiE.js +0 -6
- package/dist/client/assets/AgentsConsole-BVxhBqRa.js +0 -1
- package/dist/client/assets/AgentsSubnav-CiIuzxnZ.js +0 -1
- package/dist/client/assets/BriefingDetailScreen-C83o2YfN.js +0 -6
- package/dist/client/assets/BrokerScreen-DplF8d_X.js +0 -5
- package/dist/client/assets/ChatCollapsedStrip-BRljIymi.js +0 -1
- package/dist/client/assets/ContextMenu-CxkmFQcN.js +0 -1
- package/dist/client/assets/ConversationComposer-CWohCCmn.js +0 -1
- package/dist/client/assets/ConversationFeedRows-IWh0JSIL.js +0 -1
- package/dist/client/assets/ConversationHeader-BxTzXl8e.js +0 -1
- package/dist/client/assets/ConversationPanels-D9UCwNkS.js +0 -2
- package/dist/client/assets/ConversationScreen-oZSitVtX.js +0 -1
- package/dist/client/assets/ConversationScreen-yIKEsm-8.css +0 -1
- package/dist/client/assets/ConversationStatus-B6pAbo2w.js +0 -1
- package/dist/client/assets/DocumentFocusViewer-DRKjNG9s.js +0 -1
- package/dist/client/assets/FleetSearch-CYeWn85V.js +0 -1
- package/dist/client/assets/FleetSearch-EXOe8ulE.css +0 -1
- package/dist/client/assets/FlightObserveScreen-DYJJ3Z2B.js +0 -1
- package/dist/client/assets/HomeHero-BPBArHXa.js +0 -1
- package/dist/client/assets/HomeHero-DEl-WBsT.css +0 -1
- package/dist/client/assets/KnowledgeSearchScreen-BP8tD-Bh.js +0 -1
- package/dist/client/assets/LaneTraceDetailSheet-B4i1Ut4R.js +0 -1
- package/dist/client/assets/MessageComposerSuggestions-Dfc3PH2y.js +0 -1
- package/dist/client/assets/MessagesScreen-TgSL5KMc.js +0 -1
- package/dist/client/assets/MissionControlView-D629w2A8.js +0 -1
- package/dist/client/assets/MissionFocusOverlay-Bubrr8Gc.js +0 -1
- package/dist/client/assets/MissionLeftAgentRow-DokImu4Y.js +0 -1
- package/dist/client/assets/MissionLogPane-Cs0LuIkn.js +0 -1
- package/dist/client/assets/NewChatComposer-S08F6_La.js +0 -19
- package/dist/client/assets/ObserveEmbedScreen-CHx2sEAA.js +0 -2
- package/dist/client/assets/ObserveTextFlow-_ApDwRCO.js +0 -2
- package/dist/client/assets/ObservedTopologyPanel-ByW7Ar7p.js +0 -2
- package/dist/client/assets/OpenScoutAppShell-DTmnbG-h.js +0 -88
- package/dist/client/assets/OpsAgentsView-DiFuHcJs.js +0 -1
- package/dist/client/assets/OpsScreen-CCR3U_9P.js +0 -1
- package/dist/client/assets/OpsSubnav-CZs_OL2N.js +0 -1
- package/dist/client/assets/PlanView-C54eAzig.js +0 -1
- package/dist/client/assets/ProjectAgentProfile-BEfYOaxc.js +0 -1
- package/dist/client/assets/ProjectAgentProfileHero-B4f_AoCr.js +0 -1
- package/dist/client/assets/ProjectsInbox-DoPZ17FC.js +0 -2
- package/dist/client/assets/ProjectsRail-CWOkZjsY.js +0 -1
- package/dist/client/assets/ProjectsScreen-Dse0Q6p6.js +0 -1
- package/dist/client/assets/ProjectsThreadAside-DMnfyPLE.js +0 -1
- package/dist/client/assets/Provider-DKZWuzSR.js +0 -1
- package/dist/client/assets/RailRow-Cf9LOiEj.css +0 -1
- package/dist/client/assets/RailRow-DIGd3MMM.js +0 -1
- package/dist/client/assets/RawSessionsTable-Zkl4YDvz.js +0 -1
- package/dist/client/assets/RealtimeVoiceScreen-B_PMJxY_.js +0 -1
- package/dist/client/assets/RepoDiffViewer-VrUJw33u.js +0 -7
- package/dist/client/assets/RepoDiffViewerLazy-BPg_JkYW.js +0 -2
- package/dist/client/assets/ScoutDeckSurface-MbwGp6Ab.js +0 -1
- package/dist/client/assets/ScoutbotBroadcastChip-DAKQKB25.js +0 -2
- package/dist/client/assets/ScoutbotRealtimeVoiceCall-Br4bYVAx.js +0 -1
- package/dist/client/assets/SessionRefScreen-DLZNFZFK.js +0 -1
- package/dist/client/assets/SessionsScreen-D-hN1n4k.js +0 -1
- package/dist/client/assets/SettingsDrawer-BFsnww-k.js +0 -3
- package/dist/client/assets/SettingsDrawer-UX7pFJU_.css +0 -1
- package/dist/client/assets/SettingsScreen-Bc3Xtv5V.js +0 -1
- package/dist/client/assets/Terminal-D_OmdFmr.js +0 -1
- package/dist/client/assets/TerminalEmbedScreen-D21ytNXW.js +0 -1
- package/dist/client/assets/WorkFilesViewer-BDMNbxE4.js +0 -1
- package/dist/client/assets/agent-identity-BxCsXnDp.js +0 -1
- package/dist/client/assets/api-h5zurxmi.js +0 -1
- package/dist/client/assets/broker-display-pp33bLsu.js +0 -2
- package/dist/client/assets/collapsed-strip-Dz-of2SM.css +0 -1
- package/dist/client/assets/content-B-SUUhXj.js +0 -1
- package/dist/client/assets/content-BRY2vo1_.js +0 -1
- package/dist/client/assets/content-BTm0mVyD.js +0 -1
- package/dist/client/assets/content-BTqvyb5E.js +0 -1
- package/dist/client/assets/content-BjDaXmSD.js +0 -1
- package/dist/client/assets/content-BrR6deGh.js +0 -1
- package/dist/client/assets/content-C5yvBEMy.js +0 -1
- package/dist/client/assets/content-CkhG__-v.js +0 -1
- package/dist/client/assets/content-CudIBsiP.js +0 -1
- package/dist/client/assets/content-DBb7ppd5.js +0 -1
- package/dist/client/assets/content-DEw_kGyK.js +0 -1
- package/dist/client/assets/content-DIy0DCzK.js +0 -1
- package/dist/client/assets/content-THl9hRAo.js +0 -1
- package/dist/client/assets/content-vi9FbmV9.js +0 -1
- package/dist/client/assets/content-wcgPMGVf.js +0 -1
- package/dist/client/assets/conversation-model-CHwHZNw-.js +0 -1
- package/dist/client/assets/conversation-motion-features-zU0k3Agz.js +0 -1
- package/dist/client/assets/ctx-panel-B4s49N9e.css +0 -1
- package/dist/client/assets/discover-NDAqNvKt.js +0 -2
- package/dist/client/assets/embed-entry-BVR09F6e.js +0 -2
- package/dist/client/assets/home-moving-signal-C8dTXieA.js +0 -1
- package/dist/client/assets/home-moving-signal-CAa0V91u.css +0 -1
- package/dist/client/assets/home-now-card-BgvVcE83.js +0 -1
- package/dist/client/assets/hooks-DBIezYS2.js +0 -2
- package/dist/client/assets/index-BMwKgdz_.js +0 -1
- package/dist/client/assets/index-Bu-fckyR.css +0 -1
- package/dist/client/assets/index-BxoufAPA.js +0 -1
- package/dist/client/assets/index-Cj7NnSxI.js +0 -1
- package/dist/client/assets/index-CvF09yvf.css +0 -1
- package/dist/client/assets/index-o4FKpU7Z.js +0 -10
- package/dist/client/assets/inspector-panel-Dy2cVTCi.js +0 -2
- package/dist/client/assets/left-BC7p5QbT.js +0 -1
- package/dist/client/assets/left-BCSGqccQ.js +0 -1
- package/dist/client/assets/left-BSyj8PuJ.js +0 -2
- package/dist/client/assets/left-Bk3XnxPD.css +0 -1
- package/dist/client/assets/left-CCoobxPS.css +0 -1
- package/dist/client/assets/left-DDnxNUxd.js +0 -1
- package/dist/client/assets/left-DLoDKxT5.js +0 -2
- package/dist/client/assets/left-O-TBH7JB.js +0 -1
- package/dist/client/assets/left-agents-Dk9Y89lb.js +0 -1
- package/dist/client/assets/left-default-B3JBRQNJ.js +0 -1
- package/dist/client/assets/left-lanes-30Oe_3RM.js +0 -1
- package/dist/client/assets/left-mission-DEl4-7xu.js +0 -1
- package/dist/client/assets/left-plan-B4qdm4Gn.js +0 -2
- package/dist/client/assets/left-rvUOB14X.js +0 -1
- package/dist/client/assets/library-DDKSLFJ_.js +0 -1
- package/dist/client/assets/mentions-CvDaviLJ.js +0 -1
- package/dist/client/assets/mission-control-m3BTDQ9l.css +0 -1
- package/dist/client/assets/model-Co0zkMIc.js +0 -1
- package/dist/client/assets/plan-view-D56fneVF.css +0 -1
- package/dist/client/assets/profile-DW80Gn5k.js +0 -1
- package/dist/client/assets/projects-inbox-DCeD3FfV.js +0 -1
- package/dist/client/assets/resolve-panes-BDi9Qx4R.js +0 -1
- package/dist/client/assets/resolve-sidebar-context-HE-5eZYa.js +0 -1
- package/dist/client/assets/right-BDf_yTv6.js +0 -1
- package/dist/client/assets/right-C-bgjYg-.js +0 -1
- package/dist/client/assets/right-C3JdEfYQ.js +0 -1
- package/dist/client/assets/right-CYIs2tEe.js +0 -1
- package/dist/client/assets/right-CyRCv6Up.js +0 -1
- package/dist/client/assets/right-DBYGtoRv.js +0 -1
- package/dist/client/assets/right-o3LHMiKa.js +0 -1
- package/dist/client/assets/right-oPrcx9MX.js +0 -1
- package/dist/client/assets/right-sSvBUK-j.js +0 -1
- package/dist/client/assets/runtime-picker-vhm0gtLs.css +0 -1
- package/dist/client/assets/scout-voice-B7kXlkcl.js +0 -1
- package/dist/client/assets/secondaryNavConfig-CSFDCQAf.js +0 -1
- package/dist/client/assets/system-surfaces-redesign-B7GQhfpw.css +0 -1
- package/dist/client/assets/text-DsBWV_4k.js +0 -1
- package/dist/client/assets/use-reduced-motion-CqXpVXv-.js +0 -1
- package/dist/client/assets/useContentSecondaryNav-DOr5yHbT.js +0 -1
- /package/dist/client/assets/{document-focus-viewer-BSC_JwVE.css → DocumentFocusViewer-BSC_JwVE.css} +0 -0
|
@@ -3,9 +3,9 @@ import "reflect-metadata";
|
|
|
3
3
|
|
|
4
4
|
// packages/runtime/src/base-daemon.ts
|
|
5
5
|
import { spawn as spawn3 } from "child_process";
|
|
6
|
-
import { existsSync as
|
|
7
|
-
import { homedir as
|
|
8
|
-
import { dirname as
|
|
6
|
+
import { existsSync as existsSync7, mkdirSync as mkdirSync4, openSync, writeFileSync as writeFileSync4 } from "fs";
|
|
7
|
+
import { homedir as homedir7 } from "os";
|
|
8
|
+
import { dirname as dirname5, join as join7, resolve as resolve3 } from "path";
|
|
9
9
|
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
10
10
|
|
|
11
11
|
// packages/runtime/src/broker-process-manager.ts
|
|
@@ -1827,6 +1827,39 @@ import {
|
|
|
1827
1827
|
} from "fs";
|
|
1828
1828
|
import { homedir as homedir3, hostname as osHostname } from "os";
|
|
1829
1829
|
import { dirname, join as join3 } from "path";
|
|
1830
|
+
|
|
1831
|
+
// packages/runtime/src/node-identity.ts
|
|
1832
|
+
var NODE_CARD_TTL_MS = 24 * 60 * 60 * 1000;
|
|
1833
|
+
var stableNodeQualifierCache = new Map;
|
|
1834
|
+
function stripBonjourCollisionSuffix(value) {
|
|
1835
|
+
if (!value || typeof value !== "string")
|
|
1836
|
+
return "";
|
|
1837
|
+
let trimmed = value.trim();
|
|
1838
|
+
const isDotLocal = /\.local\.?$/i.test(trimmed);
|
|
1839
|
+
if (isDotLocal) {
|
|
1840
|
+
trimmed = trimmed.replace(/\.local\.?$/i, "");
|
|
1841
|
+
}
|
|
1842
|
+
const isHyphenLocalOpenscout = /-local-openscout$/i.test(trimmed);
|
|
1843
|
+
const isHyphenLocal = !isHyphenLocalOpenscout && /-local$/i.test(trimmed);
|
|
1844
|
+
if (isHyphenLocalOpenscout) {
|
|
1845
|
+
trimmed = trimmed.replace(/-local-openscout$/i, "");
|
|
1846
|
+
} else if (isHyphenLocal) {
|
|
1847
|
+
trimmed = trimmed.replace(/-local$/i, "");
|
|
1848
|
+
}
|
|
1849
|
+
if (!isDotLocal && !isHyphenLocalOpenscout && !isHyphenLocal) {
|
|
1850
|
+
return trimmed;
|
|
1851
|
+
}
|
|
1852
|
+
trimmed = trimmed.replace(/(?<=[a-zA-Z].*?)(?:-\d+)+$/, "");
|
|
1853
|
+
if (isDotLocal)
|
|
1854
|
+
return `${trimmed}.local`;
|
|
1855
|
+
if (isHyphenLocalOpenscout)
|
|
1856
|
+
return `${trimmed}-local-openscout`;
|
|
1857
|
+
if (isHyphenLocal)
|
|
1858
|
+
return `${trimmed}-local`;
|
|
1859
|
+
return trimmed;
|
|
1860
|
+
}
|
|
1861
|
+
|
|
1862
|
+
// packages/runtime/src/local-config.ts
|
|
1830
1863
|
var LOCAL_CONFIG_VERSION = 1;
|
|
1831
1864
|
var DEFAULT_SCOUT_WEB_PORTAL_HOST = "scout.local";
|
|
1832
1865
|
var DEFAULT_SCOUT_WEB_DEV_HOST = `dev.${DEFAULT_SCOUT_WEB_PORTAL_HOST}`;
|
|
@@ -1852,12 +1885,14 @@ var DEFAULT_LOCAL_CONFIG = {
|
|
|
1852
1885
|
}
|
|
1853
1886
|
};
|
|
1854
1887
|
function normalizeLocalHostnameLabel(value) {
|
|
1855
|
-
const
|
|
1888
|
+
const stripped = value ? stripBonjourCollisionSuffix(value) : value;
|
|
1889
|
+
const firstLabel = stripped?.trim().replace(/\.local\.?$/i, "").split(".").find((part) => part.trim().length > 0)?.trim();
|
|
1856
1890
|
const normalized = firstLabel?.toLowerCase().replace(/[^a-z0-9-]+/g, "-").replace(/^-+|-+$/g, "").replace(/-{2,}/g, "-");
|
|
1857
1891
|
return normalized || "localhost";
|
|
1858
1892
|
}
|
|
1859
1893
|
function normalizeLocalHostname(value) {
|
|
1860
|
-
const
|
|
1894
|
+
const stripped = value ? stripBonjourCollisionSuffix(value) : value;
|
|
1895
|
+
const trimmed = stripped?.trim().replace(/\.$/, "").toLowerCase();
|
|
1861
1896
|
const labels = trimmed?.split(".").map((label) => label.trim().replace(/[^a-z0-9-]+/g, "-").replace(/^-+|-+$/g, "").replace(/-{2,}/g, "-")).filter(Boolean);
|
|
1862
1897
|
return labels && labels.length > 0 ? labels.join(".") : "localhost";
|
|
1863
1898
|
}
|
|
@@ -2042,6 +2077,28 @@ function resolveBunExecutable(env = process.env) {
|
|
|
2042
2077
|
names: ["bun"]
|
|
2043
2078
|
});
|
|
2044
2079
|
}
|
|
2080
|
+
function resolveOpenScoutRepoRoot(options = {}) {
|
|
2081
|
+
const starts = options.startDirectories?.map((entry) => entry?.trim()).filter((entry) => Boolean(entry));
|
|
2082
|
+
if (!starts || starts.length === 0) {
|
|
2083
|
+
return null;
|
|
2084
|
+
}
|
|
2085
|
+
for (const start of starts) {
|
|
2086
|
+
let current = resolve(start);
|
|
2087
|
+
while (true) {
|
|
2088
|
+
const scoutEntry = join4(current, "apps", "desktop", "bin", "scout.ts");
|
|
2089
|
+
const runtimeEntry = join4(current, "packages", "runtime", "bin", "openscout-runtime.mjs");
|
|
2090
|
+
if (existsSync4(scoutEntry) && existsSync4(runtimeEntry)) {
|
|
2091
|
+
return current;
|
|
2092
|
+
}
|
|
2093
|
+
const parent = dirname2(current);
|
|
2094
|
+
if (parent === current) {
|
|
2095
|
+
break;
|
|
2096
|
+
}
|
|
2097
|
+
current = parent;
|
|
2098
|
+
}
|
|
2099
|
+
}
|
|
2100
|
+
return null;
|
|
2101
|
+
}
|
|
2045
2102
|
function findExecutableOnSearchPath(name, env) {
|
|
2046
2103
|
const searchDirectories = dedupeDirectories([
|
|
2047
2104
|
...splitPathEntries(env),
|
|
@@ -2126,13 +2183,13 @@ function resolveBrokerUrl(host, port, scope, env = process.env, lanHost = findLa
|
|
|
2126
2183
|
return explicit;
|
|
2127
2184
|
}
|
|
2128
2185
|
if (scope === "mesh") {
|
|
2186
|
+
if (lanHost) {
|
|
2187
|
+
return buildDefaultBrokerHttpsUrl(lanHost, port);
|
|
2188
|
+
}
|
|
2129
2189
|
const tailnetHost = readTailscaleSelfWebHostsSync(env)[0];
|
|
2130
2190
|
if (tailnetHost) {
|
|
2131
2191
|
return buildDefaultBrokerHttpsUrl(tailnetHost, port);
|
|
2132
2192
|
}
|
|
2133
|
-
if (lanHost) {
|
|
2134
|
-
return buildDefaultBrokerHttpsUrl(lanHost, port);
|
|
2135
|
-
}
|
|
2136
2193
|
}
|
|
2137
2194
|
return buildDefaultBrokerUrl(host, port);
|
|
2138
2195
|
}
|
|
@@ -2895,6 +2952,119 @@ if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1] && !pr
|
|
|
2895
2952
|
});
|
|
2896
2953
|
}
|
|
2897
2954
|
|
|
2955
|
+
// packages/runtime/src/pairing-supervisor.ts
|
|
2956
|
+
import {
|
|
2957
|
+
existsSync as existsSync6,
|
|
2958
|
+
mkdirSync as mkdirSync3,
|
|
2959
|
+
readFileSync as readFileSync5,
|
|
2960
|
+
renameSync as renameSync3,
|
|
2961
|
+
rmSync,
|
|
2962
|
+
writeFileSync as writeFileSync3
|
|
2963
|
+
} from "fs";
|
|
2964
|
+
import { homedir as homedir6 } from "os";
|
|
2965
|
+
import { dirname as dirname4, join as join6 } from "path";
|
|
2966
|
+
var SCOUT_PAIRING_SUPERVISOR_INTENT_FILE = "supervisor.json";
|
|
2967
|
+
var SCOUT_PAIRING_RUNTIME_PID_FILE = "runtime.pid";
|
|
2968
|
+
var SCOUT_PAIRING_SUPERVISOR_PID_FILE = "supervisor.pid";
|
|
2969
|
+
function resolveScoutPairingSupervisorPaths(env = process.env) {
|
|
2970
|
+
const configuredRoot = env.OPENSCOUT_PAIRING_HOME?.trim() || env.SCOUT_PAIRING_HOME?.trim();
|
|
2971
|
+
const rootDir = configuredRoot || join6(homedir6(), ".scout", "pairing");
|
|
2972
|
+
return {
|
|
2973
|
+
rootDir,
|
|
2974
|
+
intentPath: join6(rootDir, SCOUT_PAIRING_SUPERVISOR_INTENT_FILE),
|
|
2975
|
+
runtimePidPath: join6(rootDir, SCOUT_PAIRING_RUNTIME_PID_FILE),
|
|
2976
|
+
supervisorPidPath: join6(rootDir, SCOUT_PAIRING_SUPERVISOR_PID_FILE)
|
|
2977
|
+
};
|
|
2978
|
+
}
|
|
2979
|
+
function readScoutPairingSupervisorIntent(intentPath = resolveScoutPairingSupervisorPaths().intentPath) {
|
|
2980
|
+
const intent = readPairingIntent(intentPath);
|
|
2981
|
+
return {
|
|
2982
|
+
desiredState: intent.desiredState === "running" || intent.desiredState === "stopped" ? intent.desiredState : null,
|
|
2983
|
+
restartGeneration: validRestartGeneration(intent.restartGeneration)
|
|
2984
|
+
};
|
|
2985
|
+
}
|
|
2986
|
+
function updateScoutPairingSupervisorIntent(action, intentPath = resolveScoutPairingSupervisorPaths().intentPath) {
|
|
2987
|
+
const intent = readPairingIntent(intentPath);
|
|
2988
|
+
intent.desiredState = action === "stop" ? "stopped" : "running";
|
|
2989
|
+
if (action === "restart") {
|
|
2990
|
+
intent.restartGeneration = Math.max(Date.now(), validRestartGeneration(intent.restartGeneration) + 1);
|
|
2991
|
+
}
|
|
2992
|
+
writePairingIntent(intentPath, intent);
|
|
2993
|
+
return readScoutPairingSupervisorIntent(intentPath);
|
|
2994
|
+
}
|
|
2995
|
+
function readScoutPairingProcessPid(path) {
|
|
2996
|
+
if (!existsSync6(path))
|
|
2997
|
+
return null;
|
|
2998
|
+
try {
|
|
2999
|
+
const pid = Number.parseInt(readFileSync5(path, "utf8").trim(), 10);
|
|
3000
|
+
return Number.isInteger(pid) && pid > 0 ? pid : null;
|
|
3001
|
+
} catch {
|
|
3002
|
+
return null;
|
|
3003
|
+
}
|
|
3004
|
+
}
|
|
3005
|
+
function isScoutPairingProcessRunning(pid) {
|
|
3006
|
+
if (!pid || pid <= 0)
|
|
3007
|
+
return false;
|
|
3008
|
+
try {
|
|
3009
|
+
process.kill(pid, 0);
|
|
3010
|
+
return true;
|
|
3011
|
+
} catch (error) {
|
|
3012
|
+
return error.code === "EPERM";
|
|
3013
|
+
}
|
|
3014
|
+
}
|
|
3015
|
+
function readLiveScoutPairingSupervisorPid(supervisorPidPath = resolveScoutPairingSupervisorPaths().supervisorPidPath) {
|
|
3016
|
+
const pid = readScoutPairingProcessPid(supervisorPidPath);
|
|
3017
|
+
return isScoutPairingProcessRunning(pid) ? pid : null;
|
|
3018
|
+
}
|
|
3019
|
+
function claimScoutPairingSupervision(pid = process.pid, supervisorPidPath = resolveScoutPairingSupervisorPaths().supervisorPidPath) {
|
|
3020
|
+
const currentPid = readLiveScoutPairingSupervisorPid(supervisorPidPath);
|
|
3021
|
+
if (currentPid && currentPid !== pid) {
|
|
3022
|
+
throw new Error(`Scout pairing is already supervised by pid ${currentPid}.`);
|
|
3023
|
+
}
|
|
3024
|
+
mkdirSync3(dirname4(supervisorPidPath), { recursive: true });
|
|
3025
|
+
writeFileAtomically(supervisorPidPath, `${pid}
|
|
3026
|
+
`);
|
|
3027
|
+
}
|
|
3028
|
+
function releaseScoutPairingSupervision(pid = process.pid, supervisorPidPath = resolveScoutPairingSupervisorPaths().supervisorPidPath) {
|
|
3029
|
+
if (readScoutPairingProcessPid(supervisorPidPath) !== pid)
|
|
3030
|
+
return;
|
|
3031
|
+
rmSync(supervisorPidPath, { force: true });
|
|
3032
|
+
}
|
|
3033
|
+
function readPairingIntent(intentPath) {
|
|
3034
|
+
if (!existsSync6(intentPath))
|
|
3035
|
+
return {};
|
|
3036
|
+
try {
|
|
3037
|
+
const parsed = JSON.parse(readFileSync5(intentPath, "utf8"));
|
|
3038
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
3039
|
+
return { desiredState: "stopped" };
|
|
3040
|
+
}
|
|
3041
|
+
const intent = parsed;
|
|
3042
|
+
if (intent.desiredState !== "running" && intent.desiredState !== "stopped") {
|
|
3043
|
+
intent.desiredState = "stopped";
|
|
3044
|
+
}
|
|
3045
|
+
return intent;
|
|
3046
|
+
} catch {
|
|
3047
|
+
return { desiredState: "stopped" };
|
|
3048
|
+
}
|
|
3049
|
+
}
|
|
3050
|
+
function writePairingIntent(intentPath, intent) {
|
|
3051
|
+
mkdirSync3(dirname4(intentPath), { recursive: true });
|
|
3052
|
+
writeFileAtomically(intentPath, `${JSON.stringify(intent, null, 2)}
|
|
3053
|
+
`);
|
|
3054
|
+
}
|
|
3055
|
+
function writeFileAtomically(path, contents) {
|
|
3056
|
+
const temporaryPath = `${path}.${process.pid}.${Date.now()}.tmp`;
|
|
3057
|
+
try {
|
|
3058
|
+
writeFileSync3(temporaryPath, contents);
|
|
3059
|
+
renameSync3(temporaryPath, path);
|
|
3060
|
+
} finally {
|
|
3061
|
+
rmSync(temporaryPath, { force: true });
|
|
3062
|
+
}
|
|
3063
|
+
}
|
|
3064
|
+
function validRestartGeneration(value) {
|
|
3065
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value >= 0 ? value : 0;
|
|
3066
|
+
}
|
|
3067
|
+
|
|
2898
3068
|
// packages/runtime/src/scout-ascii-mark.ts
|
|
2899
3069
|
var ORB_COLS = 60;
|
|
2900
3070
|
var ORB_ROWS = 47;
|
|
@@ -3528,6 +3698,8 @@ var BROKER_HEALTH_TIMEOUT_MS = 30000;
|
|
|
3528
3698
|
var BROKER_HEALTH_POLL_MS = 250;
|
|
3529
3699
|
var CHILD_SHUTDOWN_TIMEOUT_MS = 15000;
|
|
3530
3700
|
var WEB_START_RETRY_MS = 5000;
|
|
3701
|
+
var PAIRING_RECONCILE_INTERVAL_MS = 500;
|
|
3702
|
+
var PAIRING_STOP_TIMEOUT_MS = 5000;
|
|
3531
3703
|
var MENU_BUNDLE_ID = "app.openscout.scout.menu";
|
|
3532
3704
|
var PROCESS_NAME = "scout-base";
|
|
3533
3705
|
var BROKER_PROCESS_NAME = "scout-broker";
|
|
@@ -3544,9 +3716,17 @@ var baseKeepAlive = null;
|
|
|
3544
3716
|
var webStartRetryTimer = null;
|
|
3545
3717
|
var webStartInFlight = false;
|
|
3546
3718
|
var parentWatcher = null;
|
|
3719
|
+
var pairingProcess = null;
|
|
3720
|
+
var pairingReconcileTimer = null;
|
|
3721
|
+
var pairingReconcileInFlight = false;
|
|
3722
|
+
var pairingRestartGeneration = null;
|
|
3723
|
+
var pairingRestartDelayMs = RESTART_MIN_DELAY_MS;
|
|
3724
|
+
var pairingNextStartAt = 0;
|
|
3725
|
+
var pairingSupervisionClaimed = false;
|
|
3547
3726
|
var parentPid = Number.parseInt(process.env.OPENSCOUT_PARENT_PID ?? "0", 10);
|
|
3548
3727
|
var config = resolveBrokerServiceConfig();
|
|
3549
3728
|
var brokerControlUrl = buildLocalBrokerControlUrl(config.brokerHost, config.brokerPort);
|
|
3729
|
+
var pairingPaths = resolveScoutPairingSupervisorPaths();
|
|
3550
3730
|
function log(message, details) {
|
|
3551
3731
|
if (details === undefined) {
|
|
3552
3732
|
console.log(`[openscout-base] ${message}`);
|
|
@@ -3584,15 +3764,15 @@ function resolveWebTrustedHostsEnv() {
|
|
|
3584
3764
|
return appendCsvValues(process.env.OPENSCOUT_WEB_TRUSTED_HOSTS, resolveTailnetWebHosts());
|
|
3585
3765
|
}
|
|
3586
3766
|
function ensureDirectory(path) {
|
|
3587
|
-
|
|
3767
|
+
mkdirSync4(path, { recursive: true });
|
|
3588
3768
|
}
|
|
3589
3769
|
function logFile(name) {
|
|
3590
|
-
const dir =
|
|
3770
|
+
const dir = join7(config.supportDirectory, "logs", "base");
|
|
3591
3771
|
ensureDirectory(dir);
|
|
3592
|
-
return openSync(
|
|
3772
|
+
return openSync(join7(dir, name), "a");
|
|
3593
3773
|
}
|
|
3594
3774
|
function runtimeEntrypoint(config2) {
|
|
3595
|
-
return
|
|
3775
|
+
return join7(config2.runtimePackageDir, "bin", "openscout-runtime.mjs");
|
|
3596
3776
|
}
|
|
3597
3777
|
function spawnBroker() {
|
|
3598
3778
|
if (shuttingDown || brokerProcess) {
|
|
@@ -3696,9 +3876,9 @@ function resolveEdgeConfig() {
|
|
|
3696
3876
|
});
|
|
3697
3877
|
}
|
|
3698
3878
|
function resolveLocalEdgeCaddyfilePath() {
|
|
3699
|
-
const dir =
|
|
3879
|
+
const dir = join7(homedir7(), ".scout", "local-edge");
|
|
3700
3880
|
ensureDirectory(dir);
|
|
3701
|
-
return
|
|
3881
|
+
return join7(dir, "Caddyfile");
|
|
3702
3882
|
}
|
|
3703
3883
|
function resolveCaddyExecutable() {
|
|
3704
3884
|
return process.env.OPENSCOUT_CADDY_BIN?.trim() || "caddy";
|
|
@@ -3740,7 +3920,7 @@ function startLocalEdge() {
|
|
|
3740
3920
|
const edgeConfig = resolveEdgeConfig();
|
|
3741
3921
|
const schemes = edgeConfig.scheme === "both" ? ["http", "https"] : [edgeConfig.scheme];
|
|
3742
3922
|
const caddyfilePath = resolveLocalEdgeCaddyfilePath();
|
|
3743
|
-
|
|
3923
|
+
writeFileSync4(caddyfilePath, renderOpenScoutCaddyfile(edgeConfig), "utf8");
|
|
3744
3924
|
mdnsProcesses = schemes.flatMap((scheme) => {
|
|
3745
3925
|
const edgePort = scheme === "https" ? 443 : 80;
|
|
3746
3926
|
const suffix = scheme.toUpperCase();
|
|
@@ -3850,7 +4030,7 @@ function scheduleWebStartRetry() {
|
|
|
3850
4030
|
webStartRetryTimer.unref();
|
|
3851
4031
|
}
|
|
3852
4032
|
function findRepoMenuBundle() {
|
|
3853
|
-
let current =
|
|
4033
|
+
let current = dirname5(fileURLToPath2(import.meta.url));
|
|
3854
4034
|
while (true) {
|
|
3855
4035
|
const distRoot = resolve3(current, "apps", "macos", "dist");
|
|
3856
4036
|
const candidates = [
|
|
@@ -3858,10 +4038,10 @@ function findRepoMenuBundle() {
|
|
|
3858
4038
|
resolve3(distRoot, "ScoutMenu.app")
|
|
3859
4039
|
];
|
|
3860
4040
|
for (const candidate of candidates) {
|
|
3861
|
-
if (
|
|
4041
|
+
if (existsSync7(candidate))
|
|
3862
4042
|
return candidate;
|
|
3863
4043
|
}
|
|
3864
|
-
const parent =
|
|
4044
|
+
const parent = dirname5(current);
|
|
3865
4045
|
if (parent === current) {
|
|
3866
4046
|
return null;
|
|
3867
4047
|
}
|
|
@@ -3873,7 +4053,7 @@ function startMenuBarApp() {
|
|
|
3873
4053
|
return;
|
|
3874
4054
|
}
|
|
3875
4055
|
const explicitBundle = process.env.OPENSCOUT_MENU_BUNDLE_PATH?.trim();
|
|
3876
|
-
const repoBundle = explicitBundle &&
|
|
4056
|
+
const repoBundle = explicitBundle && existsSync7(explicitBundle) ? explicitBundle : findRepoMenuBundle();
|
|
3877
4057
|
const args = repoBundle ? [repoBundle] : ["-b", MENU_BUNDLE_ID];
|
|
3878
4058
|
const child = spawn3("open", args, {
|
|
3879
4059
|
stdio: ["ignore", logFile("menu.stdout.log"), logFile("menu.stderr.log")]
|
|
@@ -3886,6 +4066,177 @@ function startMenuBarApp() {
|
|
|
3886
4066
|
warn("menu bar app launch failed", { target: repoBundle ?? MENU_BUNDLE_ID, code });
|
|
3887
4067
|
});
|
|
3888
4068
|
}
|
|
4069
|
+
function resolvePairingControllerCommand() {
|
|
4070
|
+
const moduleDirectory = dirname5(fileURLToPath2(import.meta.url));
|
|
4071
|
+
const repoRoot = resolveOpenScoutRepoRoot({
|
|
4072
|
+
startDirectories: [
|
|
4073
|
+
process.env.OPENSCOUT_SETUP_CWD,
|
|
4074
|
+
process.cwd(),
|
|
4075
|
+
moduleDirectory
|
|
4076
|
+
]
|
|
4077
|
+
});
|
|
4078
|
+
const setupCwd = process.env.OPENSCOUT_SETUP_CWD?.trim() || repoRoot || process.cwd();
|
|
4079
|
+
const explicit = process.env.OPENSCOUT_PAIRING_RUNTIME_CONTROLLER_BIN?.trim();
|
|
4080
|
+
const candidates = [
|
|
4081
|
+
explicit,
|
|
4082
|
+
repoRoot ? join7(repoRoot, "packages", "cli", "dist", "pairing-runtime-controller.mjs") : null,
|
|
4083
|
+
repoRoot ? join7(repoRoot, "packages", "web", "dist", "pairing-runtime-controller.mjs") : null,
|
|
4084
|
+
repoRoot ? join7(repoRoot, "packages", "web", "server", "pairing-runtime-controller.ts") : null,
|
|
4085
|
+
resolve3(moduleDirectory, "..", "pairing-runtime-controller.mjs"),
|
|
4086
|
+
join7(homedir7(), ".bun", "install", "global", "node_modules", "@openscout", "scout", "dist", "pairing-runtime-controller.mjs"),
|
|
4087
|
+
join7(homedir7(), ".bun", "node_modules", "@openscout", "scout", "dist", "pairing-runtime-controller.mjs")
|
|
4088
|
+
].filter((candidate) => Boolean(candidate));
|
|
4089
|
+
const entrypoint = candidates.find((candidate) => existsSync7(candidate));
|
|
4090
|
+
if (!entrypoint)
|
|
4091
|
+
return null;
|
|
4092
|
+
if (explicit === entrypoint && !/\.(?:[cm]?js|ts)$/.test(entrypoint)) {
|
|
4093
|
+
return { command: entrypoint, args: [], cwd: setupCwd };
|
|
4094
|
+
}
|
|
4095
|
+
const bun = resolveBunExecutable();
|
|
4096
|
+
return bun ? { command: bun.path, args: [entrypoint], cwd: setupCwd } : null;
|
|
4097
|
+
}
|
|
4098
|
+
async function waitForPairingProcessExit(pid) {
|
|
4099
|
+
const deadline = Date.now() + PAIRING_STOP_TIMEOUT_MS;
|
|
4100
|
+
while (Date.now() < deadline) {
|
|
4101
|
+
if (!isScoutPairingProcessRunning(pid))
|
|
4102
|
+
return true;
|
|
4103
|
+
await sleep(100);
|
|
4104
|
+
}
|
|
4105
|
+
return !isScoutPairingProcessRunning(pid);
|
|
4106
|
+
}
|
|
4107
|
+
async function stopPairingController() {
|
|
4108
|
+
const ownedChild = pairingProcess;
|
|
4109
|
+
if (ownedChild && !isChildExited(ownedChild)) {
|
|
4110
|
+
pairingProcess = null;
|
|
4111
|
+
await terminateChildProcess(ownedChild, "pairing controller", PAIRING_STOP_TIMEOUT_MS);
|
|
4112
|
+
return;
|
|
4113
|
+
}
|
|
4114
|
+
const runtimePid = readScoutPairingProcessPid(pairingPaths.runtimePidPath);
|
|
4115
|
+
if (!isScoutPairingProcessRunning(runtimePid)) {
|
|
4116
|
+
pairingProcess = null;
|
|
4117
|
+
return;
|
|
4118
|
+
}
|
|
4119
|
+
try {
|
|
4120
|
+
process.kill(runtimePid, "SIGTERM");
|
|
4121
|
+
} catch {
|
|
4122
|
+
pairingProcess = null;
|
|
4123
|
+
return;
|
|
4124
|
+
}
|
|
4125
|
+
if (!await waitForPairingProcessExit(runtimePid)) {
|
|
4126
|
+
warn("pairing controller did not exit after SIGTERM; forcing shutdown", { pid: runtimePid });
|
|
4127
|
+
try {
|
|
4128
|
+
process.kill(runtimePid, "SIGKILL");
|
|
4129
|
+
} catch {}
|
|
4130
|
+
}
|
|
4131
|
+
pairingProcess = null;
|
|
4132
|
+
}
|
|
4133
|
+
function spawnPairingController() {
|
|
4134
|
+
if (shuttingDown || pairingProcess)
|
|
4135
|
+
return;
|
|
4136
|
+
const descriptor = resolvePairingControllerCommand();
|
|
4137
|
+
if (!descriptor) {
|
|
4138
|
+
warn("pairing controller entrypoint or Bun executable could not be resolved");
|
|
4139
|
+
pairingNextStartAt = Date.now() + pairingRestartDelayMs;
|
|
4140
|
+
pairingRestartDelayMs = Math.min(pairingRestartDelayMs * 2, RESTART_MAX_DELAY_MS);
|
|
4141
|
+
return;
|
|
4142
|
+
}
|
|
4143
|
+
const child = spawn3(descriptor.command, descriptor.args, {
|
|
4144
|
+
cwd: descriptor.cwd,
|
|
4145
|
+
env: {
|
|
4146
|
+
...process.env,
|
|
4147
|
+
OPENSCOUT_PARENT_PID: String(process.pid)
|
|
4148
|
+
},
|
|
4149
|
+
stdio: [
|
|
4150
|
+
"ignore",
|
|
4151
|
+
logFile("pairing.stdout.log"),
|
|
4152
|
+
logFile("pairing.stderr.log")
|
|
4153
|
+
]
|
|
4154
|
+
});
|
|
4155
|
+
pairingProcess = child;
|
|
4156
|
+
log("pairing controller started", { pid: child.pid, entrypoint: descriptor.args[0] ?? descriptor.command });
|
|
4157
|
+
child.once("error", (error) => {
|
|
4158
|
+
warn("pairing controller failed to start", error.message);
|
|
4159
|
+
if (pairingProcess !== child)
|
|
4160
|
+
return;
|
|
4161
|
+
pairingProcess = null;
|
|
4162
|
+
pairingNextStartAt = Date.now() + pairingRestartDelayMs;
|
|
4163
|
+
pairingRestartDelayMs = Math.min(pairingRestartDelayMs * 2, RESTART_MAX_DELAY_MS);
|
|
4164
|
+
reconcilePairingController();
|
|
4165
|
+
});
|
|
4166
|
+
child.once("exit", (code, signal) => {
|
|
4167
|
+
if (pairingProcess !== child)
|
|
4168
|
+
return;
|
|
4169
|
+
pairingProcess = null;
|
|
4170
|
+
if (shuttingDown)
|
|
4171
|
+
return;
|
|
4172
|
+
warn("pairing controller exited", { code, signal });
|
|
4173
|
+
pairingNextStartAt = Date.now() + pairingRestartDelayMs;
|
|
4174
|
+
pairingRestartDelayMs = Math.min(pairingRestartDelayMs * 2, RESTART_MAX_DELAY_MS);
|
|
4175
|
+
reconcilePairingController();
|
|
4176
|
+
});
|
|
4177
|
+
}
|
|
4178
|
+
async function reconcilePairingController() {
|
|
4179
|
+
if (shuttingDown || !pairingSupervisionClaimed || pairingReconcileInFlight)
|
|
4180
|
+
return;
|
|
4181
|
+
pairingReconcileInFlight = true;
|
|
4182
|
+
try {
|
|
4183
|
+
let intent = readScoutPairingSupervisorIntent(pairingPaths.intentPath);
|
|
4184
|
+
const runtimePid = readScoutPairingProcessPid(pairingPaths.runtimePidPath);
|
|
4185
|
+
const runtimeRunning = isScoutPairingProcessRunning(runtimePid);
|
|
4186
|
+
if (intent.desiredState === null) {
|
|
4187
|
+
intent = updateScoutPairingSupervisorIntent("start", pairingPaths.intentPath);
|
|
4188
|
+
log(runtimeRunning ? "adopted live pairing runtime as desired running state" : "initialized pairing desired state as running", runtimeRunning ? { pid: runtimePid } : {});
|
|
4189
|
+
}
|
|
4190
|
+
if (pairingRestartGeneration === null) {
|
|
4191
|
+
pairingRestartGeneration = intent.restartGeneration;
|
|
4192
|
+
}
|
|
4193
|
+
const restartRequested = pairingRestartGeneration !== intent.restartGeneration;
|
|
4194
|
+
if (restartRequested) {
|
|
4195
|
+
pairingRestartGeneration = intent.restartGeneration;
|
|
4196
|
+
}
|
|
4197
|
+
if (intent.desiredState !== "running") {
|
|
4198
|
+
pairingNextStartAt = 0;
|
|
4199
|
+
pairingRestartDelayMs = RESTART_MIN_DELAY_MS;
|
|
4200
|
+
if (runtimeRunning || pairingProcess) {
|
|
4201
|
+
await stopPairingController();
|
|
4202
|
+
}
|
|
4203
|
+
return;
|
|
4204
|
+
}
|
|
4205
|
+
if (restartRequested) {
|
|
4206
|
+
await stopPairingController();
|
|
4207
|
+
} else if (pairingProcess && !isChildExited(pairingProcess) && runtimeRunning && runtimePid === pairingProcess.pid) {
|
|
4208
|
+
pairingRestartDelayMs = RESTART_MIN_DELAY_MS;
|
|
4209
|
+
return;
|
|
4210
|
+
} else if (runtimeRunning) {
|
|
4211
|
+
await stopPairingController();
|
|
4212
|
+
} else if (pairingProcess && !isChildExited(pairingProcess)) {
|
|
4213
|
+
return;
|
|
4214
|
+
} else {
|
|
4215
|
+
pairingProcess = null;
|
|
4216
|
+
}
|
|
4217
|
+
if (Date.now() >= pairingNextStartAt) {
|
|
4218
|
+
spawnPairingController();
|
|
4219
|
+
}
|
|
4220
|
+
} catch (error) {
|
|
4221
|
+
warn("pairing supervisor reconciliation failed", error instanceof Error ? error.message : String(error));
|
|
4222
|
+
} finally {
|
|
4223
|
+
pairingReconcileInFlight = false;
|
|
4224
|
+
}
|
|
4225
|
+
}
|
|
4226
|
+
function startPairingSupervision() {
|
|
4227
|
+
try {
|
|
4228
|
+
claimScoutPairingSupervision(process.pid, pairingPaths.supervisorPidPath);
|
|
4229
|
+
} catch (error) {
|
|
4230
|
+
warn("pairing supervision is owned by another live process", error instanceof Error ? error.message : String(error));
|
|
4231
|
+
return;
|
|
4232
|
+
}
|
|
4233
|
+
pairingSupervisionClaimed = true;
|
|
4234
|
+
pairingReconcileTimer = setInterval(() => {
|
|
4235
|
+
reconcilePairingController();
|
|
4236
|
+
}, PAIRING_RECONCILE_INTERVAL_MS);
|
|
4237
|
+
pairingReconcileTimer.unref();
|
|
4238
|
+
reconcilePairingController();
|
|
4239
|
+
}
|
|
3889
4240
|
function isChildExited(child) {
|
|
3890
4241
|
return child.exitCode !== null || child.signalCode !== null;
|
|
3891
4242
|
}
|
|
@@ -3941,10 +4292,21 @@ async function shutdown(exitCode = 0) {
|
|
|
3941
4292
|
clearTimeout(webStartRetryTimer);
|
|
3942
4293
|
webStartRetryTimer = null;
|
|
3943
4294
|
}
|
|
4295
|
+
if (pairingReconcileTimer) {
|
|
4296
|
+
clearInterval(pairingReconcileTimer);
|
|
4297
|
+
pairingReconcileTimer = null;
|
|
4298
|
+
}
|
|
3944
4299
|
const activeCaddyProcess = caddyProcess;
|
|
3945
4300
|
stopEdgeProcesses();
|
|
3946
|
-
await
|
|
3947
|
-
|
|
4301
|
+
await Promise.all([
|
|
4302
|
+
stopPairingController(),
|
|
4303
|
+
terminateChildProcess(brokerProcess, "broker"),
|
|
4304
|
+
terminateChildProcess(activeCaddyProcess, "local edge", 2000)
|
|
4305
|
+
]);
|
|
4306
|
+
if (pairingSupervisionClaimed) {
|
|
4307
|
+
releaseScoutPairingSupervision(process.pid, pairingPaths.supervisorPidPath);
|
|
4308
|
+
pairingSupervisionClaimed = false;
|
|
4309
|
+
}
|
|
3948
4310
|
process.exit(exitCode);
|
|
3949
4311
|
}
|
|
3950
4312
|
function sleep(ms) {
|
|
@@ -3988,5 +4350,6 @@ log("starting Scout base service", {
|
|
|
3988
4350
|
anchorBaseDaemonLifetime();
|
|
3989
4351
|
spawnBroker();
|
|
3990
4352
|
startLocalEdge();
|
|
4353
|
+
startPairingSupervision();
|
|
3991
4354
|
startMenuBarApp();
|
|
3992
4355
|
startWebWhenBrokerIsReady();
|