@openscout/scout 0.2.87 → 0.2.91
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-Dw2oyCcz.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-2DZQahiN.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-CeSjWWwh.js → AgentLaneCard-BRAkw8YJ.js} +1 -1
- package/dist/client/assets/{AgentLaneChrome-Do7CXwin.js → AgentLaneChrome-T8QE5742.js} +1 -1
- package/dist/client/assets/AgentLaneDetailSheet-C8RYotnv.js +4 -0
- package/dist/client/assets/{AgentLaneSummaryResize--lHgnncr.js → AgentLaneSummaryResize-FyYweLo_.js} +1 -1
- package/dist/client/assets/AgentLanesEmbedScreen-Br7cmZVO.js +1 -0
- package/dist/client/assets/{AgentLanesPreflight-BwkGk8JH.js → AgentLanesPreflight-Cil3dNwu.js} +1 -1
- package/dist/client/assets/AgentLanesView-DPfO8MOo.js +2 -0
- package/dist/client/assets/{AgentLiveActions-BmXDRxER.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-DOKJbiJL.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-DLIJ8eYj.js → BriefingsScreen-BerYOoWS.js} +1 -1
- package/dist/client/assets/{BrokerMetadataPanel-C8WERmHF.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-CtgqIuS0.js → CodeDiffPane-BjCOBLze.js} +1 -1
- package/dist/client/assets/{CodeProjectPicker-C4W_udc7.js → CodeProjectPicker-NSGdCaK0.js} +1 -1
- package/dist/client/assets/{CodeScreen-WhTvVUKY.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-DFacT2uu.js → DataTable-Dzqiaha4.js} +1 -1
- package/dist/client/assets/{DispatchAftermath-D797PbCe.js → DispatchAftermath-B0WMg_z3.js} +1 -1
- package/dist/client/assets/DocumentFocusViewer-CZVVIAD5.js +1 -0
- package/dist/client/assets/{EmbeddableSurfacesLab-JczLmmF-.js → EmbeddableSurfacesLab-C3a7hJWO.js} +1 -1
- package/dist/client/assets/{EmptyState-uQbB-bvP.js → EmptyState-CYNJZMrZ.js} +1 -1
- package/dist/client/assets/{FileViewerPane-ebbCtnHE.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-Bfu2_KtU.js → FollowScreen-Bb_rcrzi.js} +1 -1
- package/dist/client/assets/{HarnessMark-CEzmPFHC.js → HarnessMark-DrE57dUq.js} +1 -1
- package/dist/client/assets/HarnessesScreen-CAsCJ_tG.js +1 -0
- package/dist/client/assets/{HerdrSession-BDLa_rrK.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-GjmxYBi_.js → KnowledgeSearchInspector-CbPVg3fr.js} +1 -1
- package/dist/client/assets/KnowledgeSearchScreen-C1lN1xJk.js +1 -0
- package/dist/client/assets/{LaneToolHoverCard-DCY-m0JK.js → LaneToolHoverCard-BkBcDYm-.js} +1 -1
- package/dist/client/assets/LaneTraceDetailSheet-CzTd44rf.js +1 -0
- package/dist/client/assets/{LaneTraceEventFocus-BfKZ7G5c.js → LaneTraceEventFocus-BmMmPTyJ.js} +1 -1
- package/dist/client/assets/{MeshCanvas-CZYHLTvw.js → MeshCanvas-DwkjsiJ5.js} +2 -2
- package/dist/client/assets/{MeshCanvasMinimap-D3mJ78CM.js → MeshCanvasMinimap-vmCpU1sD.js} +1 -1
- package/dist/client/assets/MeshScreen-CkMepUpT.js +1 -0
- package/dist/client/assets/{MeshTopologyView-A-wh0Ad1.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-MTL2EAnr.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-Ctixol4_.js → NewAgentModal-Do9aVvan.js} +1 -1
- package/dist/client/assets/NewChatComposer-DKlNX1UA.js +19 -0
- package/dist/client/assets/{NewChatOrigin-CCiPg_WR.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-B4RqrI0Q.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-Cr1SL5ht.js → RepoDiffEmbedScreen-xjzjcJ_c.js} +1 -1
- package/dist/client/assets/{RepoDiffPageScreen-DeC8fsh_.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-BQwIShXf.js → ReposScreen-CpaLC_NU.js} +6 -6
- package/dist/client/assets/ScoutDeckSurface-DkpZ-0DH.js +1 -0
- package/dist/client/assets/{ScoutSurface-DdVzN3DA.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-sLjfSKtS.js → ScoutbotFxLab-Bk2ZsfPp.js} +1 -1
- package/dist/client/assets/ScoutbotRealtimeVoiceCall-n63LdBZs.js +1 -0
- package/dist/client/assets/{SecondaryNav-CCQqTT3e.js → SecondaryNav-B4IsujYh.js} +1 -1
- package/dist/client/assets/{SessionEmbedScreen-BrLMZJ3N.js → SessionEmbedScreen-CPfH-jqN.js} +1 -1
- package/dist/client/assets/{SessionObserve-pbozyqVv.js → SessionObserve-B-SkP3tu.js} +1 -1
- package/dist/client/assets/{SessionObserveEvidence-C54Xvbps.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-CiVH-45m.js → ShikiPane-DH8yYDks.js} +1 -1
- package/dist/client/assets/{SlidePanel-BLrLF9dt.js → SlidePanel-RFXJpfUa.js} +1 -1
- package/dist/client/assets/{SpriteAvatar-vpHO-rXs.js → SpriteAvatar-CEYdCzem.js} +1 -1
- package/dist/client/assets/{StatusPill-a3XBw1GG.js → StatusPill-9uy70ttd.js} +1 -1
- package/dist/client/assets/{TailView-C3rjOV7i.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-B29xZNlI.js → TextDocumentSurface-BcP9vvji.js} +1 -1
- package/dist/client/assets/{TmuxPeek-eVfqPB4m.js → TmuxPeek-IaWqCgyJ.js} +1 -1
- package/dist/client/assets/{VoicePermissionsPanel-DpInOlVq.js → VoicePermissionsPanel-C80iZxgy.js} +1 -1
- package/dist/client/assets/{WorkDetailScreen-DYwgGaJs.js → WorkDetailScreen-CweZ6fEd.js} +3 -3
- package/dist/client/assets/WorkFilesViewer-Dy_-06iI.js +1 -0
- package/dist/client/assets/{activity-DTqqWiyV.js → activity-DS0u0Itf.js} +1 -1
- package/dist/client/assets/{addon-fit-CcaylYTX.js → addon-fit-CN888B3D.js} +1 -1
- package/dist/client/assets/{addon-webgl-B37iuzOG.js → addon-webgl-CoAnanQS.js} +1 -1
- package/dist/client/assets/{agent-essentials-DbbJm3ne.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-BRPqOKIx.js → arc.es-BET9ev6q.js} +1 -1
- package/dist/client/assets/arrow-down-DxxPnPwh.js +1 -0
- package/dist/client/assets/{arrow-left-B0CdJdAC.js → arrow-left-CXDkJuCg.js} +1 -1
- package/dist/client/assets/{arrow-up-right-CilNLf4t.js → arrow-up-right-Bj8RjSqW.js} +1 -1
- package/dist/client/assets/{bot-Ba3gcRVa.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-BdovFDz8.js → check-BfA0T8UD.js} +1 -1
- package/dist/client/assets/{chevron-down-Jh540uf3.js → chevron-down-BVg09D6U.js} +1 -1
- package/dist/client/assets/{chevron-right-CV7sEVBS.js → chevron-right-CaEwYkxE.js} +1 -1
- package/dist/client/assets/{chunk-HRAB3GC3-BYQZ1LOn.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-DpfYdWcr.js → clock-C3TUL7D7.js} +1 -1
- package/dist/client/assets/{code-xml-CPzpZkhu.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-bHIIZ9z3.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-DQAM0eSY.js → copy-C79v_7D-.js} +1 -1
- package/dist/client/assets/{createLucideIcon-Da0lq809.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-BheHazeW.js → external-link-Dd8xaveL.js} +1 -1
- package/dist/client/assets/{eye-B908WSFH.js → eye-DkU59kfl.js} +1 -1
- package/dist/client/assets/{file-text-BGVkHS4_.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-iwd10r9G.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-feLCB3Zm.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-BAmj273z.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-Be0T8xv2.js → loader-circle-B-l2Wj3-.js} +1 -1
- package/dist/client/assets/{local-agents-Q6KQ12B9.js → local-agents-Wof5knTJ.js} +1 -1
- package/dist/client/assets/{mentions-KNASbAjG.js → mentions-BjXfeF7t.js} +1 -1
- package/dist/client/assets/{mesh-ops-C-i8OMiM.js → mesh-ops-C1gq8zKf.js} +1 -1
- package/dist/client/assets/{mesh-view-store-B0lqpw8M.js → mesh-view-store-B56D3f77.js} +1 -1
- package/dist/client/assets/{message-circle-2v9Udia0.js → message-circle-BwVx5X0q.js} +1 -1
- package/dist/client/assets/{message-markup-BP2nH9kQ.js → message-markup-DlVX-iuc.js} +1 -1
- package/dist/client/assets/{message-square-DURSOrUr.js → message-square-BnkG6tae.js} +1 -1
- package/dist/client/assets/mission-control-m3BTDQ9l.css +1 -0
- package/dist/client/assets/{mission-control-store-HeCy97KT.js → mission-control-store-CMgIVjLJ.js} +1 -1
- package/dist/client/assets/model-Co0zkMIc.js +1 -0
- package/dist/client/assets/{observe-DkAhvkfn.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-CEP5pGf3.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-ZReaTFF-.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-BC9TO5Pl.js → radio-BGtkyCG9.js} +1 -1
- package/dist/client/assets/{refresh-cw-C4E58VJK.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-BarpRgcv.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-CIzaNH58.js → right-c4PAdFYZ.js} +1 -1
- package/dist/client/assets/{rocket-BahfIwFz.js → rocket-BWh18pt_.js} +1 -1
- package/dist/client/assets/router-63XV_E7f.js +1 -0
- package/dist/client/assets/{text-B2UZi3l9.js → runtime-picker-BXKJbLot.js} +1 -1
- package/dist/client/assets/runtime-picker-vhm0gtLs.css +1 -0
- package/dist/client/assets/{scope-views-CmG2X_S0.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-uulNqrf7.js → scroll-text-DZb3mmYo.js} +1 -1
- package/dist/client/assets/{search-HmdKXdtR.js → search-1QMVOxF3.js} +1 -1
- package/dist/client/assets/secondaryNavConfig-c0cz3MkJ.js +1 -0
- package/dist/client/assets/{selection-bridge-n4wNTm1B.js → selection-bridge-O9C4kGfF.js} +1 -1
- package/dist/client/assets/{send-horizontal-DOjHkZCD.js → send-horizontal-DbyEkGql.js} +1 -1
- package/dist/client/assets/{server-CX-xQjJA.js → server-Bncn9S7r.js} +1 -1
- package/dist/client/assets/{session-catalog-b7B1Sof1.js → session-catalog-DC6BlBBC.js} +1 -1
- package/dist/client/assets/{session-table-Djain1Qr.js → session-table-BUPq9Viy.js} +1 -1
- package/dist/client/assets/{sliders-horizontal-D2O6QiDN.js → sliders-horizontal-CMe8Bay1.js} +1 -1
- package/dist/client/assets/{sparkles-CgTby-ap.js → sparkles-_7cTZsIH.js} +1 -1
- package/dist/client/assets/{sse-QSbhyq9A.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-B7BrDaFi.js → tail-events-C12pfUax.js} +1 -1
- package/dist/client/assets/{terminal-relay-C2TUIuh1.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-BArLfNtd.js → terminal-takeover--05EYhJm.js} +1 -1
- package/dist/client/assets/{terminal-DNZTCr6a.js → terminal-xGf_F3y7.js} +1 -1
- package/dist/client/assets/text-DsBWV_4k.js +1 -0
- package/dist/client/assets/{use-conversation-list-htp0Ui63.js → use-conversation-list-DWX02INv.js} +1 -1
- package/dist/client/assets/{use-fleet-active-asks-BhuTn5mV.js → use-fleet-active-asks-Cnwa4hTK.js} +1 -1
- package/dist/client/assets/{use-mesh-ops-items-CD-qsvNX.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-BIrm8esH.js → useAgentHoverCard-DvPZSJK3.js} +1 -1
- package/dist/client/assets/useContentSecondaryNav-CNlrhvvx.js +1 -0
- package/dist/client/assets/{usePierreRuntime-CVTMzChM.js → usePierreRuntime-C8WJ0X3F.js} +1 -1
- package/dist/client/assets/{wrench-DwFKomxg.js → wrench-_tHBGTop.js} +1 -1
- package/dist/client/assets/{x-DuzAbpk5.js → x-CrGUKNRv.js} +1 -1
- package/dist/client/assets/{xterm-xQGYNyB-.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-DRHTQIxu.js +0 -1
- package/dist/client/assets/AgentAvatar-CQqJcwOQ.js +0 -1
- package/dist/client/assets/AgentAvatar-CUZZARWG.css +0 -1
- package/dist/client/assets/AgentConfigurationScreen-C3OI6JmZ.js +0 -1
- package/dist/client/assets/AgentDefinitionsWorkspace-D0LDEqfl.js +0 -1
- package/dist/client/assets/AgentFloorView-CoGh2q5f.js +0 -1
- package/dist/client/assets/AgentInfoScreen-5ybfIL9p.js +0 -1
- package/dist/client/assets/AgentLaneDetailSheet-BD8B51ka.js +0 -4
- package/dist/client/assets/AgentLanesEmbedScreen-FRTVASPw.js +0 -1
- package/dist/client/assets/AgentLanesView-Bm85ittm.js +0 -2
- package/dist/client/assets/AgentSessions-C_tAfGN2.js +0 -6
- package/dist/client/assets/AgentsConsole-DsHWsaOJ.js +0 -1
- package/dist/client/assets/AgentsScreen-Bod6AHlA.js +0 -1
- package/dist/client/assets/AgentsSubnav-CsvYzzQ-.js +0 -1
- package/dist/client/assets/AstronautSuit-C05Ezxl9.js +0 -1
- package/dist/client/assets/BackToPicker-CXsbxbHM.js +0 -1
- package/dist/client/assets/BriefingDetailScreen-Uvnk3t0v.js +0 -1
- package/dist/client/assets/BrokerScreen-LZ3T7hGG.js +0 -5
- package/dist/client/assets/Canvas-BO9mx5_P.js +0 -1
- package/dist/client/assets/ChatCollapsedStrip-CtLPTLTY.js +0 -1
- package/dist/client/assets/ConversationComposer-DPWu3HvK.js +0 -1
- package/dist/client/assets/ConversationFeedRows-MhcPfxUr.js +0 -1
- package/dist/client/assets/ConversationHeader-Ce7TENb9.js +0 -1
- package/dist/client/assets/ConversationPanels-D-b5SLO-.js +0 -6
- package/dist/client/assets/ConversationScreen-C5HnXd5w.css +0 -1
- package/dist/client/assets/ConversationScreen-D77SoLos.js +0 -1
- package/dist/client/assets/ConversationStatus-lIvSKRic.js +0 -1
- package/dist/client/assets/CrewWorkspaces-CJhBKVoZ.css +0 -1
- package/dist/client/assets/CrewWorkspaces-CdojnRMG.js +0 -1
- package/dist/client/assets/DocumentFocusViewer-CetjnYut.js +0 -1
- package/dist/client/assets/FlightObserveScreen-sqvt7HUO.js +0 -1
- package/dist/client/assets/HarnessesScreen-CGhRsqD5.js +0 -1
- package/dist/client/assets/HomeHero-7JwycwFY.css +0 -1
- package/dist/client/assets/HomeHero-DdxTQ-6a.js +0 -1
- package/dist/client/assets/HostAdvisorView-BAUi5ZxX.js +0 -1
- package/dist/client/assets/KnowledgeSearchScreen-CRei9pyl.js +0 -1
- package/dist/client/assets/LaneTraceDetailSheet-CFsCvKa3.js +0 -1
- package/dist/client/assets/MeshScreen-dxNxRtKm.js +0 -1
- package/dist/client/assets/MessagesScreen-CR5v-WIE.js +0 -1
- package/dist/client/assets/MissionControlView-BGj1qnI2.js +0 -1
- package/dist/client/assets/MissionFocusOverlay-hWi6y87j.js +0 -1
- package/dist/client/assets/MissionLeftAgentRow-BSRRiiig.js +0 -1
- package/dist/client/assets/MissionLogPane-bbG_pM9B.js +0 -1
- package/dist/client/assets/NewChatComposer-BPsg8shF.js +0 -19
- package/dist/client/assets/ObserveEmbedScreen-Be87Chod.js +0 -2
- package/dist/client/assets/ObserveTextFlow-CKYltTPJ.js +0 -2
- package/dist/client/assets/ObservedTopologyPanel-CfHYu-4Z.js +0 -2
- package/dist/client/assets/OpenScoutAppShell-DPeP1vtK.js +0 -88
- package/dist/client/assets/OpsAgentsView-dEtw9yt-.js +0 -1
- package/dist/client/assets/OpsScreen-QXRJY8Vf.js +0 -1
- package/dist/client/assets/OpsSubnav-BK9Fj3gU.js +0 -1
- package/dist/client/assets/ProjectAgentProfile-BjykZ2Xd.js +0 -1
- package/dist/client/assets/ProjectAgentProfileHero-Bc0g8rhW.js +0 -1
- package/dist/client/assets/ProjectsInbox--ZIqo-IE.js +0 -2
- package/dist/client/assets/ProjectsRail-CzS0qTCI.js +0 -1
- package/dist/client/assets/ProjectsScreen-0gx7f30h.js +0 -1
- package/dist/client/assets/ProjectsThreadAside-BsQRFbdy.js +0 -1
- package/dist/client/assets/Provider-Cd-QZltN.js +0 -1
- package/dist/client/assets/RailRow-B0sRaJc6.css +0 -1
- package/dist/client/assets/RailRow-BY6fxePa.js +0 -1
- package/dist/client/assets/RawSessionsTable-CbopOF34.js +0 -1
- package/dist/client/assets/RealtimeVoiceScreen-CU4uXz4C.js +0 -9
- package/dist/client/assets/RepoDiffViewer-CiTOWK_Z.js +0 -7
- package/dist/client/assets/RepoDiffViewerLazy-BU3V7Kwq.js +0 -2
- package/dist/client/assets/ScoutDeckSurface-BncYKicb.js +0 -1
- package/dist/client/assets/SessionRefScreen-UVNVrwAf.js +0 -1
- package/dist/client/assets/SessionsScreen-KeDb5gz4.js +0 -1
- package/dist/client/assets/SettingsDrawer-CWdj0VvN.js +0 -3
- package/dist/client/assets/SettingsDrawer-J-8x1eII.css +0 -1
- package/dist/client/assets/SettingsScreen-C7zJgZzj.js +0 -1
- package/dist/client/assets/Terminal-CMQFmHnn.js +0 -1
- package/dist/client/assets/TerminalEmbedScreen-GvpoGERN.js +0 -1
- package/dist/client/assets/TerminalRelay-CIHlLVf1.js +0 -46
- package/dist/client/assets/WorkFilesViewer-C7H5fXaZ.js +0 -1
- package/dist/client/assets/agent-autocomplete-cOPLtuhM.js +0 -2
- package/dist/client/assets/agent-identity-CIMT7oV6.js +0 -1
- package/dist/client/assets/agent-specialization-D3-sqwhU.js +0 -1
- package/dist/client/assets/api-DEHEgJ9m.js +0 -1
- package/dist/client/assets/archive-DPMdoW_D.js +0 -1
- package/dist/client/assets/arrow-right-YRBoTTyf.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-D5Io6BIV.js +0 -1
- package/dist/client/assets/content-3b_jmxEx.js +0 -1
- package/dist/client/assets/content-B-i0XY-t.js +0 -1
- package/dist/client/assets/content-BD-DNFmb.js +0 -1
- package/dist/client/assets/content-BGeo5tgd.js +0 -1
- package/dist/client/assets/content-BMvXPLiQ.js +0 -1
- package/dist/client/assets/content-BWTbfMDg.js +0 -1
- package/dist/client/assets/content-BwCmeUmF.js +0 -1
- package/dist/client/assets/content-C1K3NcZa.js +0 -1
- package/dist/client/assets/content-C34J5_Af.js +0 -1
- package/dist/client/assets/content-CGRtIS2m.js +0 -1
- package/dist/client/assets/content-CIJo_-JS.js +0 -1
- package/dist/client/assets/content-CvqIqVAV.js +0 -1
- package/dist/client/assets/content-DRnwm-Vu.js +0 -1
- package/dist/client/assets/content-Dh39SSvP.js +0 -1
- package/dist/client/assets/content-DoypqDj5.js +0 -1
- package/dist/client/assets/content-n3mvc6NQ.js +0 -1
- package/dist/client/assets/conversation-model-CIzM7aXT.js +0 -1
- package/dist/client/assets/conversation-motion-features-CrP5K-dk.js +0 -1
- package/dist/client/assets/cpu-CtQc0Z9D.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-DdkMhTAV.js +0 -2
- package/dist/client/assets/embed-entry-DoSM1GZB.js +0 -2
- package/dist/client/assets/file-code-corner-C5Pc6znt.js +0 -1
- package/dist/client/assets/gauge-sc_gb5Zw.js +0 -1
- package/dist/client/assets/gestures-AzPBSf20.js +0 -1
- package/dist/client/assets/git-branch-CdJU49Af.js +0 -1
- package/dist/client/assets/home-moving-signal-CZo2bYBi.js +0 -1
- package/dist/client/assets/home-moving-signal-DMguaRWR.css +0 -1
- package/dist/client/assets/home-now-card-DgxfZHcR.js +0 -1
- package/dist/client/assets/hooks-CeCCO6Yg.js +0 -2
- package/dist/client/assets/host-advisor-B2Fqs5Dd.css +0 -1
- package/dist/client/assets/index-BIiI9gfa.js +0 -1
- package/dist/client/assets/index-CD2foMB8.js +0 -1
- package/dist/client/assets/index-DReHD_4U.js +0 -1
- package/dist/client/assets/index-DzlEgstl.css +0 -1
- package/dist/client/assets/index-NRbRrZw-.js +0 -10
- package/dist/client/assets/index-wLwc74Pu.css +0 -1
- package/dist/client/assets/inspector-panel-CBf8pW7s.js +0 -2
- package/dist/client/assets/layers-D9fblkql.js +0 -1
- package/dist/client/assets/layout-grid-Vd1chalc.js +0 -1
- package/dist/client/assets/left-41_3QKk1.js +0 -1
- package/dist/client/assets/left-B3ofA1Pr.js +0 -2
- package/dist/client/assets/left-BWBZQhxQ.js +0 -1
- package/dist/client/assets/left-BhA6essi.js +0 -1
- package/dist/client/assets/left-BmTKCv4f.js +0 -1
- package/dist/client/assets/left-CCGR6tIF.js +0 -2
- package/dist/client/assets/left-DH44V4I_.css +0 -1
- package/dist/client/assets/left-Dfwzkwh_.js +0 -1
- package/dist/client/assets/left-R2OOE7VG.css +0 -1
- package/dist/client/assets/left-advisor-yrzW1Kwz.js +0 -1
- package/dist/client/assets/left-agents-Bgahk0FF.js +0 -1
- package/dist/client/assets/left-default-CtkfAquc.js +0 -1
- package/dist/client/assets/left-lanes-CpujaVN3.js +0 -1
- package/dist/client/assets/left-mission-Bbd-fW6W.js +0 -1
- package/dist/client/assets/library-Dx14WNGd.js +0 -1
- package/dist/client/assets/mission-control-CnU7dNt1.css +0 -1
- package/dist/client/assets/persistent-state-Bm_0TmZL.js +0 -1
- package/dist/client/assets/profile-Y0X7HZHc.js +0 -1
- package/dist/client/assets/projects-inbox-Cbfj4Hx7.js +0 -1
- package/dist/client/assets/provider-Bq0ScH3v.js +0 -1
- package/dist/client/assets/proxy-DtC2iXnT.js +0 -1
- package/dist/client/assets/resolve-panes-BI3WdDS-.js +0 -1
- package/dist/client/assets/resolve-sidebar-context-_g0pIxOr.js +0 -1
- package/dist/client/assets/right-BA0F8fPI.js +0 -1
- package/dist/client/assets/right-C4GXB45w.js +0 -1
- package/dist/client/assets/right-CXetlD8X.js +0 -1
- package/dist/client/assets/right-CnRcQS_I.js +0 -1
- package/dist/client/assets/right-D2_rmbAH.js +0 -1
- package/dist/client/assets/right-Dqp--KwX.js +0 -1
- package/dist/client/assets/right-HJJzRuGD.js +0 -1
- package/dist/client/assets/right-WCMb8YXJ.js +0 -1
- package/dist/client/assets/router-Bx1tiwVe.js +0 -1
- package/dist/client/assets/scout-voice-BT3gYDhU.js +0 -1
- package/dist/client/assets/scoutbot-markdown-DIhLsYxz.js +0 -6
- package/dist/client/assets/secondaryNavConfig-BVQiyAXu.js +0 -1
- package/dist/client/assets/settings-BpKRzxOD.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-0fAsybdo.js +0 -1
- package/dist/client/assets/use-scout-dev-flags-DV_I6URU.js +0 -1
- package/dist/client/assets/useContentSecondaryNav-4atpGgFw.js +0 -1
- package/dist/client/assets/usePersistentState-InmPXIN4.js +0 -1
- package/dist/client/assets/zap-CocRNtyr.js +0 -1
- package/dist/client/crew/brik-bust.webp +0 -0
- package/dist/client/crew/brik-chip-id.webp +0 -0
- package/dist/client/crew/lulu-bust.webp +0 -0
- package/dist/client/crew/milo-bust.webp +0 -0
- package/dist/client/crew/milo-chip-id.webp +0 -0
- package/dist/client/crew/nori-bust.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/blink-half.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/blink-shut.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/look-left.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/look-right.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/look-up.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/rest.webp +0 -0
- package/dist/client/crew/sheets/sprout/blink-half.webp +0 -0
- package/dist/client/crew/sheets/sprout/blink-shut.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-left.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-right.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-up.webp +0 -0
- package/dist/client/crew/sprout-bust.webp +0 -0
- package/dist/client/crew/sprout-chip-id.webp +0 -0
- package/dist/client/crew/vex-bust.webp +0 -0
- package/dist/client/crew/vex-chip-id.webp +0 -0
- package/dist/client/crew/wrench-bust.webp +0 -0
- package/dist/client/crew/wrench-chip-id.webp +0 -0
- /package/dist/client/assets/{DocumentFocusViewer-BSC_JwVE.css → document-focus-viewer-BSC_JwVE.css} +0 -0
package/dist/node/main.mjs
CHANGED
|
@@ -14397,9 +14397,9 @@ var require_cjs11 = __commonJS((exports) => {
|
|
|
14397
14397
|
|
|
14398
14398
|
// ../runtime/dist/broker-process-manager.js
|
|
14399
14399
|
import { spawn as spawn2, spawnSync } from "node:child_process";
|
|
14400
|
-
import { existsSync as
|
|
14400
|
+
import { existsSync as existsSync6, mkdirSync as mkdirSync3, readFileSync as readFileSync4, renameSync as renameSync2, writeFileSync as writeFileSync3 } from "node:fs";
|
|
14401
14401
|
import { homedir as homedir5, networkInterfaces } from "node:os";
|
|
14402
|
-
import { dirname as
|
|
14402
|
+
import { dirname as dirname3, join as join5, resolve as resolve2 } from "node:path";
|
|
14403
14403
|
import { fileURLToPath } from "node:url";
|
|
14404
14404
|
|
|
14405
14405
|
// ../runtime/dist/broker-api.js
|
|
@@ -16224,202 +16224,9 @@ function readTailscaleSelfWebHostsSync(env = process.env) {
|
|
|
16224
16224
|
}
|
|
16225
16225
|
|
|
16226
16226
|
// ../runtime/dist/local-config.js
|
|
16227
|
-
import { existsSync as
|
|
16227
|
+
import { existsSync as existsSync4, mkdirSync as mkdirSync2, readFileSync as readFileSync3, renameSync, writeFileSync as writeFileSync2 } from "node:fs";
|
|
16228
16228
|
import { homedir as homedir3, hostname as osHostname } from "node:os";
|
|
16229
|
-
import { dirname as dirname2, join as join4 } from "node:path";
|
|
16230
|
-
|
|
16231
|
-
// ../runtime/dist/node-identity.js
|
|
16232
|
-
import { createHash, createPrivateKey, createPublicKey, generateKeyPairSync, randomBytes, sign, verify } from "node:crypto";
|
|
16233
|
-
import { chmodSync, existsSync as existsSync4, mkdirSync as mkdirSync2, readFileSync as readFileSync3, renameSync, rmSync as rmSync2, writeFileSync as writeFileSync2 } from "node:fs";
|
|
16234
16229
|
import { dirname, join as join3 } from "node:path";
|
|
16235
|
-
var NODE_IDENTITY_FILE = "node-identity.json";
|
|
16236
|
-
var NODE_FINGERPRINT_PREFIX = "osc1";
|
|
16237
|
-
var NODE_CARD_TTL_MS = 24 * 60 * 60 * 1000;
|
|
16238
|
-
var stableNodeQualifierCache = new Map;
|
|
16239
|
-
function stripBonjourCollisionSuffix(value) {
|
|
16240
|
-
if (!value || typeof value !== "string")
|
|
16241
|
-
return "";
|
|
16242
|
-
let trimmed = value.trim();
|
|
16243
|
-
const isDotLocal = /\.local\.?$/i.test(trimmed);
|
|
16244
|
-
if (isDotLocal) {
|
|
16245
|
-
trimmed = trimmed.replace(/\.local\.?$/i, "");
|
|
16246
|
-
}
|
|
16247
|
-
const isHyphenLocalOpenscout = /-local-openscout$/i.test(trimmed);
|
|
16248
|
-
const isHyphenLocal = !isHyphenLocalOpenscout && /-local$/i.test(trimmed);
|
|
16249
|
-
if (isHyphenLocalOpenscout) {
|
|
16250
|
-
trimmed = trimmed.replace(/-local-openscout$/i, "");
|
|
16251
|
-
} else if (isHyphenLocal) {
|
|
16252
|
-
trimmed = trimmed.replace(/-local$/i, "");
|
|
16253
|
-
}
|
|
16254
|
-
if (!isDotLocal && !isHyphenLocalOpenscout && !isHyphenLocal) {
|
|
16255
|
-
return trimmed;
|
|
16256
|
-
}
|
|
16257
|
-
trimmed = trimmed.replace(/(?<=[a-zA-Z].*?)(?:-\d+)+$/, "");
|
|
16258
|
-
if (isDotLocal)
|
|
16259
|
-
return `${trimmed}.local`;
|
|
16260
|
-
if (isHyphenLocalOpenscout)
|
|
16261
|
-
return `${trimmed}-local-openscout`;
|
|
16262
|
-
if (isHyphenLocal)
|
|
16263
|
-
return `${trimmed}-local`;
|
|
16264
|
-
return trimmed;
|
|
16265
|
-
}
|
|
16266
|
-
function nodeIdentityPath(supportDirectory) {
|
|
16267
|
-
const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
|
|
16268
|
-
return join3(dir, NODE_IDENTITY_FILE);
|
|
16269
|
-
}
|
|
16270
|
-
function loadOrCreateNodeIdentity(supportDirectory) {
|
|
16271
|
-
const path = nodeIdentityPath(supportDirectory);
|
|
16272
|
-
if (existsSync4(path)) {
|
|
16273
|
-
return readAndValidateNodeIdentity(path);
|
|
16274
|
-
}
|
|
16275
|
-
return createNodeIdentity(supportDirectory);
|
|
16276
|
-
}
|
|
16277
|
-
function readStableNodeQualifier(supportDirectory) {
|
|
16278
|
-
const path = nodeIdentityPath(supportDirectory);
|
|
16279
|
-
const cached = stableNodeQualifierCache.get(path);
|
|
16280
|
-
if (cached) {
|
|
16281
|
-
return cached;
|
|
16282
|
-
}
|
|
16283
|
-
if (!existsSync4(path)) {
|
|
16284
|
-
return null;
|
|
16285
|
-
}
|
|
16286
|
-
const nodeQualifier = normalizeNodeQualifier(readAndValidateNodeIdentity(path).nodeQualifier);
|
|
16287
|
-
if (nodeQualifier) {
|
|
16288
|
-
stableNodeQualifierCache.set(path, nodeQualifier);
|
|
16289
|
-
}
|
|
16290
|
-
return nodeQualifier || null;
|
|
16291
|
-
}
|
|
16292
|
-
function readAndValidateNodeIdentity(path) {
|
|
16293
|
-
let parsed;
|
|
16294
|
-
try {
|
|
16295
|
-
parsed = JSON.parse(readFileSync3(path, "utf8"));
|
|
16296
|
-
} catch {
|
|
16297
|
-
throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
|
|
16298
|
-
}
|
|
16299
|
-
if (parsed.version !== 1 || !parsed.publicKey || !parsed.privateKey) {
|
|
16300
|
-
throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
|
|
16301
|
-
}
|
|
16302
|
-
if (parsed.nodeQualifier !== undefined && normalizePersistedNodeQualifier(parsed.nodeQualifier) !== parsed.nodeQualifier) {
|
|
16303
|
-
throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
|
|
16304
|
-
}
|
|
16305
|
-
try {
|
|
16306
|
-
const derived = createPublicKey(importPrivateKey(parsed.privateKey)).export({ type: "spki", format: "der" }).toString("base64");
|
|
16307
|
-
if (derived !== parsed.publicKey) {
|
|
16308
|
-
throw new Error("mismatch");
|
|
16309
|
-
}
|
|
16310
|
-
} catch {
|
|
16311
|
-
throw new Error(`Node identity at ${path} has mismatched or invalid keys; remove it to generate a fresh one.`);
|
|
16312
|
-
}
|
|
16313
|
-
return parsed;
|
|
16314
|
-
}
|
|
16315
|
-
function normalizePersistedNodeQualifier(value) {
|
|
16316
|
-
return typeof value === "string" ? value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "") : "";
|
|
16317
|
-
}
|
|
16318
|
-
function normalizeNodeQualifier(value) {
|
|
16319
|
-
return stripBonjourCollisionSuffix(normalizePersistedNodeQualifier(value));
|
|
16320
|
-
}
|
|
16321
|
-
function createNodeIdentity(supportDirectory) {
|
|
16322
|
-
if (!supportDirectory) {
|
|
16323
|
-
assertTestIsolatedUserData("write the node identity", "OPENSCOUT_SUPPORT_DIRECTORY");
|
|
16324
|
-
}
|
|
16325
|
-
const path = nodeIdentityPath(supportDirectory);
|
|
16326
|
-
const { publicKey, privateKey } = generateKeyPairSync("ed25519");
|
|
16327
|
-
const identity = {
|
|
16328
|
-
version: 1,
|
|
16329
|
-
publicKey: publicKey.export({ type: "spki", format: "der" }).toString("base64"),
|
|
16330
|
-
privateKey: privateKey.export({ type: "pkcs8", format: "der" }).toString("base64"),
|
|
16331
|
-
createdAt: Date.now()
|
|
16332
|
-
};
|
|
16333
|
-
mkdirSync2(dirname(path), { recursive: true });
|
|
16334
|
-
try {
|
|
16335
|
-
writeFileSync2(path, `${JSON.stringify(identity, null, 2)}
|
|
16336
|
-
`, { encoding: "utf8", mode: 384, flag: "wx" });
|
|
16337
|
-
} catch (error) {
|
|
16338
|
-
if (error.code === "EEXIST") {
|
|
16339
|
-
return readAndValidateNodeIdentity(path);
|
|
16340
|
-
}
|
|
16341
|
-
throw error;
|
|
16342
|
-
}
|
|
16343
|
-
try {
|
|
16344
|
-
chmodSync(path, 384);
|
|
16345
|
-
} catch {}
|
|
16346
|
-
return identity;
|
|
16347
|
-
}
|
|
16348
|
-
function nodeKeyId(publicKeyBase64) {
|
|
16349
|
-
return createHash("sha256").update(Buffer.from(publicKeyBase64, "base64")).digest("hex");
|
|
16350
|
-
}
|
|
16351
|
-
function nodeFingerprint(publicKeyBase64) {
|
|
16352
|
-
const digest = createHash("sha256").update(Buffer.from(publicKeyBase64, "base64")).digest();
|
|
16353
|
-
const encoded = base32Encode(digest.subarray(0, 10)).toLowerCase();
|
|
16354
|
-
return `${NODE_FINGERPRINT_PREFIX}:${encoded.slice(0, 4)}-${encoded.slice(4, 8)}`;
|
|
16355
|
-
}
|
|
16356
|
-
function signNodePayload(identity, payload) {
|
|
16357
|
-
const key = importPrivateKey(identity.privateKey);
|
|
16358
|
-
return sign(null, typeof payload === "string" ? Buffer.from(payload, "utf8") : payload, key).toString("base64");
|
|
16359
|
-
}
|
|
16360
|
-
function verifyNodeSignature(publicKeyBase64, payload, signatureBase64) {
|
|
16361
|
-
try {
|
|
16362
|
-
const key = importPublicKey(publicKeyBase64);
|
|
16363
|
-
return verify(null, typeof payload === "string" ? Buffer.from(payload, "utf8") : payload, key, Buffer.from(signatureBase64, "base64"));
|
|
16364
|
-
} catch {
|
|
16365
|
-
return false;
|
|
16366
|
-
}
|
|
16367
|
-
}
|
|
16368
|
-
function canonicalJson(value) {
|
|
16369
|
-
if (value === null || typeof value !== "object") {
|
|
16370
|
-
return JSON.stringify(value);
|
|
16371
|
-
}
|
|
16372
|
-
if (Array.isArray(value)) {
|
|
16373
|
-
return `[${value.map(canonicalJson).join(",")}]`;
|
|
16374
|
-
}
|
|
16375
|
-
const record = value;
|
|
16376
|
-
const keys = Object.keys(record).sort();
|
|
16377
|
-
return `{${keys.map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`).join(",")}}`;
|
|
16378
|
-
}
|
|
16379
|
-
function verifySignedNodeCard(card, now = Date.now()) {
|
|
16380
|
-
if (nodeKeyId(card.publicKey) !== card.keyId) {
|
|
16381
|
-
return false;
|
|
16382
|
-
}
|
|
16383
|
-
if (nodeFingerprint(card.publicKey) !== card.fingerprint) {
|
|
16384
|
-
return false;
|
|
16385
|
-
}
|
|
16386
|
-
if (!Number.isFinite(card.expiresAt) || card.expiresAt <= now) {
|
|
16387
|
-
return false;
|
|
16388
|
-
}
|
|
16389
|
-
if (card.tls !== undefined) {
|
|
16390
|
-
if (typeof card.tls !== "object" || card.tls === null || typeof card.tls.spkiFingerprint !== "string" || !/^[0-9a-f]{64}$/.test(card.tls.spkiFingerprint)) {
|
|
16391
|
-
return false;
|
|
16392
|
-
}
|
|
16393
|
-
}
|
|
16394
|
-
const { signature, ...unsigned } = card;
|
|
16395
|
-
return verifyNodeSignature(card.publicKey, canonicalJson(unsigned), signature);
|
|
16396
|
-
}
|
|
16397
|
-
var BASE32_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
|
|
16398
|
-
function base32Encode(input) {
|
|
16399
|
-
let bits = 0;
|
|
16400
|
-
let value = 0;
|
|
16401
|
-
let output = "";
|
|
16402
|
-
for (const byte of input) {
|
|
16403
|
-
value = value << 8 | byte;
|
|
16404
|
-
bits += 8;
|
|
16405
|
-
while (bits >= 5) {
|
|
16406
|
-
output += BASE32_ALPHABET[value >>> bits - 5 & 31];
|
|
16407
|
-
bits -= 5;
|
|
16408
|
-
}
|
|
16409
|
-
}
|
|
16410
|
-
if (bits > 0) {
|
|
16411
|
-
output += BASE32_ALPHABET[value << 5 - bits & 31];
|
|
16412
|
-
}
|
|
16413
|
-
return output;
|
|
16414
|
-
}
|
|
16415
|
-
function importPrivateKey(privateKeyBase64) {
|
|
16416
|
-
return createPrivateKey({ key: Buffer.from(privateKeyBase64, "base64"), format: "der", type: "pkcs8" });
|
|
16417
|
-
}
|
|
16418
|
-
function importPublicKey(publicKeyBase64) {
|
|
16419
|
-
return createPublicKey({ key: Buffer.from(publicKeyBase64, "base64"), format: "der", type: "spki" });
|
|
16420
|
-
}
|
|
16421
|
-
|
|
16422
|
-
// ../runtime/dist/local-config.js
|
|
16423
16230
|
var LOCAL_CONFIG_VERSION = 1;
|
|
16424
16231
|
var DEFAULT_SCOUT_WEB_PORTAL_HOST = "scout.local";
|
|
16425
16232
|
var DEFAULT_SCOUT_WEB_DEV_HOST = `dev.${DEFAULT_SCOUT_WEB_PORTAL_HOST}`;
|
|
@@ -16444,17 +16251,17 @@ var DEFAULT_LOCAL_CONFIG = {
|
|
|
16444
16251
|
}
|
|
16445
16252
|
};
|
|
16446
16253
|
function localConfigHome() {
|
|
16447
|
-
return process.env.OPENSCOUT_HOME ??
|
|
16254
|
+
return process.env.OPENSCOUT_HOME ?? join3(homedir3(), ".openscout");
|
|
16448
16255
|
}
|
|
16449
16256
|
function localConfigPath() {
|
|
16450
|
-
return
|
|
16257
|
+
return join3(localConfigHome(), "config.json");
|
|
16451
16258
|
}
|
|
16452
16259
|
function loadLocalConfig() {
|
|
16453
16260
|
const configPath = localConfigPath();
|
|
16454
|
-
if (!
|
|
16261
|
+
if (!existsSync4(configPath))
|
|
16455
16262
|
return { version: LOCAL_CONFIG_VERSION };
|
|
16456
16263
|
try {
|
|
16457
|
-
return validateLocalConfig(JSON.parse(
|
|
16264
|
+
return validateLocalConfig(JSON.parse(readFileSync3(configPath, "utf8")));
|
|
16458
16265
|
} catch {
|
|
16459
16266
|
return { version: LOCAL_CONFIG_VERSION };
|
|
16460
16267
|
}
|
|
@@ -16532,34 +16339,34 @@ function resolveBrokerPort() {
|
|
|
16532
16339
|
function writeLocalConfig(config) {
|
|
16533
16340
|
assertTestIsolatedUserData("write the OpenScout local config", "OPENSCOUT_HOME");
|
|
16534
16341
|
const configPath = localConfigPath();
|
|
16535
|
-
|
|
16342
|
+
mkdirSync2(dirname(configPath), { recursive: true });
|
|
16536
16343
|
const body = JSON.stringify({ ...config, version: LOCAL_CONFIG_VERSION }, null, 2) + `
|
|
16537
16344
|
`;
|
|
16538
16345
|
const tmp = `${configPath}.tmp`;
|
|
16539
|
-
|
|
16540
|
-
|
|
16346
|
+
writeFileSync2(tmp, body, "utf8");
|
|
16347
|
+
renameSync(tmp, configPath);
|
|
16541
16348
|
}
|
|
16542
16349
|
function localConfigExists() {
|
|
16543
|
-
return
|
|
16350
|
+
return existsSync4(localConfigPath());
|
|
16544
16351
|
}
|
|
16545
16352
|
|
|
16546
16353
|
// ../runtime/dist/tool-resolution.js
|
|
16547
|
-
import { accessSync, constants, existsSync as
|
|
16354
|
+
import { accessSync, constants, existsSync as existsSync5 } from "node:fs";
|
|
16548
16355
|
import { homedir as homedir4 } from "node:os";
|
|
16549
|
-
import { basename, dirname as
|
|
16356
|
+
import { basename, dirname as dirname2, join as join4, resolve } from "node:path";
|
|
16550
16357
|
var DEFAULT_COMMON_EXECUTABLE_DIRECTORIES = [
|
|
16551
|
-
|
|
16358
|
+
join4(homedir4(), ".bun", "bin"),
|
|
16552
16359
|
"/opt/homebrew/bin",
|
|
16553
16360
|
"/usr/local/bin"
|
|
16554
16361
|
];
|
|
16555
16362
|
function commonClaudeExecutableDirectories(env) {
|
|
16556
16363
|
const home = env.HOME ?? homedir4();
|
|
16557
16364
|
return [
|
|
16558
|
-
|
|
16559
|
-
|
|
16365
|
+
join4(home, ".local", "bin"),
|
|
16366
|
+
join4(home, ".claude", "local"),
|
|
16560
16367
|
"/opt/homebrew/bin",
|
|
16561
16368
|
"/usr/local/bin",
|
|
16562
|
-
|
|
16369
|
+
join4(home, ".bun", "bin")
|
|
16563
16370
|
];
|
|
16564
16371
|
}
|
|
16565
16372
|
function expandHomePath(value, env = process.env) {
|
|
@@ -16568,7 +16375,7 @@ function expandHomePath(value, env = process.env) {
|
|
|
16568
16375
|
return home;
|
|
16569
16376
|
}
|
|
16570
16377
|
if (value.startsWith("~/")) {
|
|
16571
|
-
return
|
|
16378
|
+
return join4(home, value.slice(2));
|
|
16572
16379
|
}
|
|
16573
16380
|
return value;
|
|
16574
16381
|
}
|
|
@@ -16625,7 +16432,7 @@ function resolveExecutableFromSearch(options) {
|
|
|
16625
16432
|
], env);
|
|
16626
16433
|
for (const directory of searchDirectories) {
|
|
16627
16434
|
for (const name of options.names) {
|
|
16628
|
-
const candidate =
|
|
16435
|
+
const candidate = join4(directory, name);
|
|
16629
16436
|
if (isExecutablePath(candidate)) {
|
|
16630
16437
|
return {
|
|
16631
16438
|
path: candidate,
|
|
@@ -16639,7 +16446,7 @@ function resolveExecutableFromSearch(options) {
|
|
|
16639
16446
|
function resolveExecutableFromDirectories(directories, names, env, source) {
|
|
16640
16447
|
for (const directory of dedupeDirectories(directories, env)) {
|
|
16641
16448
|
for (const name of names) {
|
|
16642
|
-
const candidate =
|
|
16449
|
+
const candidate = join4(directory, name);
|
|
16643
16450
|
if (isExecutablePath(candidate)) {
|
|
16644
16451
|
return { path: candidate, source };
|
|
16645
16452
|
}
|
|
@@ -16677,7 +16484,7 @@ function findExecutableOnSearchPath(name, env) {
|
|
|
16677
16484
|
...DEFAULT_COMMON_EXECUTABLE_DIRECTORIES
|
|
16678
16485
|
], env);
|
|
16679
16486
|
for (const directory of searchDirectories) {
|
|
16680
|
-
const candidate =
|
|
16487
|
+
const candidate = join4(directory, name);
|
|
16681
16488
|
if (isExecutablePath(candidate)) {
|
|
16682
16489
|
return { path: candidate, source: "path" };
|
|
16683
16490
|
}
|
|
@@ -16695,14 +16502,14 @@ var DEFAULT_ADVERTISE_SCOPE = "local";
|
|
|
16695
16502
|
var MESH_BIND_CONFIG_FILE = "mesh-bind.json";
|
|
16696
16503
|
function meshBindConfigPath(supportDirectory) {
|
|
16697
16504
|
const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
|
|
16698
|
-
return
|
|
16505
|
+
return join5(dir, MESH_BIND_CONFIG_FILE);
|
|
16699
16506
|
}
|
|
16700
16507
|
function readPersistedAdvertiseScope(supportDirectory) {
|
|
16701
16508
|
const path = meshBindConfigPath(supportDirectory);
|
|
16702
|
-
if (!
|
|
16509
|
+
if (!existsSync6(path))
|
|
16703
16510
|
return null;
|
|
16704
16511
|
try {
|
|
16705
|
-
const parsed = JSON.parse(
|
|
16512
|
+
const parsed = JSON.parse(readFileSync4(path, "utf8"));
|
|
16706
16513
|
if (parsed.version !== 1)
|
|
16707
16514
|
return null;
|
|
16708
16515
|
if (parsed.advertiseScope === "mesh" || parsed.advertiseScope === "local") {
|
|
@@ -16821,7 +16628,7 @@ function isWildcardHost(host) {
|
|
|
16821
16628
|
return trimmed === "0.0.0.0" || trimmed === "::" || trimmed === "[::]";
|
|
16822
16629
|
}
|
|
16823
16630
|
function buildDefaultBrokerSocketPath(runtimeDirectory) {
|
|
16824
|
-
return
|
|
16631
|
+
return join5(runtimeDirectory, "broker.sock");
|
|
16825
16632
|
}
|
|
16826
16633
|
var DEFAULT_BROKER_URL = buildDefaultBrokerUrl();
|
|
16827
16634
|
function resolveScoutBrokerControlUrl(_config = resolveBrokerServiceConfig()) {
|
|
@@ -16840,17 +16647,17 @@ function runtimePackageDir() {
|
|
|
16840
16647
|
const fromGlobal = findGlobalRuntimeDir();
|
|
16841
16648
|
if (fromGlobal)
|
|
16842
16649
|
return fromGlobal;
|
|
16843
|
-
const moduleDir =
|
|
16650
|
+
const moduleDir = dirname3(fileURLToPath(import.meta.url));
|
|
16844
16651
|
return resolve2(moduleDir, "..");
|
|
16845
16652
|
}
|
|
16846
16653
|
function isInstalledRuntimePackageDir(candidate) {
|
|
16847
|
-
return
|
|
16654
|
+
return existsSync6(join5(candidate, "package.json")) && existsSync6(join5(candidate, "bin", "openscout-runtime.mjs"));
|
|
16848
16655
|
}
|
|
16849
16656
|
function findGlobalRuntimeDir() {
|
|
16850
16657
|
const candidates = [
|
|
16851
|
-
|
|
16852
|
-
|
|
16853
|
-
|
|
16658
|
+
join5(homedir5(), ".bun", "node_modules", "@openscout", "runtime"),
|
|
16659
|
+
join5(homedir5(), ".bun", "install", "global", "node_modules", "@openscout", "runtime"),
|
|
16660
|
+
join5(homedir5(), ".bun", "install", "global", "node_modules", "@openscout", "scout", "node_modules", "@openscout", "runtime")
|
|
16854
16661
|
];
|
|
16855
16662
|
for (const c of candidates) {
|
|
16856
16663
|
if (isInstalledRuntimePackageDir(c))
|
|
@@ -16863,7 +16670,7 @@ function findGlobalRuntimeDir() {
|
|
|
16863
16670
|
const scoutPkg = resolve2(scoutBin, "..", "..");
|
|
16864
16671
|
if (isInstalledRuntimePackageDir(scoutPkg))
|
|
16865
16672
|
return scoutPkg;
|
|
16866
|
-
const nested =
|
|
16673
|
+
const nested = join5(scoutPkg, "node_modules", "@openscout", "runtime");
|
|
16867
16674
|
if (isInstalledRuntimePackageDir(nested))
|
|
16868
16675
|
return nested;
|
|
16869
16676
|
const sibling = resolve2(scoutPkg, "..", "runtime");
|
|
@@ -16874,7 +16681,7 @@ function findGlobalRuntimeDir() {
|
|
|
16874
16681
|
return null;
|
|
16875
16682
|
}
|
|
16876
16683
|
function findBundledRuntimeDir() {
|
|
16877
|
-
const moduleDir =
|
|
16684
|
+
const moduleDir = dirname3(fileURLToPath(import.meta.url));
|
|
16878
16685
|
return resolveBundledRuntimeDirFromModuleDir(moduleDir);
|
|
16879
16686
|
}
|
|
16880
16687
|
function resolveBundledRuntimeDirFromModuleDir(moduleDir) {
|
|
@@ -16891,11 +16698,11 @@ function resolveBundledRuntimeDirFromModuleDir(moduleDir) {
|
|
|
16891
16698
|
function findWorkspaceRuntimeDir(startDir) {
|
|
16892
16699
|
let current = resolve2(startDir);
|
|
16893
16700
|
while (true) {
|
|
16894
|
-
const candidate =
|
|
16895
|
-
if (
|
|
16701
|
+
const candidate = join5(current, "packages", "runtime");
|
|
16702
|
+
if (existsSync6(join5(candidate, "package.json")) && existsSync6(join5(candidate, "src"))) {
|
|
16896
16703
|
return candidate;
|
|
16897
16704
|
}
|
|
16898
|
-
const parent =
|
|
16705
|
+
const parent = dirname3(current);
|
|
16899
16706
|
if (parent === current)
|
|
16900
16707
|
return null;
|
|
16901
16708
|
current = parent;
|
|
@@ -16942,17 +16749,17 @@ function resolveBrokerServiceConfig() {
|
|
|
16942
16749
|
const serviceAdapter = resolveBrokerServiceAdapter();
|
|
16943
16750
|
const uid = typeof process.getuid === "function" ? process.getuid() : Number.parseInt(process.env.UID ?? "0", 10);
|
|
16944
16751
|
const supportPaths = resolveOpenScoutSupportPaths();
|
|
16945
|
-
const defaultSupportDir =
|
|
16752
|
+
const defaultSupportDir = join5(homedir5(), "Library", "Application Support", "OpenScout");
|
|
16946
16753
|
const supportDirectory = isTmpPath(supportPaths.supportDirectory) ? defaultSupportDir : supportPaths.supportDirectory;
|
|
16947
|
-
const runtimeDirectory =
|
|
16948
|
-
const logsDirectory =
|
|
16949
|
-
const controlHome = isTmpPath(supportPaths.controlHome) ?
|
|
16754
|
+
const runtimeDirectory = join5(supportDirectory, "runtime");
|
|
16755
|
+
const logsDirectory = join5(supportDirectory, "logs", "broker");
|
|
16756
|
+
const controlHome = isTmpPath(supportPaths.controlHome) ? join5(homedir5(), ".openscout", "control-plane") : supportPaths.controlHome;
|
|
16950
16757
|
const advertiseScope = resolveAdvertiseScope(process.env, () => readPersistedAdvertiseScope(supportDirectory));
|
|
16951
16758
|
const brokerHost = resolveBrokerHost(advertiseScope);
|
|
16952
16759
|
const brokerPort = Number.parseInt(process.env.OPENSCOUT_BROKER_PORT ?? String(resolveBrokerPort()), 10);
|
|
16953
16760
|
const brokerUrl = resolveBrokerUrl(brokerHost, brokerPort, advertiseScope);
|
|
16954
16761
|
const brokerSocketPath = process.env.OPENSCOUT_BROKER_SOCKET_PATH ?? buildDefaultBrokerSocketPath(runtimeDirectory);
|
|
16955
|
-
const launchAgentPath =
|
|
16762
|
+
const launchAgentPath = join5(homedir5(), "Library", "LaunchAgents", `${label}.plist`);
|
|
16956
16763
|
return {
|
|
16957
16764
|
label,
|
|
16958
16765
|
mode,
|
|
@@ -16963,8 +16770,8 @@ function resolveBrokerServiceConfig() {
|
|
|
16963
16770
|
supportDirectory,
|
|
16964
16771
|
runtimeDirectory,
|
|
16965
16772
|
logsDirectory,
|
|
16966
|
-
stdoutLogPath:
|
|
16967
|
-
stderrLogPath:
|
|
16773
|
+
stdoutLogPath: join5(logsDirectory, "stdout.log"),
|
|
16774
|
+
stderrLogPath: join5(logsDirectory, "stderr.log"),
|
|
16968
16775
|
controlHome,
|
|
16969
16776
|
runtimePackageDir: runtimePackageDir(),
|
|
16970
16777
|
bunExecutable: serviceAdapter === "macos-scoutd" ? resolveBunExecutable2() : resolveOptionalBunExecutable(),
|
|
@@ -16998,10 +16805,10 @@ function resolveEnvExecutable(value) {
|
|
|
16998
16805
|
function findWorkspaceRootFromRuntimeDir(runtimePackageDir2) {
|
|
16999
16806
|
let current = resolve2(runtimePackageDir2);
|
|
17000
16807
|
while (true) {
|
|
17001
|
-
if (
|
|
16808
|
+
if (existsSync6(join5(current, "Cargo.toml")) && existsSync6(join5(current, "crates", "scoutd", "Cargo.toml"))) {
|
|
17002
16809
|
return current;
|
|
17003
16810
|
}
|
|
17004
|
-
const parent =
|
|
16811
|
+
const parent = dirname3(current);
|
|
17005
16812
|
if (parent === current)
|
|
17006
16813
|
return null;
|
|
17007
16814
|
current = parent;
|
|
@@ -17018,13 +16825,13 @@ function resolveScoutdCommand(config = resolveBrokerServiceConfig()) {
|
|
|
17018
16825
|
}
|
|
17019
16826
|
const workspaceRoot = findWorkspaceRootFromRuntimeDir(config.runtimePackageDir);
|
|
17020
16827
|
const packageCandidates = [
|
|
17021
|
-
|
|
17022
|
-
|
|
17023
|
-
|
|
17024
|
-
workspaceRoot ?
|
|
17025
|
-
workspaceRoot ?
|
|
17026
|
-
|
|
17027
|
-
|
|
16828
|
+
join5(config.runtimePackageDir, "bin", "scoutd"),
|
|
16829
|
+
join5(config.runtimePackageDir, "native", "scoutd"),
|
|
16830
|
+
join5(config.runtimePackageDir, "scoutd"),
|
|
16831
|
+
workspaceRoot ? join5(workspaceRoot, "packages", "cli", "bin", "scoutd") : null,
|
|
16832
|
+
workspaceRoot ? join5(workspaceRoot, "packages", "runtime", "bin", "scoutd") : null,
|
|
16833
|
+
join5(config.runtimeDirectory, "scoutd"),
|
|
16834
|
+
join5(dirname3(config.runtimePackageDir), "scout", "bin", "scoutd")
|
|
17028
16835
|
];
|
|
17029
16836
|
for (const candidate of packageCandidates) {
|
|
17030
16837
|
const resolved = executableCandidate(candidate);
|
|
@@ -17038,8 +16845,8 @@ function resolveScoutdCommand(config = resolveBrokerServiceConfig()) {
|
|
|
17038
16845
|
}
|
|
17039
16846
|
if (workspaceRoot && workspaceScoutdAllowed()) {
|
|
17040
16847
|
for (const candidate of [
|
|
17041
|
-
|
|
17042
|
-
|
|
16848
|
+
join5(workspaceRoot, "target", "release", "scoutd"),
|
|
16849
|
+
join5(workspaceRoot, "target", "debug", "scoutd")
|
|
17043
16850
|
]) {
|
|
17044
16851
|
const resolved = executableCandidate(candidate);
|
|
17045
16852
|
if (resolved) {
|
|
@@ -17124,7 +16931,7 @@ function normalizeNativeServiceStatus(input, config) {
|
|
|
17124
16931
|
const healthMeshId = readString2(healthRecord.meshId);
|
|
17125
16932
|
const healthSocketFallbackError = readString2(healthRecord.socketFallbackError);
|
|
17126
16933
|
const healthCounts = isRecord3(healthRecord.counts) ? healthRecord.counts : undefined;
|
|
17127
|
-
const installed = readBoolean(input.installed) ??
|
|
16934
|
+
const installed = readBoolean(input.installed) ?? existsSync6(config.launchAgentPath);
|
|
17128
16935
|
const loaded = readBoolean(input.loaded) ?? false;
|
|
17129
16936
|
const stdoutLogPath = readString2(input.stdoutLogPath) ?? config.stdoutLogPath;
|
|
17130
16937
|
const stderrLogPath = readString2(input.stderrLogPath) ?? config.stderrLogPath;
|
|
@@ -17245,8 +17052,8 @@ var SCHEMA_GUARDED_SERVICE_COMMANDS = new Set([
|
|
|
17245
17052
|
"restart"
|
|
17246
17053
|
]);
|
|
17247
17054
|
function assertBrokerServiceSchemaCompatible(config) {
|
|
17248
|
-
const databasePath =
|
|
17249
|
-
if (!
|
|
17055
|
+
const databasePath = join5(config.controlHome, "control-plane.sqlite");
|
|
17056
|
+
if (!existsSync6(databasePath))
|
|
17250
17057
|
return;
|
|
17251
17058
|
const database = openControlPlaneSqliteDatabase(databasePath, { readonly: true });
|
|
17252
17059
|
try {
|
|
@@ -17279,7 +17086,7 @@ async function runScoutdServiceCommand(command, config, timeoutMs = SCOUTD_DEFAU
|
|
|
17279
17086
|
function readCoreAgentsSync() {
|
|
17280
17087
|
try {
|
|
17281
17088
|
const settingsPath = resolveOpenScoutSupportPaths().settingsPath;
|
|
17282
|
-
const raw =
|
|
17089
|
+
const raw = readFileSync4(settingsPath, "utf8");
|
|
17283
17090
|
const settings = JSON.parse(raw);
|
|
17284
17091
|
const raw_agents = settings?.agents?.coreAgents;
|
|
17285
17092
|
if (Array.isArray(raw_agents)) {
|
|
@@ -17292,10 +17099,10 @@ function bootoutCommand(config) {
|
|
|
17292
17099
|
return `/bin/launchctl bootout ${config.serviceTarget}`;
|
|
17293
17100
|
}
|
|
17294
17101
|
function readLogLines(path) {
|
|
17295
|
-
if (!
|
|
17102
|
+
if (!existsSync6(path)) {
|
|
17296
17103
|
return [];
|
|
17297
17104
|
}
|
|
17298
|
-
return
|
|
17105
|
+
return readFileSync4(path, "utf8").split(`
|
|
17299
17106
|
`).map((line) => line.trim()).filter(Boolean);
|
|
17300
17107
|
}
|
|
17301
17108
|
function isPackageScriptBanner(line) {
|
|
@@ -17519,15 +17326,15 @@ if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1] && !pr
|
|
|
17519
17326
|
|
|
17520
17327
|
// ../runtime/dist/harness-catalog.js
|
|
17521
17328
|
import { execFileSync as execFileSync3 } from "node:child_process";
|
|
17522
|
-
import { existsSync as
|
|
17329
|
+
import { existsSync as existsSync7, statSync } from "node:fs";
|
|
17523
17330
|
import { mkdir, readFile as readFile2, writeFile } from "node:fs/promises";
|
|
17524
17331
|
import { homedir as homedir6 } from "node:os";
|
|
17525
|
-
import { dirname as
|
|
17332
|
+
import { dirname as dirname4, join as join7 } from "node:path";
|
|
17526
17333
|
|
|
17527
17334
|
// ../agent-sessions/dist/codex-executable.js
|
|
17528
17335
|
import { execFileSync as execFileSync2 } from "node:child_process";
|
|
17529
17336
|
import { accessSync as accessSync2, constants as constants2 } from "node:fs";
|
|
17530
|
-
import { delimiter, join as
|
|
17337
|
+
import { delimiter, join as join6 } from "node:path";
|
|
17531
17338
|
function isExecutable(filePath) {
|
|
17532
17339
|
if (!filePath)
|
|
17533
17340
|
return false;
|
|
@@ -17571,11 +17378,11 @@ function codexAppBundleCandidates(env) {
|
|
|
17571
17378
|
const appNames = ["Codex.app", "ChatGPT.app"];
|
|
17572
17379
|
const candidates = appNames.flatMap((appName) => [
|
|
17573
17380
|
{
|
|
17574
|
-
path:
|
|
17381
|
+
path: join6("/Applications", appName, "Contents", "Resources", "codex"),
|
|
17575
17382
|
source: "codex_app_bundle"
|
|
17576
17383
|
},
|
|
17577
17384
|
{
|
|
17578
|
-
path:
|
|
17385
|
+
path: join6(env.HOME ?? "", "Applications", appName, "Contents", "Resources", "codex"),
|
|
17579
17386
|
source: "codex_app_bundle"
|
|
17580
17387
|
}
|
|
17581
17388
|
]);
|
|
@@ -17583,7 +17390,7 @@ function codexAppBundleCandidates(env) {
|
|
|
17583
17390
|
}
|
|
17584
17391
|
function pathCandidates(env) {
|
|
17585
17392
|
return (env.PATH ?? "").split(delimiter).filter(Boolean).map((directory) => ({
|
|
17586
|
-
path:
|
|
17393
|
+
path: join6(directory, "codex"),
|
|
17587
17394
|
source: "path"
|
|
17588
17395
|
}));
|
|
17589
17396
|
}
|
|
@@ -17594,7 +17401,7 @@ function commonCandidates(env) {
|
|
|
17594
17401
|
"/opt/homebrew/bin",
|
|
17595
17402
|
"/usr/local/bin"
|
|
17596
17403
|
].filter(Boolean).map((directory) => ({
|
|
17597
|
-
path:
|
|
17404
|
+
path: join6(directory, "codex"),
|
|
17598
17405
|
source: "common"
|
|
17599
17406
|
}));
|
|
17600
17407
|
}
|
|
@@ -18230,7 +18037,7 @@ function expandHomePath2(value) {
|
|
|
18230
18037
|
if (value === "~")
|
|
18231
18038
|
return home;
|
|
18232
18039
|
if (value.startsWith("~/"))
|
|
18233
|
-
return
|
|
18040
|
+
return join7(home, value.slice(2));
|
|
18234
18041
|
return value;
|
|
18235
18042
|
}
|
|
18236
18043
|
function defaultWhichBinary(binary, platform) {
|
|
@@ -18264,7 +18071,7 @@ function defaultRunCommand(command, platform) {
|
|
|
18264
18071
|
}
|
|
18265
18072
|
function defaultRequirementExists(requirement) {
|
|
18266
18073
|
const expanded = expandHomePath2(requirement.path);
|
|
18267
|
-
if (!
|
|
18074
|
+
if (!existsSync7(expanded))
|
|
18268
18075
|
return false;
|
|
18269
18076
|
if (requirement.fileType === "any" || !requirement.fileType)
|
|
18270
18077
|
return true;
|
|
@@ -18493,7 +18300,7 @@ async function readHarnessCatalogOverrides(overridePath = resolveOpenScoutSuppor
|
|
|
18493
18300
|
}
|
|
18494
18301
|
}
|
|
18495
18302
|
async function writeHarnessCatalogOverrides(overrides, overridePath = resolveOpenScoutSupportPaths().harnessCatalogPath) {
|
|
18496
|
-
await mkdir(
|
|
18303
|
+
await mkdir(dirname4(overridePath), { recursive: true });
|
|
18497
18304
|
const payload = {
|
|
18498
18305
|
version: HARNESS_CATALOG_VERSION,
|
|
18499
18306
|
entries: overrides,
|
|
@@ -18503,7 +18310,7 @@ async function writeHarnessCatalogOverrides(overrides, overridePath = resolveOpe
|
|
|
18503
18310
|
`, "utf8");
|
|
18504
18311
|
}
|
|
18505
18312
|
async function ensureHarnessCatalogOverrideFile(overridePath = resolveOpenScoutSupportPaths().harnessCatalogPath) {
|
|
18506
|
-
if (
|
|
18313
|
+
if (existsSync7(overridePath))
|
|
18507
18314
|
return;
|
|
18508
18315
|
await writeHarnessCatalogOverrides({}, overridePath);
|
|
18509
18316
|
}
|
|
@@ -20827,22 +20634,22 @@ function validateScoutRendezvousCodename(codename) {
|
|
|
20827
20634
|
|
|
20828
20635
|
// ../runtime/dist/claude-statusline.js
|
|
20829
20636
|
import { appendFile, mkdir as mkdir2, readFile as readFile3, writeFile as writeFile2 } from "node:fs/promises";
|
|
20830
|
-
import { basename as basename2, dirname as
|
|
20637
|
+
import { basename as basename2, dirname as dirname5, join as join8 } from "node:path";
|
|
20831
20638
|
function resolveClaudeStatuslineDirectory() {
|
|
20832
|
-
return
|
|
20639
|
+
return join8(resolveOpenScoutSupportPaths().runtimeDirectory, "statusline");
|
|
20833
20640
|
}
|
|
20834
20641
|
function resolveClaudeStatuslineDelegatePath() {
|
|
20835
|
-
return
|
|
20642
|
+
return join8(resolveClaudeStatuslineDirectory(), "claude-delegate.json");
|
|
20836
20643
|
}
|
|
20837
20644
|
function resolveClaudeStatuslineWrapperPath() {
|
|
20838
|
-
return
|
|
20645
|
+
return join8(resolveClaudeStatuslineDirectory(), "claude-statusline.sh");
|
|
20839
20646
|
}
|
|
20840
20647
|
async function writeClaudeStatuslineDelegate(delegate, path = resolveClaudeStatuslineDelegatePath()) {
|
|
20841
20648
|
const next = {
|
|
20842
20649
|
version: 1,
|
|
20843
20650
|
...delegate
|
|
20844
20651
|
};
|
|
20845
|
-
await mkdir2(
|
|
20652
|
+
await mkdir2(dirname5(path), { recursive: true });
|
|
20846
20653
|
await writeFile2(path, JSON.stringify(next, null, 2) + `
|
|
20847
20654
|
`, "utf8");
|
|
20848
20655
|
return next;
|
|
@@ -20857,9 +20664,9 @@ function isOpenScoutClaudeStatuslineCommand(command, wrapperPath = resolveClaude
|
|
|
20857
20664
|
}
|
|
20858
20665
|
|
|
20859
20666
|
// ../runtime/dist/managed-installs.js
|
|
20860
|
-
import { createHash
|
|
20667
|
+
import { createHash } from "node:crypto";
|
|
20861
20668
|
import { mkdir as mkdir3, readFile as readFile4, writeFile as writeFile3 } from "node:fs/promises";
|
|
20862
|
-
import { dirname as
|
|
20669
|
+
import { dirname as dirname6 } from "node:path";
|
|
20863
20670
|
function emptyManagedInstallsFile(now = Date.now()) {
|
|
20864
20671
|
return {
|
|
20865
20672
|
version: 1,
|
|
@@ -20876,7 +20683,7 @@ function stableInstallId(input) {
|
|
|
20876
20683
|
input.provider ?? "",
|
|
20877
20684
|
input.targetPath ?? ""
|
|
20878
20685
|
].join("\x00");
|
|
20879
|
-
return `install.${
|
|
20686
|
+
return `install.${createHash("sha256").update(key).digest("hex").slice(0, 18)}`;
|
|
20880
20687
|
}
|
|
20881
20688
|
function normalizeManagedInstallsFile(value) {
|
|
20882
20689
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
@@ -20899,7 +20706,7 @@ async function readManagedInstallsFile(path = resolveOpenScoutSupportPaths().man
|
|
|
20899
20706
|
}
|
|
20900
20707
|
async function writeManagedInstallsFile(file, path = resolveOpenScoutSupportPaths().managedInstallsPath) {
|
|
20901
20708
|
assertTestIsolatedUserData("write the managed-installs registry", "OPENSCOUT_SUPPORT_DIRECTORY");
|
|
20902
|
-
await mkdir3(
|
|
20709
|
+
await mkdir3(dirname6(path), { recursive: true });
|
|
20903
20710
|
await writeFile3(path, JSON.stringify(file, null, 2) + `
|
|
20904
20711
|
`, "utf8");
|
|
20905
20712
|
}
|
|
@@ -20925,6 +20732,167 @@ async function upsertManagedInstall(input, now = Date.now()) {
|
|
|
20925
20732
|
return next;
|
|
20926
20733
|
}
|
|
20927
20734
|
|
|
20735
|
+
// ../runtime/dist/node-identity.js
|
|
20736
|
+
import { createHash as createHash2, createPrivateKey, createPublicKey, generateKeyPairSync, randomBytes, sign, verify } from "node:crypto";
|
|
20737
|
+
import { chmodSync, existsSync as existsSync8, mkdirSync as mkdirSync4, readFileSync as readFileSync5, renameSync as renameSync3, rmSync as rmSync2, writeFileSync as writeFileSync4 } from "node:fs";
|
|
20738
|
+
import { dirname as dirname7, join as join9 } from "node:path";
|
|
20739
|
+
var NODE_IDENTITY_FILE = "node-identity.json";
|
|
20740
|
+
var NODE_FINGERPRINT_PREFIX = "osc1";
|
|
20741
|
+
var NODE_CARD_TTL_MS = 24 * 60 * 60 * 1000;
|
|
20742
|
+
var stableNodeQualifierCache = new Map;
|
|
20743
|
+
function nodeIdentityPath(supportDirectory) {
|
|
20744
|
+
const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
|
|
20745
|
+
return join9(dir, NODE_IDENTITY_FILE);
|
|
20746
|
+
}
|
|
20747
|
+
function loadOrCreateNodeIdentity(supportDirectory) {
|
|
20748
|
+
const path = nodeIdentityPath(supportDirectory);
|
|
20749
|
+
if (existsSync8(path)) {
|
|
20750
|
+
return readAndValidateNodeIdentity(path);
|
|
20751
|
+
}
|
|
20752
|
+
return createNodeIdentity(supportDirectory);
|
|
20753
|
+
}
|
|
20754
|
+
function readStableNodeQualifier(supportDirectory) {
|
|
20755
|
+
const path = nodeIdentityPath(supportDirectory);
|
|
20756
|
+
const cached = stableNodeQualifierCache.get(path);
|
|
20757
|
+
if (cached) {
|
|
20758
|
+
return cached;
|
|
20759
|
+
}
|
|
20760
|
+
if (!existsSync8(path)) {
|
|
20761
|
+
return null;
|
|
20762
|
+
}
|
|
20763
|
+
const nodeQualifier = normalizeNodeQualifier(readAndValidateNodeIdentity(path).nodeQualifier);
|
|
20764
|
+
if (nodeQualifier) {
|
|
20765
|
+
stableNodeQualifierCache.set(path, nodeQualifier);
|
|
20766
|
+
}
|
|
20767
|
+
return nodeQualifier || null;
|
|
20768
|
+
}
|
|
20769
|
+
function readAndValidateNodeIdentity(path) {
|
|
20770
|
+
let parsed;
|
|
20771
|
+
try {
|
|
20772
|
+
parsed = JSON.parse(readFileSync5(path, "utf8"));
|
|
20773
|
+
} catch {
|
|
20774
|
+
throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
|
|
20775
|
+
}
|
|
20776
|
+
if (parsed.version !== 1 || !parsed.publicKey || !parsed.privateKey) {
|
|
20777
|
+
throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
|
|
20778
|
+
}
|
|
20779
|
+
if (parsed.nodeQualifier !== undefined && normalizeNodeQualifier(parsed.nodeQualifier) !== parsed.nodeQualifier) {
|
|
20780
|
+
throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
|
|
20781
|
+
}
|
|
20782
|
+
try {
|
|
20783
|
+
const derived = createPublicKey(importPrivateKey(parsed.privateKey)).export({ type: "spki", format: "der" }).toString("base64");
|
|
20784
|
+
if (derived !== parsed.publicKey) {
|
|
20785
|
+
throw new Error("mismatch");
|
|
20786
|
+
}
|
|
20787
|
+
} catch {
|
|
20788
|
+
throw new Error(`Node identity at ${path} has mismatched or invalid keys; remove it to generate a fresh one.`);
|
|
20789
|
+
}
|
|
20790
|
+
return parsed;
|
|
20791
|
+
}
|
|
20792
|
+
function normalizeNodeQualifier(value) {
|
|
20793
|
+
return typeof value === "string" ? value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "") : "";
|
|
20794
|
+
}
|
|
20795
|
+
function createNodeIdentity(supportDirectory) {
|
|
20796
|
+
if (!supportDirectory) {
|
|
20797
|
+
assertTestIsolatedUserData("write the node identity", "OPENSCOUT_SUPPORT_DIRECTORY");
|
|
20798
|
+
}
|
|
20799
|
+
const path = nodeIdentityPath(supportDirectory);
|
|
20800
|
+
const { publicKey, privateKey } = generateKeyPairSync("ed25519");
|
|
20801
|
+
const identity = {
|
|
20802
|
+
version: 1,
|
|
20803
|
+
publicKey: publicKey.export({ type: "spki", format: "der" }).toString("base64"),
|
|
20804
|
+
privateKey: privateKey.export({ type: "pkcs8", format: "der" }).toString("base64"),
|
|
20805
|
+
createdAt: Date.now()
|
|
20806
|
+
};
|
|
20807
|
+
mkdirSync4(dirname7(path), { recursive: true });
|
|
20808
|
+
try {
|
|
20809
|
+
writeFileSync4(path, `${JSON.stringify(identity, null, 2)}
|
|
20810
|
+
`, { encoding: "utf8", mode: 384, flag: "wx" });
|
|
20811
|
+
} catch (error) {
|
|
20812
|
+
if (error.code === "EEXIST") {
|
|
20813
|
+
return readAndValidateNodeIdentity(path);
|
|
20814
|
+
}
|
|
20815
|
+
throw error;
|
|
20816
|
+
}
|
|
20817
|
+
try {
|
|
20818
|
+
chmodSync(path, 384);
|
|
20819
|
+
} catch {}
|
|
20820
|
+
return identity;
|
|
20821
|
+
}
|
|
20822
|
+
function nodeKeyId(publicKeyBase64) {
|
|
20823
|
+
return createHash2("sha256").update(Buffer.from(publicKeyBase64, "base64")).digest("hex");
|
|
20824
|
+
}
|
|
20825
|
+
function nodeFingerprint(publicKeyBase64) {
|
|
20826
|
+
const digest = createHash2("sha256").update(Buffer.from(publicKeyBase64, "base64")).digest();
|
|
20827
|
+
const encoded = base32Encode(digest.subarray(0, 10)).toLowerCase();
|
|
20828
|
+
return `${NODE_FINGERPRINT_PREFIX}:${encoded.slice(0, 4)}-${encoded.slice(4, 8)}`;
|
|
20829
|
+
}
|
|
20830
|
+
function signNodePayload(identity, payload) {
|
|
20831
|
+
const key = importPrivateKey(identity.privateKey);
|
|
20832
|
+
return sign(null, typeof payload === "string" ? Buffer.from(payload, "utf8") : payload, key).toString("base64");
|
|
20833
|
+
}
|
|
20834
|
+
function verifyNodeSignature(publicKeyBase64, payload, signatureBase64) {
|
|
20835
|
+
try {
|
|
20836
|
+
const key = importPublicKey(publicKeyBase64);
|
|
20837
|
+
return verify(null, typeof payload === "string" ? Buffer.from(payload, "utf8") : payload, key, Buffer.from(signatureBase64, "base64"));
|
|
20838
|
+
} catch {
|
|
20839
|
+
return false;
|
|
20840
|
+
}
|
|
20841
|
+
}
|
|
20842
|
+
function canonicalJson(value) {
|
|
20843
|
+
if (value === null || typeof value !== "object") {
|
|
20844
|
+
return JSON.stringify(value);
|
|
20845
|
+
}
|
|
20846
|
+
if (Array.isArray(value)) {
|
|
20847
|
+
return `[${value.map(canonicalJson).join(",")}]`;
|
|
20848
|
+
}
|
|
20849
|
+
const record2 = value;
|
|
20850
|
+
const keys = Object.keys(record2).sort();
|
|
20851
|
+
return `{${keys.map((key) => `${JSON.stringify(key)}:${canonicalJson(record2[key])}`).join(",")}}`;
|
|
20852
|
+
}
|
|
20853
|
+
function verifySignedNodeCard(card, now = Date.now()) {
|
|
20854
|
+
if (nodeKeyId(card.publicKey) !== card.keyId) {
|
|
20855
|
+
return false;
|
|
20856
|
+
}
|
|
20857
|
+
if (nodeFingerprint(card.publicKey) !== card.fingerprint) {
|
|
20858
|
+
return false;
|
|
20859
|
+
}
|
|
20860
|
+
if (!Number.isFinite(card.expiresAt) || card.expiresAt <= now) {
|
|
20861
|
+
return false;
|
|
20862
|
+
}
|
|
20863
|
+
if (card.tls !== undefined) {
|
|
20864
|
+
if (typeof card.tls !== "object" || card.tls === null || typeof card.tls.spkiFingerprint !== "string" || !/^[0-9a-f]{64}$/.test(card.tls.spkiFingerprint)) {
|
|
20865
|
+
return false;
|
|
20866
|
+
}
|
|
20867
|
+
}
|
|
20868
|
+
const { signature, ...unsigned } = card;
|
|
20869
|
+
return verifyNodeSignature(card.publicKey, canonicalJson(unsigned), signature);
|
|
20870
|
+
}
|
|
20871
|
+
var BASE32_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
|
|
20872
|
+
function base32Encode(input) {
|
|
20873
|
+
let bits = 0;
|
|
20874
|
+
let value = 0;
|
|
20875
|
+
let output = "";
|
|
20876
|
+
for (const byte of input) {
|
|
20877
|
+
value = value << 8 | byte;
|
|
20878
|
+
bits += 8;
|
|
20879
|
+
while (bits >= 5) {
|
|
20880
|
+
output += BASE32_ALPHABET[value >>> bits - 5 & 31];
|
|
20881
|
+
bits -= 5;
|
|
20882
|
+
}
|
|
20883
|
+
}
|
|
20884
|
+
if (bits > 0) {
|
|
20885
|
+
output += BASE32_ALPHABET[value << 5 - bits & 31];
|
|
20886
|
+
}
|
|
20887
|
+
return output;
|
|
20888
|
+
}
|
|
20889
|
+
function importPrivateKey(privateKeyBase64) {
|
|
20890
|
+
return createPrivateKey({ key: Buffer.from(privateKeyBase64, "base64"), format: "der", type: "pkcs8" });
|
|
20891
|
+
}
|
|
20892
|
+
function importPublicKey(publicKeyBase64) {
|
|
20893
|
+
return createPublicKey({ key: Buffer.from(publicKeyBase64, "base64"), format: "der", type: "spki" });
|
|
20894
|
+
}
|
|
20895
|
+
|
|
20928
20896
|
// ../runtime/dist/user-project-hints.js
|
|
20929
20897
|
import { readdir, readFile as readFile5, stat } from "node:fs/promises";
|
|
20930
20898
|
import { homedir as homedir7 } from "node:os";
|