@openscout/scout 0.2.108 → 0.2.110
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 +206 -122
- package/bin/scoutd +0 -0
- package/dist/build-manifest.json +3 -3
- package/dist/chat.mjs +211 -30
- package/dist/client/assets/conversation-motion-features-BeAplMGv.js +1 -0
- package/dist/client/assets/index-CMbTY75G.js +91 -0
- package/dist/client/assets/index-DYfh8pn_.css +1 -0
- package/dist/client/index.html +3 -3
- package/dist/main.mjs +7628 -3047
- package/dist/node/main.mjs +671 -115
- package/dist/openscout-terminal-relay.mjs +12 -3
- package/dist/pairing-runtime-controller.mjs +17539 -6059
- package/dist/runtime/base-daemon.mjs +410 -54
- package/dist/runtime/broker-daemon.mjs +67463 -52744
- package/dist/runtime/broker-process-manager.mjs +41 -14
- package/dist/runtime/mesh-discover.mjs +39 -13
- package/dist/scout-control-plane-web.mjs +80047 -58867
- package/dist/statusline.mjs +10 -3
- package/dist/update-helper.mjs +1105 -69
- package/package.json +2 -2
- package/server.json +2 -2
- package/dist/client/assets/ActivityScreen-C1H-vL0L.js +0 -1
- package/dist/client/assets/AddProjectForm-4sVXmjfN.js +0 -1
- package/dist/client/assets/AdventureEvidence-D5wq1vu8.js +0 -5
- package/dist/client/assets/AdventureReader-BICypcDY.js +0 -4
- package/dist/client/assets/AdventureScenery-CGEcG0zV.js +0 -1
- package/dist/client/assets/AgentAdventures-5yBt-Zl3.js +0 -1
- package/dist/client/assets/AgentAvatar-Dn8TUv5W.js +0 -1
- package/dist/client/assets/AgentConfigurationScreen-C0D9WNyL.js +0 -1
- package/dist/client/assets/AgentDefinitionsWorkspace-BzcBdC_s.js +0 -1
- package/dist/client/assets/AgentDetailCard-C4WVeJvJ.css +0 -1
- package/dist/client/assets/AgentDetailCard-CI-ufaEP.js +0 -1
- package/dist/client/assets/AgentFloorView-D8tlGlgy.js +0 -1
- package/dist/client/assets/AgentFloorWorld-DqmnQexg.js +0 -1
- package/dist/client/assets/AgentInfoScreen-BnRhfcFy.js +0 -1
- package/dist/client/assets/AgentLaneCard-pppHFROz.js +0 -1
- package/dist/client/assets/AgentLaneChrome-RptImDFc.js +0 -1
- package/dist/client/assets/AgentLaneDetailSheet-BqbwGskh.js +0 -4
- package/dist/client/assets/AgentLaneSummaryResize-DaIgwyVh.js +0 -1
- package/dist/client/assets/AgentLanesEmbedScreen-De6C4ZOw.js +0 -1
- package/dist/client/assets/AgentLanesPreflight-BQfj2twF.js +0 -1
- package/dist/client/assets/AgentLanesView-CiISx7pu.js +0 -2
- package/dist/client/assets/AgentLiveActions-CGS-Bxb7.css +0 -1
- package/dist/client/assets/AgentLiveActions-CkRGkv13.js +0 -1
- package/dist/client/assets/AgentMasterScreen-CijN_4tN.js +0 -1
- package/dist/client/assets/AgentSessions-ghjQcSrh.js +0 -6
- package/dist/client/assets/AgentsConsole-BjSTs-TV.css +0 -1
- package/dist/client/assets/AgentsConsole-D8upjDpn.js +0 -1
- package/dist/client/assets/AgentsScreen-C17BFqjf.js +0 -1
- package/dist/client/assets/AgentsSubnav-_1GVC4hj.js +0 -1
- package/dist/client/assets/AstronautSuit-Dzu4GOMR.js +0 -1
- package/dist/client/assets/AtopView-DJK5b3lZ.js +0 -1
- package/dist/client/assets/BackToPicker-BPU7kbXq.js +0 -1
- package/dist/client/assets/BackToPicker-CdgVu-to.css +0 -1
- package/dist/client/assets/BriefingDetailScreen-CTvFw523.js +0 -1
- package/dist/client/assets/BriefingsScreen-DpVC3OUk.js +0 -1
- package/dist/client/assets/BrokerMetadataPanel-glRVdwkU.js +0 -1
- package/dist/client/assets/BrokerScreen-CqKsBwEx.js +0 -8
- package/dist/client/assets/CastPicker-Y29K5kKk.js +0 -1
- package/dist/client/assets/CastPicker-zXsnkTIy.css +0 -1
- package/dist/client/assets/ChannelComposer-D4EY9jVW.js +0 -1
- package/dist/client/assets/ChannelSidebar-CVmykV4d.js +0 -1
- package/dist/client/assets/CharacterFamilyPreview-Bj8oMD-5.js +0 -1
- package/dist/client/assets/CharacterFamilyPreview-BniL8sEL.css +0 -1
- package/dist/client/assets/ChatAvatar-BsAOShUr.js +0 -1
- package/dist/client/assets/ChatBits-Cq54CmyB.js +0 -1
- package/dist/client/assets/ChatCollapsedStrip-B0DdrOo2.js +0 -1
- package/dist/client/assets/ChatRichInput-DYJRhGTP.js +0 -31
- package/dist/client/assets/ChatRightPanel-D94Lw7ud.js +0 -1
- package/dist/client/assets/ChatSpaceSurface-Cp532VmZ.js +0 -1
- package/dist/client/assets/ChatSpaceTheme-3wLZGsvT.css +0 -1
- package/dist/client/assets/ChatSpaceTheme-DPzYpw-v.js +0 -1
- package/dist/client/assets/CodeDiffPane-DCgMUi39.js +0 -1
- package/dist/client/assets/CodeProjectPicker-Dq787L77.js +0 -2
- package/dist/client/assets/CodeScreen-BN4TkiR0.js +0 -1
- package/dist/client/assets/CommsCanvas-BR2YS76H.css +0 -1
- package/dist/client/assets/CommsCanvas-Dh056d91.js +0 -1
- package/dist/client/assets/CommsDeck-CRXKIerH.js +0 -1
- package/dist/client/assets/CommsFlowGraph-Cc48o9u_.js +0 -1
- package/dist/client/assets/CommsFlowGraph-vQucylxF.css +0 -1
- package/dist/client/assets/CommsFlowMap-Ckasql5e.js +0 -1
- package/dist/client/assets/CommsSelection-CuphnUny.js +0 -1
- package/dist/client/assets/ComposerAttachments-9uYp_Lh5.js +0 -1
- package/dist/client/assets/ConversationComposer-hYtLurqy.js +0 -1
- package/dist/client/assets/ConversationFeedRows-Bu0ZJcy8.js +0 -1
- package/dist/client/assets/ConversationHeader-L9738YVP.js +0 -1
- package/dist/client/assets/ConversationPanels-D6KuqvGu.js +0 -6
- package/dist/client/assets/ConversationScreen-9MlMnEo4.css +0 -1
- package/dist/client/assets/ConversationScreen-Pzxy9x4m.js +0 -2
- package/dist/client/assets/ConversationStatus-BEefIbXq.js +0 -1
- package/dist/client/assets/CrewAvatar-BnIPIn_Z.css +0 -1
- package/dist/client/assets/CrewAvatar-a_C_F9r_.js +0 -1
- package/dist/client/assets/CrewSprite-CguHb2Ny.js +0 -1
- package/dist/client/assets/CrewSprite-DsQJdu3Z.css +0 -1
- package/dist/client/assets/CrewStage-IPpS3Oja.js +0 -1
- package/dist/client/assets/CrewWorkspaces-BTPtcEcx.js +0 -1
- package/dist/client/assets/CrewWorkspaces-DDuYMByu.css +0 -1
- package/dist/client/assets/DataTable-DnL_8SAu.js +0 -1
- package/dist/client/assets/DispatchAftermath-CoAYaL3B.js +0 -1
- package/dist/client/assets/DocumentFocusViewer-BSC_JwVE.css +0 -1
- package/dist/client/assets/DocumentFocusViewer-mxzPxQQW.js +0 -1
- package/dist/client/assets/EmbeddableSurfacesLab-BAZ_eRMc.js +0 -1
- package/dist/client/assets/EmptyState-DLiLgtPK.js +0 -1
- package/dist/client/assets/FileViewerPane-Dc7AoVod.js +0 -3
- package/dist/client/assets/FleetRollCallHud-VhpxVcGO.js +0 -1
- package/dist/client/assets/FlightObserveScreen-C1kASP3J.js +0 -1
- package/dist/client/assets/FloorContextSheet-BfrXNoBn.js +0 -1
- package/dist/client/assets/FloorExchangePanel-B3TFhjLk.css +0 -1
- package/dist/client/assets/FloorExchangePanel-DsG1cRzu.js +0 -1
- package/dist/client/assets/FloorMessagePasses-Cm3LbkHd.js +0 -1
- package/dist/client/assets/FloorMessagePasses-nxwwiUom.css +0 -1
- package/dist/client/assets/FloorReplay-Bg7kA-tR.js +0 -1
- package/dist/client/assets/FloorResourcesSheet-Ba9HubO2.js +0 -1
- package/dist/client/assets/FloorSavedWork-BDOvV3mA.js +0 -1
- package/dist/client/assets/FloorTacticalHUD-4d-Hr-YL.js +0 -1
- package/dist/client/assets/FollowScreen-DFVSlsQV.js +0 -1
- package/dist/client/assets/HarnessMark-CP-PWk2W.js +0 -1
- package/dist/client/assets/HarnessesScreen-j-91IoOo.js +0 -1
- package/dist/client/assets/HerdrSession-H2mmxeTK.js +0 -4
- package/dist/client/assets/HomeHero-7JwycwFY.css +0 -1
- package/dist/client/assets/HomeHero-g4H3Ctxg.js +0 -1
- package/dist/client/assets/HostAdvisorView-Cyt3b5Fq.js +0 -1
- package/dist/client/assets/InviteLandingScreen-C3DtAGD4.js +0 -1
- package/dist/client/assets/InviteSheet-BiGMNpsE.js +0 -1
- package/dist/client/assets/JumpPalette-goXAVByA.js +0 -1
- package/dist/client/assets/KnowledgeSearchInspector-BbOQIqdF.js +0 -1
- package/dist/client/assets/KnowledgeSearchScreen-DC8yX-kA.js +0 -1
- package/dist/client/assets/LaneToolHoverCard-B8Am_1DC.js +0 -1
- package/dist/client/assets/LaneTraceDetailSheet-CngYIxdI.js +0 -1
- package/dist/client/assets/LaneTraceEventFocus-BRR_jcl9.js +0 -1
- package/dist/client/assets/MeshCanvas-DzkuY_XI.js +0 -3
- package/dist/client/assets/MeshCanvasMinimap-BrscEPAH.js +0 -1
- package/dist/client/assets/MeshCanvasMinimap-Dv7nMbl5.css +0 -1
- package/dist/client/assets/MeshScreen-CAtRB8K6.js +0 -1
- package/dist/client/assets/MeshTopologyView-B1I2dAhu.js +0 -2
- package/dist/client/assets/MessageEmbeds-B-FbWI7a.js +0 -1
- package/dist/client/assets/MessagesScreen-hq7D3Lfi.js +0 -1
- package/dist/client/assets/MissionContextRail-ClR8amG1.js +0 -1
- package/dist/client/assets/MissionControlView-D6gbMrgx.js +0 -1
- package/dist/client/assets/MissionFocusOverlay-CzeNgI9Q.js +0 -1
- package/dist/client/assets/MissionLeftAgentRow-CB3cgeYr.js +0 -1
- package/dist/client/assets/MissionLogPane-2PMEoG44.js +0 -1
- package/dist/client/assets/NativeAreaScreen-BnlrAWT8.js +0 -1
- package/dist/client/assets/NativeAreaScreen-DSR5Tf6F.js +0 -1
- package/dist/client/assets/NativeAreaScreen-fGsxyeC3.js +0 -1
- package/dist/client/assets/NewAgentModal-4b_3aoZE.js +0 -1
- package/dist/client/assets/NewAgentModal-ru8u5YdJ.css +0 -1
- package/dist/client/assets/NewChatComposer-C5LT7MF7.css +0 -1
- package/dist/client/assets/NewChatComposer-D-VB5vdt.js +0 -19
- package/dist/client/assets/NewChatOrigin-BYsEu9dZ.js +0 -1
- package/dist/client/assets/NodeDetailPanel-9NaEnZAQ.js +0 -1
- package/dist/client/assets/NodeMenu-BgJMmffZ.js +0 -1
- package/dist/client/assets/ObserveEmbedScreen-W7Q5HbXP.js +0 -2
- package/dist/client/assets/ObserveTextFlow-C0oQEerY.js +0 -2
- package/dist/client/assets/ObservedTopologyPanel-BsBsvVPL.css +0 -1
- package/dist/client/assets/ObservedTopologyPanel-Ci7emnnj.js +0 -2
- package/dist/client/assets/OpenScoutAppShell-Bh6FnEJO.css +0 -1
- package/dist/client/assets/OpenScoutAppShell-Di9qdmI0.js +0 -22
- package/dist/client/assets/OpsAgentsView-DVotOMg2.js +0 -1
- package/dist/client/assets/OpsScreen-C955zgr3.js +0 -1
- package/dist/client/assets/OpsSubnav-CjMVj7Sk.js +0 -1
- package/dist/client/assets/ProjectAgentProfile-B1VqGSmu.js +0 -1
- package/dist/client/assets/ProjectAgentProfileBar-DhVU7zew.js +0 -1
- package/dist/client/assets/ProjectAgentProfileHero-CJk-Dx4t.js +0 -1
- package/dist/client/assets/ProjectsInbox-B7kap8nR.js +0 -2
- package/dist/client/assets/ProjectsInbox-B8zYE4vP.css +0 -1
- package/dist/client/assets/ProjectsRail-BhSaqbv0.js +0 -1
- package/dist/client/assets/ProjectsScreen-CSb7nwjb.js +0 -1
- package/dist/client/assets/ProjectsThreadAside-pEJutIO8.js +0 -1
- package/dist/client/assets/Provider-BEXAZWd9.js +0 -5
- package/dist/client/assets/Provider-CCzjtkda.css +0 -1
- package/dist/client/assets/RailRow-B25zKEub.css +0 -1
- package/dist/client/assets/RailRow-Ddz90weI.js +0 -1
- package/dist/client/assets/RawSessionsTable-TdKlJIPl.js +0 -1
- package/dist/client/assets/RealtimeVoiceScreen-BU5KmlNo.js +0 -8
- package/dist/client/assets/RenderedWorkerSprite-BNhFXMIo.js +0 -1
- package/dist/client/assets/RenderedWorkerSprite-qnTfkd_4.css +0 -1
- package/dist/client/assets/ReplayClock-wLpb4VqN.js +0 -1
- package/dist/client/assets/ReplayLog-IUyQdklN.js +0 -1
- package/dist/client/assets/ReplayOutpost-C4djhjZJ.js +0 -1
- package/dist/client/assets/ReplayOutpost-Y1DvZgeu.css +0 -1
- package/dist/client/assets/RepoDiffEmbedScreen-BmQX_8E-.js +0 -1
- package/dist/client/assets/RepoDiffPageScreen-B9oAjrC6.js +0 -1
- package/dist/client/assets/RepoDiffViewer-Ch_lIMt-.js +0 -7
- package/dist/client/assets/RepoDiffViewerLazy-DL6A2o_z.js +0 -2
- package/dist/client/assets/ReposScreen-D-E7fSAB.js +0 -6
- package/dist/client/assets/RiggedWorkerCharacter-BpYECnyK.css +0 -1
- package/dist/client/assets/RiggedWorkerCharacter-CF6fhzGd.js +0 -1
- package/dist/client/assets/SageModelStudio-768dRQr4.css +0 -1
- package/dist/client/assets/SageModelStudio-CSet_ITs.js +0 -4108
- package/dist/client/assets/ScoutDeckSurface-BJ-fl8AX.js +0 -1
- package/dist/client/assets/ScoutDeckSurface-uhmuZRzC.css +0 -1
- package/dist/client/assets/ScoutSurface-BvFRdce6.js +0 -1
- package/dist/client/assets/ScoutbotFxLab-CfPzycZ7.js +0 -4
- package/dist/client/assets/SecondaryNav-1FjBDWuY.js +0 -1
- package/dist/client/assets/SessionContextStrip-BoiIxXvS.js +0 -1
- package/dist/client/assets/SessionContextStrip-DAIXwtHd.css +0 -1
- package/dist/client/assets/SessionEmbedScreen-BizGNGOz.js +0 -1
- package/dist/client/assets/SessionHopMenu-DX6PJPNk.js +0 -1
- package/dist/client/assets/SessionObserve-CDdJ7fAE.css +0 -1
- package/dist/client/assets/SessionObserve-Dw3bVQYF.js +0 -12
- package/dist/client/assets/SessionObserveEvidence-uD1OX-R5.js +0 -1
- package/dist/client/assets/SessionRefScreen-Ch9H-qVk.js +0 -1
- package/dist/client/assets/SessionsScreen-DUeP23Xy.js +0 -1
- package/dist/client/assets/SettingsDrawer-BVrP6J52.js +0 -3
- package/dist/client/assets/SettingsDrawer-R8a0TlJD.css +0 -1
- package/dist/client/assets/SettingsScreen-BcJ05LE5.js +0 -1
- package/dist/client/assets/SharedFloorCharacter-Bi5_md4R.css +0 -1
- package/dist/client/assets/SharedFloorCharacter-dnamlt1p.js +0 -1
- package/dist/client/assets/SharedWorkFloor-0rqtdF-n.css +0 -1
- package/dist/client/assets/SharedWorkFloor-H-e2TVj9.js +0 -2
- package/dist/client/assets/ShikiPane-CDiIT_qn.js +0 -15
- package/dist/client/assets/SlidePanel-Bg5dVaIa.css +0 -1
- package/dist/client/assets/SlidePanel-D5oPQocF.js +0 -1
- package/dist/client/assets/SpaceSwitcher-WccPJ0fS.js +0 -1
- package/dist/client/assets/SpriteAvatar-D53GaaK3.js +0 -1
- package/dist/client/assets/SproutActionSprite-BrFCmgWS.js +0 -1
- package/dist/client/assets/StatusPill-jT--OXbn.js +0 -1
- package/dist/client/assets/TailView-B44cSuyl.js +0 -2
- package/dist/client/assets/TailView-Mj3AU2u0.css +0 -1
- package/dist/client/assets/Terminal-D0PanmIk.js +0 -4
- package/dist/client/assets/TerminalEmbedScreen-Eddi4sts.js +0 -1
- package/dist/client/assets/TerminalHeaderMount-CYYcKxQ-.js +0 -1
- package/dist/client/assets/TextDocumentSurface-DBslUq9k.js +0 -4
- package/dist/client/assets/TmuxPeek-Ctw5yYO5.js +0 -1
- package/dist/client/assets/VoiceControlWell-BkjuWjYu.js +0 -1
- package/dist/client/assets/VoicePathDiagram-u0i6ntbx.js +0 -1
- package/dist/client/assets/VoicePermissionsPanel-9Nuw-xCr.js +0 -1
- package/dist/client/assets/VoicePermissionsPanel-RijAZ1gP.css +0 -1
- package/dist/client/assets/VoiceTurnDetails-kS7lfbmt.js +0 -8
- package/dist/client/assets/VoiceTurnStage-DLY6aYDg.js +0 -1
- package/dist/client/assets/VoiceTurnView-CF4tIldB.js +0 -1
- package/dist/client/assets/WorkDetailScreen-BrrkENYq.js +0 -5
- package/dist/client/assets/WorkFilesViewer-B63sKRYZ.js +0 -1
- package/dist/client/assets/WorkRunView-CxwAZ2QQ.css +0 -1
- package/dist/client/assets/WorkRunView-DLIzAsc3.js +0 -1
- package/dist/client/assets/WorldActorTalk-CHhFTiQV.js +0 -1
- package/dist/client/assets/WorldCharacter-CJGx2DVy.js +0 -1
- package/dist/client/assets/WorldMinimap-DL12pBw3.js +0 -1
- package/dist/client/assets/WorldSky-BlPNvGLo.js +0 -1
- package/dist/client/assets/activity-CXkZ620t.js +0 -1
- package/dist/client/assets/addon-fit-G3qi01sy.js +0 -1
- package/dist/client/assets/addon-webgl-Bo7kSgOB.js +0 -82
- package/dist/client/assets/adventure-evidence-DgQbBmfa.css +0 -1
- package/dist/client/assets/adventure-habitats-v1-CVMbdB_Z.png +0 -0
- package/dist/client/assets/adventure-habitats-v1-M1lcpTJh.js +0 -1
- package/dist/client/assets/adventure-playback-DTfkhIc0.js +0 -3
- package/dist/client/assets/adventure-reader-DM5UDDm9.css +0 -1
- package/dist/client/assets/agent-adventures-DZtWpj6k.css +0 -1
- package/dist/client/assets/agent-definitions-CymTYqvo.css +0 -1
- package/dist/client/assets/agent-directory-studio-injection-Bc8590z5.css +0 -1
- package/dist/client/assets/agent-essentials-DnfdGmIX.js +0 -1
- package/dist/client/assets/agent-floor-Dmr9hZHL.css +0 -1
- package/dist/client/assets/agent-floor-actor-DW8zLht0.js +0 -1
- package/dist/client/assets/agent-floor-world-Bnd1AtwK.css +0 -1
- package/dist/client/assets/agent-floor-world-layout-hfMjuoui.js +0 -1
- package/dist/client/assets/agent-lane-card-BkWVDYM8.css +0 -1
- package/dist/client/assets/agent-lane-card-model-CeqQGp-8.js +0 -1
- package/dist/client/assets/agent-lane-detail-Ti3trpfH.js +0 -2
- package/dist/client/assets/agent-lane-preview-Dpa3DuOn.js +0 -4
- package/dist/client/assets/agent-lanes-DmgipV9D.css +0 -1
- package/dist/client/assets/agent-lanes-model-DMAdqCmK.js +0 -4
- package/dist/client/assets/agent-master-THmq-1k8.css +0 -1
- package/dist/client/assets/agent-master-model-Bk_yuUXJ.js +0 -1
- package/dist/client/assets/agent-specialization-DYX_DSlY.js +0 -1
- package/dist/client/assets/agent-state-DDhnFEEP.js +0 -1
- package/dist/client/assets/agents-detail-redesign-h34ROjOW.css +0 -1
- package/dist/client/assets/agents-project-DgbqDc65.css +0 -1
- package/dist/client/assets/agents-screen-BYakbO50.css +0 -1
- package/dist/client/assets/api-BQYTwoz6.js +0 -1
- package/dist/client/assets/api-DSqpVKC7.js +0 -1
- package/dist/client/assets/arc.es-CLA3XI14.js +0 -188
- package/dist/client/assets/arrow-down--OUDFWIq.js +0 -1
- package/dist/client/assets/arrow-left-DNjQHf4C.js +0 -1
- package/dist/client/assets/arrow-right-A_yyXwoH.js +0 -1
- package/dist/client/assets/arrow-up-DFy-9ghF.js +0 -1
- package/dist/client/assets/arrow-up-right-DUW1A1Hb.js +0 -1
- package/dist/client/assets/bash-format-BRV5C6Gv.js +0 -1
- package/dist/client/assets/book-open-B_idZgTF.js +0 -1
- package/dist/client/assets/bot-BNv_ZJzi.js +0 -1
- package/dist/client/assets/briefings-BwuAFQK6.css +0 -1
- package/dist/client/assets/broker-display-BkBzyvbR.js +0 -2
- package/dist/client/assets/cache-DGBo3vIf.js +0 -2
- package/dist/client/assets/chat-api-BHGHALv2.js +0 -2
- package/dist/client/assets/chat-message-markup-esR-YLtN.js +0 -1
- package/dist/client/assets/chat-space-model-aW3Fd8_U.js +0 -4
- package/dist/client/assets/chat-transport-CtxnPLMU.js +0 -1
- package/dist/client/assets/check-BM6QtbB7.js +0 -1
- package/dist/client/assets/chevron-down-DEDSNJNY.js +0 -1
- package/dist/client/assets/chevron-right-B02kAw12.js +0 -1
- package/dist/client/assets/chevron-up-CzveykKG.js +0 -1
- package/dist/client/assets/chunk-HRAB3GC3-DVhUsgOw.js +0 -1
- package/dist/client/assets/chunk-JTPDIGGW-hdpdYwXb.js +0 -46
- package/dist/client/assets/chunk-T65CQEWV-G_Z0lqtn.js +0 -1
- package/dist/client/assets/chunk-YOZR3KYS-apgUnfXh.js +0 -2
- package/dist/client/assets/clipboard-e3fSpeo7.js +0 -1
- package/dist/client/assets/clock-8tb9t2t9.js +0 -1
- package/dist/client/assets/code-screen-DrKinCyh.css +0 -1
- package/dist/client/assets/code-xml-E9gBuiVs.js +0 -1
- package/dist/client/assets/coffee-D0YEK6-l.js +0 -1
- package/dist/client/assets/collapsed-strip-raJWthAH.css +0 -1
- package/dist/client/assets/colors-CFlbwC25.js +0 -1
- package/dist/client/assets/comms-deck-C8nVeMBh.css +0 -1
- package/dist/client/assets/comms-deck-CBhsXnY-.js +0 -2
- package/dist/client/assets/comms-gesture-_aGFo6g3.js +0 -2
- package/dist/client/assets/compass-EmGkpxIe.js +0 -1
- package/dist/client/assets/console-B1IBqLI_.css +0 -1
- package/dist/client/assets/content-B-rn1rka.js +0 -1
- package/dist/client/assets/content-BHV-ZU8_.js +0 -1
- package/dist/client/assets/content-BI9yWpWC.js +0 -1
- package/dist/client/assets/content-BLVuukzF.js +0 -1
- package/dist/client/assets/content-BP3cQkAj.js +0 -1
- package/dist/client/assets/content-BRY-UTkP.js +0 -1
- package/dist/client/assets/content-BXTmYOPB.js +0 -1
- package/dist/client/assets/content-C3DZ77HZ.js +0 -1
- package/dist/client/assets/content-CINHz-rZ.css +0 -1
- package/dist/client/assets/content-CPchclaV.js +0 -1
- package/dist/client/assets/content-CVqPTQnr.js +0 -1
- package/dist/client/assets/content-CjAERU44.js +0 -1
- package/dist/client/assets/content-CoYG0nWL.js +0 -1
- package/dist/client/assets/content-DK1KeRPw.js +0 -1
- package/dist/client/assets/content-iWBSSXa6.js +0 -1
- package/dist/client/assets/content-ryJeaQk8.js +0 -1
- package/dist/client/assets/content-srNyLgDt.js +0 -1
- package/dist/client/assets/context-budget-8qFKqM-j.js +0 -1
- package/dist/client/assets/conversation-icons-Dxn9N1Kx.js +0 -1
- package/dist/client/assets/conversation-model-FxDeWlle.js +0 -1
- package/dist/client/assets/conversation-motion-features-BfmPlONx.js +0 -1
- package/dist/client/assets/conversation-prefs-DNre-Lcx.js +0 -1
- package/dist/client/assets/conversations-DoAAO6kA.js +0 -1
- package/dist/client/assets/copy-C1XrY27_.js +0 -1
- package/dist/client/assets/cpu-DVZ_LhPn.js +0 -1
- package/dist/client/assets/createLucideIcon-CKbjXlwv.js +0 -1
- package/dist/client/assets/credentials-OeoF-VKJ.js +0 -1
- package/dist/client/assets/ctx-panel-BC8fpcWJ.css +0 -1
- package/dist/client/assets/direct-voice-DAOUU-kc.js +0 -10
- package/dist/client/assets/direct-voice-DbO7CSv_.css +0 -1
- package/dist/client/assets/discover-BNa3BPr_.js +0 -2
- package/dist/client/assets/embed-entry-gK3z8Yxi.js +0 -2
- package/dist/client/assets/embed-navigation-DayfkQau.js +0 -1
- package/dist/client/assets/external-link-Df1R34rX.js +0 -1
- package/dist/client/assets/eye-CD-_aphP.js +0 -1
- package/dist/client/assets/file-code-corner-DtMWHBN3.js +0 -1
- package/dist/client/assets/file-text-BOJQiS8p.js +0 -1
- package/dist/client/assets/flag-CeKO8NoD.js +0 -1
- package/dist/client/assets/fleet-roll-call-BUgf7w-V.css +0 -1
- package/dist/client/assets/flight-observe-GFg9L8ft.css +0 -1
- package/dist/client/assets/floor-character-name-CqJPOlXb.js +0 -1
- package/dist/client/assets/floor-context-model-rWKqaKmV.js +0 -1
- package/dist/client/assets/floor-context-sheet-BFnkFiY3.css +0 -1
- package/dist/client/assets/floor-memory-YMM8AlLY.js +0 -1
- package/dist/client/assets/floor-message-passes-CO3Ix_wR.js +0 -1
- package/dist/client/assets/floor-preview-text-HrORUJ7D.js +0 -1
- package/dist/client/assets/floor-replay-CccYqE-f.css +0 -1
- package/dist/client/assets/floor-tactical-hud-HL5Vja5Y.css +0 -1
- package/dist/client/assets/folder-C2emmTHq.js +0 -1
- package/dist/client/assets/follow-route-BvcGtBIL.js +0 -1
- package/dist/client/assets/fx-z37u1o2z.js +0 -1
- package/dist/client/assets/gauge-BR5CrhRM.js +0 -1
- package/dist/client/assets/gestures-Dh8szhcU.js +0 -1
- package/dist/client/assets/git-branch-C45vy8qT.js +0 -1
- package/dist/client/assets/go-shortcuts--25Qg0lD.js +0 -1
- package/dist/client/assets/harnesses-screen-2z36fJKE.css +0 -1
- package/dist/client/assets/home-live-action-BkqGLVRY.js +0 -1
- package/dist/client/assets/home-moving-signal-BiiyEKEb.js +0 -1
- package/dist/client/assets/home-moving-signal-DMguaRWR.css +0 -1
- package/dist/client/assets/home-now-card-DaCpqUZe.js +0 -1
- package/dist/client/assets/home-now-card-nano-wbxgyY4q.js +0 -1
- package/dist/client/assets/hooks-D787lBmm.css +0 -1
- package/dist/client/assets/hooks-JNwYSH18.js +0 -2
- package/dist/client/assets/host-advisor-B2Fqs5Dd.css +0 -1
- package/dist/client/assets/inbox-thread-redesign-B_1ocqaX.css +0 -1
- package/dist/client/assets/index-BFbLvCJn.js +0 -10
- package/dist/client/assets/index-BRNHY2fp.css +0 -1
- package/dist/client/assets/index-BWHgHrtv.js +0 -1
- package/dist/client/assets/index-BrXaMEdK.js +0 -1
- package/dist/client/assets/index-CXzJ_hGx.js +0 -1
- package/dist/client/assets/index-V8FYEUpD.js +0 -1
- package/dist/client/assets/index-mYtyYeAe.js +0 -1
- package/dist/client/assets/index-wLwc74Pu.css +0 -1
- package/dist/client/assets/inspector-panel-BgU5xUln.js +0 -2
- package/dist/client/assets/keyboard-nav-CEe-ApvZ.js +0 -1
- package/dist/client/assets/knowledge-search-BNdQweGz.css +0 -1
- package/dist/client/assets/lane-ask-display-BTVSakyo.js +0 -18
- package/dist/client/assets/lane-edit-display-BjdT9oZl.js +0 -9
- package/dist/client/assets/lane-observe-CteDwdD-.js +0 -7
- package/dist/client/assets/lane-roster-store-MraynTHP.js +0 -1
- package/dist/client/assets/lane-tool-detail-Czggx8oM.js +0 -9
- package/dist/client/assets/layers-ClmyjwpB.js +0 -1
- package/dist/client/assets/layout-grid-DG2-JaPn.js +0 -1
- package/dist/client/assets/left-B66YR0c5.js +0 -1
- package/dist/client/assets/left-BP5P8lzw.js +0 -2
- package/dist/client/assets/left-BV9yMiTL.css +0 -1
- package/dist/client/assets/left-BbCKRDbW.js +0 -1
- package/dist/client/assets/left-CAaRBK9S.css +0 -1
- package/dist/client/assets/left-CaY5FK2k.js +0 -1
- package/dist/client/assets/left-CemrfeSs.js +0 -1
- package/dist/client/assets/left-DcYA26sH.js +0 -1
- package/dist/client/assets/left-DdMMaqFT.js +0 -2
- package/dist/client/assets/left-R2OOE7VG.css +0 -1
- package/dist/client/assets/left-advisor-DBml48M5.js +0 -1
- package/dist/client/assets/left-agents-DowYF2ag.js +0 -1
- package/dist/client/assets/left-default-Bifaeg_V.js +0 -1
- package/dist/client/assets/left-lanes-BGhjdqpD.js +0 -1
- package/dist/client/assets/left-mission-CvXPUovR.js +0 -1
- package/dist/client/assets/left-mission-DENnfshd.css +0 -1
- package/dist/client/assets/library-CnC8uzJt.js +0 -1
- package/dist/client/assets/loader-circle-CCG7hG7z.js +0 -1
- package/dist/client/assets/local-agents-BMcFlY_x.js +0 -1
- package/dist/client/assets/log-in-VL9mdgeE.js +0 -1
- package/dist/client/assets/machine-children-DvCiQxwA.js +0 -1
- package/dist/client/assets/machine-scope-DJt9RZ2w.js +0 -1
- package/dist/client/assets/media-blobs-Bi8pxr1u.js +0 -1
- package/dist/client/assets/mentions-s5oW4aQU.js +0 -1
- package/dist/client/assets/mesh-ops-9SzD3sPw.js +0 -1
- package/dist/client/assets/mesh-ops-B1kDjizF.css +0 -1
- package/dist/client/assets/mesh-screen-DjA4mOaN.css +0 -1
- package/dist/client/assets/mesh-view-store-CVqzYz4K.js +0 -1
- package/dist/client/assets/message-circle-BB3rFCVD.js +0 -1
- package/dist/client/assets/message-markup-BQW5jdJw.js +0 -15
- package/dist/client/assets/message-markup-D1C7GzHo.js +0 -1
- package/dist/client/assets/message-square-BwqBIfv5.js +0 -1
- package/dist/client/assets/message-visibility-DwxgcgYK.js +0 -1
- package/dist/client/assets/mission-control-CsX3Yc58.css +0 -1
- package/dist/client/assets/mission-control-model-BpJHDV5D.js +0 -1
- package/dist/client/assets/mission-control-store-e8F85JhP.js +0 -1
- package/dist/client/assets/mission-wall-CAo4BKfa.js +0 -1
- package/dist/client/assets/model-CBkMvT1w.js +0 -1
- package/dist/client/assets/monitor-M0VSmHQ-.js +0 -1
- package/dist/client/assets/nav-destinations-B3R5zxFX.js +0 -1
- package/dist/client/assets/observe-M3rLosT5.js +0 -1
- package/dist/client/assets/openAgent-Dbv5wfuL.js +0 -1
- package/dist/client/assets/openContent-C6XO6kr5.js +0 -1
- package/dist/client/assets/operator-attention-DBaRg5ep.js +0 -1
- package/dist/client/assets/ops-agents-BOYxzPTm.css +0 -1
- package/dist/client/assets/ops-atop-BB4B4JdE.css +0 -1
- package/dist/client/assets/ops-screen-CxYM0VOW.css +0 -1
- package/dist/client/assets/page-status-BIuh3C5p.js +0 -1
- package/dist/client/assets/page-status-bar-ByUD7VPM.css +0 -1
- package/dist/client/assets/panel-right-WKLdPm0F.js +0 -1
- package/dist/client/assets/paperclip-DLf_ABSv.js +0 -1
- package/dist/client/assets/pause-7mmEEvVx.js +0 -1
- package/dist/client/assets/persistent-state-3mbBFRDO.js +0 -1
- package/dist/client/assets/pin-q_0gAA6i.js +0 -1
- package/dist/client/assets/pip-idle-v1-Tt-CZsRG.png +0 -0
- package/dist/client/assets/pip-thinking-v1-BoHWSEye.png +0 -0
- package/dist/client/assets/pip-waiting-v1-DkuvJ-dN.png +0 -0
- package/dist/client/assets/pip-working-v1-wWQLRS1z.png +0 -0
- package/dist/client/assets/play-N5-hnPCV.js +0 -1
- package/dist/client/assets/plus-B0hdY0fF.js +0 -1
- package/dist/client/assets/profile-B7ZGToTo.js +0 -1
- package/dist/client/assets/project-overview-helpers-BQTc_Ous.js +0 -1
- package/dist/client/assets/projects-inbox-CMFBjQt0.js +0 -1
- package/dist/client/assets/projects-inbox-ColX6lpx.css +0 -1
- package/dist/client/assets/proxy-k0ILOVkK.js +0 -1
- package/dist/client/assets/radio-Bjqmv997.js +0 -1
- package/dist/client/assets/refresh-cw-BcqctLqo.js +0 -1
- package/dist/client/assets/repo-diff-DyYmQMSA.css +0 -1
- package/dist/client/assets/resizable-columns-C7ygvLt8.css +0 -1
- package/dist/client/assets/resolve-panes-wzGu9d8o.js +0 -1
- package/dist/client/assets/resolve-sidebar-context-C8SOo5oZ.js +0 -1
- package/dist/client/assets/right-9rMRZN_r.js +0 -1
- package/dist/client/assets/right-BHZq648O.js +0 -1
- package/dist/client/assets/right-BNJzCaH9.js +0 -2
- package/dist/client/assets/right-CAd7lTvY.js +0 -1
- package/dist/client/assets/right-Cc57bCTW.js +0 -1
- package/dist/client/assets/right-DY49Prjj.js +0 -1
- package/dist/client/assets/right-DfU47xKY.js +0 -1
- package/dist/client/assets/right-Dr7vxdZl.js +0 -1
- package/dist/client/assets/right-DsE4aR3A.js +0 -1
- package/dist/client/assets/right-zlkRjnkv.js +0 -1
- package/dist/client/assets/rocket-BahsdUe6.js +0 -1
- package/dist/client/assets/router-CJIx83Ia.js +0 -1
- package/dist/client/assets/runtime-picker-C3JwrDKP.css +0 -1
- package/dist/client/assets/runtime-picker-IRcTkMZ5.js +0 -1
- package/dist/client/assets/scope-views-4khCg2_z.css +0 -1
- package/dist/client/assets/scope-views-KDtZoLUC.js +0 -1
- package/dist/client/assets/scout-voice-Cdh6pCsb.js +0 -1
- package/dist/client/assets/scoutbot-Bk3nyrkj.js +0 -3
- package/dist/client/assets/scoutbot-markdown-7PRQHaAc.js +0 -6
- package/dist/client/assets/scroll-text-CA0QxBHu.js +0 -1
- package/dist/client/assets/search-Bv2IONmc.js +0 -1
- package/dist/client/assets/secondaryNavConfig-Bmb-oRvD.js +0 -1
- package/dist/client/assets/secondaryNavConfig-D15P1Y9k.css +0 -1
- package/dist/client/assets/selection-bridge-CthAuPRw.js +0 -1
- package/dist/client/assets/send-horizontal-_Tf_It04.js +0 -1
- package/dist/client/assets/send-to-agent-session-CWDHHgFB.js +0 -1
- package/dist/client/assets/server-U_l8A83n.js +0 -1
- package/dist/client/assets/session-catalog-Dx4tl3sx.js +0 -1
- package/dist/client/assets/session-recap-lanes-D-eVJnpY.js +0 -1
- package/dist/client/assets/session-recap-queue-GeicPLsQ.js +0 -1
- package/dist/client/assets/session-ref-lookup-state-SATH_jAP.js +0 -1
- package/dist/client/assets/session-table-BI62J4NP.js +0 -1
- package/dist/client/assets/sessionRead-CvFz2RHv.js +0 -1
- package/dist/client/assets/sessions-view-lGMwwZY7.js +0 -1
- package/dist/client/assets/settings-bo9X410k.js +0 -1
- package/dist/client/assets/shared-work-artifacts-DfNl9KTo.js +0 -1
- package/dist/client/assets/sliders-horizontal-CPSx6wd2.js +0 -1
- package/dist/client/assets/solar-system-scope-2k-stars-points-1FwHnkj0.png +0 -0
- package/dist/client/assets/sparkles-Br-bA2aZ.js +0 -1
- package/dist/client/assets/sprout-action-sprite-DZ8C0fTl.css +0 -1
- package/dist/client/assets/sprout-actions-proof-v1-BzUdc812.png +0 -0
- package/dist/client/assets/sse-BVxO0zNp.js +0 -1
- package/dist/client/assets/status-tone-BM_zuRy1.js +0 -1
- package/dist/client/assets/surface-activity-B1rgWB1i.js +0 -1
- package/dist/client/assets/synthetic-agent-routing-aduMYO7P.js +0 -1
- package/dist/client/assets/system-surfaces-redesign-q2BmCB7e.css +0 -1
- package/dist/client/assets/tail-display-DHSNmvor.js +0 -2
- package/dist/client/assets/tail-events-C6NWFB1N.js +0 -1
- package/dist/client/assets/terminal-DMBAZjPP.js +0 -1
- package/dist/client/assets/terminal-relay-CpGHpDa8.js +0 -1
- package/dist/client/assets/terminal-screen-Bpb2SZrn.css +0 -1
- package/dist/client/assets/terminal-sessions-3RfJpen8.js +0 -1
- package/dist/client/assets/terminal-takeover-CXwdoZ5j.js +0 -1
- package/dist/client/assets/theme-vars-DNK0nn3k.js +0 -1
- package/dist/client/assets/time-Dhsh_2EG.js +0 -1
- package/dist/client/assets/triangle-alert-BZikHKuT.js +0 -1
- package/dist/client/assets/types-B0PlfpKc.js +0 -1
- package/dist/client/assets/ui-LM8pS8qE.js +0 -1
- package/dist/client/assets/use-beside-DopIbJwf.js +0 -1
- package/dist/client/assets/use-conversation-list-CGtcpdPd.js +0 -1
- package/dist/client/assets/use-fleet-active-asks-DAHOPYPV.js +0 -1
- package/dist/client/assets/use-mesh-node-state-BlWIPTc4.js +0 -1
- package/dist/client/assets/use-mesh-ops-items-pKWBro7o.js +0 -1
- package/dist/client/assets/use-reduced-motion-DkdIQBwh.js +0 -1
- package/dist/client/assets/use-scout-dev-flags-CduUFb7l.js +0 -1
- package/dist/client/assets/useAgentHoverCard-DNlXPYQf.js +0 -1
- package/dist/client/assets/useContentSecondaryNav-LJGNYG3U.js +0 -1
- package/dist/client/assets/useEmbedHeadline-BeeBDb7E.js +0 -1
- package/dist/client/assets/usePierreRuntime-DUXZ-DTK.js +0 -50
- package/dist/client/assets/useSidebarCollapse-DoMvU_2R.js +0 -1
- package/dist/client/assets/users-BQPEIUfd.js +0 -1
- package/dist/client/assets/voice-levels-Dcr3jglk.js +0 -1
- package/dist/client/assets/voice-paths-CJUuBPh3.css +0 -1
- package/dist/client/assets/voice-turn-DftA0iIb.css +0 -1
- package/dist/client/assets/voice-turn-ledger-BMZxlSjg.js +0 -1
- package/dist/client/assets/worker-rendered-v1-DmGVMlVi.png +0 -0
- package/dist/client/assets/worker-thinking-v1-ujakpzrK.png +0 -0
- package/dist/client/assets/worker-waiting-v1-DbTSsfJJ.png +0 -0
- package/dist/client/assets/worker-working-v1-BROAvJ_z.png +0 -0
- package/dist/client/assets/world-outposts-v1-DOt0i98W.png +0 -0
- package/dist/client/assets/wrench-C-wjicn5.js +0 -1
- package/dist/client/assets/x-BcfhXYiF.js +0 -1
- package/dist/client/assets/xterm-qXD45dc0.js +0 -34
- package/dist/client/assets/zap-BqL8ttGz.js +0 -1
- package/dist/client/characters/sage/sage.glb +0 -0
- package/dist/highlights-eq9cgrbb.scm +0 -604
- package/dist/highlights-ghv9g403.scm +0 -205
- package/dist/highlights-hk7bwhj4.scm +0 -284
- package/dist/highlights-r812a2qc.scm +0 -150
- package/dist/highlights-x6tmsnaa.scm +0 -115
- package/dist/injections-73j83es3.scm +0 -27
- package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
- package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
- package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
- package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
- package/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
|
@@ -13324,16 +13324,16 @@ var require_mod5 = __commonJS((exports) => {
|
|
|
13324
13324
|
|
|
13325
13325
|
// packages/runtime/src/base-daemon.ts
|
|
13326
13326
|
import { spawn as spawn4 } from "child_process";
|
|
13327
|
-
import { existsSync as
|
|
13328
|
-
import { homedir as
|
|
13329
|
-
import { dirname as
|
|
13327
|
+
import { existsSync as existsSync9, mkdirSync as mkdirSync6, openSync as openSync2, writeFileSync as writeFileSync5 } from "fs";
|
|
13328
|
+
import { homedir as homedir8, networkInterfaces as networkInterfaces2 } from "os";
|
|
13329
|
+
import { dirname as dirname8, join as join10, resolve as resolve4 } from "path";
|
|
13330
13330
|
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
13331
13331
|
|
|
13332
13332
|
// packages/runtime/src/broker-process-manager.ts
|
|
13333
13333
|
import { spawn as spawn2, spawnSync } from "child_process";
|
|
13334
13334
|
import { existsSync as existsSync5, mkdirSync as mkdirSync2, readFileSync as readFileSync4, renameSync as renameSync2, writeFileSync as writeFileSync2 } from "fs";
|
|
13335
13335
|
import { homedir as homedir5, networkInterfaces } from "os";
|
|
13336
|
-
import { basename as basename2, dirname as
|
|
13336
|
+
import { basename as basename2, dirname as dirname4, join as join5, resolve as resolve2 } from "path";
|
|
13337
13337
|
import { fileURLToPath } from "url";
|
|
13338
13338
|
|
|
13339
13339
|
// packages/runtime/src/broker-api.ts
|
|
@@ -13499,6 +13499,15 @@ async function requestBrokerWire(baseUrl, path, options) {
|
|
|
13499
13499
|
}
|
|
13500
13500
|
};
|
|
13501
13501
|
}
|
|
13502
|
+
|
|
13503
|
+
class ScoutBrokerHttpError extends Error {
|
|
13504
|
+
status;
|
|
13505
|
+
constructor(status, path, body) {
|
|
13506
|
+
super(`${path} returned ${status}: ${body}`);
|
|
13507
|
+
this.status = status;
|
|
13508
|
+
this.name = "ScoutBrokerHttpError";
|
|
13509
|
+
}
|
|
13510
|
+
}
|
|
13502
13511
|
async function requestScoutBrokerJsonWithTrace(baseUrl, path, options = {}) {
|
|
13503
13512
|
const { response, trace } = await requestBrokerWire(baseUrl, path, options);
|
|
13504
13513
|
let parsed;
|
|
@@ -13515,7 +13524,7 @@ async function requestScoutBrokerJsonWithTrace(baseUrl, path, options = {}) {
|
|
|
13515
13524
|
if (parsedJson && options.acceptErrorJson?.(parsed)) {
|
|
13516
13525
|
return { value: parsed, trace };
|
|
13517
13526
|
}
|
|
13518
|
-
throw new
|
|
13527
|
+
throw new ScoutBrokerHttpError(response.status, path, response.text);
|
|
13519
13528
|
}
|
|
13520
13529
|
if (parsedJson) {
|
|
13521
13530
|
return { value: parsed, trace };
|
|
@@ -13787,11 +13796,18 @@ class NodeSqliteDatabaseAdapter {
|
|
|
13787
13796
|
|
|
13788
13797
|
// packages/runtime/src/support-paths.ts
|
|
13789
13798
|
import { homedir } from "os";
|
|
13790
|
-
import { join } from "path";
|
|
13799
|
+
import { dirname, join } from "path";
|
|
13791
13800
|
var OPENSCOUT_RPC_CUTOVER_MARKER = "rpc-runtime-cutover-v1";
|
|
13801
|
+
function defaultOpenScoutSupportDirectory(home = homedir()) {
|
|
13802
|
+
if (process.platform === "darwin") {
|
|
13803
|
+
return join(home, "Library", "Application Support", "OpenScout");
|
|
13804
|
+
}
|
|
13805
|
+
const xdgDataHome = process.env.XDG_DATA_HOME?.trim();
|
|
13806
|
+
return join(xdgDataHome || join(home, ".local", "share"), "openscout");
|
|
13807
|
+
}
|
|
13792
13808
|
function resolveOpenScoutSupportPaths() {
|
|
13793
13809
|
const home = homedir();
|
|
13794
|
-
const supportDirectory = process.env.OPENSCOUT_SUPPORT_DIRECTORY ??
|
|
13810
|
+
const supportDirectory = process.env.OPENSCOUT_SUPPORT_DIRECTORY ?? defaultOpenScoutSupportDirectory(home);
|
|
13795
13811
|
const logsDirectory = join(supportDirectory, "logs");
|
|
13796
13812
|
const runtimeDirectory = join(supportDirectory, "runtime");
|
|
13797
13813
|
const catalogDirectory = join(supportDirectory, "catalog");
|
|
@@ -15242,7 +15258,7 @@ import {
|
|
|
15242
15258
|
writeFileSync
|
|
15243
15259
|
} from "fs";
|
|
15244
15260
|
import { homedir as homedir3, hostname as osHostname } from "os";
|
|
15245
|
-
import { dirname, join as join3 } from "path";
|
|
15261
|
+
import { dirname as dirname2, join as join3 } from "path";
|
|
15246
15262
|
|
|
15247
15263
|
// packages/runtime/src/node-identity.ts
|
|
15248
15264
|
var NODE_CARD_TTL_MS = 24 * 60 * 60 * 1000;
|
|
@@ -15411,7 +15427,7 @@ function resolveWebPort() {
|
|
|
15411
15427
|
// packages/runtime/src/tool-resolution.ts
|
|
15412
15428
|
import { accessSync, constants, existsSync as existsSync4 } from "fs";
|
|
15413
15429
|
import { homedir as homedir4 } from "os";
|
|
15414
|
-
import { basename, dirname as
|
|
15430
|
+
import { basename, dirname as dirname3, join as join4, resolve } from "path";
|
|
15415
15431
|
var DEFAULT_COMMON_EXECUTABLE_DIRECTORIES = [
|
|
15416
15432
|
join4(homedir4(), ".bun", "bin"),
|
|
15417
15433
|
"/opt/homebrew/bin",
|
|
@@ -15511,7 +15527,7 @@ function resolveOpenScoutRepoRoot(options = {}) {
|
|
|
15511
15527
|
if (existsSync4(scoutEntry) && existsSync4(runtimeEntry)) {
|
|
15512
15528
|
return current;
|
|
15513
15529
|
}
|
|
15514
|
-
const parent =
|
|
15530
|
+
const parent = dirname3(current);
|
|
15515
15531
|
if (parent === current) {
|
|
15516
15532
|
break;
|
|
15517
15533
|
}
|
|
@@ -15696,7 +15712,7 @@ function runtimePackageDir() {
|
|
|
15696
15712
|
const fromGlobal = findGlobalRuntimeDir();
|
|
15697
15713
|
if (fromGlobal)
|
|
15698
15714
|
return fromGlobal;
|
|
15699
|
-
const moduleDir =
|
|
15715
|
+
const moduleDir = dirname4(fileURLToPath(import.meta.url));
|
|
15700
15716
|
return resolve2(moduleDir, "..");
|
|
15701
15717
|
}
|
|
15702
15718
|
function isInstalledRuntimePackageDir(candidate) {
|
|
@@ -15730,7 +15746,7 @@ function findGlobalRuntimeDir() {
|
|
|
15730
15746
|
return null;
|
|
15731
15747
|
}
|
|
15732
15748
|
function findBundledRuntimeDir() {
|
|
15733
|
-
const moduleDir =
|
|
15749
|
+
const moduleDir = dirname4(fileURLToPath(import.meta.url));
|
|
15734
15750
|
return resolveBundledRuntimeDirFromModuleDir(moduleDir);
|
|
15735
15751
|
}
|
|
15736
15752
|
function resolveBundledRuntimeDirFromModuleDir(moduleDir) {
|
|
@@ -15749,7 +15765,7 @@ function resolveBundledRuntimeDirFromModuleDir(moduleDir) {
|
|
|
15749
15765
|
return null;
|
|
15750
15766
|
}
|
|
15751
15767
|
function resolveSourceWorkspaceRuntimeDir(bundledPackageDir) {
|
|
15752
|
-
const packagesDir =
|
|
15768
|
+
const packagesDir = dirname4(bundledPackageDir);
|
|
15753
15769
|
if (resolve2(packagesDir, "cli") !== resolve2(bundledPackageDir))
|
|
15754
15770
|
return null;
|
|
15755
15771
|
const runtimeDir = join5(packagesDir, "runtime");
|
|
@@ -15772,7 +15788,7 @@ function findWorkspaceRuntimeDir(startDir) {
|
|
|
15772
15788
|
if (existsSync5(join5(candidate, "package.json")) && existsSync5(join5(candidate, "src"))) {
|
|
15773
15789
|
return candidate;
|
|
15774
15790
|
}
|
|
15775
|
-
const parent =
|
|
15791
|
+
const parent = dirname4(current);
|
|
15776
15792
|
if (parent === current)
|
|
15777
15793
|
return null;
|
|
15778
15794
|
current = parent;
|
|
@@ -15819,7 +15835,7 @@ function resolveBrokerServiceConfig() {
|
|
|
15819
15835
|
const serviceAdapter = resolveBrokerServiceAdapter();
|
|
15820
15836
|
const uid = typeof process.getuid === "function" ? process.getuid() : Number.parseInt(process.env.UID ?? "0", 10);
|
|
15821
15837
|
const supportPaths = resolveOpenScoutSupportPaths();
|
|
15822
|
-
const defaultSupportDir =
|
|
15838
|
+
const defaultSupportDir = defaultOpenScoutSupportDirectory();
|
|
15823
15839
|
const supportDirectory = isTmpPath(supportPaths.supportDirectory) ? defaultSupportDir : supportPaths.supportDirectory;
|
|
15824
15840
|
const runtimeDirectory = join5(supportDirectory, "runtime");
|
|
15825
15841
|
const logsDirectory = join5(supportDirectory, "logs", "broker");
|
|
@@ -15878,7 +15894,7 @@ function findWorkspaceRootFromRuntimeDir(runtimePackageDir2) {
|
|
|
15878
15894
|
if (existsSync5(join5(current, "Cargo.toml")) && existsSync5(join5(current, "crates", "scoutd", "Cargo.toml"))) {
|
|
15879
15895
|
return current;
|
|
15880
15896
|
}
|
|
15881
|
-
const parent =
|
|
15897
|
+
const parent = dirname4(current);
|
|
15882
15898
|
if (parent === current)
|
|
15883
15899
|
return null;
|
|
15884
15900
|
current = parent;
|
|
@@ -15888,7 +15904,12 @@ function workspaceScoutdAllowed() {
|
|
|
15888
15904
|
const raw = process.env.OPENSCOUT_ALLOW_WORKSPACE_SCOUTD?.trim().toLowerCase();
|
|
15889
15905
|
return raw === "1" || raw === "true" || raw === "yes" || raw === "on";
|
|
15890
15906
|
}
|
|
15907
|
+
function nativeSupervisorNotApplicableDetail(platform = process.platform) {
|
|
15908
|
+
return platform === "linux" ? "native supervisor: not applicable on linux" : `native supervisor: not applicable on ${platform}`;
|
|
15909
|
+
}
|
|
15891
15910
|
function resolveScoutdCommand(config = resolveBrokerServiceConfig()) {
|
|
15911
|
+
if (process.platform !== "darwin")
|
|
15912
|
+
return null;
|
|
15892
15913
|
const explicit = resolveEnvExecutable(process.env.OPENSCOUT_SCOUTD_BIN);
|
|
15893
15914
|
if (explicit) {
|
|
15894
15915
|
return { path: explicit, source: "env" };
|
|
@@ -15901,7 +15922,7 @@ function resolveScoutdCommand(config = resolveBrokerServiceConfig()) {
|
|
|
15901
15922
|
workspaceRoot ? join5(workspaceRoot, "packages", "cli", "bin", "scoutd") : null,
|
|
15902
15923
|
workspaceRoot ? join5(workspaceRoot, "packages", "runtime", "bin", "scoutd") : null,
|
|
15903
15924
|
join5(config.runtimeDirectory, "scoutd"),
|
|
15904
|
-
join5(
|
|
15925
|
+
join5(dirname4(config.runtimePackageDir), "scout", "bin", "scoutd")
|
|
15905
15926
|
];
|
|
15906
15927
|
for (const candidate of packageCandidates) {
|
|
15907
15928
|
const resolved = executableCandidate(candidate);
|
|
@@ -16031,6 +16052,8 @@ function normalizeNativeServiceStatus(input, config) {
|
|
|
16031
16052
|
reachable: healthReachable,
|
|
16032
16053
|
ok: healthOk,
|
|
16033
16054
|
checkedAt: readNumber2(healthRecord.checkedAt) ?? Date.now(),
|
|
16055
|
+
state: readString2(healthRecord.state),
|
|
16056
|
+
durationMs: readNumber2(healthRecord.durationMs),
|
|
16034
16057
|
transport: healthTransport,
|
|
16035
16058
|
socketPath: config.brokerSocketPath,
|
|
16036
16059
|
...healthSocketFallbackError ? { socketFallbackError: healthSocketFallbackError } : {},
|
|
@@ -16142,6 +16165,9 @@ async function runScoutdServiceCommand(command, config, timeoutMs = SCOUTD_DEFAU
|
|
|
16142
16165
|
}
|
|
16143
16166
|
const scoutd = resolveScoutdCommand(config);
|
|
16144
16167
|
if (!scoutd) {
|
|
16168
|
+
if (process.platform !== "darwin") {
|
|
16169
|
+
throw new Error(nativeSupervisorNotApplicableDetail());
|
|
16170
|
+
}
|
|
16145
16171
|
throw new Error("Unable to locate scoutd for broker service management. Build scoutd with `npm run scoutd:build`, install a package that includes scoutd, or set OPENSCOUT_SCOUTD_BIN.");
|
|
16146
16172
|
}
|
|
16147
16173
|
const stdout = await runScoutdJson(scoutd.path, command, nativeServiceEnvironment(config, scoutd.path), timeoutMs);
|
|
@@ -16410,7 +16436,7 @@ import {
|
|
|
16410
16436
|
writeFileSync as writeFileSync3
|
|
16411
16437
|
} from "fs";
|
|
16412
16438
|
import { homedir as homedir6 } from "os";
|
|
16413
|
-
import { dirname as
|
|
16439
|
+
import { dirname as dirname5, join as join6 } from "path";
|
|
16414
16440
|
var SCOUT_PAIRING_SUPERVISOR_INTENT_FILE = "supervisor.json";
|
|
16415
16441
|
var SCOUT_PAIRING_RUNTIME_PID_FILE = "runtime.pid";
|
|
16416
16442
|
var SCOUT_PAIRING_SUPERVISOR_PID_FILE = "supervisor.pid";
|
|
@@ -16469,7 +16495,7 @@ function claimScoutPairingSupervision(pid = process.pid, supervisorPidPath = res
|
|
|
16469
16495
|
if (currentPid && currentPid !== pid) {
|
|
16470
16496
|
throw new Error(`Scout pairing is already supervised by pid ${currentPid}.`);
|
|
16471
16497
|
}
|
|
16472
|
-
mkdirSync3(
|
|
16498
|
+
mkdirSync3(dirname5(supervisorPidPath), { recursive: true });
|
|
16473
16499
|
writeFileAtomically(supervisorPidPath, `${pid}
|
|
16474
16500
|
`);
|
|
16475
16501
|
}
|
|
@@ -16496,7 +16522,7 @@ function readPairingIntent(intentPath) {
|
|
|
16496
16522
|
}
|
|
16497
16523
|
}
|
|
16498
16524
|
function writePairingIntent(intentPath, intent) {
|
|
16499
|
-
mkdirSync3(
|
|
16525
|
+
mkdirSync3(dirname5(intentPath), { recursive: true });
|
|
16500
16526
|
writeFileAtomically(intentPath, `${JSON.stringify(intent, null, 2)}
|
|
16501
16527
|
`);
|
|
16502
16528
|
}
|
|
@@ -16512,7 +16538,6 @@ function writeFileAtomically(path, contents) {
|
|
|
16512
16538
|
function validRestartGeneration(value) {
|
|
16513
16539
|
return typeof value === "number" && Number.isSafeInteger(value) && value >= 0 ? value : 0;
|
|
16514
16540
|
}
|
|
16515
|
-
|
|
16516
16541
|
// packages/runtime/src/scout-ascii-mark.ts
|
|
16517
16542
|
var ORB_COLS = 60;
|
|
16518
16543
|
var ORB_ROWS = 47;
|
|
@@ -17146,8 +17171,10 @@ function renderOpenScoutCaddyfile(config, siteImportsGlob) {
|
|
|
17146
17171
|
const imports = siteImportsGlob ? `
|
|
17147
17172
|
import ${JSON.stringify(siteImportsGlob)}
|
|
17148
17173
|
` : "";
|
|
17174
|
+
const trust = config.scheme === "http" ? "" : ` skip_install_trust
|
|
17175
|
+
`;
|
|
17149
17176
|
return `{
|
|
17150
|
-
log {
|
|
17177
|
+
${trust} log {
|
|
17151
17178
|
level WARN
|
|
17152
17179
|
}
|
|
17153
17180
|
}
|
|
@@ -17292,7 +17319,7 @@ import {
|
|
|
17292
17319
|
readFileSync as readFileSync6,
|
|
17293
17320
|
rmSync as rmSync2
|
|
17294
17321
|
} from "fs";
|
|
17295
|
-
import { delimiter, dirname as
|
|
17322
|
+
import { delimiter, dirname as dirname6, isAbsolute, join as join8 } from "path";
|
|
17296
17323
|
class JetStreamBinaryMissingError extends Error {
|
|
17297
17324
|
constructor(binary) {
|
|
17298
17325
|
super(`nats-server binary "${binary}" was not found on PATH.
|
|
@@ -17418,7 +17445,7 @@ class NatsJetStreamSidecar {
|
|
|
17418
17445
|
throw new JetStreamBinaryMissingError(this.config.serverBinary);
|
|
17419
17446
|
}
|
|
17420
17447
|
mkdirSync4(this.config.storeDirectory, { recursive: true });
|
|
17421
|
-
mkdirSync4(
|
|
17448
|
+
mkdirSync4(dirname6(this.config.logPath), { recursive: true });
|
|
17422
17449
|
this.launch(binary);
|
|
17423
17450
|
try {
|
|
17424
17451
|
await this.waitUntilReady();
|
|
@@ -17565,7 +17592,25 @@ class NatsJetStreamSidecar {
|
|
|
17565
17592
|
// packages/runtime/src/jetstream/publisher.ts
|
|
17566
17593
|
import { randomUUID } from "crypto";
|
|
17567
17594
|
import { mkdirSync as mkdirSync5, readFileSync as readFileSync7, renameSync as renameSync4, rmSync as rmSync3, writeFileSync as writeFileSync4 } from "fs";
|
|
17568
|
-
import { dirname as
|
|
17595
|
+
import { dirname as dirname7 } from "path";
|
|
17596
|
+
|
|
17597
|
+
// packages/protocol/src/chat-message-corrections.ts
|
|
17598
|
+
function readChatMessageCorrection(metadata) {
|
|
17599
|
+
const value = metadata?.chatCorrection;
|
|
17600
|
+
if (!value || typeof value !== "object")
|
|
17601
|
+
return;
|
|
17602
|
+
const item = value;
|
|
17603
|
+
if (!Number.isSafeInteger(item.revision) || item.revision < 1 || typeof item.changedBy !== "string")
|
|
17604
|
+
return;
|
|
17605
|
+
return {
|
|
17606
|
+
revision: item.revision,
|
|
17607
|
+
changedBy: item.changedBy,
|
|
17608
|
+
...typeof item.editedAt === "number" && Number.isFinite(item.editedAt) ? { editedAt: item.editedAt } : {},
|
|
17609
|
+
...typeof item.deletedAt === "number" && Number.isFinite(item.deletedAt) ? { deletedAt: item.deletedAt } : {}
|
|
17610
|
+
};
|
|
17611
|
+
}
|
|
17612
|
+
|
|
17613
|
+
// packages/runtime/src/jetstream/publisher.ts
|
|
17569
17614
|
var JETSTREAM_PUBLISHER_PROJECTION_ID = "jetstream-publisher";
|
|
17570
17615
|
var JETSTREAM_PUBLISHER_PROJECTION_VERSION = 1;
|
|
17571
17616
|
function readJetStreamPublisherProgress(path) {
|
|
@@ -17612,7 +17657,7 @@ function writeJetStreamPublisherProgress(path, barrierId, at) {
|
|
|
17612
17657
|
barrierId,
|
|
17613
17658
|
updatedAt: at
|
|
17614
17659
|
};
|
|
17615
|
-
mkdirSync5(
|
|
17660
|
+
mkdirSync5(dirname7(path), { recursive: true });
|
|
17616
17661
|
const temporary = `${path}.${process.pid}.tmp`;
|
|
17617
17662
|
try {
|
|
17618
17663
|
writeFileSync4(temporary, `${JSON.stringify(payload, null, 2)}
|
|
@@ -17879,7 +17924,7 @@ class JetStreamJournalPublisher {
|
|
|
17879
17924
|
}
|
|
17880
17925
|
}
|
|
17881
17926
|
function isPublishableEntry(entry) {
|
|
17882
|
-
return entry.kind === "message.record";
|
|
17927
|
+
return entry.kind === "message.record" && !readChatMessageCorrection(entry.message.metadata);
|
|
17883
17928
|
}
|
|
17884
17929
|
function streamEventForEntry(entry, publisherNodeId) {
|
|
17885
17930
|
if (!isPublishableEntry(entry))
|
|
@@ -17912,6 +17957,130 @@ class ScoutStreamDeduplicator {
|
|
|
17912
17957
|
return this.seen.size;
|
|
17913
17958
|
}
|
|
17914
17959
|
}
|
|
17960
|
+
// packages/runtime/src/mesh-bridge-supervisor.ts
|
|
17961
|
+
import { spawnSync as spawnSync2 } from "child_process";
|
|
17962
|
+
import { existsSync as existsSync8, readFileSync as readFileSync8, statSync } from "fs";
|
|
17963
|
+
import { homedir as homedir7 } from "os";
|
|
17964
|
+
import { join as join9, resolve as resolve3 } from "path";
|
|
17965
|
+
|
|
17966
|
+
// packages/runtime/src/scout-bridge-command.ts
|
|
17967
|
+
var ENTRYPOINT = String.raw`(?:scout\.(?:mjs|ts|js)|\/bin\/scout|\/main\.mjs)`;
|
|
17968
|
+
var SUBCOMMAND = String.raw`\s+(mcp|channel|mesh\s+bridge)(?:\s|$)`;
|
|
17969
|
+
var RUNTIME = String.raw`(?:\S*\/)?(?:bun|node)(?:\s+(?!(?:-e|-p|--eval|--print)(?:[\s=]|$))-[\w-]+(?:=\S+)?)*`;
|
|
17970
|
+
var SCRIPT_PREFIX = String.raw`(?:[^-\s](?:(?!\s-|\.(?:[cm]?js|ts)\s).)*?)?`;
|
|
17971
|
+
var SCOUT_BRIDGE_COMMAND = new RegExp(String.raw`^(?:${RUNTIME}\s+${SCRIPT_PREFIX}|\S*?)${ENTRYPOINT}${SUBCOMMAND}`);
|
|
17972
|
+
var SCOUT_BRIDGE_BINARY = new RegExp(String.raw`^(?:${RUNTIME}\s+(?:${SCRIPT_PREFIX}\/)?|\S*\/)?scout-mcp(?:\s|$)`);
|
|
17973
|
+
function classifyScoutBridgeCommand(args) {
|
|
17974
|
+
const lowered = args.trim().toLowerCase();
|
|
17975
|
+
const match = SCOUT_BRIDGE_COMMAND.exec(lowered);
|
|
17976
|
+
if (match)
|
|
17977
|
+
return match[1].startsWith("mesh") ? "mesh" : match[1];
|
|
17978
|
+
return SCOUT_BRIDGE_BINARY.test(lowered) ? "mcp" : null;
|
|
17979
|
+
}
|
|
17980
|
+
function isMeshBridgeCommand(args) {
|
|
17981
|
+
return classifyScoutBridgeCommand(args) === "mesh";
|
|
17982
|
+
}
|
|
17983
|
+
|
|
17984
|
+
// packages/runtime/src/mesh-bridge-supervisor.ts
|
|
17985
|
+
var MESH_BRIDGE_CONFIG_FILENAME = "mcp-bridge.json";
|
|
17986
|
+
var LEGACY_MESH_BRIDGE_LAUNCH_AGENT_LABEL = "app.openscout.mcp-bridge";
|
|
17987
|
+
var MESH_BRIDGE_EXIT_UNCONFIGURED = 78;
|
|
17988
|
+
function meshBridgeConfigPath(supportDirectory) {
|
|
17989
|
+
return join9(supportDirectory, MESH_BRIDGE_CONFIG_FILENAME);
|
|
17990
|
+
}
|
|
17991
|
+
function legacyMeshBridgeLaunchAgentPath(home = homedir7()) {
|
|
17992
|
+
return join9(home, "Library", "LaunchAgents", `${LEGACY_MESH_BRIDGE_LAUNCH_AGENT_LABEL}.plist`);
|
|
17993
|
+
}
|
|
17994
|
+
function resolveMeshBridgeDesiredState(input) {
|
|
17995
|
+
if (input.env.OPENSCOUT_BASE_MESH_BRIDGE_ENABLED === "0") {
|
|
17996
|
+
return { run: false, reason: "disabled-by-env" };
|
|
17997
|
+
}
|
|
17998
|
+
const configPath = meshBridgeConfigPath(input.supportDirectory);
|
|
17999
|
+
if (!existsSync8(configPath)) {
|
|
18000
|
+
return { run: false, reason: "no-config" };
|
|
18001
|
+
}
|
|
18002
|
+
let configMtimeMs;
|
|
18003
|
+
let parsed;
|
|
18004
|
+
try {
|
|
18005
|
+
configMtimeMs = statSync(configPath).mtimeMs;
|
|
18006
|
+
parsed = JSON.parse(readFileSync8(configPath, "utf8"));
|
|
18007
|
+
} catch {
|
|
18008
|
+
return { run: false, reason: "invalid-config" };
|
|
18009
|
+
}
|
|
18010
|
+
if (parsed && typeof parsed === "object" && parsed.enabled === false) {
|
|
18011
|
+
return { run: false, reason: "disabled-in-config" };
|
|
18012
|
+
}
|
|
18013
|
+
if (existsSync8(legacyMeshBridgeLaunchAgentPath(input.home))) {
|
|
18014
|
+
return { run: false, reason: "legacy-launch-agent" };
|
|
18015
|
+
}
|
|
18016
|
+
return { run: true, configPath, configMtimeMs };
|
|
18017
|
+
}
|
|
18018
|
+
function resolveMeshBridgeEntrypoint(input) {
|
|
18019
|
+
const exists = input.exists ?? existsSync8;
|
|
18020
|
+
const home = input.home ?? homedir7();
|
|
18021
|
+
const repo = input.repoRoot;
|
|
18022
|
+
const source = repo ? join9(repo, "apps", "desktop", "bin", "scout.ts") : null;
|
|
18023
|
+
const candidates = [
|
|
18024
|
+
input.env.OPENSCOUT_MESH_BRIDGE_BIN?.trim() || null,
|
|
18025
|
+
input.serviceMode === "dev" ? source : null,
|
|
18026
|
+
repo ? join9(repo, "packages", "cli", "dist", "main.mjs") : null,
|
|
18027
|
+
resolve3(input.moduleDirectory, "..", "main.mjs"),
|
|
18028
|
+
join9(home, ".bun", "install", "global", "node_modules", "@openscout", "scout", "dist", "main.mjs")
|
|
18029
|
+
].filter((candidate) => Boolean(candidate));
|
|
18030
|
+
return candidates.find((candidate) => exists(candidate)) ?? null;
|
|
18031
|
+
}
|
|
18032
|
+
function meshBridgeArgs(entrypoint, configPath) {
|
|
18033
|
+
return [entrypoint, "mesh", "bridge", "--config", configPath];
|
|
18034
|
+
}
|
|
18035
|
+
function meshBridgeStatePath(supportDirectory) {
|
|
18036
|
+
return join9(supportDirectory, "runtime", "mesh-bridge.json");
|
|
18037
|
+
}
|
|
18038
|
+
function readProcessIdentity(pid) {
|
|
18039
|
+
const result = spawnSync2("ps", ["-o", "lstart=,args=", "-p", String(pid)], { encoding: "utf8" });
|
|
18040
|
+
if (result.status !== 0)
|
|
18041
|
+
return null;
|
|
18042
|
+
const match = /^\s*(\S+\s+\S+\s+\S+\s+\S+\s+\S+)\s+(.+)$/.exec(result.stdout.trim());
|
|
18043
|
+
return match ? { startedAt: match[1], args: match[2] } : null;
|
|
18044
|
+
}
|
|
18045
|
+
function findRecordedLiveMeshBridgePid(supportDirectory, readIdentity = readProcessIdentity) {
|
|
18046
|
+
let recorded;
|
|
18047
|
+
try {
|
|
18048
|
+
recorded = JSON.parse(readFileSync8(meshBridgeStatePath(supportDirectory), "utf8"));
|
|
18049
|
+
} catch {
|
|
18050
|
+
return null;
|
|
18051
|
+
}
|
|
18052
|
+
const { pid, processStartedAt } = recorded;
|
|
18053
|
+
if (typeof pid !== "number" || !Number.isInteger(pid) || pid <= 1)
|
|
18054
|
+
return null;
|
|
18055
|
+
if (typeof processStartedAt !== "string" || !processStartedAt)
|
|
18056
|
+
return null;
|
|
18057
|
+
const identity = readIdentity(pid);
|
|
18058
|
+
if (!identity || identity.startedAt !== processStartedAt)
|
|
18059
|
+
return null;
|
|
18060
|
+
return isMeshBridgeCommand(identity.args) ? pid : null;
|
|
18061
|
+
}
|
|
18062
|
+
function inspectLaunchdJob(target, run = runLaunchctl) {
|
|
18063
|
+
const result = run(["print", target]);
|
|
18064
|
+
if (result.status === 0)
|
|
18065
|
+
return "loaded";
|
|
18066
|
+
if (result.status === 113 || /could not find service/i.test(result.output))
|
|
18067
|
+
return "absent";
|
|
18068
|
+
return "unknown";
|
|
18069
|
+
}
|
|
18070
|
+
function legacyMeshBridgeLaunchdTarget(uid = process.getuid?.() ?? 501) {
|
|
18071
|
+
return `gui/${uid}/${LEGACY_MESH_BRIDGE_LAUNCH_AGENT_LABEL}`;
|
|
18072
|
+
}
|
|
18073
|
+
function runLaunchctlProbe(args, spawn4) {
|
|
18074
|
+
if (process.platform !== "darwin") {
|
|
18075
|
+
return { status: 113, output: "Could not find service" };
|
|
18076
|
+
}
|
|
18077
|
+
const result = spawn4 ? spawn4("launchctl", args, { encoding: "utf8" }) : spawnSync2("launchctl", args, { encoding: "utf8" });
|
|
18078
|
+
return { status: result.status, output: `${result.stdout ?? ""}${result.stderr ?? ""}` };
|
|
18079
|
+
}
|
|
18080
|
+
function runLaunchctl(args) {
|
|
18081
|
+
return runLaunchctlProbe(args);
|
|
18082
|
+
}
|
|
18083
|
+
|
|
17915
18084
|
// packages/runtime/src/base-daemon.ts
|
|
17916
18085
|
var RESTART_MIN_DELAY_MS = 1000;
|
|
17917
18086
|
var RESTART_MAX_DELAY_MS = 30000;
|
|
@@ -17921,6 +18090,10 @@ var CHILD_SHUTDOWN_TIMEOUT_MS = 15000;
|
|
|
17921
18090
|
var WEB_START_RETRY_MS = 5000;
|
|
17922
18091
|
var PAIRING_RECONCILE_INTERVAL_MS = 500;
|
|
17923
18092
|
var PAIRING_STOP_TIMEOUT_MS = 5000;
|
|
18093
|
+
var MESH_BRIDGE_RECONCILE_INTERVAL_MS = 5000;
|
|
18094
|
+
var MESH_BRIDGE_STOP_TIMEOUT_MS = 6000;
|
|
18095
|
+
var MESH_BRIDGE_UNCONFIGURED_RETRY_MS = 5 * 60000;
|
|
18096
|
+
var MESH_BRIDGE_STABLE_AFTER_MS = 60000;
|
|
17924
18097
|
var MENU_BUNDLE_ID = "app.openscout.scout.menu";
|
|
17925
18098
|
var PROCESS_NAME = "scout-base";
|
|
17926
18099
|
var BROKER_PROCESS_NAME = "scout-broker";
|
|
@@ -17944,6 +18117,15 @@ var pairingRestartGeneration = null;
|
|
|
17944
18117
|
var pairingRestartDelayMs = RESTART_MIN_DELAY_MS;
|
|
17945
18118
|
var pairingNextStartAt = 0;
|
|
17946
18119
|
var pairingSupervisionClaimed = false;
|
|
18120
|
+
var meshBridgeProcess = null;
|
|
18121
|
+
var meshBridgeConfigMtimeMs = 0;
|
|
18122
|
+
var meshBridgeRestartDelayMs = RESTART_MIN_DELAY_MS;
|
|
18123
|
+
var meshBridgeNextStartAt = 0;
|
|
18124
|
+
var meshBridgeReconcileTimer = null;
|
|
18125
|
+
var meshBridgeLastIdleReason = null;
|
|
18126
|
+
var meshBridgeReconcileInFlight = false;
|
|
18127
|
+
var meshBridgeStartedAt = 0;
|
|
18128
|
+
var meshBridgeUnconfiguredMtimeMs = null;
|
|
17947
18129
|
var parentPid = Number.parseInt(process.env.OPENSCOUT_PARENT_PID ?? "0", 10);
|
|
17948
18130
|
var config = resolveBrokerServiceConfig();
|
|
17949
18131
|
var brokerControlUrl = buildLocalBrokerControlUrl(config.brokerHost, config.brokerPort);
|
|
@@ -17996,12 +18178,12 @@ function ensureDirectory(path) {
|
|
|
17996
18178
|
mkdirSync6(path, { recursive: true });
|
|
17997
18179
|
}
|
|
17998
18180
|
function logFile(name) {
|
|
17999
|
-
const dir =
|
|
18181
|
+
const dir = join10(config.supportDirectory, "logs", "base");
|
|
18000
18182
|
ensureDirectory(dir);
|
|
18001
|
-
return openSync2(
|
|
18183
|
+
return openSync2(join10(dir, name), "a");
|
|
18002
18184
|
}
|
|
18003
18185
|
function runtimeEntrypoint(config2) {
|
|
18004
|
-
return
|
|
18186
|
+
return join10(config2.runtimePackageDir, "bin", "openscout-runtime.mjs");
|
|
18005
18187
|
}
|
|
18006
18188
|
function spawnBroker() {
|
|
18007
18189
|
if (shuttingDown || brokerProcess) {
|
|
@@ -18083,10 +18265,10 @@ function resolveEdgeScheme() {
|
|
|
18083
18265
|
if (value === "http" || value === "https" || value === "both") {
|
|
18084
18266
|
return value;
|
|
18085
18267
|
}
|
|
18086
|
-
return "
|
|
18268
|
+
return "both";
|
|
18087
18269
|
}
|
|
18088
18270
|
function forwardedProtoForEdgeScheme(scheme) {
|
|
18089
|
-
return scheme === "
|
|
18271
|
+
return scheme === "https" ? "https" : "http";
|
|
18090
18272
|
}
|
|
18091
18273
|
function resolveEdgeConfig() {
|
|
18092
18274
|
const portalHost = process.env.OPENSCOUT_WEB_PORTAL_HOST?.trim() || DEFAULT_SCOUT_WEB_PORTAL_HOST;
|
|
@@ -18107,9 +18289,9 @@ function resolveEdgeConfig() {
|
|
|
18107
18289
|
});
|
|
18108
18290
|
}
|
|
18109
18291
|
function resolveLocalEdgeCaddyfilePath() {
|
|
18110
|
-
const dir =
|
|
18292
|
+
const dir = join10(homedir8(), ".scout", "local-edge");
|
|
18111
18293
|
ensureDirectory(dir);
|
|
18112
|
-
return
|
|
18294
|
+
return join10(dir, "Caddyfile");
|
|
18113
18295
|
}
|
|
18114
18296
|
function resolveCaddyExecutable() {
|
|
18115
18297
|
return process.env.OPENSCOUT_CADDY_BIN?.trim() || "caddy";
|
|
@@ -18180,9 +18362,9 @@ function startLocalEdge() {
|
|
|
18180
18362
|
const edgeConfig = resolveEdgeConfig();
|
|
18181
18363
|
const schemes = edgeConfig.scheme === "both" ? ["http", "https"] : [edgeConfig.scheme];
|
|
18182
18364
|
const caddyfilePath = resolveLocalEdgeCaddyfilePath();
|
|
18183
|
-
const sitesDirectory =
|
|
18365
|
+
const sitesDirectory = join10(dirname8(caddyfilePath), "sites");
|
|
18184
18366
|
ensureDirectory(sitesDirectory);
|
|
18185
|
-
writeFileSync5(caddyfilePath, renderOpenScoutCaddyfile(edgeConfig,
|
|
18367
|
+
writeFileSync5(caddyfilePath, renderOpenScoutCaddyfile(edgeConfig, join10(sitesDirectory, "*.caddy")), "utf8");
|
|
18186
18368
|
mdnsProcesses = schemes.flatMap((scheme) => {
|
|
18187
18369
|
const edgePort = scheme === "https" ? 443 : 80;
|
|
18188
18370
|
const suffix = scheme.toUpperCase();
|
|
@@ -18284,18 +18466,18 @@ function scheduleWebStartRetry() {
|
|
|
18284
18466
|
webStartRetryTimer.unref();
|
|
18285
18467
|
}
|
|
18286
18468
|
function findRepoMenuBundle() {
|
|
18287
|
-
let current =
|
|
18469
|
+
let current = dirname8(fileURLToPath2(import.meta.url));
|
|
18288
18470
|
while (true) {
|
|
18289
|
-
const distRoot =
|
|
18471
|
+
const distRoot = resolve4(current, "apps", "macos", "dist");
|
|
18290
18472
|
const candidates = [
|
|
18291
|
-
|
|
18292
|
-
|
|
18473
|
+
resolve4(distRoot, "Scout.app", "Contents", "Library", "LoginItems", "ScoutMenu.app"),
|
|
18474
|
+
resolve4(distRoot, "ScoutMenu.app")
|
|
18293
18475
|
];
|
|
18294
18476
|
for (const candidate of candidates) {
|
|
18295
|
-
if (
|
|
18477
|
+
if (existsSync9(candidate))
|
|
18296
18478
|
return candidate;
|
|
18297
18479
|
}
|
|
18298
|
-
const parent =
|
|
18480
|
+
const parent = dirname8(current);
|
|
18299
18481
|
if (parent === current) {
|
|
18300
18482
|
return null;
|
|
18301
18483
|
}
|
|
@@ -18307,7 +18489,7 @@ function startMenuBarApp() {
|
|
|
18307
18489
|
return;
|
|
18308
18490
|
}
|
|
18309
18491
|
const explicitBundle = process.env.OPENSCOUT_MENU_BUNDLE_PATH?.trim();
|
|
18310
|
-
const repoBundle = explicitBundle &&
|
|
18492
|
+
const repoBundle = explicitBundle && existsSync9(explicitBundle) ? explicitBundle : findRepoMenuBundle();
|
|
18311
18493
|
const args = repoBundle ? [repoBundle] : ["-b", MENU_BUNDLE_ID];
|
|
18312
18494
|
const child = spawn4("open", args, {
|
|
18313
18495
|
stdio: ["ignore", logFile("menu.stdout.log"), logFile("menu.stderr.log")]
|
|
@@ -18321,7 +18503,7 @@ function startMenuBarApp() {
|
|
|
18321
18503
|
});
|
|
18322
18504
|
}
|
|
18323
18505
|
function resolvePairingControllerCommand() {
|
|
18324
|
-
const moduleDirectory =
|
|
18506
|
+
const moduleDirectory = dirname8(fileURLToPath2(import.meta.url));
|
|
18325
18507
|
const repoRoot = resolveOpenScoutRepoRoot({
|
|
18326
18508
|
startDirectories: [
|
|
18327
18509
|
process.env.OPENSCOUT_SETUP_CWD,
|
|
@@ -18333,14 +18515,14 @@ function resolvePairingControllerCommand() {
|
|
|
18333
18515
|
const explicit = process.env.OPENSCOUT_PAIRING_RUNTIME_CONTROLLER_BIN?.trim();
|
|
18334
18516
|
const candidates = [
|
|
18335
18517
|
explicit,
|
|
18336
|
-
repoRoot ?
|
|
18337
|
-
repoRoot ?
|
|
18338
|
-
repoRoot ?
|
|
18339
|
-
|
|
18340
|
-
|
|
18341
|
-
|
|
18518
|
+
repoRoot ? join10(repoRoot, "packages", "cli", "dist", "pairing-runtime-controller.mjs") : null,
|
|
18519
|
+
repoRoot ? join10(repoRoot, "packages", "web", "dist", "pairing-runtime-controller.mjs") : null,
|
|
18520
|
+
repoRoot ? join10(repoRoot, "packages", "web", "server", "pairing-runtime-controller.ts") : null,
|
|
18521
|
+
resolve4(moduleDirectory, "..", "pairing-runtime-controller.mjs"),
|
|
18522
|
+
join10(homedir8(), ".bun", "install", "global", "node_modules", "@openscout", "scout", "dist", "pairing-runtime-controller.mjs"),
|
|
18523
|
+
join10(homedir8(), ".bun", "node_modules", "@openscout", "scout", "dist", "pairing-runtime-controller.mjs")
|
|
18342
18524
|
].filter((candidate) => Boolean(candidate));
|
|
18343
|
-
const entrypoint = candidates.find((candidate) =>
|
|
18525
|
+
const entrypoint = candidates.find((candidate) => existsSync9(candidate));
|
|
18344
18526
|
if (!entrypoint)
|
|
18345
18527
|
return null;
|
|
18346
18528
|
if (explicit === entrypoint && !/\.(?:[cm]?js|ts)$/.test(entrypoint)) {
|
|
@@ -18491,6 +18673,174 @@ function startPairingSupervision() {
|
|
|
18491
18673
|
pairingReconcileTimer.unref();
|
|
18492
18674
|
reconcilePairingController();
|
|
18493
18675
|
}
|
|
18676
|
+
function writeMeshBridgeState(state) {
|
|
18677
|
+
try {
|
|
18678
|
+
ensureDirectory(join10(config.supportDirectory, "runtime"));
|
|
18679
|
+
writeFileSync5(meshBridgeStatePath(config.supportDirectory), `${JSON.stringify({ ...state, updatedAt: Date.now() }, null, 2)}
|
|
18680
|
+
`);
|
|
18681
|
+
} catch (error) {
|
|
18682
|
+
warn("could not record mesh bridge state", error instanceof Error ? error.message : String(error));
|
|
18683
|
+
}
|
|
18684
|
+
}
|
|
18685
|
+
function spawnMeshBridge(desired) {
|
|
18686
|
+
if (shuttingDown || meshBridgeProcess)
|
|
18687
|
+
return;
|
|
18688
|
+
const moduleDirectory = dirname8(fileURLToPath2(import.meta.url));
|
|
18689
|
+
const repoRoot = resolveOpenScoutRepoRoot({
|
|
18690
|
+
startDirectories: [process.env.OPENSCOUT_SETUP_CWD, process.cwd(), moduleDirectory]
|
|
18691
|
+
});
|
|
18692
|
+
const entrypoint = resolveMeshBridgeEntrypoint({
|
|
18693
|
+
repoRoot,
|
|
18694
|
+
moduleDirectory,
|
|
18695
|
+
serviceMode: config.mode,
|
|
18696
|
+
env: process.env
|
|
18697
|
+
});
|
|
18698
|
+
const bun = resolveBunExecutable();
|
|
18699
|
+
if (!entrypoint || !bun) {
|
|
18700
|
+
warn("mesh bridge entrypoint or Bun executable could not be resolved");
|
|
18701
|
+
meshBridgeNextStartAt = Date.now() + meshBridgeRestartDelayMs;
|
|
18702
|
+
meshBridgeRestartDelayMs = Math.min(meshBridgeRestartDelayMs * 2, RESTART_MAX_DELAY_MS);
|
|
18703
|
+
return;
|
|
18704
|
+
}
|
|
18705
|
+
const child = spawn4(bun.path, meshBridgeArgs(entrypoint, desired.configPath), {
|
|
18706
|
+
cwd: repoRoot ?? process.cwd(),
|
|
18707
|
+
env: { ...process.env, OPENSCOUT_PARENT_PID: String(process.pid) },
|
|
18708
|
+
stdio: ["ignore", logFile("mesh-bridge.stdout.log"), logFile("mesh-bridge.stderr.log")]
|
|
18709
|
+
});
|
|
18710
|
+
meshBridgeProcess = child;
|
|
18711
|
+
meshBridgeStartedAt = Date.now();
|
|
18712
|
+
meshBridgeUnconfiguredMtimeMs = null;
|
|
18713
|
+
meshBridgeConfigMtimeMs = desired.configMtimeMs;
|
|
18714
|
+
meshBridgeLastIdleReason = null;
|
|
18715
|
+
log("mesh bridge started", { pid: child.pid, entrypoint });
|
|
18716
|
+
const processStartedAt = child.pid ? readProcessIdentity(child.pid)?.startedAt ?? null : null;
|
|
18717
|
+
writeMeshBridgeState({
|
|
18718
|
+
state: "running",
|
|
18719
|
+
pid: child.pid ?? null,
|
|
18720
|
+
processStartedAt,
|
|
18721
|
+
entrypoint,
|
|
18722
|
+
configPath: desired.configPath,
|
|
18723
|
+
startedAt: Date.now()
|
|
18724
|
+
});
|
|
18725
|
+
const settle = (code, signal, error) => {
|
|
18726
|
+
if (meshBridgeProcess !== child)
|
|
18727
|
+
return;
|
|
18728
|
+
meshBridgeProcess = null;
|
|
18729
|
+
if (shuttingDown)
|
|
18730
|
+
return;
|
|
18731
|
+
if (code === MESH_BRIDGE_EXIT_UNCONFIGURED) {
|
|
18732
|
+
warn("mesh bridge has no relay token; retrying later", { retryInMs: MESH_BRIDGE_UNCONFIGURED_RETRY_MS });
|
|
18733
|
+
meshBridgeNextStartAt = Date.now() + MESH_BRIDGE_UNCONFIGURED_RETRY_MS;
|
|
18734
|
+
meshBridgeUnconfiguredMtimeMs = desired.configMtimeMs;
|
|
18735
|
+
writeMeshBridgeState({ state: "unconfigured", pid: null, reason: "no relay token" });
|
|
18736
|
+
return;
|
|
18737
|
+
}
|
|
18738
|
+
warn(error ? "mesh bridge failed to start" : "mesh bridge exited", error ?? { code, signal });
|
|
18739
|
+
meshBridgeNextStartAt = Date.now() + meshBridgeRestartDelayMs;
|
|
18740
|
+
meshBridgeRestartDelayMs = Math.min(meshBridgeRestartDelayMs * 2, RESTART_MAX_DELAY_MS);
|
|
18741
|
+
writeMeshBridgeState({ state: "restarting", pid: null, lastExit: { code, signal }, nextStartAt: meshBridgeNextStartAt });
|
|
18742
|
+
};
|
|
18743
|
+
child.once("error", (error) => settle(null, null, error.message));
|
|
18744
|
+
child.once("exit", (code, signal) => settle(code, signal));
|
|
18745
|
+
}
|
|
18746
|
+
async function reconcileMeshBridge() {
|
|
18747
|
+
if (shuttingDown || meshBridgeReconcileInFlight)
|
|
18748
|
+
return;
|
|
18749
|
+
meshBridgeReconcileInFlight = true;
|
|
18750
|
+
try {
|
|
18751
|
+
await reconcileMeshBridgeOnce();
|
|
18752
|
+
} catch (error) {
|
|
18753
|
+
warn("mesh bridge reconciliation failed", error instanceof Error ? error.message : String(error));
|
|
18754
|
+
} finally {
|
|
18755
|
+
meshBridgeReconcileInFlight = false;
|
|
18756
|
+
}
|
|
18757
|
+
}
|
|
18758
|
+
async function reconcileMeshBridgeOnce() {
|
|
18759
|
+
const desired = resolveMeshBridgeDesiredState({ supportDirectory: config.supportDirectory, env: process.env });
|
|
18760
|
+
const running = meshBridgeProcess && !isChildExited(meshBridgeProcess) ? meshBridgeProcess : null;
|
|
18761
|
+
if (!desired.run) {
|
|
18762
|
+
if (running) {
|
|
18763
|
+
log("stopping mesh bridge", { reason: desired.reason });
|
|
18764
|
+
meshBridgeProcess = null;
|
|
18765
|
+
await terminateChildProcess(running, "mesh bridge", MESH_BRIDGE_STOP_TIMEOUT_MS);
|
|
18766
|
+
}
|
|
18767
|
+
if (meshBridgeLastIdleReason !== desired.reason) {
|
|
18768
|
+
meshBridgeLastIdleReason = desired.reason;
|
|
18769
|
+
if (desired.reason === "legacy-launch-agent") {
|
|
18770
|
+
warn("mesh bridge is still installed as its own LaunchAgent; run `scout mesh bridge install` to hand it to scout-base");
|
|
18771
|
+
}
|
|
18772
|
+
writeMeshBridgeState({ state: "idle", pid: null, reason: desired.reason });
|
|
18773
|
+
}
|
|
18774
|
+
meshBridgeNextStartAt = 0;
|
|
18775
|
+
meshBridgeRestartDelayMs = RESTART_MIN_DELAY_MS;
|
|
18776
|
+
return;
|
|
18777
|
+
}
|
|
18778
|
+
if (running) {
|
|
18779
|
+
if (desired.configMtimeMs !== meshBridgeConfigMtimeMs) {
|
|
18780
|
+
log("mesh bridge config changed; restarting it");
|
|
18781
|
+
meshBridgeProcess = null;
|
|
18782
|
+
await terminateChildProcess(running, "mesh bridge", MESH_BRIDGE_STOP_TIMEOUT_MS);
|
|
18783
|
+
meshBridgeNextStartAt = 0;
|
|
18784
|
+
} else {
|
|
18785
|
+
if (Date.now() - meshBridgeStartedAt >= MESH_BRIDGE_STABLE_AFTER_MS) {
|
|
18786
|
+
meshBridgeRestartDelayMs = RESTART_MIN_DELAY_MS;
|
|
18787
|
+
}
|
|
18788
|
+
return;
|
|
18789
|
+
}
|
|
18790
|
+
}
|
|
18791
|
+
if (meshBridgeUnconfiguredMtimeMs !== null && desired.configMtimeMs !== meshBridgeUnconfiguredMtimeMs) {
|
|
18792
|
+
meshBridgeUnconfiguredMtimeMs = null;
|
|
18793
|
+
meshBridgeNextStartAt = 0;
|
|
18794
|
+
}
|
|
18795
|
+
if (shuttingDown || Date.now() < meshBridgeNextStartAt)
|
|
18796
|
+
return;
|
|
18797
|
+
if (process.platform === "darwin") {
|
|
18798
|
+
const legacyJob = inspectLaunchdJob(legacyMeshBridgeLaunchdTarget());
|
|
18799
|
+
if (legacyJob !== "absent") {
|
|
18800
|
+
const reason = `legacy-launchd-job-${legacyJob}`;
|
|
18801
|
+
if (meshBridgeLastIdleReason !== reason) {
|
|
18802
|
+
meshBridgeLastIdleReason = reason;
|
|
18803
|
+
warn("mesh bridge deferred: the legacy launchd job is not confirmed absent", { state: legacyJob });
|
|
18804
|
+
writeMeshBridgeState({ state: "idle", pid: null, reason });
|
|
18805
|
+
}
|
|
18806
|
+
return;
|
|
18807
|
+
}
|
|
18808
|
+
}
|
|
18809
|
+
await fencePreviousMeshBridge();
|
|
18810
|
+
if (shuttingDown)
|
|
18811
|
+
return;
|
|
18812
|
+
spawnMeshBridge(desired);
|
|
18813
|
+
}
|
|
18814
|
+
async function fencePreviousMeshBridge() {
|
|
18815
|
+
const pid = findRecordedLiveMeshBridgePid(config.supportDirectory);
|
|
18816
|
+
if (pid === null || pid === process.pid)
|
|
18817
|
+
return;
|
|
18818
|
+
warn("stopping a mesh bridge left by a previous scout-base", { pid });
|
|
18819
|
+
try {
|
|
18820
|
+
process.kill(pid, "SIGTERM");
|
|
18821
|
+
} catch {
|
|
18822
|
+
return;
|
|
18823
|
+
}
|
|
18824
|
+
const deadline = Date.now() + MESH_BRIDGE_STOP_TIMEOUT_MS;
|
|
18825
|
+
while (Date.now() < deadline) {
|
|
18826
|
+
try {
|
|
18827
|
+
process.kill(pid, 0);
|
|
18828
|
+
} catch {
|
|
18829
|
+
return;
|
|
18830
|
+
}
|
|
18831
|
+
await sleep(100);
|
|
18832
|
+
}
|
|
18833
|
+
try {
|
|
18834
|
+
process.kill(pid, "SIGKILL");
|
|
18835
|
+
} catch {}
|
|
18836
|
+
}
|
|
18837
|
+
function startMeshBridgeSupervision() {
|
|
18838
|
+
meshBridgeReconcileTimer = setInterval(() => {
|
|
18839
|
+
reconcileMeshBridge();
|
|
18840
|
+
}, MESH_BRIDGE_RECONCILE_INTERVAL_MS);
|
|
18841
|
+
meshBridgeReconcileTimer.unref();
|
|
18842
|
+
reconcileMeshBridge();
|
|
18843
|
+
}
|
|
18494
18844
|
function isChildExited(child) {
|
|
18495
18845
|
return child.exitCode !== null || child.signalCode !== null;
|
|
18496
18846
|
}
|
|
@@ -18498,15 +18848,15 @@ function waitForChildExit(child, timeoutMs) {
|
|
|
18498
18848
|
if (isChildExited(child)) {
|
|
18499
18849
|
return Promise.resolve(true);
|
|
18500
18850
|
}
|
|
18501
|
-
return new Promise((
|
|
18851
|
+
return new Promise((resolve5) => {
|
|
18502
18852
|
const timeout = setTimeout(() => {
|
|
18503
18853
|
child.off("exit", onExit);
|
|
18504
|
-
|
|
18854
|
+
resolve5(false);
|
|
18505
18855
|
}, timeoutMs);
|
|
18506
18856
|
timeout.unref();
|
|
18507
18857
|
const onExit = () => {
|
|
18508
18858
|
clearTimeout(timeout);
|
|
18509
|
-
|
|
18859
|
+
resolve5(true);
|
|
18510
18860
|
};
|
|
18511
18861
|
child.once("exit", onExit);
|
|
18512
18862
|
});
|
|
@@ -18550,10 +18900,15 @@ async function shutdown(exitCode = 0) {
|
|
|
18550
18900
|
clearInterval(pairingReconcileTimer);
|
|
18551
18901
|
pairingReconcileTimer = null;
|
|
18552
18902
|
}
|
|
18903
|
+
if (meshBridgeReconcileTimer) {
|
|
18904
|
+
clearInterval(meshBridgeReconcileTimer);
|
|
18905
|
+
meshBridgeReconcileTimer = null;
|
|
18906
|
+
}
|
|
18553
18907
|
const activeCaddyProcess = caddyProcess;
|
|
18554
18908
|
stopEdgeProcesses();
|
|
18555
18909
|
await Promise.all([
|
|
18556
18910
|
stopPairingController(),
|
|
18911
|
+
terminateChildProcess(meshBridgeProcess, "mesh bridge", MESH_BRIDGE_STOP_TIMEOUT_MS),
|
|
18557
18912
|
terminateChildProcess(brokerProcess, "broker"),
|
|
18558
18913
|
terminateChildProcess(activeCaddyProcess, "local edge", 2000)
|
|
18559
18914
|
]);
|
|
@@ -18612,5 +18967,6 @@ await startJetStreamSidecar();
|
|
|
18612
18967
|
spawnBroker();
|
|
18613
18968
|
startLocalEdge();
|
|
18614
18969
|
startPairingSupervision();
|
|
18970
|
+
startMeshBridgeSupervision();
|
|
18615
18971
|
startMenuBarApp();
|
|
18616
18972
|
startWebWhenBrokerIsReady();
|