@openscout/scout 0.2.86 → 0.2.90
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 +10 -5
- package/bin/scoutd +0 -0
- package/dist/build-manifest.json +4 -4
- package/dist/client/assets/ActivityScreen-BUeb4ERK.js +1 -0
- package/dist/client/assets/{AddProjectForm-BNRpRPod.js → AddProjectForm-DtTfn4Zk.js} +1 -1
- package/dist/client/assets/AgentAvatar-CneOa70z.js +1 -0
- package/dist/client/assets/AgentConfigurationScreen-CkZ7EjZh.js +1 -0
- package/dist/client/assets/AgentDefinitionsWorkspace-0Y3kqMtv.js +1 -0
- package/dist/client/assets/{AgentDetailCard-FelCxQrT.js → AgentDetailCard-Dtc02KUO.js} +1 -1
- package/dist/client/assets/AgentFloorView-B5raPB_U.js +1 -0
- package/dist/client/assets/AgentInfoScreen-DFG4ElZD.js +1 -0
- package/dist/client/assets/{AgentLaneCard-CRDG74C1.js → AgentLaneCard-BRAkw8YJ.js} +1 -1
- package/dist/client/assets/{AgentLaneChrome-CWFqUdch.js → AgentLaneChrome-T8QE5742.js} +1 -1
- package/dist/client/assets/AgentLaneDetailSheet-C8RYotnv.js +4 -0
- package/dist/client/assets/{AgentLaneSummaryResize-yTM4GQAJ.js → AgentLaneSummaryResize-FyYweLo_.js} +1 -1
- package/dist/client/assets/AgentLanesEmbedScreen-Br7cmZVO.js +1 -0
- package/dist/client/assets/{AgentLanesPreflight-DJeDRTAN.js → AgentLanesPreflight-Cil3dNwu.js} +1 -1
- package/dist/client/assets/AgentLanesView-DPfO8MOo.js +2 -0
- package/dist/client/assets/{AgentLiveActions-Bn3zeZBN.js → AgentLiveActions-DwScaVRF.js} +1 -1
- package/dist/client/assets/AgentSessions-DKoWA0Lm.js +6 -0
- package/dist/client/assets/AgentsConsole-DoBIWGoq.js +1 -0
- package/dist/client/assets/AgentsScreen-JuUiSuwY.js +1 -0
- package/dist/client/assets/AgentsSubnav-BV0WAgzf.js +1 -0
- package/dist/client/assets/{AtopView-DymBCiXv.js → AtopView-ycxMrRwp.js} +1 -1
- package/dist/client/assets/BackToPicker-D6WgIDb-.js +1 -0
- package/dist/client/assets/BriefingDetailScreen-Zw-taW1s.js +6 -0
- package/dist/client/assets/{BriefingsScreen-CLvSOJjy.js → BriefingsScreen-BerYOoWS.js} +1 -1
- package/dist/client/assets/{BrokerMetadataPanel-DFAH-NO6.js → BrokerMetadataPanel-Cu93j-Ga.js} +1 -1
- package/dist/client/assets/BrokerScreen-CeN90URH.js +5 -0
- package/dist/client/assets/ChatCollapsedStrip-DdKyMSEM.js +1 -0
- package/dist/client/assets/{CodeDiffPane-C9HT1dCT.js → CodeDiffPane-BjCOBLze.js} +1 -1
- package/dist/client/assets/{CodeProjectPicker-5Y3GvXkM.js → CodeProjectPicker-NSGdCaK0.js} +1 -1
- package/dist/client/assets/{CodeScreen-DpN9kQvm.js → CodeScreen-CA9Sq6Dx.js} +1 -1
- package/dist/client/assets/ContextMenu-DnFcmfMR.js +1 -0
- package/dist/client/assets/ConversationComposer-CjRXFkvY.js +1 -0
- package/dist/client/assets/ConversationFeedRows-CgRTIpAv.js +1 -0
- package/dist/client/assets/ConversationHeader-CRmdtuL7.js +1 -0
- package/dist/client/assets/ConversationPanels-DCkcLIHk.js +2 -0
- package/dist/client/assets/ConversationScreen-Br0QQ3xo.js +1 -0
- package/dist/client/assets/ConversationScreen-yIKEsm-8.css +1 -0
- package/dist/client/assets/ConversationStatus-BJ1CMbAv.js +1 -0
- package/dist/client/assets/{DataTable-oJP339bX.js → DataTable-Dzqiaha4.js} +1 -1
- package/dist/client/assets/{DispatchAftermath-CH02HAVw.js → DispatchAftermath-B0WMg_z3.js} +1 -1
- package/dist/client/assets/DocumentFocusViewer-CZVVIAD5.js +1 -0
- package/dist/client/assets/{EmbeddableSurfacesLab-84b9I3fy.js → EmbeddableSurfacesLab-C3a7hJWO.js} +1 -1
- package/dist/client/assets/{EmptyState-BnDda92b.js → EmptyState-CYNJZMrZ.js} +1 -1
- package/dist/client/assets/{FileViewerPane-Dg7_88pv.js → FileViewerPane-Fwt8_KmD.js} +1 -1
- package/dist/client/assets/FleetSearch-Dsi_l2KW.js +1 -0
- package/dist/client/assets/FleetSearch-EXOe8ulE.css +1 -0
- package/dist/client/assets/FlightObserveScreen-g_tiGmvz.js +1 -0
- package/dist/client/assets/{FollowScreen-DcFBqr6l.js → FollowScreen-Bb_rcrzi.js} +1 -1
- package/dist/client/assets/{HarnessMark-DGZ6o6Ct.js → HarnessMark-DrE57dUq.js} +1 -1
- package/dist/client/assets/HarnessesScreen-CAsCJ_tG.js +1 -0
- package/dist/client/assets/{HerdrSession-DV2hD6Yh.js → HerdrSession-1eVu9Owj.js} +1 -1
- package/dist/client/assets/HomeHero-DEl-WBsT.css +1 -0
- package/dist/client/assets/HomeHero-W445QrG1.js +1 -0
- package/dist/client/assets/{KnowledgeSearchInspector-DNQjeWZO.js → KnowledgeSearchInspector-CbPVg3fr.js} +1 -1
- package/dist/client/assets/KnowledgeSearchScreen-C1lN1xJk.js +1 -0
- package/dist/client/assets/{LaneToolHoverCard-197xYmRp.js → LaneToolHoverCard-BkBcDYm-.js} +1 -1
- package/dist/client/assets/LaneTraceDetailSheet-CzTd44rf.js +1 -0
- package/dist/client/assets/{LaneTraceEventFocus-C9cmqxnK.js → LaneTraceEventFocus-BmMmPTyJ.js} +1 -1
- package/dist/client/assets/{MeshCanvas-C3_2p9B6.js → MeshCanvas-DwkjsiJ5.js} +2 -2
- package/dist/client/assets/{MeshCanvasMinimap-ZTjYWXTZ.js → MeshCanvasMinimap-vmCpU1sD.js} +1 -1
- package/dist/client/assets/MeshScreen-CkMepUpT.js +1 -0
- package/dist/client/assets/{MeshTopologyView-CBjHbAZw.js → MeshTopologyView-BD2xLE2C.js} +2 -2
- package/dist/client/assets/MessageComposerSuggestions-qbalTne_.js +1 -0
- package/dist/client/assets/MessagesScreen-C8UynyLC.js +1 -0
- package/dist/client/assets/{MissionContextRail-DXkrbcnZ.js → MissionContextRail-D5MEP2f4.js} +1 -1
- package/dist/client/assets/MissionControlView-K_I7eftL.js +1 -0
- package/dist/client/assets/MissionFocusOverlay-CWKLdUKG.js +1 -0
- package/dist/client/assets/MissionLeftAgentRow-ByGrNAcs.js +1 -0
- package/dist/client/assets/MissionLogPane-ZwHJ137T.js +1 -0
- package/dist/client/assets/{NewAgentModal-C18Ajovd.js → NewAgentModal-Do9aVvan.js} +1 -1
- package/dist/client/assets/NewChatComposer-DKlNX1UA.js +19 -0
- package/dist/client/assets/{NewChatOrigin-DpHS2Wmt.js → NewChatOrigin-DXPvX-hh.js} +1 -1
- package/dist/client/assets/ObserveEmbedScreen-Dghsq2on.js +2 -0
- package/dist/client/assets/ObserveTextFlow-DWNlmTVm.js +2 -0
- package/dist/client/assets/ObservedTopologyPanel-BlmGoxCE.js +2 -0
- package/dist/client/assets/OpenScoutAppShell-DDqQi-oe.js +87 -0
- package/dist/client/assets/OpsAgentsView-Bn_fGBdo.js +1 -0
- package/dist/client/assets/OpsScreen-DHnT-Q9R.js +1 -0
- package/dist/client/assets/OpsSubnav-CJRD7MjM.js +1 -0
- package/dist/client/assets/PlanView-B6gKo543.js +1 -0
- package/dist/client/assets/ProjectAgentProfile-Be1VOkI4.js +1 -0
- package/dist/client/assets/{ProjectAgentProfileBar-IDEpKZvI.js → ProjectAgentProfileBar-C5QWwZCn.js} +1 -1
- package/dist/client/assets/ProjectAgentProfileHero-DC7Dd8VL.js +1 -0
- package/dist/client/assets/ProjectsInbox-DCLrDmj1.js +2 -0
- package/dist/client/assets/ProjectsRail-C4hiXYSb.js +1 -0
- package/dist/client/assets/ProjectsScreen-jruZRjgD.js +1 -0
- package/dist/client/assets/ProjectsThreadAside-DYmL2dCY.js +1 -0
- package/dist/client/assets/Provider-p-xuaAoE.js +1 -0
- package/dist/client/assets/RailRow-Cf9LOiEj.css +1 -0
- package/dist/client/assets/RailRow-bRkkXIpR.js +1 -0
- package/dist/client/assets/RawSessionsTable-B7WKmXrk.js +1 -0
- package/dist/client/assets/RealtimeVoiceScreen-BzP3BQq9.js +1 -0
- package/dist/client/assets/{RepoDiffEmbedScreen-C97Euf4s.js → RepoDiffEmbedScreen-xjzjcJ_c.js} +1 -1
- package/dist/client/assets/{RepoDiffPageScreen-DUKLzkrW.js → RepoDiffPageScreen-DRzIY-dk.js} +1 -1
- package/dist/client/assets/RepoDiffViewer-CNDp01KM.js +7 -0
- package/dist/client/assets/RepoDiffViewerLazy-b6vjYxez.js +2 -0
- package/dist/client/assets/{ReposScreen-BR1LqTf1.js → ReposScreen-CpaLC_NU.js} +6 -6
- package/dist/client/assets/ScoutDeckSurface-DkpZ-0DH.js +1 -0
- package/dist/client/assets/{ScoutSurface-BMKW7hSu.js → ScoutSurface-BENBUt5-.js} +1 -1
- package/dist/client/assets/ScoutbotBroadcastChip-CGZyxS5H.js +2 -0
- package/dist/client/assets/{agent-autocomplete-C7xwIcwd.css → ScoutbotBroadcastChip-CxtYZWPZ.css} +1 -1
- package/dist/client/assets/{ScoutbotFxLab-0O2iDRrF.js → ScoutbotFxLab-Bk2ZsfPp.js} +1 -1
- package/dist/client/assets/ScoutbotRealtimeVoiceCall-n63LdBZs.js +1 -0
- package/dist/client/assets/{SecondaryNav-cYTw2p39.js → SecondaryNav-B4IsujYh.js} +1 -1
- package/dist/client/assets/{SessionEmbedScreen-mNjT0R6j.js → SessionEmbedScreen-CPfH-jqN.js} +1 -1
- package/dist/client/assets/{SessionObserve-zAlFbwFn.js → SessionObserve-B-SkP3tu.js} +1 -1
- package/dist/client/assets/{SessionObserveEvidence-BVawzqoE.js → SessionObserveEvidence-CF5jnH3-.js} +1 -1
- package/dist/client/assets/SessionRefScreen-C-4jjmVG.js +1 -0
- package/dist/client/assets/SessionsScreen-HAjFvmIq.js +1 -0
- package/dist/client/assets/SettingsDrawer-DATxwZrn.js +3 -0
- package/dist/client/assets/SettingsDrawer-UX7pFJU_.css +1 -0
- package/dist/client/assets/SettingsScreen-Bu53X7J_.js +1 -0
- package/dist/client/assets/{ShikiPane-DyEJdcvb.js → ShikiPane-DH8yYDks.js} +1 -1
- package/dist/client/assets/{SlidePanel-Dg8_styW.js → SlidePanel-RFXJpfUa.js} +1 -1
- package/dist/client/assets/{SpriteAvatar-DMrSssNZ.js → SpriteAvatar-CEYdCzem.js} +1 -1
- package/dist/client/assets/{StatusPill-NFFnphtx.js → StatusPill-9uy70ttd.js} +1 -1
- package/dist/client/assets/{TailView-BfObcZu3.js → TailView-6bIrgdxN.js} +2 -2
- package/dist/client/assets/Terminal-BI6km7H4.js +1 -0
- package/dist/client/assets/TerminalEmbedScreen-D4JOWwtm.js +1 -0
- package/dist/client/assets/{TextDocumentSurface-C7fGlzY8.js → TextDocumentSurface-BcP9vvji.js} +1 -1
- package/dist/client/assets/{TmuxPeek-BSeKIjnX.js → TmuxPeek-IaWqCgyJ.js} +1 -1
- package/dist/client/assets/{VoicePermissionsPanel-BkIGTzgw.js → VoicePermissionsPanel-C80iZxgy.js} +1 -1
- package/dist/client/assets/{WorkDetailScreen-Cwe-KWK4.js → WorkDetailScreen-CweZ6fEd.js} +3 -3
- package/dist/client/assets/WorkFilesViewer-Dy_-06iI.js +1 -0
- package/dist/client/assets/{activity-D4W2XZY2.js → activity-DS0u0Itf.js} +1 -1
- package/dist/client/assets/{addon-fit-Celjj2yn.js → addon-fit-CN888B3D.js} +1 -1
- package/dist/client/assets/{addon-webgl-Cu4tJ21-.js → addon-webgl-CoAnanQS.js} +1 -1
- package/dist/client/assets/{agent-essentials-CngjUhQj.js → agent-essentials-CuK4G_zS.js} +1 -1
- package/dist/client/assets/agent-identity-BxCsXnDp.js +1 -0
- package/dist/client/assets/{agent-lane-card-model-CSugZCdy.js → agent-lane-card-model-q4cwzLX4.js} +1 -1
- package/dist/client/assets/{agent-lane-detail-D5EIlX7_.js → agent-lane-detail-BNNm6FNu.js} +1 -1
- package/dist/client/assets/{agent-lane-preview-BhplDYGf.js → agent-lane-preview-C33Dwpn7.js} +1 -1
- package/dist/client/assets/{agent-lanes-DlqcEf0l.css → agent-lanes-BDNktFBZ.css} +1 -1
- package/dist/client/assets/{agent-lanes-model-BKOs_32K.js → agent-lanes-model-VYQ5a68i.js} +2 -2
- package/dist/client/assets/{api-BHHEUSS3.js → api-BkjHJfgJ.js} +1 -1
- package/dist/client/assets/api-h5zurxmi.js +1 -0
- package/dist/client/assets/{arc.es-DNT50Y-_.js → arc.es-BET9ev6q.js} +1 -1
- package/dist/client/assets/arrow-down-DxxPnPwh.js +1 -0
- package/dist/client/assets/{arrow-left-i-h6JAgs.js → arrow-left-CXDkJuCg.js} +1 -1
- package/dist/client/assets/{arrow-up-right-RBC6k8nn.js → arrow-up-right-Bj8RjSqW.js} +1 -1
- package/dist/client/assets/{bot-r2IuAuJd.js → bot-BSGSicKC.js} +1 -1
- package/dist/client/assets/broker-display-pp33bLsu.js +2 -0
- package/dist/client/assets/{cache-BO2Bd_LV.js → cache-Dr0why2k.js} +1 -1
- package/dist/client/assets/{check-Bfs7hMb1.js → check-BfA0T8UD.js} +1 -1
- package/dist/client/assets/{chevron-down-Da5tV19_.js → chevron-down-BVg09D6U.js} +1 -1
- package/dist/client/assets/{chevron-right-BMqtBds_.js → chevron-right-CaEwYkxE.js} +1 -1
- package/dist/client/assets/{chunk-HRAB3GC3-BUVYXXAp.js → chunk-HRAB3GC3-HhKwnZCi.js} +1 -1
- package/dist/client/assets/chunk-JTPDIGGW-DX2eTIQ_.js +46 -0
- package/dist/client/assets/chunk-T65CQEWV-D-bOfuCH.js +1 -0
- package/dist/client/assets/chunk-YOZR3KYS-oS9dlQCI.js +2 -0
- package/dist/client/assets/{clock-DaKLp6Xd.js → clock-C3TUL7D7.js} +1 -1
- package/dist/client/assets/{code-xml-ByQsfOI_.js → code-xml-Dbvjk9Kw.js} +1 -1
- package/dist/client/assets/collapsed-strip-Dz-of2SM.css +1 -0
- package/dist/client/assets/content-BQuEedeL.js +1 -0
- package/dist/client/assets/content-BUae-L_N.js +1 -0
- package/dist/client/assets/content-BfG98J1k.js +1 -0
- package/dist/client/assets/content-BkVTfkAC.js +1 -0
- package/dist/client/assets/content-BsNMos_d.js +1 -0
- package/dist/client/assets/content-C2TZOKSE.js +1 -0
- package/dist/client/assets/content-CCn98eSk.js +1 -0
- package/dist/client/assets/content-CJuH5cDP.js +1 -0
- package/dist/client/assets/content-CYnPp9yo.js +1 -0
- package/dist/client/assets/content-CcrUhm4P.js +1 -0
- package/dist/client/assets/content-CiOMtgQc.js +1 -0
- package/dist/client/assets/content-CxuVONeQ.js +1 -0
- package/dist/client/assets/content-Dmq9n1_L.js +1 -0
- package/dist/client/assets/content-DskHP2NI.js +1 -0
- package/dist/client/assets/content-DvvzL2HK.js +1 -0
- package/dist/client/assets/content-snCAUbwv.js +1 -0
- package/dist/client/assets/{conversation-icons-C4amK8Sa.js → conversation-icons-DmC_Ak3z.js} +1 -1
- package/dist/client/assets/conversation-model-CHwHZNw-.js +1 -0
- package/dist/client/assets/conversation-motion-features-DPiGTO21.js +1 -0
- package/dist/client/assets/{copy-De4s38o2.js → copy-C79v_7D-.js} +1 -1
- package/dist/client/assets/{createLucideIcon-DLlxGjKt.js → createLucideIcon-DCq_3fQn.js} +1 -1
- package/dist/client/assets/ctx-panel-B4s49N9e.css +1 -0
- package/dist/client/assets/discover-IEnbrH8_.js +2 -0
- package/dist/client/assets/embed-entry-XUPb-AzL.js +2 -0
- package/dist/client/assets/{external-link-BGHC_naA.js → external-link-Dd8xaveL.js} +1 -1
- package/dist/client/assets/{eye-BeCSqJn1.js → eye-DkU59kfl.js} +1 -1
- package/dist/client/assets/{file-text-BVhkMWyC.js → file-text-BITQqGtF.js} +1 -1
- package/dist/client/assets/gestures-B5rLNRpi.js +1 -0
- package/dist/client/assets/home-moving-signal-Bs635mVw.js +1 -0
- package/dist/client/assets/home-moving-signal-CAa0V91u.css +1 -0
- package/dist/client/assets/home-now-card-VxlLjg1A.js +1 -0
- package/dist/client/assets/{home-now-card-nano-Djhy6ax0.js → home-now-card-nano-C06GMiwD.js} +1 -1
- package/dist/client/assets/hooks-BWiLxTw1.js +2 -0
- package/dist/client/assets/index-9as_JTUs.css +1 -0
- package/dist/client/assets/index-BTj2MguM.js +1 -0
- package/dist/client/assets/index-BZovGpDk.js +10 -0
- package/dist/client/assets/index-CvF09yvf.css +1 -0
- package/dist/client/assets/index-DiiEQwdc.js +1 -0
- package/dist/client/assets/index-vbaJ8sin.js +1 -0
- package/dist/client/assets/inspector-panel-C96HcyK5.js +2 -0
- package/dist/client/assets/{keyboard-nav-7iEtvu9P.js → keyboard-nav-CHo_xmjw.js} +1 -1
- package/dist/client/assets/{lane-observe-vfyACHi0.js → lane-observe-BA3g9aVd.js} +1 -1
- package/dist/client/assets/{lane-roster-store-pHT3TAVs.js → lane-roster-store-B6ybJlHJ.js} +1 -1
- package/dist/client/assets/left-Bk3XnxPD.css +1 -0
- package/dist/client/assets/left-BuJ0wJW1.js +2 -0
- package/dist/client/assets/left-C6Zj3cR4.js +1 -0
- package/dist/client/assets/left-CCoobxPS.css +1 -0
- package/dist/client/assets/left-COMAiMfB.js +2 -0
- package/dist/client/assets/left-Ce4WKYPK.js +1 -0
- package/dist/client/assets/left-DMJkmJOF.js +1 -0
- package/dist/client/assets/left-DrCbY6ja.js +1 -0
- package/dist/client/assets/left-agents-BuSyVNGE.js +1 -0
- package/dist/client/assets/left-default-DRHywOKX.js +1 -0
- package/dist/client/assets/left-l92tw5Kc.js +1 -0
- package/dist/client/assets/left-lanes-4-aUyyrV.js +1 -0
- package/dist/client/assets/left-mission-e849d_Td.js +1 -0
- package/dist/client/assets/left-plan-MchYwAB_.js +2 -0
- package/dist/client/assets/library-DygjpA6u.js +1 -0
- package/dist/client/assets/{loader-circle-DoT8gpw6.js → loader-circle-B-l2Wj3-.js} +1 -1
- package/dist/client/assets/{local-agents-BMadXuP1.js → local-agents-Wof5knTJ.js} +1 -1
- package/dist/client/assets/{mentions-Cd6XticV.js → mentions-BjXfeF7t.js} +1 -1
- package/dist/client/assets/{mesh-ops-C0zCLTR8.js → mesh-ops-C1gq8zKf.js} +1 -1
- package/dist/client/assets/{mesh-view-store-Cpqil_2D.js → mesh-view-store-B56D3f77.js} +1 -1
- package/dist/client/assets/{message-circle-44KSmbvQ.js → message-circle-BwVx5X0q.js} +1 -1
- package/dist/client/assets/{message-markup-DAnnGpWr.js → message-markup-DlVX-iuc.js} +1 -1
- package/dist/client/assets/{message-square-DlY4EneU.js → message-square-BnkG6tae.js} +1 -1
- package/dist/client/assets/mission-control-m3BTDQ9l.css +1 -0
- package/dist/client/assets/{mission-control-store-DtjtRs9Z.js → mission-control-store-CMgIVjLJ.js} +1 -1
- package/dist/client/assets/model-Co0zkMIc.js +1 -0
- package/dist/client/assets/{observe-DL5_8-Zj.js → observe-DVHAcIrv.js} +1 -1
- package/dist/client/assets/{operator-attention-BqoWAlhp.js → operator-attention-BwSPeheT.js} +1 -1
- package/dist/client/assets/{page-status-CW8co39E.js → page-status-Bg2hd27j.js} +1 -1
- package/dist/client/assets/paperclip-DblaLD_N.js +1 -0
- package/dist/client/assets/plan-view-D56fneVF.css +1 -0
- package/dist/client/assets/{plus-64n9qucr.js → plus-BAI0t5g9.js} +1 -1
- package/dist/client/assets/profile-3Q4sUtvJ.js +1 -0
- package/dist/client/assets/projects-inbox-Da2hYEn6.js +1 -0
- package/dist/client/assets/{radio-BjpQTKT0.js → radio-BGtkyCG9.js} +1 -1
- package/dist/client/assets/{refresh-cw-IgN2fZLM.js → refresh-cw-DtF8xPqX.js} +1 -1
- package/dist/client/assets/resolve-panes-D4tlKNCT.js +1 -0
- package/dist/client/assets/resolve-sidebar-context-B27lj3Ci.js +1 -0
- package/dist/client/assets/right-B8qg3JdB.js +1 -0
- package/dist/client/assets/{right-B96CBzrV.js → right-BU_W1kSH.js} +1 -1
- package/dist/client/assets/right-BlR7h0US.js +1 -0
- package/dist/client/assets/right-BwgwTGGd.js +1 -0
- package/dist/client/assets/right-ByptvkVX.js +1 -0
- package/dist/client/assets/right-CUP-NIDG.js +1 -0
- package/dist/client/assets/right-Ch_jrNe2.js +1 -0
- package/dist/client/assets/right-Dd2DscRz.js +1 -0
- package/dist/client/assets/right-DmVHd8Xj.js +1 -0
- package/dist/client/assets/{right-DqiVyo8v.js → right-c4PAdFYZ.js} +1 -1
- package/dist/client/assets/{rocket-DnmN_YOD.js → rocket-BWh18pt_.js} +1 -1
- package/dist/client/assets/router-63XV_E7f.js +1 -0
- package/dist/client/assets/{text-BR9Bap0E.js → runtime-picker-BXKJbLot.js} +1 -1
- package/dist/client/assets/runtime-picker-vhm0gtLs.css +1 -0
- package/dist/client/assets/{scope-views-Z8aoAmtU.js → scope-views-Dm2_-NPi.js} +1 -1
- package/dist/client/assets/scout-voice-D8Q5sZOL.js +1 -0
- package/dist/client/assets/{scoutbot-D4vuKzOL.js → scoutbot-BTIErYHo.js} +2 -2
- package/dist/client/assets/{scroll-text-DRidbcse.js → scroll-text-DZb3mmYo.js} +1 -1
- package/dist/client/assets/{search-BbgsEMXa.js → search-1QMVOxF3.js} +1 -1
- package/dist/client/assets/secondaryNavConfig-c0cz3MkJ.js +1 -0
- package/dist/client/assets/{selection-bridge-CpzFGx3-.js → selection-bridge-O9C4kGfF.js} +1 -1
- package/dist/client/assets/{send-horizontal-BXo2uz3Z.js → send-horizontal-DbyEkGql.js} +1 -1
- package/dist/client/assets/{server-Dt3tpiBj.js → server-Bncn9S7r.js} +1 -1
- package/dist/client/assets/{session-catalog-CUQ8LUJY.js → session-catalog-DC6BlBBC.js} +1 -1
- package/dist/client/assets/{session-table-B4JOKevn.js → session-table-BUPq9Viy.js} +1 -1
- package/dist/client/assets/{sliders-horizontal-7V8B3xsf.js → sliders-horizontal-CMe8Bay1.js} +1 -1
- package/dist/client/assets/{sparkles-ytTwpCbZ.js → sparkles-_7cTZsIH.js} +1 -1
- package/dist/client/assets/{sse-CSozY6mp.js → sse-Bb0EOcU9.js} +1 -1
- package/dist/client/assets/system-surfaces-redesign-B7GQhfpw.css +1 -0
- package/dist/client/assets/{tail-display-DcliDVkW.js → tail-display-BRcJltQa.js} +1 -1
- package/dist/client/assets/{tail-events-CrN-Rmxj.js → tail-events-C12pfUax.js} +1 -1
- package/dist/client/assets/{terminal-relay-pSm7_An6.js → terminal-relay-BgfVJXIL.js} +1 -1
- package/dist/client/assets/{terminal-sessions-D4dHTRkt.js → terminal-sessions-AmSgHklm.js} +1 -1
- package/dist/client/assets/{terminal-takeover-CtA3wcXh.js → terminal-takeover--05EYhJm.js} +1 -1
- package/dist/client/assets/{terminal-BiNIXhna.js → terminal-xGf_F3y7.js} +1 -1
- package/dist/client/assets/text-DsBWV_4k.js +1 -0
- package/dist/client/assets/{use-conversation-list-C0bEXFeH.js → use-conversation-list-DWX02INv.js} +1 -1
- package/dist/client/assets/{use-fleet-active-asks-CK4aw-3G.js → use-fleet-active-asks-Cnwa4hTK.js} +1 -1
- package/dist/client/assets/{use-mesh-ops-items-QixBijmT.js → use-mesh-ops-items-BRFm37oY.js} +1 -1
- package/dist/client/assets/use-reduced-motion-C8cWvIZ3.js +1 -0
- package/dist/client/assets/use-scout-dev-flags-FkMreOOb.js +1 -0
- package/dist/client/assets/{useAgentHoverCard-6N8b7qsU.js → useAgentHoverCard-DvPZSJK3.js} +1 -1
- package/dist/client/assets/useContentSecondaryNav-CNlrhvvx.js +1 -0
- package/dist/client/assets/{usePierreRuntime-Bq6mXrgd.js → usePierreRuntime-C8WJ0X3F.js} +1 -1
- package/dist/client/assets/{wrench-CQvdf7KT.js → wrench-_tHBGTop.js} +1 -1
- package/dist/client/assets/{x-BJyPzFnn.js → x-CrGUKNRv.js} +1 -1
- package/dist/client/assets/{xterm-D6dE_wMr.js → xterm-Ks-VlLTq.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/main.mjs +38 -169
- package/dist/node/main.mjs +240 -272
- package/dist/pairing-runtime-controller.mjs +476 -394
- package/dist/runtime/base-daemon.mjs +121 -49
- package/dist/runtime/broker-daemon.mjs +60 -171
- package/dist/runtime/broker-process-manager.mjs +0 -6
- package/dist/runtime/mesh-discover.mjs +0 -6
- package/dist/scout-control-plane-web.mjs +477 -672
- package/dist/scout-web-server.mjs +477 -672
- package/package.json +7 -6
- package/dist/client/assets/ActivityScreen-C7AwUogt.js +0 -1
- package/dist/client/assets/AgentAvatar-B1xvQ7ej.js +0 -1
- package/dist/client/assets/AgentConfigurationScreen-BoBQpyz5.js +0 -1
- package/dist/client/assets/AgentDefinitionsWorkspace-rw3vh8Lm.js +0 -1
- package/dist/client/assets/AgentFloorView-Crdw8Uo5.js +0 -1
- package/dist/client/assets/AgentInfoScreen-Cge7HHbV.js +0 -1
- package/dist/client/assets/AgentLaneDetailSheet-DCIIg3Zp.js +0 -4
- package/dist/client/assets/AgentLanesEmbedScreen-BJLwXSNp.js +0 -1
- package/dist/client/assets/AgentLanesView-CbY9qD0z.js +0 -2
- package/dist/client/assets/AgentSessions-czl5zT7A.js +0 -6
- package/dist/client/assets/AgentsConsole-CoT2crwq.js +0 -1
- package/dist/client/assets/AgentsScreen-BcPM-z1T.js +0 -1
- package/dist/client/assets/AgentsSubnav-3_vpn2bT.js +0 -1
- package/dist/client/assets/AstronautSuit-BADl7m8x.js +0 -1
- package/dist/client/assets/BackToPicker-CqYhOaLB.js +0 -1
- package/dist/client/assets/BriefingDetailScreen-DDfZ8ci1.js +0 -1
- package/dist/client/assets/BrokerScreen-Bkvu92jk.js +0 -5
- package/dist/client/assets/Canvas-KyTsDJlB.js +0 -1
- package/dist/client/assets/ChatCollapsedStrip-Bjjqa30K.js +0 -1
- package/dist/client/assets/ConversationComposer-Ce7Byw48.js +0 -1
- package/dist/client/assets/ConversationFeedRows-DygDfQn_.js +0 -1
- package/dist/client/assets/ConversationHeader-C3sg0ULI.js +0 -1
- package/dist/client/assets/ConversationPanels-Dg4Y2GgX.js +0 -6
- package/dist/client/assets/ConversationScreen-BP5tdz2k.css +0 -1
- package/dist/client/assets/ConversationScreen-CjWWmuuh.js +0 -1
- package/dist/client/assets/ConversationStatus-BhVIYQza.js +0 -1
- package/dist/client/assets/CrewWorkspaces-B6YIyw1z.css +0 -1
- package/dist/client/assets/CrewWorkspaces-CDU-wy1Y.js +0 -1
- package/dist/client/assets/DocumentFocusViewer-DmtFisY9.js +0 -1
- package/dist/client/assets/FlightObserveScreen-DL3Xhl0h.js +0 -1
- package/dist/client/assets/HarnessesScreen-DTDL-XaA.js +0 -1
- package/dist/client/assets/HomeHero-7JwycwFY.css +0 -1
- package/dist/client/assets/HomeHero-CENwVZ45.js +0 -1
- package/dist/client/assets/HostAdvisorView-PgiZUkd_.js +0 -1
- package/dist/client/assets/KnowledgeSearchScreen-Bj80IgR0.js +0 -1
- package/dist/client/assets/LaneTraceDetailSheet-BztwvOv9.js +0 -1
- package/dist/client/assets/MeshScreen-lJKaOyGB.js +0 -1
- package/dist/client/assets/MessagesScreen-D6MVLvdg.js +0 -1
- package/dist/client/assets/MissionControlView-BCH-Zsp4.js +0 -1
- package/dist/client/assets/MissionFocusOverlay-DbAliOSF.js +0 -1
- package/dist/client/assets/MissionLeftAgentRow-Bx6Pg8_O.js +0 -1
- package/dist/client/assets/MissionLogPane-D06c29Y8.js +0 -1
- package/dist/client/assets/NewChatComposer-Bgqes0UQ.js +0 -19
- package/dist/client/assets/ObserveEmbedScreen-Cmhwai4X.js +0 -2
- package/dist/client/assets/ObserveTextFlow-C1f5oize.js +0 -2
- package/dist/client/assets/ObservedTopologyPanel-D85P6RAk.js +0 -2
- package/dist/client/assets/OpenScoutAppShell-IDI4fuUE.js +0 -88
- package/dist/client/assets/OpsAgentsView-yt0JavoB.js +0 -1
- package/dist/client/assets/OpsScreen-C3yNQqJE.js +0 -1
- package/dist/client/assets/OpsSubnav-BijKI3yG.js +0 -1
- package/dist/client/assets/ProjectAgentProfile-DnIeC16r.js +0 -1
- package/dist/client/assets/ProjectAgentProfileHero-Bh_aISs-.js +0 -1
- package/dist/client/assets/ProjectsInbox-B8Srlklk.js +0 -2
- package/dist/client/assets/ProjectsRail-DqAbdvCf.js +0 -1
- package/dist/client/assets/ProjectsScreen-DKHQ2iEv.js +0 -1
- package/dist/client/assets/ProjectsThreadAside-DpkjYLL2.js +0 -1
- package/dist/client/assets/Provider-Ve8yXaWR.js +0 -1
- package/dist/client/assets/RailRow-B0sRaJc6.css +0 -1
- package/dist/client/assets/RailRow-C4GNGR80.js +0 -1
- package/dist/client/assets/RawSessionsTable-Co3vzwsf.js +0 -1
- package/dist/client/assets/RealtimeVoiceScreen-DMd1CBAf.js +0 -9
- package/dist/client/assets/RepoDiffViewer-CovKjSgb.js +0 -7
- package/dist/client/assets/RepoDiffViewerLazy-zIiEmh-e.js +0 -2
- package/dist/client/assets/ScoutDeckSurface-BGsVicc2.js +0 -1
- package/dist/client/assets/SessionRefScreen-BmKhf29o.js +0 -1
- package/dist/client/assets/SessionsScreen-CsSqjIY2.js +0 -1
- package/dist/client/assets/SettingsDrawer-Dsj-On_x.css +0 -1
- package/dist/client/assets/SettingsDrawer-DwYQTGi8.js +0 -3
- package/dist/client/assets/SettingsScreen-Btaku7YM.js +0 -1
- package/dist/client/assets/Terminal-Dr-M9U4u.js +0 -1
- package/dist/client/assets/TerminalEmbedScreen-BmyZkonh.js +0 -1
- package/dist/client/assets/TerminalRelay-lJ2KdMCW.js +0 -46
- package/dist/client/assets/WorkFilesViewer-BBtKRBPv.js +0 -1
- package/dist/client/assets/agent-autocomplete-Dv-_9dAw.js +0 -2
- package/dist/client/assets/agent-identity-DzHGhLdJ.js +0 -1
- package/dist/client/assets/agent-specialization-CNrsRbKA.js +0 -1
- package/dist/client/assets/api-DEHEgJ9m.js +0 -1
- package/dist/client/assets/archive-DH49QqFG.js +0 -1
- package/dist/client/assets/arrow-right-B0Yi01Zr.js +0 -1
- package/dist/client/assets/broker-display-Q75fupqG.js +0 -2
- package/dist/client/assets/collapsed-strip-raJWthAH.css +0 -1
- package/dist/client/assets/compass-BepM5iWH.js +0 -1
- package/dist/client/assets/content-5hnDC9WE.js +0 -1
- package/dist/client/assets/content-BRFZ-a6m.js +0 -1
- package/dist/client/assets/content-BYykncDo.js +0 -1
- package/dist/client/assets/content-Be6yyWbJ.js +0 -1
- package/dist/client/assets/content-Bgl_X3ao.js +0 -1
- package/dist/client/assets/content-BopJW1Zx.js +0 -1
- package/dist/client/assets/content-Bv2sfg0w.js +0 -1
- package/dist/client/assets/content-CMBiIZTg.js +0 -1
- package/dist/client/assets/content-CPVqvf5o.js +0 -1
- package/dist/client/assets/content-CbwyFqdI.js +0 -1
- package/dist/client/assets/content-ClQjAWYi.js +0 -1
- package/dist/client/assets/content-Cv2tSAbv.js +0 -1
- package/dist/client/assets/content-DFFe3-Ot.js +0 -1
- package/dist/client/assets/content-DY5hwBmm.js +0 -1
- package/dist/client/assets/content-_IXoxGno.js +0 -1
- package/dist/client/assets/content-j_tewJdE.js +0 -1
- package/dist/client/assets/conversation-model-CigSPlKA.js +0 -1
- package/dist/client/assets/conversation-motion-features-_95aZx_1.js +0 -1
- package/dist/client/assets/cpu-Bc268H9Q.js +0 -1
- package/dist/client/assets/credentials-qwds23lv.js +0 -1
- package/dist/client/assets/ctx-panel-D_HJ3nhb.css +0 -1
- package/dist/client/assets/discover-DOlk1hG7.js +0 -2
- package/dist/client/assets/embed-entry-BqDJfa87.js +0 -2
- package/dist/client/assets/file-code-corner-CX53Cd9y.js +0 -1
- package/dist/client/assets/gauge-CPcEPmNt.js +0 -1
- package/dist/client/assets/gestures-BXIGYk_p.js +0 -1
- package/dist/client/assets/git-branch-q8Ayc8py.js +0 -1
- package/dist/client/assets/home-moving-signal-DMguaRWR.css +0 -1
- package/dist/client/assets/home-moving-signal-Dm2Z2x0p.js +0 -1
- package/dist/client/assets/home-now-card-xU5LGP7q.js +0 -1
- package/dist/client/assets/hooks-CdKx1CxP.js +0 -2
- package/dist/client/assets/host-advisor-B2Fqs5Dd.css +0 -1
- package/dist/client/assets/index-Bli6bTLU.js +0 -10
- package/dist/client/assets/index-D7UEHxaY.js +0 -1
- package/dist/client/assets/index-DFdlQs_c.js +0 -1
- package/dist/client/assets/index-DhfOMK0D.js +0 -1
- package/dist/client/assets/index-DzlEgstl.css +0 -1
- package/dist/client/assets/index-wLwc74Pu.css +0 -1
- package/dist/client/assets/inspector-panel-B8pigRsg.js +0 -2
- package/dist/client/assets/layers-BiZA-Clc.js +0 -1
- package/dist/client/assets/layout-grid-DMpv9CZM.js +0 -1
- package/dist/client/assets/left-BayK4ocL.js +0 -1
- package/dist/client/assets/left-BhZhSrS2.js +0 -1
- package/dist/client/assets/left-BhgU6NOA.js +0 -1
- package/dist/client/assets/left-CY_FGnN7.js +0 -1
- package/dist/client/assets/left-Cq8mjamr.js +0 -1
- package/dist/client/assets/left-DH44V4I_.css +0 -1
- package/dist/client/assets/left-Dnqla0b5.js +0 -2
- package/dist/client/assets/left-Dy403II2.js +0 -2
- package/dist/client/assets/left-R2OOE7VG.css +0 -1
- package/dist/client/assets/left-advisor-oOAtJ9YE.js +0 -1
- package/dist/client/assets/left-agents-TIKe8vW8.js +0 -1
- package/dist/client/assets/left-default-owH0Lwxo.js +0 -1
- package/dist/client/assets/left-lanes-BE_co2lP.js +0 -1
- package/dist/client/assets/left-mission-C_nWUtfA.js +0 -1
- package/dist/client/assets/library-BSVrjn_m.js +0 -1
- package/dist/client/assets/mission-control-CnU7dNt1.css +0 -1
- package/dist/client/assets/persistent-state-DYjP8lqN.js +0 -1
- package/dist/client/assets/profile-BkmuseW7.js +0 -1
- package/dist/client/assets/projects-inbox-C0umZMSY.js +0 -1
- package/dist/client/assets/provider-CX9EWecp.js +0 -1
- package/dist/client/assets/proxy-C35W-YHZ.js +0 -1
- package/dist/client/assets/resolve-panes-CCqRkQdM.js +0 -1
- package/dist/client/assets/resolve-sidebar-context-JkxY8qsV.js +0 -1
- package/dist/client/assets/right-B3PQUHd5.js +0 -1
- package/dist/client/assets/right-BPirlFC8.js +0 -1
- package/dist/client/assets/right-BUP2Ro_M.js +0 -1
- package/dist/client/assets/right-BVWYPIFX.js +0 -1
- package/dist/client/assets/right-BoAJxwA3.js +0 -1
- package/dist/client/assets/right-C2aOC2li.js +0 -1
- package/dist/client/assets/right-CtPJjgOV.js +0 -1
- package/dist/client/assets/right-SfSu0zHC.js +0 -1
- package/dist/client/assets/router-B0YclXYg.js +0 -1
- package/dist/client/assets/scout-voice-DvG_3stJ.js +0 -1
- package/dist/client/assets/scoutbot-markdown-BJJyaPu2.js +0 -6
- package/dist/client/assets/secondaryNavConfig-DyC_P9Wx.js +0 -1
- package/dist/client/assets/settings-BzWCF3NF.js +0 -1
- package/dist/client/assets/system-surfaces-redesign-QVXNeGYw.css +0 -1
- package/dist/client/assets/text-rLpBg4_z.css +0 -1
- package/dist/client/assets/use-reduced-motion-BLn59zLn.js +0 -1
- package/dist/client/assets/use-scout-dev-flags-JKb1EhFh.js +0 -1
- package/dist/client/assets/useContentSecondaryNav-D-hVKzM9.js +0 -1
- package/dist/client/assets/usePersistentState-DOEahRlt.js +0 -1
- package/dist/client/assets/zap-rw7uwZht.js +0 -1
- /package/dist/client/assets/{DocumentFocusViewer-BSC_JwVE.css → document-focus-viewer-BSC_JwVE.css} +0 -0
|
@@ -1827,39 +1827,6 @@ 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
|
|
1863
1830
|
var LOCAL_CONFIG_VERSION = 1;
|
|
1864
1831
|
var DEFAULT_SCOUT_WEB_PORTAL_HOST = "scout.local";
|
|
1865
1832
|
var DEFAULT_SCOUT_WEB_DEV_HOST = `dev.${DEFAULT_SCOUT_WEB_PORTAL_HOST}`;
|
|
@@ -1885,14 +1852,12 @@ var DEFAULT_LOCAL_CONFIG = {
|
|
|
1885
1852
|
}
|
|
1886
1853
|
};
|
|
1887
1854
|
function normalizeLocalHostnameLabel(value) {
|
|
1888
|
-
const
|
|
1889
|
-
const firstLabel = stripped?.trim().replace(/\.local\.?$/i, "").split(".").find((part) => part.trim().length > 0)?.trim();
|
|
1855
|
+
const firstLabel = value?.trim().replace(/\.local\.?$/i, "").split(".").find((part) => part.trim().length > 0)?.trim();
|
|
1890
1856
|
const normalized = firstLabel?.toLowerCase().replace(/[^a-z0-9-]+/g, "-").replace(/^-+|-+$/g, "").replace(/-{2,}/g, "-");
|
|
1891
1857
|
return normalized || "localhost";
|
|
1892
1858
|
}
|
|
1893
1859
|
function normalizeLocalHostname(value) {
|
|
1894
|
-
const
|
|
1895
|
-
const trimmed = stripped?.trim().replace(/\.$/, "").toLowerCase();
|
|
1860
|
+
const trimmed = value?.trim().replace(/\.$/, "").toLowerCase();
|
|
1896
1861
|
const labels = trimmed?.split(".").map((label) => label.trim().replace(/[^a-z0-9-]+/g, "-").replace(/^-+|-+$/g, "").replace(/-{2,}/g, "-")).filter(Boolean);
|
|
1897
1862
|
return labels && labels.length > 0 ? labels.join(".") : "localhost";
|
|
1898
1863
|
}
|
|
@@ -2953,6 +2918,8 @@ if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1] && !pr
|
|
|
2953
2918
|
}
|
|
2954
2919
|
|
|
2955
2920
|
// packages/runtime/src/pairing-supervisor.ts
|
|
2921
|
+
import { execFileSync as execFileSync2 } from "child_process";
|
|
2922
|
+
import { randomUUID } from "crypto";
|
|
2956
2923
|
import {
|
|
2957
2924
|
existsSync as existsSync6,
|
|
2958
2925
|
mkdirSync as mkdirSync3,
|
|
@@ -2965,7 +2932,9 @@ import { homedir as homedir6 } from "os";
|
|
|
2965
2932
|
import { dirname as dirname4, join as join6 } from "path";
|
|
2966
2933
|
var SCOUT_PAIRING_SUPERVISOR_INTENT_FILE = "supervisor.json";
|
|
2967
2934
|
var SCOUT_PAIRING_RUNTIME_PID_FILE = "runtime.pid";
|
|
2935
|
+
var SCOUT_PAIRING_RUNTIME_OWNER_FILE = "runtime-owner.json";
|
|
2968
2936
|
var SCOUT_PAIRING_SUPERVISOR_PID_FILE = "supervisor.pid";
|
|
2937
|
+
var SCOUT_PAIRING_RUNTIME_PROCESS_MARKER = "pairing-runtime-controller";
|
|
2969
2938
|
function resolveScoutPairingSupervisorPaths(env = process.env) {
|
|
2970
2939
|
const configuredRoot = env.OPENSCOUT_PAIRING_HOME?.trim() || env.SCOUT_PAIRING_HOME?.trim();
|
|
2971
2940
|
const rootDir = configuredRoot || join6(homedir6(), ".scout", "pairing");
|
|
@@ -2973,6 +2942,7 @@ function resolveScoutPairingSupervisorPaths(env = process.env) {
|
|
|
2973
2942
|
rootDir,
|
|
2974
2943
|
intentPath: join6(rootDir, SCOUT_PAIRING_SUPERVISOR_INTENT_FILE),
|
|
2975
2944
|
runtimePidPath: join6(rootDir, SCOUT_PAIRING_RUNTIME_PID_FILE),
|
|
2945
|
+
runtimeOwnerPath: join6(rootDir, SCOUT_PAIRING_RUNTIME_OWNER_FILE),
|
|
2976
2946
|
supervisorPidPath: join6(rootDir, SCOUT_PAIRING_SUPERVISOR_PID_FILE)
|
|
2977
2947
|
};
|
|
2978
2948
|
}
|
|
@@ -3012,6 +2982,84 @@ function isScoutPairingProcessRunning(pid) {
|
|
|
3012
2982
|
return error.code === "EPERM";
|
|
3013
2983
|
}
|
|
3014
2984
|
}
|
|
2985
|
+
function isScoutPairingRuntimeOwnerPidRunning(owner, expectedPid, options = {}) {
|
|
2986
|
+
if (!owner || expectedPid === null || owner.pid !== expectedPid)
|
|
2987
|
+
return false;
|
|
2988
|
+
return (options.isRunning ?? isScoutPairingProcessRunning)(expectedPid);
|
|
2989
|
+
}
|
|
2990
|
+
function inspectScoutPairingProcess(pid) {
|
|
2991
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
2992
|
+
return null;
|
|
2993
|
+
try {
|
|
2994
|
+
const output = execFileSync2("ps", ["-p", String(pid), "-o", "lstart=", "-o", "command="], {
|
|
2995
|
+
encoding: "utf8",
|
|
2996
|
+
stdio: ["ignore", "pipe", "ignore"]
|
|
2997
|
+
}).trim();
|
|
2998
|
+
const startedAt = output.slice(0, 24).trim().replace(/\s+/g, " ");
|
|
2999
|
+
const command = output.slice(24).trim();
|
|
3000
|
+
return startedAt && command ? { pid, startedAt, command } : null;
|
|
3001
|
+
} catch {
|
|
3002
|
+
return null;
|
|
3003
|
+
}
|
|
3004
|
+
}
|
|
3005
|
+
function readScoutPairingRuntimeOwner(ownerPath = resolveScoutPairingSupervisorPaths().runtimeOwnerPath) {
|
|
3006
|
+
if (!existsSync6(ownerPath))
|
|
3007
|
+
return null;
|
|
3008
|
+
try {
|
|
3009
|
+
const value = JSON.parse(readFileSync5(ownerPath, "utf8"));
|
|
3010
|
+
return value.version === 1 && Number.isInteger(value.pid) && (value.pid ?? 0) > 0 && typeof value.token === "string" && value.token.length >= 16 && typeof value.startedAt === "string" && value.startedAt.length > 0 && typeof value.command === "string" && value.command.includes(SCOUT_PAIRING_RUNTIME_PROCESS_MARKER) && typeof value.claimedAt === "number" && Number.isFinite(value.claimedAt) ? value : null;
|
|
3011
|
+
} catch {
|
|
3012
|
+
return null;
|
|
3013
|
+
}
|
|
3014
|
+
}
|
|
3015
|
+
function isScoutPairingRuntimeOwnerLive(owner, options = {}) {
|
|
3016
|
+
if (!owner || options.expectedToken && owner.token !== options.expectedToken)
|
|
3017
|
+
return false;
|
|
3018
|
+
const current = (options.inspect ?? inspectScoutPairingProcess)(owner.pid);
|
|
3019
|
+
return current !== null && current.startedAt === owner.startedAt && current.command === owner.command && current.command.includes(SCOUT_PAIRING_RUNTIME_PROCESS_MARKER);
|
|
3020
|
+
}
|
|
3021
|
+
function readLiveScoutPairingRuntimeOwner(ownerPath = resolveScoutPairingSupervisorPaths().runtimeOwnerPath, options = {}) {
|
|
3022
|
+
const owner = readScoutPairingRuntimeOwner(ownerPath);
|
|
3023
|
+
return isScoutPairingRuntimeOwnerLive(owner, options) ? owner : null;
|
|
3024
|
+
}
|
|
3025
|
+
function claimScoutPairingRuntimeOwnership(options = {}) {
|
|
3026
|
+
const pid = options.pid ?? process.pid;
|
|
3027
|
+
const ownerPath = options.ownerPath ?? resolveScoutPairingSupervisorPaths().runtimeOwnerPath;
|
|
3028
|
+
const inspect = options.inspect ?? inspectScoutPairingProcess;
|
|
3029
|
+
const existing = readLiveScoutPairingRuntimeOwner(ownerPath, { inspect });
|
|
3030
|
+
if (existing && existing.pid !== pid) {
|
|
3031
|
+
throw new Error(`Scout pairing runtime is already owned by pid ${existing.pid}.`);
|
|
3032
|
+
}
|
|
3033
|
+
const identity = inspect(pid);
|
|
3034
|
+
if (!identity || !identity.command.includes(SCOUT_PAIRING_RUNTIME_PROCESS_MARKER)) {
|
|
3035
|
+
throw new Error(`Cannot prove Scout pairing runtime ownership for pid ${pid}.`);
|
|
3036
|
+
}
|
|
3037
|
+
const owner = {
|
|
3038
|
+
version: 1,
|
|
3039
|
+
...identity,
|
|
3040
|
+
token: options.token?.trim() || randomUUID(),
|
|
3041
|
+
claimedAt: options.now ?? Date.now()
|
|
3042
|
+
};
|
|
3043
|
+
mkdirSync3(dirname4(ownerPath), { recursive: true });
|
|
3044
|
+
writeFileAtomically(ownerPath, `${JSON.stringify(owner, null, 2)}
|
|
3045
|
+
`);
|
|
3046
|
+
return owner;
|
|
3047
|
+
}
|
|
3048
|
+
function signalScoutPairingRuntimeOwner(owner, signal, options = {}) {
|
|
3049
|
+
const ownerPath = options.ownerPath ?? resolveScoutPairingSupervisorPaths().runtimeOwnerPath;
|
|
3050
|
+
const current = readLiveScoutPairingRuntimeOwner(ownerPath, {
|
|
3051
|
+
expectedToken: owner.token,
|
|
3052
|
+
inspect: options.inspect
|
|
3053
|
+
});
|
|
3054
|
+
if (!current || current.pid !== owner.pid)
|
|
3055
|
+
return false;
|
|
3056
|
+
try {
|
|
3057
|
+
(options.kill ?? ((pid, nextSignal) => process.kill(pid, nextSignal)))(owner.pid, signal);
|
|
3058
|
+
return true;
|
|
3059
|
+
} catch {
|
|
3060
|
+
return false;
|
|
3061
|
+
}
|
|
3062
|
+
}
|
|
3015
3063
|
function readLiveScoutPairingSupervisorPid(supervisorPidPath = resolveScoutPairingSupervisorPaths().supervisorPidPath) {
|
|
3016
3064
|
const pid = readScoutPairingProcessPid(supervisorPidPath);
|
|
3017
3065
|
return isScoutPairingProcessRunning(pid) ? pid : null;
|
|
@@ -4095,14 +4143,18 @@ function resolvePairingControllerCommand() {
|
|
|
4095
4143
|
const bun = resolveBunExecutable();
|
|
4096
4144
|
return bun ? { command: bun.path, args: [entrypoint], cwd: setupCwd } : null;
|
|
4097
4145
|
}
|
|
4098
|
-
async function waitForPairingProcessExit(
|
|
4146
|
+
async function waitForPairingProcessExit(owner) {
|
|
4099
4147
|
const deadline = Date.now() + PAIRING_STOP_TIMEOUT_MS;
|
|
4100
4148
|
while (Date.now() < deadline) {
|
|
4101
|
-
if (!
|
|
4149
|
+
if (!readLiveScoutPairingRuntimeOwner(pairingPaths.runtimeOwnerPath, {
|
|
4150
|
+
expectedToken: owner.token
|
|
4151
|
+
}))
|
|
4102
4152
|
return true;
|
|
4103
4153
|
await sleep(100);
|
|
4104
4154
|
}
|
|
4105
|
-
return !
|
|
4155
|
+
return !readLiveScoutPairingRuntimeOwner(pairingPaths.runtimeOwnerPath, {
|
|
4156
|
+
expectedToken: owner.token
|
|
4157
|
+
});
|
|
4106
4158
|
}
|
|
4107
4159
|
async function stopPairingController() {
|
|
4108
4160
|
const ownedChild = pairingProcess;
|
|
@@ -4112,21 +4164,27 @@ async function stopPairingController() {
|
|
|
4112
4164
|
return;
|
|
4113
4165
|
}
|
|
4114
4166
|
const runtimePid = readScoutPairingProcessPid(pairingPaths.runtimePidPath);
|
|
4115
|
-
|
|
4167
|
+
const runtimeOwner = readLiveScoutPairingRuntimeOwner(pairingPaths.runtimeOwnerPath);
|
|
4168
|
+
if (!runtimePid || !runtimeOwner || runtimeOwner.pid !== runtimePid) {
|
|
4169
|
+
if (isScoutPairingProcessRunning(runtimePid)) {
|
|
4170
|
+
warn("refusing to signal unverified pairing runtime pid", { pid: runtimePid });
|
|
4171
|
+
}
|
|
4116
4172
|
pairingProcess = null;
|
|
4117
4173
|
return;
|
|
4118
4174
|
}
|
|
4119
|
-
|
|
4120
|
-
|
|
4121
|
-
}
|
|
4175
|
+
if (!signalScoutPairingRuntimeOwner(runtimeOwner, "SIGTERM", {
|
|
4176
|
+
ownerPath: pairingPaths.runtimeOwnerPath
|
|
4177
|
+
})) {
|
|
4122
4178
|
pairingProcess = null;
|
|
4123
4179
|
return;
|
|
4124
4180
|
}
|
|
4125
|
-
if (!await waitForPairingProcessExit(
|
|
4181
|
+
if (!await waitForPairingProcessExit(runtimeOwner)) {
|
|
4126
4182
|
warn("pairing controller did not exit after SIGTERM; forcing shutdown", { pid: runtimePid });
|
|
4127
|
-
|
|
4128
|
-
|
|
4129
|
-
}
|
|
4183
|
+
if (!signalScoutPairingRuntimeOwner(runtimeOwner, "SIGKILL", {
|
|
4184
|
+
ownerPath: pairingPaths.runtimeOwnerPath
|
|
4185
|
+
})) {
|
|
4186
|
+
warn("pairing controller ownership changed before SIGKILL; refusing escalation", { pid: runtimePid });
|
|
4187
|
+
}
|
|
4130
4188
|
}
|
|
4131
4189
|
pairingProcess = null;
|
|
4132
4190
|
}
|
|
@@ -4182,7 +4240,19 @@ async function reconcilePairingController() {
|
|
|
4182
4240
|
try {
|
|
4183
4241
|
let intent = readScoutPairingSupervisorIntent(pairingPaths.intentPath);
|
|
4184
4242
|
const runtimePid = readScoutPairingProcessPid(pairingPaths.runtimePidPath);
|
|
4185
|
-
|
|
4243
|
+
let runtimeOwner = readScoutPairingRuntimeOwner(pairingPaths.runtimeOwnerPath);
|
|
4244
|
+
if (!runtimeOwner && runtimePid) {
|
|
4245
|
+
try {
|
|
4246
|
+
runtimeOwner = claimScoutPairingRuntimeOwnership({
|
|
4247
|
+
pid: runtimePid,
|
|
4248
|
+
ownerPath: pairingPaths.runtimeOwnerPath
|
|
4249
|
+
});
|
|
4250
|
+
log("adopted legacy pairing runtime ownership", { pid: runtimePid });
|
|
4251
|
+
} catch {
|
|
4252
|
+
runtimeOwner = null;
|
|
4253
|
+
}
|
|
4254
|
+
}
|
|
4255
|
+
const runtimeRunning = isScoutPairingRuntimeOwnerPidRunning(runtimeOwner, runtimePid);
|
|
4186
4256
|
if (intent.desiredState === null) {
|
|
4187
4257
|
intent = updateScoutPairingSupervisorIntent("start", pairingPaths.intentPath);
|
|
4188
4258
|
log(runtimeRunning ? "adopted live pairing runtime as desired running state" : "initialized pairing desired state as running", runtimeRunning ? { pid: runtimePid } : {});
|
|
@@ -4203,6 +4273,8 @@ async function reconcilePairingController() {
|
|
|
4203
4273
|
return;
|
|
4204
4274
|
}
|
|
4205
4275
|
if (restartRequested) {
|
|
4276
|
+
pairingNextStartAt = 0;
|
|
4277
|
+
pairingRestartDelayMs = RESTART_MIN_DELAY_MS;
|
|
4206
4278
|
await stopPairingController();
|
|
4207
4279
|
} else if (pairingProcess && !isChildExited(pairingProcess) && runtimeRunning && runtimePid === pairingProcess.pid) {
|
|
4208
4280
|
pairingRestartDelayMs = RESTART_MIN_DELAY_MS;
|
|
@@ -39809,7 +39809,7 @@ function finalize(ctx, schema) {
|
|
|
39809
39809
|
result.$schema = "http://json-schema.org/draft-07/schema#";
|
|
39810
39810
|
} else if (ctx.target === "draft-04") {
|
|
39811
39811
|
result.$schema = "http://json-schema.org/draft-04/schema#";
|
|
39812
|
-
} else if (ctx.target === "openapi-3.0") {}
|
|
39812
|
+
} else if (ctx.target === "openapi-3.0") {} else {}
|
|
39813
39813
|
if (ctx.external?.uri) {
|
|
39814
39814
|
const id = ctx.external.registry.get(schema)?.id;
|
|
39815
39815
|
if (!id)
|
|
@@ -40057,7 +40057,7 @@ var literalProcessor = (schema, ctx, json, _params) => {
|
|
|
40057
40057
|
if (val === undefined) {
|
|
40058
40058
|
if (ctx.unrepresentable === "throw") {
|
|
40059
40059
|
throw new Error("Literal `undefined` cannot be represented in JSON Schema");
|
|
40060
|
-
}
|
|
40060
|
+
} else {}
|
|
40061
40061
|
} else if (typeof val === "bigint") {
|
|
40062
40062
|
if (ctx.unrepresentable === "throw") {
|
|
40063
40063
|
throw new Error("BigInt literals cannot be represented in JSON Schema");
|
|
@@ -43866,6 +43866,7 @@ function formatScoutPermissionProfiles() {
|
|
|
43866
43866
|
|
|
43867
43867
|
// packages/protocol/src/presence.ts
|
|
43868
43868
|
var PRESENCE_STALE_AFTER_MS = 45000;
|
|
43869
|
+
var PRESENCE_REFRESH_INTERVAL_MS = 30000;
|
|
43869
43870
|
var PRESENCE_GONE_AFTER_STALE_MS = 60000;
|
|
43870
43871
|
function presenceLifecycle(beat, now, options = {}) {
|
|
43871
43872
|
if (now < beat.staleAt)
|
|
@@ -44659,7 +44660,7 @@ function isScoutLaunchableHarness(value) {
|
|
|
44659
44660
|
if (!value)
|
|
44660
44661
|
return false;
|
|
44661
44662
|
const normalized = value.trim().toLowerCase();
|
|
44662
|
-
return
|
|
44663
|
+
return SCOUT_LAUNCHABLE_HARNESSES.includes(normalized);
|
|
44663
44664
|
}
|
|
44664
44665
|
function normalizeScoutReasoningEffort(value) {
|
|
44665
44666
|
const normalized = value?.trim().toLowerCase();
|
|
@@ -53366,28 +53367,41 @@ var controlRouter = t.router({
|
|
|
53366
53367
|
events: t.procedure.input(controlEventsInput).subscription(async function* ({ input, signal }) {
|
|
53367
53368
|
const kinds = input?.kinds;
|
|
53368
53369
|
const filter = kinds && kinds.length > 0 ? new Set(kinds) : null;
|
|
53369
|
-
const
|
|
53370
|
-
|
|
53371
|
-
|
|
53372
|
-
const
|
|
53373
|
-
|
|
53374
|
-
|
|
53375
|
-
|
|
53376
|
-
|
|
53377
|
-
|
|
53378
|
-
|
|
53379
|
-
|
|
53380
|
-
|
|
53381
|
-
|
|
53382
|
-
|
|
53383
|
-
|
|
53384
|
-
|
|
53385
|
-
|
|
53386
|
-
|
|
53387
|
-
|
|
53388
|
-
|
|
53389
|
-
|
|
53390
|
-
|
|
53370
|
+
const liveIterator = controlEventIterable(kinds, signal)[Symbol.asyncIterator]();
|
|
53371
|
+
const replayedIds = new Set;
|
|
53372
|
+
try {
|
|
53373
|
+
const backlog = snapshotRecentControlEvents(CONTROL_BACKLOG_LIMIT);
|
|
53374
|
+
let startIdx = 0;
|
|
53375
|
+
if (input?.since) {
|
|
53376
|
+
const idx = backlog.findIndex((event) => event.id === input.since);
|
|
53377
|
+
if (idx >= 0)
|
|
53378
|
+
startIdx = idx + 1;
|
|
53379
|
+
}
|
|
53380
|
+
for (let i = startIdx;i < backlog.length; i++) {
|
|
53381
|
+
const event = backlog[i];
|
|
53382
|
+
if (!event)
|
|
53383
|
+
continue;
|
|
53384
|
+
if (filter && !filter.has(event.kind))
|
|
53385
|
+
continue;
|
|
53386
|
+
replayedIds.add(event.id);
|
|
53387
|
+
yield tracked(event.id, event);
|
|
53388
|
+
}
|
|
53389
|
+
for (const event of snapshotPresenceControlEvents()) {
|
|
53390
|
+
if (filter && !filter.has(event.kind))
|
|
53391
|
+
continue;
|
|
53392
|
+
replayedIds.add(event.id);
|
|
53393
|
+
yield tracked(event.id, event);
|
|
53394
|
+
}
|
|
53395
|
+
while (true) {
|
|
53396
|
+
const next = await liveIterator.next();
|
|
53397
|
+
if (next.done)
|
|
53398
|
+
return;
|
|
53399
|
+
if (replayedIds.delete(next.value.id))
|
|
53400
|
+
continue;
|
|
53401
|
+
yield tracked(next.value.id, next.value);
|
|
53402
|
+
}
|
|
53403
|
+
} finally {
|
|
53404
|
+
await liveIterator.return?.();
|
|
53391
53405
|
}
|
|
53392
53406
|
})
|
|
53393
53407
|
});
|
|
@@ -54830,9 +54844,12 @@ function isTransportInferredStall(status) {
|
|
|
54830
54844
|
class BrokerPresenceService {
|
|
54831
54845
|
deps;
|
|
54832
54846
|
presence;
|
|
54847
|
+
lastPublished = new Map;
|
|
54848
|
+
refreshIntervalMs;
|
|
54833
54849
|
constructor(deps) {
|
|
54834
54850
|
this.deps = deps;
|
|
54835
54851
|
this.presence = new BrokerPresenceMap(deps.map);
|
|
54852
|
+
this.refreshIntervalMs = Math.max(1, deps.refreshIntervalMs ?? PRESENCE_REFRESH_INTERVAL_MS);
|
|
54836
54853
|
}
|
|
54837
54854
|
snapshot(now = this.now()) {
|
|
54838
54855
|
return this.presence.snapshot(now);
|
|
@@ -54856,16 +54873,23 @@ class BrokerPresenceService {
|
|
|
54856
54873
|
needRef: needRefForStatus(status),
|
|
54857
54874
|
boundConversationId: boundConversationIdForStatus(status, snapshot)
|
|
54858
54875
|
}, now);
|
|
54859
|
-
if (!result
|
|
54876
|
+
if (!result)
|
|
54860
54877
|
continue;
|
|
54861
|
-
this.
|
|
54878
|
+
const lastPublished = this.lastPublished.get(agentId);
|
|
54879
|
+
const refreshDue = !result.transitioned && lastPublished !== undefined && result.beat.updatedAt > lastPublished.updatedAt && now - lastPublished.at >= this.refreshIntervalMs;
|
|
54880
|
+
if (!result.transitioned && !refreshDue)
|
|
54881
|
+
continue;
|
|
54882
|
+
this.deps.publish(this.presenceEvent(result.beat, result.transitioned ? result.previousActivity : undefined, now));
|
|
54883
|
+
this.lastPublished.set(agentId, { at: now, updatedAt: result.beat.updatedAt });
|
|
54862
54884
|
published += 1;
|
|
54863
54885
|
}
|
|
54864
|
-
this.presence.prune(now);
|
|
54886
|
+
this.forgetPublished(this.presence.prune(now));
|
|
54865
54887
|
return published;
|
|
54866
54888
|
}
|
|
54867
54889
|
sweep(now = this.now()) {
|
|
54868
|
-
|
|
54890
|
+
const dropped = this.presence.prune(now);
|
|
54891
|
+
this.forgetPublished(dropped);
|
|
54892
|
+
return dropped;
|
|
54869
54893
|
}
|
|
54870
54894
|
presenceEvent(beat, previousActivity, now) {
|
|
54871
54895
|
return {
|
|
@@ -54880,6 +54904,10 @@ class BrokerPresenceService {
|
|
|
54880
54904
|
now() {
|
|
54881
54905
|
return this.deps.now?.() ?? Date.now();
|
|
54882
54906
|
}
|
|
54907
|
+
forgetPublished(agentIds) {
|
|
54908
|
+
for (const agentId of agentIds)
|
|
54909
|
+
this.lastPublished.delete(agentId);
|
|
54910
|
+
}
|
|
54883
54911
|
}
|
|
54884
54912
|
function needRefForStatus(status) {
|
|
54885
54913
|
if (status.subjectKind !== "question")
|
|
@@ -68726,38 +68754,6 @@ var NODE_IDENTITY_FILE = "node-identity.json";
|
|
|
68726
68754
|
var NODE_FINGERPRINT_PREFIX = "osc1";
|
|
68727
68755
|
var NODE_CARD_TTL_MS = 24 * 60 * 60 * 1000;
|
|
68728
68756
|
var stableNodeQualifierCache = new Map;
|
|
68729
|
-
function stripBonjourCollisionSuffix(value) {
|
|
68730
|
-
if (!value || typeof value !== "string")
|
|
68731
|
-
return "";
|
|
68732
|
-
let trimmed = value.trim();
|
|
68733
|
-
const isDotLocal = /\.local\.?$/i.test(trimmed);
|
|
68734
|
-
if (isDotLocal) {
|
|
68735
|
-
trimmed = trimmed.replace(/\.local\.?$/i, "");
|
|
68736
|
-
}
|
|
68737
|
-
const isHyphenLocalOpenscout = /-local-openscout$/i.test(trimmed);
|
|
68738
|
-
const isHyphenLocal = !isHyphenLocalOpenscout && /-local$/i.test(trimmed);
|
|
68739
|
-
if (isHyphenLocalOpenscout) {
|
|
68740
|
-
trimmed = trimmed.replace(/-local-openscout$/i, "");
|
|
68741
|
-
} else if (isHyphenLocal) {
|
|
68742
|
-
trimmed = trimmed.replace(/-local$/i, "");
|
|
68743
|
-
}
|
|
68744
|
-
if (!isDotLocal && !isHyphenLocalOpenscout && !isHyphenLocal) {
|
|
68745
|
-
return trimmed;
|
|
68746
|
-
}
|
|
68747
|
-
trimmed = trimmed.replace(/(?<=[a-zA-Z].*?)(?:-\d+)+$/, "");
|
|
68748
|
-
if (isDotLocal)
|
|
68749
|
-
return `${trimmed}.local`;
|
|
68750
|
-
if (isHyphenLocalOpenscout)
|
|
68751
|
-
return `${trimmed}-local-openscout`;
|
|
68752
|
-
if (isHyphenLocal)
|
|
68753
|
-
return `${trimmed}-local`;
|
|
68754
|
-
return trimmed;
|
|
68755
|
-
}
|
|
68756
|
-
function canonicalMeshNodeId(nodeId) {
|
|
68757
|
-
if (!nodeId || typeof nodeId !== "string")
|
|
68758
|
-
return "";
|
|
68759
|
-
return stripBonjourCollisionSuffix(nodeId);
|
|
68760
|
-
}
|
|
68761
68757
|
function nodeIdentityPath(supportDirectory) {
|
|
68762
68758
|
const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
|
|
68763
68759
|
return join30(dir, NODE_IDENTITY_FILE);
|
|
@@ -68778,12 +68774,6 @@ function loadOrCreateStableNodeQualifier(fallbackName, supportDirectory) {
|
|
|
68778
68774
|
const identity2 = loadOrCreateNodeIdentity(supportDirectory);
|
|
68779
68775
|
const existing = normalizeNodeQualifier(identity2.nodeQualifier);
|
|
68780
68776
|
if (existing) {
|
|
68781
|
-
if (identity2.nodeQualifier !== existing) {
|
|
68782
|
-
persistNodeIdentity(path, {
|
|
68783
|
-
...identity2,
|
|
68784
|
-
nodeQualifier: existing
|
|
68785
|
-
});
|
|
68786
|
-
}
|
|
68787
68777
|
stableNodeQualifierCache.set(path, existing);
|
|
68788
68778
|
return existing;
|
|
68789
68779
|
}
|
|
@@ -68829,7 +68819,7 @@ function readAndValidateNodeIdentity(path) {
|
|
|
68829
68819
|
if (parsed.version !== 1 || !parsed.publicKey || !parsed.privateKey) {
|
|
68830
68820
|
throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
|
|
68831
68821
|
}
|
|
68832
|
-
if (parsed.nodeQualifier !== undefined &&
|
|
68822
|
+
if (parsed.nodeQualifier !== undefined && normalizeNodeQualifier(parsed.nodeQualifier) !== parsed.nodeQualifier) {
|
|
68833
68823
|
throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
|
|
68834
68824
|
}
|
|
68835
68825
|
try {
|
|
@@ -68842,11 +68832,8 @@ function readAndValidateNodeIdentity(path) {
|
|
|
68842
68832
|
}
|
|
68843
68833
|
return parsed;
|
|
68844
68834
|
}
|
|
68845
|
-
function normalizePersistedNodeQualifier(value) {
|
|
68846
|
-
return typeof value === "string" ? value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "") : "";
|
|
68847
|
-
}
|
|
68848
68835
|
function normalizeNodeQualifier(value) {
|
|
68849
|
-
return
|
|
68836
|
+
return typeof value === "string" ? value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "") : "";
|
|
68850
68837
|
}
|
|
68851
68838
|
function persistNodeIdentity(path, identity2) {
|
|
68852
68839
|
const tempPath = `${path}.${process.pid}.${randomBytes(6).toString("hex")}.tmp`;
|
|
@@ -101789,10 +101776,6 @@ function hasColumn(database, tableName, columnName) {
|
|
|
101789
101776
|
const rows = database.query(`SELECT name FROM pragma_table_info('${escapedTableName}')`).all();
|
|
101790
101777
|
return rows.some((row) => row.name === columnName);
|
|
101791
101778
|
}
|
|
101792
|
-
function hasTable(database, tableName) {
|
|
101793
|
-
const row = database.query("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?1").get(tableName);
|
|
101794
|
-
return Boolean(row);
|
|
101795
|
-
}
|
|
101796
101779
|
var CONTROL_PLANE_SCHEMA_MIGRATIONS = [
|
|
101797
101780
|
{
|
|
101798
101781
|
id: "runtime-session-mapping-read-model",
|
|
@@ -101971,46 +101954,6 @@ WHERE latest.invocation_id = inv.id
|
|
|
101971
101954
|
database.exec("ALTER TABLE trusted_peers ADD COLUMN tls_spki_fingerprint TEXT");
|
|
101972
101955
|
}
|
|
101973
101956
|
}
|
|
101974
|
-
},
|
|
101975
|
-
{
|
|
101976
|
-
id: "canonicalize-mesh-nodes-and-rehome",
|
|
101977
|
-
description: "Re-homes foreign key references on Bonjour collision-suffixed ghost nodes to canonical stable node IDs and prunes ghost nodes.",
|
|
101978
|
-
apply(database) {
|
|
101979
|
-
if (!hasTable(database, "nodes"))
|
|
101980
|
-
return;
|
|
101981
|
-
const nodeRows = database.query("SELECT * FROM nodes").all();
|
|
101982
|
-
for (const row of nodeRows) {
|
|
101983
|
-
const canonicalId = canonicalMeshNodeId(row.id);
|
|
101984
|
-
if (canonicalId && canonicalId !== row.id) {
|
|
101985
|
-
const existing = nodeRows.find((r) => r.id === canonicalId);
|
|
101986
|
-
if (!existing) {
|
|
101987
|
-
database.query(`INSERT INTO nodes (
|
|
101988
|
-
id, mesh_id, name, host_name, advertise_scope, broker_url, tailnet_name,
|
|
101989
|
-
capabilities_json, labels_json, metadata_json, last_seen_at, registered_at
|
|
101990
|
-
) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12)
|
|
101991
|
-
ON CONFLICT(id) DO UPDATE SET
|
|
101992
|
-
last_seen_at = MAX(COALESCE(nodes.last_seen_at, 0), COALESCE(excluded.last_seen_at, 0)),
|
|
101993
|
-
broker_url = COALESCE(excluded.broker_url, nodes.broker_url),
|
|
101994
|
-
tailnet_name = COALESCE(excluded.tailnet_name, nodes.tailnet_name)`).run(canonicalId, row.mesh_id, stripBonjourCollisionSuffix(row.name) || row.name, stripBonjourCollisionSuffix(row.host_name ?? "") || (row.host_name ?? null), row.advertise_scope, row.broker_url ?? null, row.tailnet_name ?? null, row.capabilities_json ?? null, row.labels_json ?? null, row.metadata_json ?? null, row.last_seen_at ?? null, row.registered_at);
|
|
101995
|
-
}
|
|
101996
|
-
database.query("UPDATE agents SET home_node_id = ?1 WHERE home_node_id = ?2").run(canonicalId, row.id);
|
|
101997
|
-
database.query("UPDATE agents SET authority_node_id = ?1 WHERE authority_node_id = ?2").run(canonicalId, row.id);
|
|
101998
|
-
database.query("UPDATE agent_endpoints SET node_id = ?1 WHERE node_id = ?2").run(canonicalId, row.id);
|
|
101999
|
-
database.query("UPDATE runtime_sessions SET node_id = ?1 WHERE node_id = ?2").run(canonicalId, row.id);
|
|
102000
|
-
database.query("UPDATE runtime_session_aliases SET node_id = ?1 WHERE node_id = ?2").run(canonicalId, row.id);
|
|
102001
|
-
database.query("UPDATE conversations SET authority_node_id = ?1 WHERE authority_node_id = ?2").run(canonicalId, row.id);
|
|
102002
|
-
database.query("UPDATE conversation_read_cursors SET reader_node_id = ?1 WHERE reader_node_id = ?2").run(canonicalId, row.id);
|
|
102003
|
-
database.query("UPDATE messages SET origin_node_id = ?1 WHERE origin_node_id = ?2").run(canonicalId, row.id);
|
|
102004
|
-
database.query("UPDATE deliveries SET target_node_id = ?1 WHERE target_node_id = ?2").run(canonicalId, row.id);
|
|
102005
|
-
database.query("UPDATE invocations SET requester_node_id = ?1 WHERE requester_node_id = ?2").run(canonicalId, row.id);
|
|
102006
|
-
database.query("UPDATE invocations SET target_node_id = ?1 WHERE target_node_id = ?2").run(canonicalId, row.id);
|
|
102007
|
-
database.query("UPDATE thread_events SET authority_node_id = ?1 WHERE authority_node_id = ?2").run(canonicalId, row.id);
|
|
102008
|
-
database.query("UPDATE thread_cursors SET authority_node_id = ?1 WHERE authority_node_id = ?2").run(canonicalId, row.id);
|
|
102009
|
-
database.query("UPDATE trusted_peers SET node_id = ?1 WHERE node_id = ?2").run(canonicalId, row.id);
|
|
102010
|
-
database.query("DELETE FROM nodes WHERE id = ?1").run(row.id);
|
|
102011
|
-
}
|
|
102012
|
-
}
|
|
102013
|
-
}
|
|
102014
101957
|
}
|
|
102015
101958
|
];
|
|
102016
101959
|
function configureControlPlaneDatabase(database) {
|
|
@@ -103037,65 +102980,11 @@ class SQLiteControlPlaneStore {
|
|
|
103037
102980
|
const now = options.now ?? currentTimestampMs();
|
|
103038
102981
|
const maxStaleAgeMs = options.maxStaleAgeMs ?? 7 * 24 * 60 * 60 * 1000;
|
|
103039
102982
|
const staleCutoff = now - maxStaleAgeMs;
|
|
103040
|
-
const nodeRows = this.db.query("SELECT * FROM nodes").all();
|
|
103041
102983
|
const peerRows = this.db.query("SELECT * FROM trusted_peers").all();
|
|
103042
102984
|
const rehomedMappings = [];
|
|
103043
|
-
const
|
|
103044
|
-
for (const row of nodeRows) {
|
|
103045
|
-
const canonicalId = canonicalMeshNodeId(row.id);
|
|
103046
|
-
if (canonicalId && canonicalId !== row.id) {
|
|
103047
|
-
rehomeMap.set(row.id, { to: canonicalId, candidateRow: row });
|
|
103048
|
-
}
|
|
103049
|
-
}
|
|
103050
|
-
let rehomedNodeCount = 0;
|
|
102985
|
+
const rehomedNodeCount = 0;
|
|
103051
102986
|
let prunedNodeCount = 0;
|
|
103052
102987
|
this.db.transaction(() => {
|
|
103053
|
-
for (const [staleId, { to: canonicalId, candidateRow }] of rehomeMap.entries()) {
|
|
103054
|
-
const existingCanonical = nodeRows.find((r) => r.id === canonicalId);
|
|
103055
|
-
if (!existingCanonical) {
|
|
103056
|
-
this.db.query(`INSERT INTO nodes (
|
|
103057
|
-
id, mesh_id, name, host_name, advertise_scope, broker_url, tailnet_name,
|
|
103058
|
-
capabilities_json, labels_json, metadata_json, last_seen_at, registered_at
|
|
103059
|
-
) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12)
|
|
103060
|
-
ON CONFLICT(id) DO UPDATE SET
|
|
103061
|
-
last_seen_at = MAX(COALESCE(nodes.last_seen_at, 0), COALESCE(excluded.last_seen_at, 0)),
|
|
103062
|
-
broker_url = COALESCE(excluded.broker_url, nodes.broker_url),
|
|
103063
|
-
tailnet_name = COALESCE(excluded.tailnet_name, nodes.tailnet_name)`).run(canonicalId, candidateRow.mesh_id, stripBonjourCollisionSuffix(candidateRow.name) || candidateRow.name, stripBonjourCollisionSuffix(candidateRow.host_name ?? "") || (candidateRow.host_name ?? null), candidateRow.advertise_scope, candidateRow.broker_url ?? null, candidateRow.tailnet_name ?? null, candidateRow.capabilities_json ?? null, candidateRow.labels_json ?? null, candidateRow.metadata_json ?? null, candidateRow.last_seen_at ?? null, candidateRow.registered_at);
|
|
103064
|
-
} else {
|
|
103065
|
-
this.db.query(`UPDATE nodes SET
|
|
103066
|
-
last_seen_at = MAX(COALESCE(last_seen_at, 0), COALESCE(?1, 0)),
|
|
103067
|
-
broker_url = COALESCE(?2, broker_url)
|
|
103068
|
-
WHERE id = ?3`).run(candidateRow.last_seen_at ?? null, candidateRow.broker_url ?? null, canonicalId);
|
|
103069
|
-
}
|
|
103070
|
-
this.db.query("UPDATE agents SET home_node_id = ?1 WHERE home_node_id = ?2").run(canonicalId, staleId);
|
|
103071
|
-
this.db.query("UPDATE agents SET authority_node_id = ?1 WHERE authority_node_id = ?2").run(canonicalId, staleId);
|
|
103072
|
-
this.db.query("UPDATE agent_endpoints SET node_id = ?1 WHERE node_id = ?2").run(canonicalId, staleId);
|
|
103073
|
-
this.db.query("UPDATE runtime_sessions SET node_id = ?1 WHERE node_id = ?2").run(canonicalId, staleId);
|
|
103074
|
-
this.db.query("UPDATE runtime_session_aliases SET node_id = ?1 WHERE node_id = ?2").run(canonicalId, staleId);
|
|
103075
|
-
this.db.query("UPDATE conversations SET authority_node_id = ?1 WHERE authority_node_id = ?2").run(canonicalId, staleId);
|
|
103076
|
-
this.db.query("UPDATE conversation_read_cursors SET reader_node_id = ?1 WHERE reader_node_id = ?2").run(canonicalId, staleId);
|
|
103077
|
-
this.db.query("UPDATE messages SET origin_node_id = ?1 WHERE origin_node_id = ?2").run(canonicalId, staleId);
|
|
103078
|
-
this.db.query("UPDATE deliveries SET target_node_id = ?1 WHERE target_node_id = ?2").run(canonicalId, staleId);
|
|
103079
|
-
this.db.query("UPDATE invocations SET requester_node_id = ?1 WHERE requester_node_id = ?2").run(canonicalId, staleId);
|
|
103080
|
-
this.db.query("UPDATE invocations SET target_node_id = ?1 WHERE target_node_id = ?2").run(canonicalId, staleId);
|
|
103081
|
-
this.db.query("UPDATE thread_events SET authority_node_id = ?1 WHERE authority_node_id = ?2").run(canonicalId, staleId);
|
|
103082
|
-
this.db.query("UPDATE thread_cursors SET authority_node_id = ?1 WHERE authority_node_id = ?2").run(canonicalId, staleId);
|
|
103083
|
-
this.db.query("UPDATE trusted_peers SET node_id = ?1 WHERE node_id = ?2").run(canonicalId, staleId);
|
|
103084
|
-
const delRes = this.db.query("DELETE FROM nodes WHERE id = ?1").run(staleId);
|
|
103085
|
-
if ((delRes.changes ?? 0) > 0) {
|
|
103086
|
-
prunedNodeCount++;
|
|
103087
|
-
rehomedNodeCount++;
|
|
103088
|
-
rehomedMappings.push({ from: staleId, to: canonicalId });
|
|
103089
|
-
}
|
|
103090
|
-
}
|
|
103091
|
-
for (const peer of peerRows) {
|
|
103092
|
-
if (peer.node_id) {
|
|
103093
|
-
const canonical2 = canonicalMeshNodeId(peer.node_id);
|
|
103094
|
-
if (canonical2 && canonical2 !== peer.node_id) {
|
|
103095
|
-
this.db.query("UPDATE trusted_peers SET node_id = ?1 WHERE key_id = ?2").run(canonical2, peer.key_id);
|
|
103096
|
-
}
|
|
103097
|
-
}
|
|
103098
|
-
}
|
|
103099
102988
|
const remainingNodes = this.db.query("SELECT * FROM nodes").all();
|
|
103100
102989
|
for (const row of remainingNodes) {
|
|
103101
102990
|
if (row.id === options.localNodeId)
|
|
@@ -1803,12 +1803,6 @@ import {
|
|
|
1803
1803
|
} from "fs";
|
|
1804
1804
|
import { homedir as homedir3, hostname as osHostname } from "os";
|
|
1805
1805
|
import { dirname, join as join3 } from "path";
|
|
1806
|
-
|
|
1807
|
-
// packages/runtime/src/node-identity.ts
|
|
1808
|
-
var NODE_CARD_TTL_MS = 24 * 60 * 60 * 1000;
|
|
1809
|
-
var stableNodeQualifierCache = new Map;
|
|
1810
|
-
|
|
1811
|
-
// packages/runtime/src/local-config.ts
|
|
1812
1806
|
var LOCAL_CONFIG_VERSION = 1;
|
|
1813
1807
|
var DEFAULT_SCOUT_WEB_PORTAL_HOST = "scout.local";
|
|
1814
1808
|
var DEFAULT_SCOUT_WEB_DEV_HOST = `dev.${DEFAULT_SCOUT_WEB_PORTAL_HOST}`;
|
|
@@ -1803,12 +1803,6 @@ import {
|
|
|
1803
1803
|
} from "fs";
|
|
1804
1804
|
import { homedir as homedir3, hostname as osHostname } from "os";
|
|
1805
1805
|
import { dirname, join as join3 } from "path";
|
|
1806
|
-
|
|
1807
|
-
// packages/runtime/src/node-identity.ts
|
|
1808
|
-
var NODE_CARD_TTL_MS = 24 * 60 * 60 * 1000;
|
|
1809
|
-
var stableNodeQualifierCache = new Map;
|
|
1810
|
-
|
|
1811
|
-
// packages/runtime/src/local-config.ts
|
|
1812
1806
|
var LOCAL_CONFIG_VERSION = 1;
|
|
1813
1807
|
var DEFAULT_SCOUT_WEB_PORTAL_HOST = "scout.local";
|
|
1814
1808
|
var DEFAULT_SCOUT_WEB_DEV_HOST = `dev.${DEFAULT_SCOUT_WEB_PORTAL_HOST}`;
|