@openscout/scout 0.2.79 → 0.2.80
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/bin/scoutd +0 -0
- package/dist/build-manifest.json +3 -3
- package/dist/client/assets/ActivityScreen-BXm6nJ6L.js +1 -0
- package/dist/client/assets/{AddProjectForm-BoVtelSP.js → AddProjectForm-CtEiLQnm.js} +1 -1
- package/dist/client/assets/{AgentAvatar-CufDA4A-.js → AgentAvatar-CszU5eaU.js} +1 -1
- package/dist/client/assets/AgentConfigurationScreen-CfBXxrsD.js +1 -0
- package/dist/client/assets/AgentDefinitionsWorkspace-4Z0aN8AR.js +1 -0
- package/dist/client/assets/{AgentDetailCard-DxxVkgT1.js → AgentDetailCard-sZuHl1de.js} +1 -1
- package/dist/client/assets/AgentFloorView-DMivAYHU.js +1 -0
- package/dist/client/assets/AgentInfoScreen-CPkLg1pK.js +1 -0
- package/dist/client/assets/{AgentLaneCard-DTUvE96I.js → AgentLaneCard-nB68f2CI.js} +1 -1
- package/dist/client/assets/{AgentLaneChrome-BfVygkgL.js → AgentLaneChrome-O9Yf0uR-.js} +1 -1
- package/dist/client/assets/AgentLaneDetailSheet-BfhpaEQ3.js +4 -0
- package/dist/client/assets/{AgentLaneSummaryResize-CMgzYvAA.js → AgentLaneSummaryResize-Ct3b0TQR.js} +1 -1
- package/dist/client/assets/AgentLanesEmbedScreen-CjHMvy3v.js +1 -0
- package/dist/client/assets/{AgentLanesPreflight-KWfLcaNB.js → AgentLanesPreflight-DNGvZvjd.js} +1 -1
- package/dist/client/assets/{AgentLanesView-CxfbV8Kd.js → AgentLanesView-DqRK5-d2.js} +1 -1
- package/dist/client/assets/{AgentLiveActions-CZdAInEu.js → AgentLiveActions-DI4ooSHW.js} +1 -1
- package/dist/client/assets/{AgentSessions-Bkr0lyry.js → AgentSessions-BxWIPkWh.js} +1 -1
- package/dist/client/assets/{AgentsConsole-WtFVqaPJ.js → AgentsConsole-D6VHSCfZ.js} +1 -1
- package/dist/client/assets/AgentsScreen-zR6b2bUL.js +1 -0
- package/dist/client/assets/AgentsSubnav-q0xcZi6C.js +1 -0
- package/dist/client/assets/{AtopView-_OKDlZ1h.js → AtopView-VZkk40v0.js} +1 -1
- package/dist/client/assets/{BackToPicker-CkUmHuuo.js → BackToPicker-DZg_4nHL.js} +1 -1
- package/dist/client/assets/{BriefingDetailScreen-i54EtZKW.js → BriefingDetailScreen-BZU4qMwE.js} +1 -1
- package/dist/client/assets/{BriefingsScreen-CBrHojlQ.js → BriefingsScreen-Bfc3tqPp.js} +1 -1
- package/dist/client/assets/{BrokerMetadataPanel-opTLuZU6.js → BrokerMetadataPanel-CaFe6kdh.js} +1 -1
- package/dist/client/assets/BrokerScreen-Chh8sGen.js +5 -0
- package/dist/client/assets/{ChatCollapsedStrip-Dr2vmKXQ.js → ChatCollapsedStrip-Cov54p9V.js} +1 -1
- package/dist/client/assets/{CodeDiffPane-CLOGjwul.js → CodeDiffPane-C1ebFt-Y.js} +1 -1
- package/dist/client/assets/{CodeProjectPicker-DTV8hR6A.js → CodeProjectPicker-tsCly-f3.js} +1 -1
- package/dist/client/assets/CodeScreen-D0hpZNLP.js +1 -0
- package/dist/client/assets/{ContextMenu-BlBQhpax.js → ContextMenu-N-Z6X0Z1.js} +1 -1
- package/dist/client/assets/ConversationComposer-CiEF7dhd.js +1 -0
- package/dist/client/assets/ConversationFeedRows-5it6QNBV.js +1 -0
- package/dist/client/assets/ConversationHeader-BGgbITvr.js +1 -0
- package/dist/client/assets/ConversationPanels-vI9YuQJh.js +2 -0
- package/dist/client/assets/ConversationScreen-C-PrCRz1.js +1 -0
- package/dist/client/assets/ConversationScreen-yIKEsm-8.css +1 -0
- package/dist/client/assets/{ConversationStatus-DSgdVofa.js → ConversationStatus-COEj5loj.js} +1 -1
- package/dist/client/assets/{DataTable-0DwuXyvW.js → DataTable-BoofV-_4.js} +1 -1
- package/dist/client/assets/{DispatchAftermath-BrreQifA.js → DispatchAftermath-OXYlMbT1.js} +1 -1
- package/dist/client/assets/{DocumentFocusViewer-DU_9BHsD.js → DocumentFocusViewer-BCG2kOmd.js} +1 -1
- package/dist/client/assets/{EmbeddableSurfacesLab-DdaswbfI.js → EmbeddableSurfacesLab-C2SZvrHJ.js} +1 -1
- package/dist/client/assets/{EmptyState-CoL-QuUO.js → EmptyState-DypEjx0V.js} +1 -1
- package/dist/client/assets/{FileViewerPane-C9Ly01Ef.js → FileViewerPane-CXCq-oKj.js} +1 -1
- package/dist/client/assets/{FleetSearch-DlWTLl-v.js → FleetSearch-Dj7-CfNi.js} +1 -1
- package/dist/client/assets/FlightObserveScreen-Yq5NtQQJ.js +1 -0
- package/dist/client/assets/FollowScreen-DRgYuAvp.js +1 -0
- package/dist/client/assets/HarnessMark-BE-YSyci.js +1 -0
- package/dist/client/assets/HarnessesScreen-L-emPcXd.js +1 -0
- package/dist/client/assets/HerdrSession-DKFCJMst.js +4 -0
- package/dist/client/assets/{HomeHero-Cfsow7qL.js → HomeHero-CAEg8Yg5.js} +1 -1
- package/dist/client/assets/{KnowledgeSearchInspector-DKashKoH.js → KnowledgeSearchInspector-C2EZsQ5i.js} +1 -1
- package/dist/client/assets/KnowledgeSearchScreen-DvdOFh-b.js +1 -0
- package/dist/client/assets/{LaneToolHoverCard-BzehBmdi.js → LaneToolHoverCard-DrPXYZvQ.js} +1 -1
- package/dist/client/assets/LaneTraceDetailSheet-Dl7foF88.js +1 -0
- package/dist/client/assets/{LaneTraceEventFocus-DYvHfs_3.js → LaneTraceEventFocus-X4-DDFEo.js} +1 -1
- package/dist/client/assets/{MeshCanvas-DIjlrMPU.js → MeshCanvas-rtCBD7s6.js} +1 -1
- package/dist/client/assets/{MeshCanvasMinimap-DEq-PkF0.js → MeshCanvasMinimap-CuvXOkc7.js} +1 -1
- package/dist/client/assets/MeshScreen-D5zzTn0o.js +1 -0
- package/dist/client/assets/{MeshTopologyView-BMHpH5BU.js → MeshTopologyView-CeTShs-U.js} +2 -2
- package/dist/client/assets/{MessageComposerSuggestions-zAUUcLOv.js → MessageComposerSuggestions-Cs9u-F_3.js} +1 -1
- package/dist/client/assets/MessagesScreen-BhOJ7_tj.js +1 -0
- package/dist/client/assets/MissionContextRail-0O-Zu1Tn.js +1 -0
- package/dist/client/assets/MissionControlView-D2JO9u-y.js +1 -0
- package/dist/client/assets/{MissionFocusOverlay-C7cPt6eU.js → MissionFocusOverlay-LnjmqBiW.js} +1 -1
- package/dist/client/assets/{MissionLeftAgentRow-CxlH3dON.js → MissionLeftAgentRow-nc1Jyq3D.js} +1 -1
- package/dist/client/assets/MissionLogPane-lZ9vUftY.js +1 -0
- package/dist/client/assets/{NewAgentModal-DprvD4EK.js → NewAgentModal-K1cvdmZr.js} +1 -1
- package/dist/client/assets/NewChatComposer-C5LT7MF7.css +1 -0
- package/dist/client/assets/NewChatComposer-DXDxV2Mh.js +19 -0
- package/dist/client/assets/{NewChatOrigin--pHWUb4V.js → NewChatOrigin-CnjoswTG.js} +1 -1
- package/dist/client/assets/{ObserveEmbedScreen-CfvrnOiZ.js → ObserveEmbedScreen-CRpzYf0Y.js} +1 -1
- package/dist/client/assets/{ObserveTextFlow-CBitljxi.js → ObserveTextFlow-DJxQc2H6.js} +2 -2
- package/dist/client/assets/{ObservedTopologyPanel-Dv6fbHzW.js → ObservedTopologyPanel-C1AQM0Mq.js} +1 -1
- package/dist/client/assets/OpenScoutAppShell-DrHYD_pd.js +87 -0
- package/dist/client/assets/OpsAgentsView-BnMX0vEY.js +1 -0
- package/dist/client/assets/OpsScreen-BeC0lieE.js +1 -0
- package/dist/client/assets/OpsSubnav-D5Bpowtk.js +1 -0
- package/dist/client/assets/{PlanView-DYtt8H37.js → PlanView-DDXdC19M.js} +1 -1
- package/dist/client/assets/ProjectAgentProfile-zE1cApxw.js +1 -0
- package/dist/client/assets/{ProjectAgentProfileBar-B3IvVbqS.js → ProjectAgentProfileBar-MODhG0P6.js} +1 -1
- package/dist/client/assets/{ProjectAgentProfileHero-D5E8yvDj.js → ProjectAgentProfileHero-C1ImgGDu.js} +1 -1
- package/dist/client/assets/ProjectsInbox-C3Jd6JTk.js +2 -0
- package/dist/client/assets/{ProjectsRail-DEDS-M1c.js → ProjectsRail-B1zrQLZe.js} +1 -1
- package/dist/client/assets/ProjectsScreen-PW_NH5VK.js +1 -0
- package/dist/client/assets/ProjectsThreadAside-DaCEUWN1.js +1 -0
- package/dist/client/assets/Provider-DSsb2gLR.js +1 -0
- package/dist/client/assets/{RailRow-BTlVAnHS.js → RailRow-DerXOXQS.js} +1 -1
- package/dist/client/assets/RawSessionsTable-LWEvXJzj.js +1 -0
- package/dist/client/assets/RealtimeVoiceScreen-XtxbCjOs.js +1 -0
- package/dist/client/assets/{RepoDiffEmbedScreen-CtTdlQ2A.js → RepoDiffEmbedScreen-C9oLCcZX.js} +1 -1
- package/dist/client/assets/{RepoDiffPageScreen-BRvaVYoC.js → RepoDiffPageScreen-CGEMAv2Z.js} +1 -1
- package/dist/client/assets/{RepoDiffViewer-Bo0gREMj.js → RepoDiffViewer-CB8PSVey.js} +1 -1
- package/dist/client/assets/RepoDiffViewerLazy-DIxkiMto.js +2 -0
- package/dist/client/assets/{ReposScreen-BBkJf8xT.js → ReposScreen-BN1lVjOj.js} +1 -1
- package/dist/client/assets/{ScoutDeckSurface-Bi9ov9Bm.js → ScoutDeckSurface-BCpl0QCx.js} +1 -1
- package/dist/client/assets/{ScoutSurface-DEQg_7Io.js → ScoutSurface-BEnDlynn.js} +1 -1
- package/dist/client/assets/{ScoutbotBroadcastChip-DJXuyn73.js → ScoutbotBroadcastChip-z9R_pC_U.js} +1 -1
- package/dist/client/assets/{ScoutbotFxLab-BgsuLDjo.js → ScoutbotFxLab-fAROyIfz.js} +1 -1
- package/dist/client/assets/{ScoutbotRealtimeVoiceCall-Bzyl0BCS.js → ScoutbotRealtimeVoiceCall-CDyFJX8m.js} +1 -1
- package/dist/client/assets/{SecondaryNav-Bks0CO2h.js → SecondaryNav-Hv5AJ3Fv.js} +1 -1
- package/dist/client/assets/{SessionEmbedScreen-b0Zgmfx5.js → SessionEmbedScreen-CDRpQc3g.js} +1 -1
- package/dist/client/assets/{SessionObserve-Dlx5vDaV.js → SessionObserve-BmmJ8dEh.js} +1 -1
- package/dist/client/assets/{SessionObserveEvidence-ChBD1d4c.js → SessionObserveEvidence-CEedIk2a.js} +1 -1
- package/dist/client/assets/SessionRefScreen-Dk-O4OVt.js +1 -0
- package/dist/client/assets/SessionsScreen-BJEjuo2X.js +1 -0
- package/dist/client/assets/{SettingsDrawer-C587L1i1.js → SettingsDrawer-DL-SVLdd.js} +1 -1
- package/dist/client/assets/SettingsScreen-DJ-BhBwR.js +1 -0
- package/dist/client/assets/{ShikiPane-I_OTW5NO.js → ShikiPane-B7O4if20.js} +1 -1
- package/dist/client/assets/{SlidePanel-FCqT1zO3.js → SlidePanel-B3gc5HnM.js} +1 -1
- package/dist/client/assets/{SpriteAvatar-CQs-jC-v.js → SpriteAvatar-BpQDpOkq.js} +1 -1
- package/dist/client/assets/{StatusPill-CbABggnQ.js → StatusPill-B33sQinT.js} +1 -1
- package/dist/client/assets/{TailView-C_MXVSum.js → TailView-DL3YZkzE.js} +2 -2
- package/dist/client/assets/Terminal-Dp1FSGIS.js +1 -0
- package/dist/client/assets/TerminalEmbedScreen-DP9IM4xf.js +1 -0
- package/dist/client/assets/{TextDocumentSurface-C-9EtYqt.js → TextDocumentSurface-DRjctOIt.js} +1 -1
- package/dist/client/assets/{TmuxPeek-Dz1gJ2pU.js → TmuxPeek-DNC4uWky.js} +1 -1
- package/dist/client/assets/{VoicePermissionsPanel-MfICy9kk.js → VoicePermissionsPanel-WLN0V-Xv.js} +1 -1
- package/dist/client/assets/{WorkDetailScreen-Cs7kdllj.js → WorkDetailScreen-D2Yl0mYZ.js} +1 -1
- package/dist/client/assets/{WorkFilesViewer-CF-nhtZ4.js → WorkFilesViewer-BbVfcUN-.js} +1 -1
- package/dist/client/assets/{activity-WhBf3FXP.js → activity-BxwKkT8z.js} +1 -1
- package/dist/client/assets/{addon-fit-q-x_HytU.js → addon-fit-B9O2vJoh.js} +1 -1
- package/dist/client/assets/{addon-webgl-fhhvEA9h.js → addon-webgl-BhRZFDcn.js} +1 -1
- package/dist/client/assets/{agent-essentials-DyJiUGpZ.js → agent-essentials-SrzMYEXV.js} +1 -1
- package/dist/client/assets/agent-identity-BxCsXnDp.js +1 -0
- package/dist/client/assets/{agent-lane-card-model-BCIwPjEh.js → agent-lane-card-model-DSWdGu-v.js} +1 -1
- package/dist/client/assets/agent-lane-detail-BNNm6FNu.js +2 -0
- package/dist/client/assets/{agent-lane-preview-BtnfNyFR.js → agent-lane-preview-C33Dwpn7.js} +1 -1
- package/dist/client/assets/{agent-lanes-model-Bl6xfviL.js → agent-lanes-model-CPgQRenB.js} +2 -2
- package/dist/client/assets/{arc.es-DPJ0xRV6.js → arc.es-NlJw-19N.js} +1 -1
- package/dist/client/assets/{arrow-down-DsD-dYj-.js → arrow-down-D3-IbArq.js} +1 -1
- package/dist/client/assets/{arrow-left-WjQIN9J6.js → arrow-left-_vS7itsV.js} +1 -1
- package/dist/client/assets/{arrow-up-right-CtTDrZJr.js → arrow-up-right-CcrWONpD.js} +1 -1
- package/dist/client/assets/{bot-B_Uzf4_O.js → bot-BRINYlC6.js} +1 -1
- package/dist/client/assets/{check-BbgHJX8u.js → check-COxArFXG.js} +1 -1
- package/dist/client/assets/{chevron-down-BFai6ZfE.js → chevron-down-DRCbnzyY.js} +1 -1
- package/dist/client/assets/{chevron-right-CyUa1zXx.js → chevron-right-CNE6QAVr.js} +1 -1
- package/dist/client/assets/{chunk-HRAB3GC3-CvwpNg-G.js → chunk-HRAB3GC3-CAeEKaf5.js} +1 -1
- package/dist/client/assets/chunk-JTPDIGGW-s6WbxdjC.js +46 -0
- package/dist/client/assets/{chunk-T65CQEWV-DI4NKdNq.js → chunk-T65CQEWV-CiZ_ICHW.js} +1 -1
- package/dist/client/assets/chunk-YOZR3KYS-DLOc92uD.js +2 -0
- package/dist/client/assets/{clock-DviOalxA.js → clock-CyfvRmj6.js} +1 -1
- package/dist/client/assets/{code-xml-05TD3uOC.js → code-xml--LjSM4Mv.js} +1 -1
- package/dist/client/assets/content-7ZeCPAEt.js +1 -0
- package/dist/client/assets/content-BHUcUCH5.js +1 -0
- package/dist/client/assets/content-BUhvLPkv.js +1 -0
- package/dist/client/assets/content-BomQ5YWo.js +1 -0
- package/dist/client/assets/content-C39ELNgC.js +1 -0
- package/dist/client/assets/content-C4RYKHut.js +1 -0
- package/dist/client/assets/content-CCiZfG4H.js +1 -0
- package/dist/client/assets/content-CDpDtVI-.js +1 -0
- package/dist/client/assets/content-CO-9CeFd.js +1 -0
- package/dist/client/assets/content-CuOLxp1x.js +1 -0
- package/dist/client/assets/content-CvtLIjXS.js +1 -0
- package/dist/client/assets/content-CzwTUb9n.js +1 -0
- package/dist/client/assets/content-DQXbo2RO.js +1 -0
- package/dist/client/assets/content-DRTQ9QQb.js +1 -0
- package/dist/client/assets/content-LCELs6zg.js +1 -0
- package/dist/client/assets/content-Uqt8AG-s.css +1 -0
- package/dist/client/assets/content-qsDjA4Au.js +1 -0
- package/dist/client/assets/{conversation-icons-DohQL6GI.js → conversation-icons-c-hXv7hY.js} +1 -1
- package/dist/client/assets/conversation-model-CHwHZNw-.js +1 -0
- package/dist/client/assets/conversation-motion-features-T8vF9zED.js +1 -0
- package/dist/client/assets/{copy-CwCAivnc.js → copy-4LfKIdQJ.js} +1 -1
- package/dist/client/assets/{createLucideIcon-DlxlBfLC.js → createLucideIcon-ClCdc3F9.js} +1 -1
- package/dist/client/assets/discover-7Ks00w-M.js +2 -0
- package/dist/client/assets/embed-entry-n2ThmSSX.js +2 -0
- package/dist/client/assets/{external-link-CnjcXf32.js → external-link-CnaI1QFS.js} +1 -1
- package/dist/client/assets/{eye-So8tNNK6.js → eye-BFlhMzQL.js} +1 -1
- package/dist/client/assets/{file-text-i3xTDUjJ.js → file-text-DG-pufl1.js} +1 -1
- package/dist/client/assets/{gestures-CgvAMd6F.js → gestures-CxG3Dphs.js} +1 -1
- package/dist/client/assets/home-live-action-BkqGLVRY.js +1 -0
- package/dist/client/assets/home-moving-signal-aNJusIzL.js +1 -0
- package/dist/client/assets/home-now-card-BQK4EFHx.js +1 -0
- package/dist/client/assets/{home-now-card-nano-CkLHUQ4J.js → home-now-card-nano-CdtzqSIF.js} +1 -1
- package/dist/client/assets/hooks-Dst1TH7n.js +2 -0
- package/dist/client/assets/index-9as_JTUs.css +1 -0
- package/dist/client/assets/index-CU9dtwJk.js +1 -0
- package/dist/client/assets/{index-sUomXsrf.js → index-CzVeWScw.js} +2 -2
- package/dist/client/assets/index-Dewd56RX.js +1 -0
- package/dist/client/assets/index-_YQXKEhb.js +1 -0
- package/dist/client/assets/{inspector-panel-DhXd-YbT.js → inspector-panel-DgOM8nCo.js} +1 -1
- package/dist/client/assets/keyboard-nav-BJnFoFDP.js +1 -0
- package/dist/client/assets/{lane-observe-DrhKkQ3A.js → lane-observe-BA3g9aVd.js} +1 -1
- package/dist/client/assets/{lane-roster-store-NE15Oe6M.js → lane-roster-store-pR4ZaYQm.js} +1 -1
- package/dist/client/assets/left-BhzPp-_E.js +1 -0
- package/dist/client/assets/left-CN1MABD0.js +2 -0
- package/dist/client/assets/left-DDgbsio7.js +1 -0
- package/dist/client/assets/left-Dpf2R9uD.js +1 -0
- package/dist/client/assets/left-HwwbMVtl.js +2 -0
- package/dist/client/assets/left-YfH0daht.js +1 -0
- package/dist/client/assets/left-agents-CYUwAy2Z.js +1 -0
- package/dist/client/assets/left-default-vEGZALPv.js +1 -0
- package/dist/client/assets/left-lanes-bphF-vlX.js +1 -0
- package/dist/client/assets/left-mission-B54-c3hq.js +1 -0
- package/dist/client/assets/left-np5USKqG.js +1 -0
- package/dist/client/assets/left-plan-BNBuDoPQ.js +2 -0
- package/dist/client/assets/library-DbCVJG_O.js +1 -0
- package/dist/client/assets/{loader-circle-lWOOKezu.js → loader-circle-Byb9kSFx.js} +1 -1
- package/dist/client/assets/{local-agents-C7fDHLVC.js → local-agents-DBaUbP-_.js} +1 -1
- package/dist/client/assets/{mentions-CY_wPZc5.js → mentions-fbQJ2mBI.js} +1 -1
- package/dist/client/assets/{mesh-ops-Kn8pCtyJ.js → mesh-ops-Cnw3vwAu.js} +1 -1
- package/dist/client/assets/{mesh-view-store-D14ihwkF.js → mesh-view-store-Btlyc7rW.js} +1 -1
- package/dist/client/assets/{message-circle-C5UZ6fO7.js → message-circle-aGOfQWm2.js} +1 -1
- package/dist/client/assets/{message-markup-C8Nx04sP.js → message-markup-mGF07emJ.js} +1 -1
- package/dist/client/assets/{message-square-BD-4UUdc.js → message-square-CIXda-Y7.js} +1 -1
- package/dist/client/assets/mission-control-m3BTDQ9l.css +1 -0
- package/dist/client/assets/{mission-control-store-xQHVQdm8.js → mission-control-store-CcoNeQHG.js} +1 -1
- package/dist/client/assets/mission-wall-CocIM1cF.js +1 -0
- package/dist/client/assets/{observe-uJfIlIUV.js → observe-BNFzh-7B.js} +1 -1
- package/dist/client/assets/openAgent-Dbv5wfuL.js +1 -0
- package/dist/client/assets/{page-status-BymFEFai.js → page-status-DDvNdA8s.js} +1 -1
- package/dist/client/assets/{paperclip-DL9BXPp2.js → paperclip-DfpJkR4s.js} +1 -1
- package/dist/client/assets/{plus-C9lTjsgd.js → plus-CmFQp9Uj.js} +1 -1
- package/dist/client/assets/profile-s3KRbip1.js +1 -0
- package/dist/client/assets/{projects-inbox-DfVmGFFk.js → projects-inbox-Diddml6e.js} +1 -1
- package/dist/client/assets/{radio-DedMyP8J.js → radio-PauJIekM.js} +1 -1
- package/dist/client/assets/{refresh-cw-D8PFyhUa.js → refresh-cw-4oeFn1Jn.js} +1 -1
- package/dist/client/assets/resolve-panes-cp6eNewO.js +1 -0
- package/dist/client/assets/resolve-sidebar-context-Dbo-5PWx.js +1 -0
- package/dist/client/assets/right-09W2JJFg.js +1 -0
- package/dist/client/assets/right-B-MKhiJ6.js +1 -0
- package/dist/client/assets/right-B91Zl8lQ.js +1 -0
- package/dist/client/assets/{right-C1sIsSHR.js → right-BcFnuse9.js} +1 -1
- package/dist/client/assets/right-BdtMzn35.js +1 -0
- package/dist/client/assets/right-BqmKXLtf.js +1 -0
- package/dist/client/assets/right-BzeB-Dpt.js +1 -0
- package/dist/client/assets/right-CkGOs-sq.js +1 -0
- package/dist/client/assets/right-CzGiNBzB.js +1 -0
- package/dist/client/assets/right-Dc7uqv7l.js +1 -0
- package/dist/client/assets/{rocket-CriBwkHM.js → rocket-C-AskjZH.js} +1 -1
- package/dist/client/assets/router-B-K15T7B.js +1 -0
- package/dist/client/assets/{runtime-picker-DOZpZOlt.js → runtime-picker-BCQD7d4K.js} +1 -1
- package/dist/client/assets/{scope-views-BF_RvGKU.js → scope-views-BhkbIFPY.js} +1 -1
- package/dist/client/assets/{scout-voice-BZ4KqADJ.js → scout-voice-S5_YZ2v8.js} +1 -1
- package/dist/client/assets/{scroll-text-BIYf6g6N.js → scroll-text-BV-BB7v-.js} +1 -1
- package/dist/client/assets/{search-DCT_EvPr.js → search-C3bSJluv.js} +1 -1
- package/dist/client/assets/{secondaryNavConfig-Drb7wPG4.js → secondaryNavConfig-Bg4Tc0gT.js} +1 -1
- package/dist/client/assets/{selection-bridge-CJOTyYQs.js → selection-bridge-B1dmkX3P.js} +1 -1
- package/dist/client/assets/{send-horizontal-DDwOgEs3.js → send-horizontal-CqogPmbY.js} +1 -1
- package/dist/client/assets/{server-CHZCp3cF.js → server-Brw5Y1Gh.js} +1 -1
- package/dist/client/assets/{session-catalog-XhGxCtP-.js → session-catalog-9FqXmjBw.js} +1 -1
- package/dist/client/assets/session-table-1xdSxSXq.js +1 -0
- package/dist/client/assets/{sliders-horizontal-B9Nj-Y4J.js → sliders-horizontal-CUiOH26y.js} +1 -1
- package/dist/client/assets/{sparkles-up7pVlX-.js → sparkles-BjCA3Evu.js} +1 -1
- package/dist/client/assets/{sse-CVoGDiKW.js → sse-QcU9bikk.js} +1 -1
- package/dist/client/assets/synthetic-agent-routing-aduMYO7P.js +1 -0
- package/dist/client/assets/system-surfaces-redesign-B7GQhfpw.css +1 -0
- package/dist/client/assets/{tail-display-BdyoLvzY.js → tail-display-BRcJltQa.js} +2 -2
- package/dist/client/assets/{tail-events-CTipUIli.js → tail-events-C6K7bCWB.js} +1 -1
- package/dist/client/assets/{terminal-DXQISjZn.js → terminal-DrTkVXIj.js} +1 -1
- package/dist/client/assets/{terminal-relay-B5Sma7fK.js → terminal-relay-BkXjjSkq.js} +1 -1
- package/dist/client/assets/{terminal-screen-19jAI0Cw.css → terminal-screen-BqVnCwl0.css} +1 -1
- package/dist/client/assets/terminal-sessions-C3qU8tnY.js +1 -0
- package/dist/client/assets/{terminal-takeover-X97KCSJk.js → terminal-takeover-KvmTwABa.js} +1 -1
- package/dist/client/assets/{use-conversation-list-B1T6J_qE.js → use-conversation-list-C5sF6WBR.js} +1 -1
- package/dist/client/assets/{use-fleet-active-asks-DLofGhhK.js → use-fleet-active-asks-BOMPW0nl.js} +1 -1
- package/dist/client/assets/{use-mesh-ops-items-ByGZk8rU.js → use-mesh-ops-items-Co05vcTV.js} +1 -1
- package/dist/client/assets/{use-reduced-motion-Cvk-HRKg.js → use-reduced-motion-Dla-G_Jz.js} +1 -1
- package/dist/client/assets/{use-scout-dev-flags-BHvg3G2c.js → use-scout-dev-flags-BOQF3fW2.js} +1 -1
- package/dist/client/assets/{useAgentHoverCard-D5e8Qg1z.js → useAgentHoverCard-FtCmY-b9.js} +1 -1
- package/dist/client/assets/useContentSecondaryNav-BX7Sq7vy.js +1 -0
- package/dist/client/assets/{usePierreRuntime-DIVunfX0.js → usePierreRuntime-Bo4lD7Ui.js} +1 -1
- package/dist/client/assets/{wrench-pEVd8JnN.js → wrench-CeCdjiPF.js} +1 -1
- package/dist/client/assets/{x-0XjXwGqq.js → x-D4X_y1j_.js} +1 -1
- package/dist/client/assets/{xterm-CRLlV1Xp.js → xterm-D2a5wrkJ.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/main.mjs +1404 -356
- package/dist/node/main.mjs +63 -15
- package/dist/openscout-terminal-relay.mjs +16 -4
- package/dist/pairing-runtime-controller.mjs +3028 -2946
- package/dist/runtime/broker-daemon.mjs +356 -134
- package/dist/scout-control-plane-web.mjs +5631 -5183
- package/dist/scout-web-server.mjs +5631 -5183
- package/package.json +1 -1
- package/dist/client/assets/ActivityScreen-DnqqRSlS.js +0 -1
- package/dist/client/assets/AgentConfigurationScreen-CJqoMA0J.js +0 -1
- package/dist/client/assets/AgentDefinitionsWorkspace-FpEkb-tu.js +0 -1
- package/dist/client/assets/AgentFloorView-CycUn0Lv.js +0 -1
- package/dist/client/assets/AgentInfoScreen-CAQAxpAK.js +0 -1
- package/dist/client/assets/AgentLaneDetailSheet-CWs9wKWk.js +0 -5
- package/dist/client/assets/AgentLanesEmbedScreen-BUCW4nUj.js +0 -1
- package/dist/client/assets/AgentsScreen-BMXvuiA2.js +0 -1
- package/dist/client/assets/AgentsSubnav-BTNjPYoA.js +0 -1
- package/dist/client/assets/BrokerScreen-CObCQvoy.js +0 -5
- package/dist/client/assets/CodeScreen-BXqi72NK.js +0 -1
- package/dist/client/assets/ConversationComposer-BBNPa5S9.js +0 -1
- package/dist/client/assets/ConversationFeedRows-BuejHMCY.js +0 -1
- package/dist/client/assets/ConversationHeader-DXMT-YXv.js +0 -1
- package/dist/client/assets/ConversationPanels-DHCtilQF.js +0 -2
- package/dist/client/assets/ConversationScreen-DSxIt9pq.css +0 -1
- package/dist/client/assets/ConversationScreen-Dz2d_Z_F.js +0 -1
- package/dist/client/assets/FlightObserveScreen-C-9S0nA5.js +0 -1
- package/dist/client/assets/FollowScreen--Q04xSSE.js +0 -1
- package/dist/client/assets/HarnessMark-Dm_qm1Ku.js +0 -1
- package/dist/client/assets/HarnessesScreen-Y54viPX8.js +0 -1
- package/dist/client/assets/KnowledgeSearchScreen-DsdDz8wY.js +0 -1
- package/dist/client/assets/LaneTraceDetailSheet-CBf_aNZx.js +0 -1
- package/dist/client/assets/MeshScreen-TgDtz-1l.js +0 -1
- package/dist/client/assets/MessagesScreen-BTQL0UcE.js +0 -1
- package/dist/client/assets/MissionControlView-D59SPnAm.js +0 -1
- package/dist/client/assets/MissionLogPane-Ye3YlF9s.js +0 -1
- package/dist/client/assets/NewChatComposer-B5FnPyzS.js +0 -19
- package/dist/client/assets/NewChatComposer-W-t-L4oV.css +0 -1
- package/dist/client/assets/OpenScoutAppShell-BIp0WitK.js +0 -87
- package/dist/client/assets/OpsAgentsView-CoBfAigH.js +0 -1
- package/dist/client/assets/OpsScreen-Bbo0W64T.js +0 -1
- package/dist/client/assets/OpsSubnav-CoN8utF8.js +0 -1
- package/dist/client/assets/ProjectAgentProfile-FiiIcB5R.js +0 -1
- package/dist/client/assets/ProjectsInbox-BWiXjGi7.js +0 -2
- package/dist/client/assets/ProjectsScreen-Cxk4CuYn.js +0 -1
- package/dist/client/assets/ProjectsThreadAside-BF66ugT5.js +0 -1
- package/dist/client/assets/Provider-tFc3jqZ4.js +0 -1
- package/dist/client/assets/RawSessionsTable-BsGVgZB3.js +0 -1
- package/dist/client/assets/RealtimeVoiceScreen-B0Bem5Rc.js +0 -1
- package/dist/client/assets/RepoDiffViewerLazy-C8UPk4oo.js +0 -2
- package/dist/client/assets/SessionRefScreen-D7TfPYPN.js +0 -1
- package/dist/client/assets/SessionsScreen-BlknOWAd.js +0 -1
- package/dist/client/assets/SettingsScreen-BIlYxv_a.js +0 -1
- package/dist/client/assets/Terminal-DwZyo8kA.js +0 -1
- package/dist/client/assets/TerminalEmbedScreen-Czp3tQyd.js +0 -1
- package/dist/client/assets/agent-chat-Bfjd9y6c.js +0 -1
- package/dist/client/assets/agent-identity-xQHedtLl.js +0 -1
- package/dist/client/assets/agent-lane-detail-Cw4QVAgH.js +0 -1
- package/dist/client/assets/chunk-YOZR3KYS-BW85tiCr.js +0 -47
- package/dist/client/assets/content-2u_eV3fX.js +0 -1
- package/dist/client/assets/content-5irOghrY.js +0 -1
- package/dist/client/assets/content-8Z_0CwtD.js +0 -1
- package/dist/client/assets/content-B38YRDBu.js +0 -1
- package/dist/client/assets/content-BE3uK0LB.js +0 -1
- package/dist/client/assets/content-BtIxSqVY.js +0 -1
- package/dist/client/assets/content-CFsPAihU.js +0 -1
- package/dist/client/assets/content-CHU0wwA3.css +0 -1
- package/dist/client/assets/content-CKj5g5tu.js +0 -1
- package/dist/client/assets/content-CLDWXf9Z.js +0 -1
- package/dist/client/assets/content-CRr73E0r.js +0 -1
- package/dist/client/assets/content-CVR75_Uj.js +0 -1
- package/dist/client/assets/content-Czdp7_JQ.js +0 -1
- package/dist/client/assets/content-D0_EJ6nP.js +0 -1
- package/dist/client/assets/content-DNmxpNhD.js +0 -1
- package/dist/client/assets/content-XpbI9uxd.js +0 -1
- package/dist/client/assets/content-cyxWdgKQ.js +0 -1
- package/dist/client/assets/conversation-model-C4yb6_FA.js +0 -1
- package/dist/client/assets/conversation-motion-features-CifSdJtm.js +0 -1
- package/dist/client/assets/discover-DoiAJo4Z.js +0 -2
- package/dist/client/assets/embed-entry-D1Or9S4d.js +0 -2
- package/dist/client/assets/home-live-action-B22u89j7.js +0 -1
- package/dist/client/assets/home-moving-signal-BdkERL6B.js +0 -1
- package/dist/client/assets/home-now-card-lLkv6nQs.js +0 -1
- package/dist/client/assets/hooks-BPLDD9yu.js +0 -2
- package/dist/client/assets/index-DGoLx89y.js +0 -1
- package/dist/client/assets/index-DITWsjFb.css +0 -1
- package/dist/client/assets/index-m6dFtY5f.js +0 -1
- package/dist/client/assets/index-pY8-Mz7y.js +0 -1
- package/dist/client/assets/keyboard-nav-BhZZ5HEq.js +0 -1
- package/dist/client/assets/left-B6eawimv.js +0 -1
- package/dist/client/assets/left-BL2uBHe0.js +0 -2
- package/dist/client/assets/left-BNJguPDG.js +0 -1
- package/dist/client/assets/left-BvCtvN0f.js +0 -1
- package/dist/client/assets/left-CfBb6bxM.js +0 -1
- package/dist/client/assets/left-DTrlBF0h.js +0 -2
- package/dist/client/assets/left-agents-DsOHgDCY.js +0 -1
- package/dist/client/assets/left-d4hlBBxY.js +0 -1
- package/dist/client/assets/left-default-BRCwoCJr.js +0 -1
- package/dist/client/assets/left-lanes-DNtoRzoV.js +0 -1
- package/dist/client/assets/left-mission-DsTu2X5Y.js +0 -1
- package/dist/client/assets/left-plan-CtySjsXC.js +0 -2
- package/dist/client/assets/library-CLpgWNJO.js +0 -1
- package/dist/client/assets/mission-control-D3ikEPND.css +0 -1
- package/dist/client/assets/openAgent-Bjt57GdM.js +0 -1
- package/dist/client/assets/profile-BqY5tesX.js +0 -1
- package/dist/client/assets/resolve-panes-1xeZMuaw.js +0 -1
- package/dist/client/assets/resolve-sidebar-context-PLr32WHN.js +0 -1
- package/dist/client/assets/right-1x7HzabC.js +0 -1
- package/dist/client/assets/right-CFzPUzlF.js +0 -1
- package/dist/client/assets/right-CRKyeJDk.js +0 -1
- package/dist/client/assets/right-CagzkLWg.js +0 -1
- package/dist/client/assets/right-CsV149pN.js +0 -1
- package/dist/client/assets/right-DITNyG2s.js +0 -1
- package/dist/client/assets/right-E3nNcLE3.js +0 -1
- package/dist/client/assets/right-eUQvSjd7.js +0 -1
- package/dist/client/assets/right-ozp4nM44.js +0 -1
- package/dist/client/assets/router-Dja9_ygK.js +0 -1
- package/dist/client/assets/session-table-sAVe44a4.js +0 -1
- package/dist/client/assets/system-surfaces-redesign-CD26LFc0.css +0 -1
- package/dist/client/assets/terminal-sessions-D5CIR2OL.js +0 -1
- package/dist/client/assets/useContentSecondaryNav-ZfBNi3d4.js +0 -1
|
@@ -23925,7 +23925,7 @@ var init_chunk_PEYQIXJW = __esm(() => {
|
|
|
23925
23925
|
});
|
|
23926
23926
|
|
|
23927
23927
|
// node_modules/.bun/varlock@1.16.0/node_modules/varlock/dist/chunk-QUJCQE4P.js
|
|
23928
|
-
import fs9, { readFileSync as
|
|
23928
|
+
import fs9, { readFileSync as readFileSync19, existsSync as existsSync37 } from "fs";
|
|
23929
23929
|
import crypto3, { createHash as createHash9 } from "crypto";
|
|
23930
23930
|
import net2 from "net";
|
|
23931
23931
|
import { mkdir as mkdir10, writeFile as writeFile8, rename as rename2, readdir as readdir4, readFile as readFile10, rm as rm5 } from "fs/promises";
|
|
@@ -23960,7 +23960,7 @@ function writeBackValue(itemKey, newValueStr, sourceFilePath) {
|
|
|
23960
23960
|
}
|
|
23961
23961
|
function getParentPidViaProc(pid) {
|
|
23962
23962
|
try {
|
|
23963
|
-
const stat7 =
|
|
23963
|
+
const stat7 = readFileSync19(`/proc/${pid}/stat`, "utf8");
|
|
23964
23964
|
const after = stat7.slice(stat7.lastIndexOf(")") + 2);
|
|
23965
23965
|
const fields = after.split(" ");
|
|
23966
23966
|
const ppid = Number(fields[1]);
|
|
@@ -46088,6 +46088,9 @@ var METADATA_CACHE_LIMIT4 = 512;
|
|
|
46088
46088
|
var TOOL_CALL_STATE_KEY2 = "kimiToolCallSummaries";
|
|
46089
46089
|
var TOOL_CALL_STATE_LIMIT2 = 512;
|
|
46090
46090
|
var metadataCache4 = new Map;
|
|
46091
|
+
function trimmedString(value) {
|
|
46092
|
+
return typeof value === "string" && value.trim() ? value.trim() : null;
|
|
46093
|
+
}
|
|
46091
46094
|
function recordValue(value) {
|
|
46092
46095
|
return value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
46093
46096
|
}
|
|
@@ -46186,19 +46189,27 @@ function walkRecentKimiWireFiles(root, scope) {
|
|
|
46186
46189
|
return found.sort((left, right) => right.mtimeMs - left.mtimeMs).slice(0, discoveryLimit5(scope));
|
|
46187
46190
|
}
|
|
46188
46191
|
function readKimiTranscriptMetadata(file2) {
|
|
46192
|
+
const agentId = basename5(dirname3(file2.path));
|
|
46193
|
+
const sessionDirectory = dirname3(dirname3(dirname3(file2.path)));
|
|
46194
|
+
const statePath = join8(sessionDirectory, "state.json");
|
|
46195
|
+
let stateMtimeMs = null;
|
|
46196
|
+
let stateSize = null;
|
|
46197
|
+
try {
|
|
46198
|
+
const stateStat = statSync5(statePath);
|
|
46199
|
+
stateMtimeMs = stateStat.mtimeMs;
|
|
46200
|
+
stateSize = stateStat.size;
|
|
46201
|
+
} catch {}
|
|
46189
46202
|
const cached2 = metadataCache4.get(file2.path);
|
|
46190
|
-
if (cached2 && cached2.mtimeMs === file2.mtimeMs && cached2.size === file2.size) {
|
|
46203
|
+
if (cached2 && cached2.mtimeMs === file2.mtimeMs && cached2.size === file2.size && cached2.stateMtimeMs === stateMtimeMs && cached2.stateSize === stateSize) {
|
|
46191
46204
|
return cached2;
|
|
46192
46205
|
}
|
|
46193
|
-
const agentId = basename5(dirname3(file2.path));
|
|
46194
|
-
const sessionDirectory = dirname3(dirname3(dirname3(file2.path)));
|
|
46195
46206
|
const parentSessionId = basename5(sessionDirectory);
|
|
46196
46207
|
let cwd = null;
|
|
46197
46208
|
let title = null;
|
|
46198
46209
|
try {
|
|
46199
|
-
const state = recordValue(JSON.parse(readFileSync3(
|
|
46200
|
-
cwd =
|
|
46201
|
-
title =
|
|
46210
|
+
const state = recordValue(JSON.parse(readFileSync3(statePath, "utf8")));
|
|
46211
|
+
cwd = trimmedString(state?.cwd) ?? trimmedString(state?.workDir);
|
|
46212
|
+
title = trimmedString(state?.title);
|
|
46202
46213
|
} catch {}
|
|
46203
46214
|
const metadata = {
|
|
46204
46215
|
cwd,
|
|
@@ -46208,7 +46219,7 @@ function readKimiTranscriptMetadata(file2) {
|
|
|
46208
46219
|
title
|
|
46209
46220
|
};
|
|
46210
46221
|
metadataCache4.delete(file2.path);
|
|
46211
|
-
metadataCache4.set(file2.path, { ...file2, ...metadata });
|
|
46222
|
+
metadataCache4.set(file2.path, { ...file2, stateMtimeMs, stateSize, ...metadata });
|
|
46212
46223
|
while (metadataCache4.size > METADATA_CACHE_LIMIT4) {
|
|
46213
46224
|
const oldest = metadataCache4.keys().next().value;
|
|
46214
46225
|
if (!oldest)
|
|
@@ -46217,6 +46228,10 @@ function readKimiTranscriptMetadata(file2) {
|
|
|
46217
46228
|
}
|
|
46218
46229
|
return metadata;
|
|
46219
46230
|
}
|
|
46231
|
+
function workspaceProject(wirePath) {
|
|
46232
|
+
const workspaceDirectory = basename5(dirname3(dirname3(dirname3(dirname3(wirePath)))));
|
|
46233
|
+
return trimmedString(/^wd_(.+)_[0-9a-f]{6,}$/u.exec(workspaceDirectory)?.[1]);
|
|
46234
|
+
}
|
|
46220
46235
|
function discoverKimiTranscripts(scope) {
|
|
46221
46236
|
return walkRecentKimiWireFiles(kimiSessionsRoot(), scope).map((file2) => {
|
|
46222
46237
|
const metadata = readKimiTranscriptMetadata(file2);
|
|
@@ -46225,7 +46240,7 @@ function discoverKimiTranscripts(scope) {
|
|
|
46225
46240
|
transcriptPath: file2.path,
|
|
46226
46241
|
sessionId: metadata.sessionId,
|
|
46227
46242
|
cwd: metadata.cwd,
|
|
46228
|
-
project: metadata.cwd ? basename5(metadata.cwd) : "(unknown)",
|
|
46243
|
+
project: (metadata.cwd ? basename5(metadata.cwd) : workspaceProject(file2.path)) ?? "(unknown)",
|
|
46229
46244
|
harness: "unattributed",
|
|
46230
46245
|
mtimeMs: file2.mtimeMs,
|
|
46231
46246
|
size: file2.size
|
|
@@ -50871,10 +50886,26 @@ function candidateAliases(candidate) {
|
|
|
50871
50886
|
];
|
|
50872
50887
|
return Array.from(new Set(aliases.map((alias) => trimIdentityPrefix(alias)).filter(Boolean)));
|
|
50873
50888
|
}
|
|
50889
|
+
var explicitAliasesCache = new WeakMap;
|
|
50890
|
+
var aliasKeysCache = new WeakMap;
|
|
50891
|
+
var canonicalIdentityCache = new WeakMap;
|
|
50874
50892
|
function explicitCandidateAliases(candidate) {
|
|
50893
|
+
const cached2 = explicitAliasesCache.get(candidate);
|
|
50894
|
+
if (cached2)
|
|
50895
|
+
return cached2;
|
|
50875
50896
|
const canonical = candidateCanonicalIdentity(candidate);
|
|
50876
50897
|
const implicitAliases = canonical?.definitionId === OPENSCOUT_COORDINATOR_AGENT_ID ? [SCOUT_DISPATCHER_AGENT_ID] : [];
|
|
50877
|
-
|
|
50898
|
+
const aliases = Array.from(new Set([...candidate.aliases ?? [], ...implicitAliases].map((alias) => normalizeAgentIdentitySegment(trimIdentityPrefix(alias))).filter(Boolean)));
|
|
50899
|
+
explicitAliasesCache.set(candidate, aliases);
|
|
50900
|
+
return aliases;
|
|
50901
|
+
}
|
|
50902
|
+
function candidateAliasKeys(candidate) {
|
|
50903
|
+
const cached2 = aliasKeysCache.get(candidate);
|
|
50904
|
+
if (cached2)
|
|
50905
|
+
return cached2;
|
|
50906
|
+
const keys = explicitCandidateAliases(candidate).map(canonicalizeAliasValue);
|
|
50907
|
+
aliasKeysCache.set(candidate, keys);
|
|
50908
|
+
return keys;
|
|
50878
50909
|
}
|
|
50879
50910
|
function canonicalizeAliasValue(value) {
|
|
50880
50911
|
const parsed = parseAgentIdentity(value.startsWith("@") ? value : `@${value}`);
|
|
@@ -50891,7 +50922,10 @@ function identityAliasKeys(identity2) {
|
|
|
50891
50922
|
].filter(Boolean)));
|
|
50892
50923
|
}
|
|
50893
50924
|
function candidateCanonicalIdentity(candidate) {
|
|
50894
|
-
|
|
50925
|
+
if (canonicalIdentityCache.has(candidate)) {
|
|
50926
|
+
return canonicalIdentityCache.get(candidate) ?? null;
|
|
50927
|
+
}
|
|
50928
|
+
const canonical = constructAgentIdentity({
|
|
50895
50929
|
definitionId: candidate.definitionId || candidate.agentId,
|
|
50896
50930
|
nodeQualifier: candidate.nodeQualifier,
|
|
50897
50931
|
workspaceQualifier: candidate.workspaceQualifier,
|
|
@@ -50899,6 +50933,8 @@ function candidateCanonicalIdentity(candidate) {
|
|
|
50899
50933
|
harness: candidate.harness,
|
|
50900
50934
|
model: candidate.model
|
|
50901
50935
|
});
|
|
50936
|
+
canonicalIdentityCache.set(candidate, canonical);
|
|
50937
|
+
return canonical;
|
|
50902
50938
|
}
|
|
50903
50939
|
function candidateDimensionValue(candidate, dimension) {
|
|
50904
50940
|
const canonical = candidateCanonicalIdentity(candidate);
|
|
@@ -50948,8 +50984,8 @@ function definitionMatchesIdentity(identityDefinitionId, candidateDefinitionId)
|
|
|
50948
50984
|
}
|
|
50949
50985
|
function agentIdentityMatches(identity2, candidate) {
|
|
50950
50986
|
const aliasKeys = identityAliasKeys(identity2);
|
|
50951
|
-
const
|
|
50952
|
-
if (aliasKeys.some((key) =>
|
|
50987
|
+
const candidateAliasKeys2 = explicitCandidateAliases(candidate).map(canonicalizeAliasValue);
|
|
50988
|
+
if (aliasKeys.some((key) => candidateAliasKeys2.includes(key))) {
|
|
50953
50989
|
return true;
|
|
50954
50990
|
}
|
|
50955
50991
|
const canonical = canonicalizeIdentity({
|
|
@@ -50987,8 +51023,8 @@ function resolveAgentIdentity(identity2, candidates) {
|
|
|
50987
51023
|
function diagnoseAgentIdentity(identity2, candidates) {
|
|
50988
51024
|
const aliasKeys = identityAliasKeys(identity2);
|
|
50989
51025
|
const exactAliasMatches = candidates.filter((candidate) => {
|
|
50990
|
-
const
|
|
50991
|
-
return aliasKeys.some((key) =>
|
|
51026
|
+
const keys = candidateAliasKeys(candidate);
|
|
51027
|
+
return keys.length > 0 && aliasKeys.some((key) => keys.includes(key));
|
|
50992
51028
|
});
|
|
50993
51029
|
if (exactAliasMatches.length === 1) {
|
|
50994
51030
|
return { kind: "resolved", match: exactAliasMatches[0] };
|
|
@@ -51029,15 +51065,32 @@ function buildIdentitySubset(candidate, dimensions) {
|
|
|
51029
51065
|
...dimensions.includes("node") && canonical.nodeQualifier ? { nodeQualifier: canonical.nodeQualifier } : {}
|
|
51030
51066
|
});
|
|
51031
51067
|
}
|
|
51068
|
+
var peersByDefinitionCache = new WeakMap;
|
|
51069
|
+
function peersByDefinitionId(candidates) {
|
|
51070
|
+
const cached2 = peersByDefinitionCache.get(candidates);
|
|
51071
|
+
if (cached2)
|
|
51072
|
+
return cached2;
|
|
51073
|
+
const groups = new Map;
|
|
51074
|
+
for (const candidate of candidates) {
|
|
51075
|
+
const canonical = candidateCanonicalIdentity(candidate);
|
|
51076
|
+
if (!canonical)
|
|
51077
|
+
continue;
|
|
51078
|
+
const group = groups.get(canonical.definitionId);
|
|
51079
|
+
if (group) {
|
|
51080
|
+
group.push(candidate);
|
|
51081
|
+
} else {
|
|
51082
|
+
groups.set(canonical.definitionId, [candidate]);
|
|
51083
|
+
}
|
|
51084
|
+
}
|
|
51085
|
+
peersByDefinitionCache.set(candidates, groups);
|
|
51086
|
+
return groups;
|
|
51087
|
+
}
|
|
51032
51088
|
function formatMinimalAgentIdentity(candidate, candidates, options = {}) {
|
|
51033
51089
|
const canonical = candidateCanonicalIdentity(candidate);
|
|
51034
51090
|
if (!canonical) {
|
|
51035
51091
|
return options.includeSigil === false ? "" : "@";
|
|
51036
51092
|
}
|
|
51037
|
-
const peers = candidates.
|
|
51038
|
-
const peerCanonical = candidateCanonicalIdentity(peer);
|
|
51039
|
-
return peerCanonical && peerCanonical.definitionId === canonical.definitionId;
|
|
51040
|
-
});
|
|
51093
|
+
const peers = peersByDefinitionId(candidates).get(canonical.definitionId) ?? [];
|
|
51041
51094
|
const aliasMatches = explicitCandidateAliases(candidate).map((alias) => ({ alias, identity: parseAgentIdentity(`@${alias}`) })).filter((entry) => Boolean(entry.identity)).filter((entry) => resolveAgentIdentity(entry.identity, candidates) === candidate).sort((left, right) => left.alias.length - right.alias.length || left.alias.localeCompare(right.alias));
|
|
51042
51095
|
if (aliasMatches.length > 0) {
|
|
51043
51096
|
return formatAgentIdentity({ definitionId: aliasMatches[0].alias }, options);
|
|
@@ -52353,7 +52406,7 @@ function inferMcpIdempotence(annotations) {
|
|
|
52353
52406
|
// packages/protocol/src/runtime-catalog.generated.ts
|
|
52354
52407
|
var SCOUT_RUNTIME_CATALOG_DATA = {
|
|
52355
52408
|
schemaVersion: "openscout.runtime-catalog.v1",
|
|
52356
|
-
revision: "2026-08-
|
|
52409
|
+
revision: "2026-08-18.1",
|
|
52357
52410
|
harnesses: [
|
|
52358
52411
|
{
|
|
52359
52412
|
id: "claude",
|
|
@@ -52482,6 +52535,7 @@ var SCOUT_RUNTIME_CATALOG_DATA = {
|
|
|
52482
52535
|
id: "grok",
|
|
52483
52536
|
label: "Grok CLI",
|
|
52484
52537
|
enabled: true,
|
|
52538
|
+
listed: false,
|
|
52485
52539
|
reasoningEfforts: [
|
|
52486
52540
|
"low",
|
|
52487
52541
|
"medium",
|
|
@@ -52517,7 +52571,7 @@ var SCOUT_RUNTIME_CATALOG_DATA = {
|
|
|
52517
52571
|
},
|
|
52518
52572
|
{
|
|
52519
52573
|
id: "grok-acp",
|
|
52520
|
-
label: "Grok
|
|
52574
|
+
label: "Grok",
|
|
52521
52575
|
enabled: true,
|
|
52522
52576
|
reasoningEfforts: null,
|
|
52523
52577
|
models: [
|
|
@@ -53011,6 +53065,9 @@ function harness(value, path, errors3) {
|
|
|
53011
53065
|
errors3.push(`${path}.label is required`);
|
|
53012
53066
|
if (typeof input.enabled !== "boolean")
|
|
53013
53067
|
errors3.push(`${path}.enabled must be boolean`);
|
|
53068
|
+
if (input.listed !== undefined && typeof input.listed !== "boolean") {
|
|
53069
|
+
errors3.push(`${path}.listed must be boolean when provided`);
|
|
53070
|
+
}
|
|
53014
53071
|
if (input.default === true && input.enabled !== true)
|
|
53015
53072
|
errors3.push(`${path} cannot be default while disabled`);
|
|
53016
53073
|
const efforts = effortList(input.reasoningEfforts, `${path}.reasoningEfforts`, errors3);
|
|
@@ -53049,6 +53106,7 @@ function harness(value, path, errors3) {
|
|
|
53049
53106
|
id,
|
|
53050
53107
|
label,
|
|
53051
53108
|
enabled: input.enabled,
|
|
53109
|
+
...typeof input.listed === "boolean" ? { listed: input.listed } : {},
|
|
53052
53110
|
...input.default === true ? { default: true } : {},
|
|
53053
53111
|
reasoningEfforts: efforts,
|
|
53054
53112
|
...defaultEffort && reasoningEfforts.has(defaultEffort) ? { defaultReasoningEffort: defaultEffort } : {},
|
|
@@ -53337,7 +53395,7 @@ function normalizeTerminalWorkspaceColumns(value) {
|
|
|
53337
53395
|
// packages/protocol/src/rendezvous.ts
|
|
53338
53396
|
var SCOUT_RENDEZVOUS_GENERATED_CODENAME_LENGTH = 6;
|
|
53339
53397
|
var SCOUT_RENDEZVOUS_CODENAME_MAX_LENGTH = 32;
|
|
53340
|
-
var SCOUT_RENDEZVOUS_INVITE_TTL_MS =
|
|
53398
|
+
var SCOUT_RENDEZVOUS_INVITE_TTL_MS = 4 * 60 * 60000;
|
|
53341
53399
|
var SCOUT_RENDEZVOUS_MAX_WAIT_MS = 10 * 60000;
|
|
53342
53400
|
function normalizeScoutRendezvousCodename(codename) {
|
|
53343
53401
|
return codename.normalize("NFKC").trim().toLocaleUpperCase("en-US");
|
|
@@ -55465,7 +55523,7 @@ class BrokerWorkItemStore {
|
|
|
55465
55523
|
|
|
55466
55524
|
// packages/runtime/src/local-agents.ts
|
|
55467
55525
|
import { randomUUID as randomUUID3 } from "crypto";
|
|
55468
|
-
import { existsSync as existsSync34, readFileSync as
|
|
55526
|
+
import { existsSync as existsSync34, readFileSync as readFileSync18 } from "fs";
|
|
55469
55527
|
import { mkdir as mkdir9, readFile as readFile9, rm as rm4, stat as stat6, writeFile as writeFile7 } from "fs/promises";
|
|
55470
55528
|
import { basename as basename16, dirname as dirname20, join as join37, resolve as resolve11 } from "path";
|
|
55471
55529
|
import { fileURLToPath as fileURLToPath6 } from "url";
|
|
@@ -57022,14 +57080,20 @@ function herdrProbeTarget(env) {
|
|
|
57022
57080
|
return {
|
|
57023
57081
|
bin: herdrBin(env),
|
|
57024
57082
|
path: env.PATH ?? "",
|
|
57025
|
-
home: env.
|
|
57083
|
+
home: env.HOME?.trim() || homedir17(),
|
|
57084
|
+
xdgConfigHome: env.XDG_CONFIG_HOME?.trim() || null
|
|
57026
57085
|
};
|
|
57027
57086
|
}
|
|
57028
57087
|
function parseHerdrProbeKey(key) {
|
|
57029
57088
|
try {
|
|
57030
57089
|
const parsed = JSON.parse(key);
|
|
57031
57090
|
if (typeof parsed?.bin === "string" && typeof parsed.path === "string" && typeof parsed.home === "string") {
|
|
57032
|
-
return {
|
|
57091
|
+
return {
|
|
57092
|
+
bin: parsed.bin,
|
|
57093
|
+
path: parsed.path,
|
|
57094
|
+
home: parsed.home,
|
|
57095
|
+
xdgConfigHome: typeof parsed.xdgConfigHome === "string" && parsed.xdgConfigHome.trim() ? parsed.xdgConfigHome.trim() : null
|
|
57096
|
+
};
|
|
57033
57097
|
}
|
|
57034
57098
|
} catch {}
|
|
57035
57099
|
return herdrProbeTarget(process.env);
|
|
@@ -57071,8 +57135,13 @@ function parseHerdrSessionListJson(output) {
|
|
|
57071
57135
|
async function readHerdrSessionsLocal(key, ctx) {
|
|
57072
57136
|
const target = parseHerdrProbeKey(key);
|
|
57073
57137
|
try {
|
|
57138
|
+
const env = { ...process.env, PATH: target.path, HOME: target.home };
|
|
57139
|
+
if (target.xdgConfigHome)
|
|
57140
|
+
env.XDG_CONFIG_HOME = target.xdgConfigHome;
|
|
57141
|
+
else
|
|
57142
|
+
delete env.XDG_CONFIG_HOME;
|
|
57074
57143
|
const { stdout } = await execProbeFile(ctx, target.bin, ["session", "list", "--json"], {
|
|
57075
|
-
env
|
|
57144
|
+
env,
|
|
57076
57145
|
maxStdoutBytes: 512 * 1024,
|
|
57077
57146
|
maxStderrBytes: 64 * 1024
|
|
57078
57147
|
});
|
|
@@ -57103,6 +57172,7 @@ var herdrSessionsProbe = defineProbeFamily({
|
|
|
57103
57172
|
});
|
|
57104
57173
|
}
|
|
57105
57174
|
});
|
|
57175
|
+
var herdrTopologyCache = new Map;
|
|
57106
57176
|
// packages/runtime/src/system-probes/sessions.ts
|
|
57107
57177
|
import { createReadStream as createReadStream2 } from "fs";
|
|
57108
57178
|
import { readdir, stat as stat2 } from "fs/promises";
|
|
@@ -65729,7 +65799,7 @@ function buildInvocationCollaborationContextPrompt(invocation) {
|
|
|
65729
65799
|
}
|
|
65730
65800
|
|
|
65731
65801
|
// packages/runtime/src/pi-rpc.ts
|
|
65732
|
-
import { existsSync as existsSync26 } from "fs";
|
|
65802
|
+
import { existsSync as existsSync26, readFileSync as readFileSync10, statSync as statSync13 } from "fs";
|
|
65733
65803
|
import { mkdir as mkdir6, writeFile as writeFile4 } from "fs/promises";
|
|
65734
65804
|
import { execFileSync as execFileSync2 } from "child_process";
|
|
65735
65805
|
import { homedir as homedir26 } from "os";
|
|
@@ -65825,7 +65895,37 @@ function inferPiProvider(launch) {
|
|
|
65825
65895
|
}
|
|
65826
65896
|
return;
|
|
65827
65897
|
}
|
|
65828
|
-
function
|
|
65898
|
+
function readPiRpcCredentialFile(name, options = {}) {
|
|
65899
|
+
if (!/^[A-Z0-9_]+$/.test(name)) {
|
|
65900
|
+
return;
|
|
65901
|
+
}
|
|
65902
|
+
const env = options.env ?? process.env;
|
|
65903
|
+
const platform = options.platform ?? process.platform;
|
|
65904
|
+
const directory = normalizeOptionalString(env.CREDENTIALS_DIRECTORY) ?? normalizeOptionalString(env.OPENSCOUT_CREDENTIALS_DIRECTORY) ?? (platform === "linux" ? join28(normalizeOptionalString(env.XDG_CONFIG_HOME) ?? join28(options.homedir ?? homedir26(), ".config"), "openscout", "credentials") : undefined);
|
|
65905
|
+
if (!directory) {
|
|
65906
|
+
return;
|
|
65907
|
+
}
|
|
65908
|
+
try {
|
|
65909
|
+
const directoryStat = statSync13(directory);
|
|
65910
|
+
if (!directoryStat.isDirectory() || (directoryStat.mode & 63) !== 0) {
|
|
65911
|
+
return;
|
|
65912
|
+
}
|
|
65913
|
+
const path = join28(directory, name);
|
|
65914
|
+
const stat4 = statSync13(path);
|
|
65915
|
+
if (!stat4.isFile() || (stat4.mode & 63) !== 0 || stat4.size > 16 * 1024) {
|
|
65916
|
+
return;
|
|
65917
|
+
}
|
|
65918
|
+
const value = readFileSync10(path, "utf8").trim();
|
|
65919
|
+
return value || undefined;
|
|
65920
|
+
} catch {
|
|
65921
|
+
return;
|
|
65922
|
+
}
|
|
65923
|
+
}
|
|
65924
|
+
function readSecretValue(name, commandOverride, env = process.env) {
|
|
65925
|
+
const credentialFile = readPiRpcCredentialFile(name, { env });
|
|
65926
|
+
if (credentialFile) {
|
|
65927
|
+
return credentialFile;
|
|
65928
|
+
}
|
|
65829
65929
|
try {
|
|
65830
65930
|
const output = execFileSync2(commandOverride || "secret", ["get", name], {
|
|
65831
65931
|
encoding: "utf8",
|
|
@@ -65859,7 +65959,7 @@ function buildPiRpcCredentialEnv(launch, sources2 = {}) {
|
|
|
65859
65959
|
}
|
|
65860
65960
|
const env = {};
|
|
65861
65961
|
const sourceEnv = sources2.env ?? process.env;
|
|
65862
|
-
const readSecret = sources2.readSecret ?? ((name) => readSecretValue(name, sources2.secretCommand));
|
|
65962
|
+
const readSecret = sources2.readSecret ?? ((name) => readSecretValue(name, sources2.secretCommand, sourceEnv));
|
|
65863
65963
|
for (const mapping of mappings) {
|
|
65864
65964
|
const value = readMappedCredentialValue(mapping, sourceEnv, readSecret);
|
|
65865
65965
|
if (value) {
|
|
@@ -66162,7 +66262,7 @@ async function shutdownPiRpcAgent(options) {
|
|
|
66162
66262
|
|
|
66163
66263
|
// packages/runtime/src/setup.ts
|
|
66164
66264
|
import { execFileSync as execFileSync4 } from "child_process";
|
|
66165
|
-
import { existsSync as existsSync29, readFileSync as
|
|
66265
|
+
import { existsSync as existsSync29, readFileSync as readFileSync13 } from "fs";
|
|
66166
66266
|
import { access, chmod, mkdir as mkdir8, readdir as readdir3, readFile as readFile8, realpath, rm as rm3, stat as stat5, writeFile as writeFile6 } from "fs/promises";
|
|
66167
66267
|
import { homedir as homedir29, hostname as hostname3, userInfo } from "os";
|
|
66168
66268
|
import { basename as basename15, dirname as dirname16, isAbsolute as isAbsolute2, join as join32, relative as relative6, resolve as resolve9 } from "path";
|
|
@@ -67116,7 +67216,7 @@ function parse5(toml, { maxDepth = 1000, integersAsBigInt } = {}) {
|
|
|
67116
67216
|
|
|
67117
67217
|
// packages/runtime/src/harness-catalog.ts
|
|
67118
67218
|
import { execFileSync as execFileSync3 } from "child_process";
|
|
67119
|
-
import { existsSync as existsSync27, statSync as
|
|
67219
|
+
import { existsSync as existsSync27, statSync as statSync14 } from "fs";
|
|
67120
67220
|
import { mkdir as mkdir7, readFile as readFile6, writeFile as writeFile5 } from "fs/promises";
|
|
67121
67221
|
import { homedir as homedir27 } from "os";
|
|
67122
67222
|
import { dirname as dirname13, join as join29 } from "path";
|
|
@@ -67701,7 +67801,7 @@ function defaultRequirementExists(requirement) {
|
|
|
67701
67801
|
if (requirement.fileType === "any" || !requirement.fileType)
|
|
67702
67802
|
return true;
|
|
67703
67803
|
try {
|
|
67704
|
-
const fileStat =
|
|
67804
|
+
const fileStat = statSync14(expanded);
|
|
67705
67805
|
return requirement.fileType === "directory" ? fileStat.isDirectory() : fileStat.isFile();
|
|
67706
67806
|
} catch {
|
|
67707
67807
|
return false;
|
|
@@ -67990,7 +68090,7 @@ import {
|
|
|
67990
68090
|
chmodSync,
|
|
67991
68091
|
existsSync as existsSync28,
|
|
67992
68092
|
mkdirSync as mkdirSync3,
|
|
67993
|
-
readFileSync as
|
|
68093
|
+
readFileSync as readFileSync11,
|
|
67994
68094
|
renameSync,
|
|
67995
68095
|
rmSync as rmSync2,
|
|
67996
68096
|
writeFileSync as writeFileSync3
|
|
@@ -68058,7 +68158,7 @@ function resolveStableLocalNodeId(input) {
|
|
|
68058
68158
|
function readAndValidateNodeIdentity(path) {
|
|
68059
68159
|
let parsed;
|
|
68060
68160
|
try {
|
|
68061
|
-
parsed = JSON.parse(
|
|
68161
|
+
parsed = JSON.parse(readFileSync11(path, "utf8"));
|
|
68062
68162
|
} catch {
|
|
68063
68163
|
throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
|
|
68064
68164
|
}
|
|
@@ -68219,7 +68319,7 @@ function importPublicKey(publicKeyBase64) {
|
|
|
68219
68319
|
}
|
|
68220
68320
|
|
|
68221
68321
|
// packages/runtime/src/open-scout-network.ts
|
|
68222
|
-
import { readFileSync as
|
|
68322
|
+
import { readFileSync as readFileSync12 } from "fs";
|
|
68223
68323
|
var DEFAULT_OPENSCOUT_NETWORK_RENDEZVOUS_URL = "https://mesh.oscout.net";
|
|
68224
68324
|
var DEFAULT_OPENSCOUT_NETWORK_PAIRING_RELAY_URL = "wss://mesh.oscout.net/v1/relay";
|
|
68225
68325
|
function defaultOpenScoutNetworkSettings() {
|
|
@@ -68242,7 +68342,7 @@ function normalizeOpenScoutNetworkSettings(input) {
|
|
|
68242
68342
|
}
|
|
68243
68343
|
function readOpenScoutNetworkSettingsSync() {
|
|
68244
68344
|
try {
|
|
68245
|
-
const raw =
|
|
68345
|
+
const raw = readFileSync12(resolveOpenScoutSupportPaths().settingsPath, "utf8");
|
|
68246
68346
|
const parsed = JSON.parse(raw);
|
|
68247
68347
|
const network = isRecord9(parsed) && isRecord9(parsed.network) ? parsed.network : {};
|
|
68248
68348
|
return normalizeOpenScoutNetworkSettings(isRecord9(network.openScoutNetwork) ? network.openScoutNetwork : {});
|
|
@@ -68926,7 +69026,7 @@ function resolveNodeQualifier() {
|
|
|
68926
69026
|
function readNodeAliasSync() {
|
|
68927
69027
|
try {
|
|
68928
69028
|
const settingsPath = resolveOpenScoutSupportPaths().settingsPath;
|
|
68929
|
-
const raw =
|
|
69029
|
+
const raw = readFileSync13(settingsPath, "utf8");
|
|
68930
69030
|
const settings = JSON.parse(raw);
|
|
68931
69031
|
return settings.node?.alias?.trim() || null;
|
|
68932
69032
|
} catch {
|
|
@@ -68937,14 +69037,14 @@ function readGitHeadBranch(projectRoot) {
|
|
|
68937
69037
|
const dotGitPath = join32(projectRoot, ".git");
|
|
68938
69038
|
let gitDirectory = dotGitPath;
|
|
68939
69039
|
try {
|
|
68940
|
-
const marker =
|
|
69040
|
+
const marker = readFileSync13(dotGitPath, "utf8");
|
|
68941
69041
|
const match = /^gitdir:\s*(.+)\s*$/imu.exec(marker);
|
|
68942
69042
|
if (!match?.[1])
|
|
68943
69043
|
return { found: false, branch: null };
|
|
68944
69044
|
gitDirectory = isAbsolute2(match[1]) ? match[1] : resolve9(projectRoot, match[1]);
|
|
68945
69045
|
} catch {}
|
|
68946
69046
|
try {
|
|
68947
|
-
const head =
|
|
69047
|
+
const head = readFileSync13(join32(gitDirectory, "HEAD"), "utf8").trim();
|
|
68948
69048
|
const match = /^ref:\s*refs\/heads\/(.+)$/u.exec(head);
|
|
68949
69049
|
return { found: true, branch: match?.[1]?.trim() || null };
|
|
68950
69050
|
} catch {
|
|
@@ -70581,7 +70681,7 @@ function buildInteractiveTerminalShellDirectives() {
|
|
|
70581
70681
|
|
|
70582
70682
|
// packages/runtime/src/broker-process-manager.ts
|
|
70583
70683
|
import { spawn as spawn6, spawnSync as spawnSync3 } from "child_process";
|
|
70584
|
-
import { existsSync as existsSync32, mkdirSync as mkdirSync5, readFileSync as
|
|
70684
|
+
import { existsSync as existsSync32, mkdirSync as mkdirSync5, readFileSync as readFileSync16, renameSync as renameSync3, writeFileSync as writeFileSync5 } from "fs";
|
|
70585
70685
|
import { homedir as homedir31, networkInterfaces } from "os";
|
|
70586
70686
|
import { dirname as dirname18, join as join34, resolve as resolve10 } from "path";
|
|
70587
70687
|
import { fileURLToPath as fileURLToPath5 } from "url";
|
|
@@ -70974,13 +71074,13 @@ class NodeSqliteDatabaseAdapter {
|
|
|
70974
71074
|
}
|
|
70975
71075
|
|
|
70976
71076
|
// packages/runtime/src/tailscale.ts
|
|
70977
|
-
import { readFileSync as
|
|
71077
|
+
import { readFileSync as readFileSync14 } from "fs";
|
|
70978
71078
|
import { execFileSync as execFileSync5 } from "child_process";
|
|
70979
71079
|
var DEFAULT_TAILSCALE_STATUS_TIMEOUT_MS2 = 1500;
|
|
70980
71080
|
var SYNC_TAILSCALE_STATUS_CACHE_MS = 30000;
|
|
70981
71081
|
var syncStatusCache = null;
|
|
70982
71082
|
function readStatusJsonFromFileSync(filePath) {
|
|
70983
|
-
const raw =
|
|
71083
|
+
const raw = readFileSync14(filePath, "utf8");
|
|
70984
71084
|
return parseTailscaleStatusJson(raw);
|
|
70985
71085
|
}
|
|
70986
71086
|
function statusTimeoutMs2(env) {
|
|
@@ -71052,7 +71152,7 @@ function readTailscaleSelfWebHostsSync(env = process.env) {
|
|
|
71052
71152
|
import {
|
|
71053
71153
|
existsSync as existsSync31,
|
|
71054
71154
|
mkdirSync as mkdirSync4,
|
|
71055
|
-
readFileSync as
|
|
71155
|
+
readFileSync as readFileSync15,
|
|
71056
71156
|
renameSync as renameSync2,
|
|
71057
71157
|
writeFileSync as writeFileSync4
|
|
71058
71158
|
} from "fs";
|
|
@@ -71092,7 +71192,7 @@ function loadLocalConfig() {
|
|
|
71092
71192
|
if (!existsSync31(configPath))
|
|
71093
71193
|
return { version: LOCAL_CONFIG_VERSION };
|
|
71094
71194
|
try {
|
|
71095
|
-
return validateLocalConfig(JSON.parse(
|
|
71195
|
+
return validateLocalConfig(JSON.parse(readFileSync15(configPath, "utf8")));
|
|
71096
71196
|
} catch {
|
|
71097
71197
|
return { version: LOCAL_CONFIG_VERSION };
|
|
71098
71198
|
}
|
|
@@ -71188,7 +71288,7 @@ function readPersistedAdvertiseScope(supportDirectory) {
|
|
|
71188
71288
|
if (!existsSync32(path))
|
|
71189
71289
|
return null;
|
|
71190
71290
|
try {
|
|
71191
|
-
const parsed = JSON.parse(
|
|
71291
|
+
const parsed = JSON.parse(readFileSync16(path, "utf8"));
|
|
71192
71292
|
if (parsed.version !== 1)
|
|
71193
71293
|
return null;
|
|
71194
71294
|
if (parsed.advertiseScope === "mesh" || parsed.advertiseScope === "local") {
|
|
@@ -71814,7 +71914,7 @@ async function runScoutdServiceCommand(command, config2, timeoutMs = SCOUTD_DEFA
|
|
|
71814
71914
|
function readCoreAgentsSync() {
|
|
71815
71915
|
try {
|
|
71816
71916
|
const settingsPath = resolveOpenScoutSupportPaths().settingsPath;
|
|
71817
|
-
const raw =
|
|
71917
|
+
const raw = readFileSync16(settingsPath, "utf8");
|
|
71818
71918
|
const settings = JSON.parse(raw);
|
|
71819
71919
|
const raw_agents = settings?.agents?.coreAgents;
|
|
71820
71920
|
if (Array.isArray(raw_agents)) {
|
|
@@ -71830,7 +71930,7 @@ function readLogLines(path) {
|
|
|
71830
71930
|
if (!existsSync32(path)) {
|
|
71831
71931
|
return [];
|
|
71832
71932
|
}
|
|
71833
|
-
return
|
|
71933
|
+
return readFileSync16(path, "utf8").split(`
|
|
71834
71934
|
`).map((line) => line.trim()).filter(Boolean);
|
|
71835
71935
|
}
|
|
71836
71936
|
function isPackageScriptBanner(line) {
|
|
@@ -72060,7 +72160,7 @@ var LOCAL_AGENT_SYSTEM_PROMPT_TEMPLATE_HINT = [
|
|
|
72060
72160
|
].join("");
|
|
72061
72161
|
|
|
72062
72162
|
// packages/runtime/src/relay-agent-process-leases.ts
|
|
72063
|
-
import { existsSync as existsSync33, mkdirSync as mkdirSync6, readdirSync as readdirSync12, readFileSync as
|
|
72163
|
+
import { existsSync as existsSync33, mkdirSync as mkdirSync6, readdirSync as readdirSync12, readFileSync as readFileSync17, rmSync as rmSync3, writeFileSync as writeFileSync6 } from "fs";
|
|
72064
72164
|
import { join as join35 } from "path";
|
|
72065
72165
|
var RELAY_AGENT_PROCESS_LEASE_PREFIX = "relay-agent-";
|
|
72066
72166
|
function processLeasesDirectory() {
|
|
@@ -72101,7 +72201,7 @@ function readRelayAgentProcessLeases() {
|
|
|
72101
72201
|
continue;
|
|
72102
72202
|
}
|
|
72103
72203
|
try {
|
|
72104
|
-
const parsed = JSON.parse(
|
|
72204
|
+
const parsed = JSON.parse(readFileSync17(join35(directory, entry), "utf8"));
|
|
72105
72205
|
if (parsed?.kind === "relay_agent" && parsed.sessionName?.trim() && parsed.agentId?.trim()) {
|
|
72106
72206
|
leases.push(parsed);
|
|
72107
72207
|
}
|
|
@@ -72298,7 +72398,7 @@ function resolveProjectsRoot(projectPath) {
|
|
|
72298
72398
|
if (!existsSync34(supportPaths.settingsPath)) {
|
|
72299
72399
|
return dirname20(projectPath);
|
|
72300
72400
|
}
|
|
72301
|
-
const raw = JSON.parse(
|
|
72401
|
+
const raw = JSON.parse(readFileSync18(supportPaths.settingsPath, "utf8"));
|
|
72302
72402
|
const workspaceRoot = raw.discovery?.workspaceRoots?.find((entry) => typeof entry === "string" && entry.trim().length > 0);
|
|
72303
72403
|
return workspaceRoot ? resolve11(workspaceRoot) : dirname20(projectPath);
|
|
72304
72404
|
} catch {
|
|
@@ -74547,7 +74647,7 @@ async function ensureLocalAgentOnlineOnce(agentName, record3) {
|
|
|
74547
74647
|
}
|
|
74548
74648
|
}
|
|
74549
74649
|
if (!sessionOnline) {
|
|
74550
|
-
const stderrTail = existsSync34(stderrLogFile) ?
|
|
74650
|
+
const stderrTail = existsSync34(stderrLogFile) ? readFileSync18(stderrLogFile, "utf8").trim().split(/\r?\n/).slice(-10).join(`
|
|
74551
74651
|
`).trim() : "";
|
|
74552
74652
|
throw new Error(stderrTail ? `Relay agent ${agentName} failed to stay online:
|
|
74553
74653
|
${redactSecrets(stderrTail)}` : `Relay agent ${agentName} failed to stay online.`);
|
|
@@ -74571,7 +74671,7 @@ function readPersistedSessionCatalogId(runtimeDir) {
|
|
|
74571
74671
|
try {
|
|
74572
74672
|
const catalogPath = join37(runtimeDir, "session-catalog.json");
|
|
74573
74673
|
if (existsSync34(catalogPath)) {
|
|
74574
|
-
const raw =
|
|
74674
|
+
const raw = readFileSync18(catalogPath, "utf8").trim();
|
|
74575
74675
|
if (raw) {
|
|
74576
74676
|
const catalog = JSON.parse(raw);
|
|
74577
74677
|
if (typeof catalog.activeSessionId === "string" && catalog.activeSessionId.trim()) {
|
|
@@ -74588,7 +74688,7 @@ function readPersistedLegacySessionId(runtimeDir, filename) {
|
|
|
74588
74688
|
try {
|
|
74589
74689
|
const legacyPath = join37(runtimeDir, filename);
|
|
74590
74690
|
if (existsSync34(legacyPath)) {
|
|
74591
|
-
const value =
|
|
74691
|
+
const value = readFileSync18(legacyPath, "utf8").trim();
|
|
74592
74692
|
return value || null;
|
|
74593
74693
|
}
|
|
74594
74694
|
return null;
|
|
@@ -74684,6 +74784,7 @@ function buildLocalAgentBinding(agentId, record3, alive, nodeId, source) {
|
|
|
74684
74784
|
labels: ["relay", "project", "agent", "local-agent"],
|
|
74685
74785
|
metadata: {
|
|
74686
74786
|
source,
|
|
74787
|
+
brokerRegistered: true,
|
|
74687
74788
|
...normalizedRecord.registrationSource ? { registrationSource: normalizedRecord.registrationSource } : {},
|
|
74688
74789
|
project: normalizedRecord.project,
|
|
74689
74790
|
projectRoot,
|
|
@@ -79583,10 +79684,7 @@ class BrokerRendezvousService {
|
|
|
79583
79684
|
suggestion: "choose_another_codename"
|
|
79584
79685
|
};
|
|
79585
79686
|
}
|
|
79586
|
-
|
|
79587
|
-
if (expiredInvite) {
|
|
79588
|
-
return expiredResponse(expiredInvite, participantId);
|
|
79589
|
-
}
|
|
79687
|
+
this.expiredInvites.delete(key);
|
|
79590
79688
|
return this.createPresence(projectRoot, participantId, requestedCodename, normalizedCodename, now);
|
|
79591
79689
|
}
|
|
79592
79690
|
for (let attempt = 0;attempt < MAX_CODENAME_GENERATION_ATTEMPTS; attempt += 1) {
|
|
@@ -80965,7 +81063,7 @@ import {
|
|
|
80965
81063
|
generateKeyPairSync as generateKeyPairSync2,
|
|
80966
81064
|
randomBytes as randomBytes6
|
|
80967
81065
|
} from "crypto";
|
|
80968
|
-
import { chmodSync as chmodSync2, existsSync as existsSync39, mkdirSync as mkdirSync8, readFileSync as
|
|
81066
|
+
import { chmodSync as chmodSync2, existsSync as existsSync39, mkdirSync as mkdirSync8, readFileSync as readFileSync20, renameSync as renameSync4, writeFileSync as writeFileSync8 } from "fs";
|
|
80969
81067
|
import { dirname as dirname24, join as join43 } from "path";
|
|
80970
81068
|
|
|
80971
81069
|
// node_modules/.bun/@peculiar+x509@1.12.3/node_modules/@peculiar/x509/build/x509.es.js
|
|
@@ -93254,7 +93352,7 @@ async function createTlsIdentity(supportDirectory, options) {
|
|
|
93254
93352
|
function readAndValidateTlsIdentity(path7) {
|
|
93255
93353
|
let parsed;
|
|
93256
93354
|
try {
|
|
93257
|
-
parsed = JSON.parse(
|
|
93355
|
+
parsed = JSON.parse(readFileSync20(path7, "utf8"));
|
|
93258
93356
|
} catch {
|
|
93259
93357
|
throw new Error(`Corrupt node TLS identity at ${path7}; remove it to generate a fresh one.`);
|
|
93260
93358
|
}
|
|
@@ -93998,7 +94096,7 @@ async function postJson(brokerUrl, path7, payload, options) {
|
|
|
93998
94096
|
const url2 = `${brokerUrl.replace(/\/$/, "")}${path7}`;
|
|
93999
94097
|
let response;
|
|
94000
94098
|
try {
|
|
94001
|
-
response = await meshPeerFetch(brokerUrl, path7, {
|
|
94099
|
+
response = await (options?.peerFetch ?? meshPeerFetch)(brokerUrl, path7, {
|
|
94002
94100
|
method: "POST",
|
|
94003
94101
|
headers: {
|
|
94004
94102
|
"content-type": "application/json",
|
|
@@ -94079,13 +94177,13 @@ async function forwardMeshCollaborationRecord(target2, bundle, options) {
|
|
|
94079
94177
|
async function forwardMeshCollaborationEvent(target2, bundle, options) {
|
|
94080
94178
|
return forwardMeshEnvelope(target2, "collaboration/events", "/v1/mesh/collaboration/events", bundle, options);
|
|
94081
94179
|
}
|
|
94082
|
-
async function fetchPeerAgents(brokerUrl) {
|
|
94083
|
-
let response = await
|
|
94180
|
+
async function fetchPeerAgents(brokerUrl, peerFetch = meshPeerFetch) {
|
|
94181
|
+
let response = await peerFetch(brokerUrl, "/v1/mesh/snapshot", {
|
|
94084
94182
|
headers: { accept: "application/json" },
|
|
94085
94183
|
signal: AbortSignal.timeout(5000)
|
|
94086
94184
|
});
|
|
94087
94185
|
if (response.status === 404) {
|
|
94088
|
-
response = await
|
|
94186
|
+
response = await peerFetch(brokerUrl, "/v1/snapshot", {
|
|
94089
94187
|
headers: { accept: "application/json" },
|
|
94090
94188
|
signal: AbortSignal.timeout(5000)
|
|
94091
94189
|
});
|
|
@@ -94619,7 +94717,7 @@ class RelayAgentSessionReaper {
|
|
|
94619
94717
|
}
|
|
94620
94718
|
|
|
94621
94719
|
// packages/runtime/src/pairing-session-agents.ts
|
|
94622
|
-
import { existsSync as existsSync40, readFileSync as
|
|
94720
|
+
import { existsSync as existsSync40, readFileSync as readFileSync21 } from "fs";
|
|
94623
94721
|
import { basename as basename20, join as join44 } from "path";
|
|
94624
94722
|
import { homedir as homedir34 } from "os";
|
|
94625
94723
|
var DEFAULT_PAIRING_PORT = 43130;
|
|
@@ -94641,7 +94739,7 @@ function readJsonFile4(filePath) {
|
|
|
94641
94739
|
return null;
|
|
94642
94740
|
}
|
|
94643
94741
|
try {
|
|
94644
|
-
return JSON.parse(
|
|
94742
|
+
return JSON.parse(readFileSync21(filePath, "utf8"));
|
|
94645
94743
|
} catch {
|
|
94646
94744
|
return null;
|
|
94647
94745
|
}
|
|
@@ -104741,7 +104839,7 @@ class ThreadEventPlane {
|
|
|
104741
104839
|
}
|
|
104742
104840
|
|
|
104743
104841
|
// packages/runtime/src/build-info.ts
|
|
104744
|
-
import { readFileSync as
|
|
104842
|
+
import { readFileSync as readFileSync22 } from "fs";
|
|
104745
104843
|
import { dirname as dirname26, join as join46 } from "path";
|
|
104746
104844
|
import { fileURLToPath as fileURLToPath9 } from "url";
|
|
104747
104845
|
var cachedBuildIdentity = null;
|
|
@@ -104757,7 +104855,7 @@ function envString(...names2) {
|
|
|
104757
104855
|
function readRuntimePackageJson() {
|
|
104758
104856
|
try {
|
|
104759
104857
|
const packagePath = join46(dirname26(fileURLToPath9(import.meta.url)), "..", "package.json");
|
|
104760
|
-
const parsed = JSON.parse(
|
|
104858
|
+
const parsed = JSON.parse(readFileSync22(packagePath, "utf8"));
|
|
104761
104859
|
return {
|
|
104762
104860
|
name: typeof parsed.name === "string" && parsed.name.trim() ? parsed.name.trim() : null,
|
|
104763
104861
|
version: typeof parsed.version === "string" && parsed.version.trim() ? parsed.version.trim() : null
|
|
@@ -105438,7 +105536,7 @@ function createBrokerCoreService(deps) {
|
|
|
105438
105536
|
}
|
|
105439
105537
|
|
|
105440
105538
|
// packages/runtime/src/mesh-rendezvous.ts
|
|
105441
|
-
import { existsSync as existsSync42, readFileSync as
|
|
105539
|
+
import { existsSync as existsSync42, readFileSync as readFileSync23 } from "fs";
|
|
105442
105540
|
import { homedir as homedir35 } from "os";
|
|
105443
105541
|
import { join as join47 } from "path";
|
|
105444
105542
|
var DEFAULT_RENDEZVOUS_TTL_MS = 60000;
|
|
@@ -105545,7 +105643,7 @@ function readMobilePairingMeshEntrypoint(env = process.env, now = Date.now()) {
|
|
|
105545
105643
|
return;
|
|
105546
105644
|
}
|
|
105547
105645
|
try {
|
|
105548
|
-
return mobilePairingMeshEntrypointFromSnapshot(JSON.parse(
|
|
105646
|
+
return mobilePairingMeshEntrypointFromSnapshot(JSON.parse(readFileSync23(runtimeStatePath, "utf8")), now);
|
|
105549
105647
|
} catch {
|
|
105550
105648
|
return;
|
|
105551
105649
|
}
|
|
@@ -105650,7 +105748,7 @@ function isPublicKeyHex(value) {
|
|
|
105650
105748
|
|
|
105651
105749
|
// packages/runtime/src/mobile-push.ts
|
|
105652
105750
|
import { Database as Database2 } from "bun:sqlite";
|
|
105653
|
-
import { mkdirSync as mkdirSync10, readFileSync as
|
|
105751
|
+
import { mkdirSync as mkdirSync10, readFileSync as readFileSync24 } from "fs";
|
|
105654
105752
|
import { connect as connectHttp2 } from "http2";
|
|
105655
105753
|
import { createPrivateKey as createPrivateKey3, sign as signWithKey } from "crypto";
|
|
105656
105754
|
import { dirname as dirname27, join as join48 } from "path";
|
|
@@ -105908,7 +106006,7 @@ function loadApnsCredentials() {
|
|
|
105908
106006
|
privateKeyPem = Buffer.from(inlineBase64, "base64").toString("utf8");
|
|
105909
106007
|
}
|
|
105910
106008
|
if (!privateKeyPem && path7) {
|
|
105911
|
-
privateKeyPem =
|
|
106009
|
+
privateKeyPem = readFileSync24(path7, "utf8");
|
|
105912
106010
|
}
|
|
105913
106011
|
if (!teamId || !keyId || !privateKeyPem) {
|
|
105914
106012
|
return null;
|
|
@@ -110473,7 +110571,7 @@ function localInvocationTargetIdentity(targetId, agent, actor) {
|
|
|
110473
110571
|
}
|
|
110474
110572
|
|
|
110475
110573
|
// packages/runtime/src/provisional-agent-names-config.ts
|
|
110476
|
-
import { existsSync as existsSync44, readFileSync as
|
|
110574
|
+
import { existsSync as existsSync44, readFileSync as readFileSync25, writeFileSync as writeFileSync9, mkdirSync as mkdirSync12 } from "fs";
|
|
110477
110575
|
import { homedir as homedir37 } from "os";
|
|
110478
110576
|
import { isAbsolute as isAbsolute4, join as join54, resolve as resolve20 } from "path";
|
|
110479
110577
|
function openScoutHome() {
|
|
@@ -110509,7 +110607,7 @@ function resolvePoolFilePath(filePath) {
|
|
|
110509
110607
|
return isAbsolute4(trimmed) ? trimmed : resolve20(openScoutHome(), trimmed);
|
|
110510
110608
|
}
|
|
110511
110609
|
function readProvisionalAgentNamesJsonFile(filePath) {
|
|
110512
|
-
return parseProvisionalAgentNamesJson(
|
|
110610
|
+
return parseProvisionalAgentNamesJson(readFileSync25(filePath, "utf8"));
|
|
110513
110611
|
}
|
|
110514
110612
|
function loadInlineProvisionalAgentNames(config2) {
|
|
110515
110613
|
const customNames = normalizeProvisionalAgentNamesSetting(config2.provisionalAgentNames);
|
|
@@ -110654,7 +110752,7 @@ function resolveProjectProvisionalAgentName(input) {
|
|
|
110654
110752
|
}
|
|
110655
110753
|
|
|
110656
110754
|
// packages/runtime/src/session-locator.ts
|
|
110657
|
-
import { existsSync as existsSync45, readdirSync as readdirSync14, readFileSync as
|
|
110755
|
+
import { existsSync as existsSync45, readdirSync as readdirSync14, readFileSync as readFileSync26, statSync as statSync15 } from "fs";
|
|
110658
110756
|
import { homedir as homedir38 } from "os";
|
|
110659
110757
|
import { basename as basename23, join as join55, resolve as resolve21 } from "path";
|
|
110660
110758
|
var CODEX_HARNESS = "codex";
|
|
@@ -110671,7 +110769,7 @@ function pathExists4(path7) {
|
|
|
110671
110769
|
}
|
|
110672
110770
|
function safeStatMtimeMs(path7) {
|
|
110673
110771
|
try {
|
|
110674
|
-
return
|
|
110772
|
+
return statSync15(path7).mtimeMs;
|
|
110675
110773
|
} catch {
|
|
110676
110774
|
return 0;
|
|
110677
110775
|
}
|
|
@@ -110691,7 +110789,7 @@ function walkFiles(root, predicate, into = [], depth = 0) {
|
|
|
110691
110789
|
const full = join55(root, name2);
|
|
110692
110790
|
let isDir = false;
|
|
110693
110791
|
try {
|
|
110694
|
-
isDir =
|
|
110792
|
+
isDir = statSync15(full).isDirectory();
|
|
110695
110793
|
} catch {
|
|
110696
110794
|
continue;
|
|
110697
110795
|
}
|
|
@@ -110706,7 +110804,7 @@ function walkFiles(root, predicate, into = [], depth = 0) {
|
|
|
110706
110804
|
function readFirstJsonlRecords(path7, maxLines = 8) {
|
|
110707
110805
|
let text3;
|
|
110708
110806
|
try {
|
|
110709
|
-
const fdChunk =
|
|
110807
|
+
const fdChunk = readFileSync26(path7, { encoding: "utf8" });
|
|
110710
110808
|
text3 = fdChunk.length > 256000 ? fdChunk.slice(0, 256000) : fdChunk;
|
|
110711
110809
|
} catch {
|
|
110712
110810
|
return [];
|
|
@@ -111494,7 +111592,7 @@ async function handleBrokerHttpEntityWriteRoute(input) {
|
|
|
111494
111592
|
}
|
|
111495
111593
|
return true;
|
|
111496
111594
|
}
|
|
111497
|
-
if (method === "POST" && url2.pathname === "/v1/flights") {
|
|
111595
|
+
if (method === "POST" && (url2.pathname === "/v1/flights" || url2.pathname === "/v1/mesh/flights")) {
|
|
111498
111596
|
try {
|
|
111499
111597
|
const flight = await readRequestBody(request);
|
|
111500
111598
|
await recordFlight(flight);
|
|
@@ -114650,8 +114748,16 @@ class BrokerMeshBundleService {
|
|
|
114650
114748
|
this.deps = deps;
|
|
114651
114749
|
}
|
|
114652
114750
|
applyBundle = async (bundle, options = {}) => {
|
|
114653
|
-
this.
|
|
114654
|
-
const
|
|
114751
|
+
const existingOriginNode = this.deps.runtime.node(bundle.originNode.id);
|
|
114752
|
+
const routedBundle = existingOriginNode?.brokerUrl ? {
|
|
114753
|
+
...bundle,
|
|
114754
|
+
originNode: {
|
|
114755
|
+
...bundle.originNode,
|
|
114756
|
+
brokerUrl: existingOriginNode.brokerUrl
|
|
114757
|
+
}
|
|
114758
|
+
} : bundle;
|
|
114759
|
+
this.validateBundle(routedBundle);
|
|
114760
|
+
const entries = buildMeshBundleEntries(routedBundle);
|
|
114655
114761
|
return this.deps.commitEntries(entries, async (retainedEntries) => {
|
|
114656
114762
|
await this.applyRetainedEntries(retainedEntries);
|
|
114657
114763
|
}, options);
|
|
@@ -114783,8 +114889,8 @@ function actorIdsForCollaboration2(record3, conversation) {
|
|
|
114783
114889
|
}
|
|
114784
114890
|
return [...ids];
|
|
114785
114891
|
}
|
|
114786
|
-
async function
|
|
114787
|
-
const response = await
|
|
114892
|
+
async function postMeshPeerJson(brokerBaseUrl, path7, payload, peerFetch = meshPeerFetch) {
|
|
114893
|
+
const response = await peerFetch(brokerBaseUrl, path7, {
|
|
114788
114894
|
method: "POST",
|
|
114789
114895
|
headers: {
|
|
114790
114896
|
"content-type": "application/json",
|
|
@@ -114807,10 +114913,19 @@ class BrokerMeshForwardingService {
|
|
|
114807
114913
|
postJson;
|
|
114808
114914
|
constructor(deps) {
|
|
114809
114915
|
this.deps = deps;
|
|
114810
|
-
this.forwardMessage = deps.forwardMessage ?? forwardMeshMessage
|
|
114811
|
-
|
|
114812
|
-
|
|
114813
|
-
|
|
114916
|
+
this.forwardMessage = deps.forwardMessage ?? ((target2, bundle, options) => forwardMeshMessage(target2, bundle, {
|
|
114917
|
+
...options,
|
|
114918
|
+
peerFetch: deps.peerFetch
|
|
114919
|
+
}));
|
|
114920
|
+
this.forwardCollaborationRecord = deps.forwardCollaborationRecord ?? ((target2, bundle, options) => forwardMeshCollaborationRecord(target2, bundle, {
|
|
114921
|
+
...options,
|
|
114922
|
+
peerFetch: deps.peerFetch
|
|
114923
|
+
}));
|
|
114924
|
+
this.forwardCollaborationEvent = deps.forwardCollaborationEvent ?? ((target2, bundle, options) => forwardMeshCollaborationEvent(target2, bundle, {
|
|
114925
|
+
...options,
|
|
114926
|
+
peerFetch: deps.peerFetch
|
|
114927
|
+
}));
|
|
114928
|
+
this.postJson = deps.postJson ?? ((brokerBaseUrl, path7, payload) => postMeshPeerJson(brokerBaseUrl, path7, payload, deps.peerFetch));
|
|
114814
114929
|
}
|
|
114815
114930
|
describeRemoteAuthorityIssue(agent, authorityNode) {
|
|
114816
114931
|
const displayName = agent.displayName ?? agent.id;
|
|
@@ -114911,7 +115026,7 @@ class BrokerMeshForwardingService {
|
|
|
114911
115026
|
if (!isReachableRemoteBrokerUrl(brokerUrl)) {
|
|
114912
115027
|
return;
|
|
114913
115028
|
}
|
|
114914
|
-
await this.postJson(brokerUrl, "/v1/flights", flight);
|
|
115029
|
+
await this.postJson(brokerUrl, "/v1/mesh/flights", flight);
|
|
114915
115030
|
}
|
|
114916
115031
|
async forwardPeerBrokerDeliveries(message, deliveries) {
|
|
114917
115032
|
return { forwarded: [], failed: [] };
|
|
@@ -114981,9 +115096,9 @@ class BrokerMeshForwardingService {
|
|
|
114981
115096
|
function unique4(values) {
|
|
114982
115097
|
return [...new Set(values.filter(Boolean))];
|
|
114983
115098
|
}
|
|
114984
|
-
function normalizeSeedUrl(seed, defaultPort2) {
|
|
115099
|
+
function normalizeSeedUrl(seed, defaultPort2, scheme = "http") {
|
|
114985
115100
|
try {
|
|
114986
|
-
const url2 = new URL(seed.includes("://") ? seed :
|
|
115101
|
+
const url2 = new URL(seed.includes("://") ? seed : `${scheme}://${seed}`);
|
|
114987
115102
|
if (!url2.port) {
|
|
114988
115103
|
url2.port = String(defaultPort2);
|
|
114989
115104
|
}
|
|
@@ -114992,26 +115107,21 @@ function normalizeSeedUrl(seed, defaultPort2) {
|
|
|
114992
115107
|
return "";
|
|
114993
115108
|
}
|
|
114994
115109
|
}
|
|
114995
|
-
function resolveDiscoveredBrokerUrl(
|
|
114996
|
-
|
|
114997
|
-
if (!advertisedBrokerUrl) {
|
|
114998
|
-
return observed;
|
|
114999
|
-
}
|
|
115000
|
-
if (!isReachableRemoteBrokerUrl(advertisedBrokerUrl)) {
|
|
115001
|
-
return observed;
|
|
115002
|
-
}
|
|
115003
|
-
return new URL(advertisedBrokerUrl).toString().replace(/\/$/, "");
|
|
115110
|
+
function resolveDiscoveredBrokerUrl(_advertisedBrokerUrl, observedBrokerUrl) {
|
|
115111
|
+
return observedBrokerUrl.replace(/\/$/, "");
|
|
115004
115112
|
}
|
|
115005
115113
|
function buildPeerSeeds(peerName, addresses, dnsName, defaultPort2) {
|
|
115006
|
-
const
|
|
115007
|
-
|
|
115008
|
-
|
|
115114
|
+
const hosts = [dnsName, peerName, ...addresses].filter((value) => Boolean(value));
|
|
115115
|
+
return unique4([
|
|
115116
|
+
...hosts.map((value) => normalizeSeedUrl(value, defaultPort2, "https")),
|
|
115117
|
+
...hosts.map((value) => normalizeSeedUrl(value, defaultPort2, "http"))
|
|
115118
|
+
]);
|
|
115009
115119
|
}
|
|
115010
|
-
async function probeNode(baseUrl, timeoutMs) {
|
|
115120
|
+
async function probeNode(baseUrl, timeoutMs, peerFetch) {
|
|
115011
115121
|
const controller = new AbortController;
|
|
115012
115122
|
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
115013
115123
|
try {
|
|
115014
|
-
const response = await
|
|
115124
|
+
const response = await peerFetch(baseUrl, "/v1/node", {
|
|
115015
115125
|
signal: controller.signal,
|
|
115016
115126
|
headers: {
|
|
115017
115127
|
accept: "application/json"
|
|
@@ -115033,13 +115143,14 @@ async function probeNode(baseUrl, timeoutMs) {
|
|
|
115033
115143
|
}
|
|
115034
115144
|
async function discoverMeshNodes(options) {
|
|
115035
115145
|
const peerSeeds = options.seeds ? options.seeds.map((seed) => normalizeSeedUrl(seed, options.defaultPort)) : [];
|
|
115036
|
-
const tailscalePeers = await readTailscalePeers();
|
|
115146
|
+
const tailscalePeers = await (options.readTailscalePeers ?? readTailscalePeers)();
|
|
115037
115147
|
const tailscaleSeeds = tailscalePeers.filter((peer) => peer.online).flatMap((peer) => buildPeerSeeds(peer.name, peer.addresses, peer.dnsName, options.defaultPort));
|
|
115038
115148
|
const candidates = unique4([...peerSeeds, ...tailscaleSeeds]).filter((seed) => seed && seed !== options.localBrokerUrl);
|
|
115039
115149
|
const discovered = [];
|
|
115040
115150
|
const seen = new Set;
|
|
115151
|
+
const peerFetch = options.peerFetch ?? meshPeerFetch;
|
|
115041
115152
|
for (const seed of candidates) {
|
|
115042
|
-
const node = await probeNode(seed, options.timeoutMs ?? 1500);
|
|
115153
|
+
const node = await probeNode(seed, options.timeoutMs ?? 1500, peerFetch);
|
|
115043
115154
|
if (!node)
|
|
115044
115155
|
continue;
|
|
115045
115156
|
if (node.id === options.localNodeId)
|
|
@@ -115085,7 +115196,8 @@ function remotePeerAgentForNode(input) {
|
|
|
115085
115196
|
return {
|
|
115086
115197
|
...input.agent,
|
|
115087
115198
|
homeNodeId: agentHome,
|
|
115088
|
-
authorityNodeId: input.agent.authorityNodeId || input.node.id
|
|
115199
|
+
authorityNodeId: input.agent.authorityNodeId || input.node.id,
|
|
115200
|
+
advertiseScope: "mesh"
|
|
115089
115201
|
};
|
|
115090
115202
|
}
|
|
115091
115203
|
|
|
@@ -116648,13 +116760,105 @@ import { createServer as createHttpsServer } from "https";
|
|
|
116648
116760
|
|
|
116649
116761
|
// packages/runtime/src/mesh-mdns-service.ts
|
|
116650
116762
|
import { createRequire as createRequire3 } from "module";
|
|
116763
|
+
import { spawn as spawn12 } from "child_process";
|
|
116651
116764
|
var MESH_MDNS_SERVICE_TYPE = "openscout";
|
|
116652
116765
|
var MESH_MDNS_PROTOCOL_VERSION = 1;
|
|
116653
116766
|
var MESH_MDNS_KEY_ID_DIGEST_HEX_CHARS = 32;
|
|
116654
116767
|
var require3 = createRequire3(import.meta.url);
|
|
116655
|
-
function
|
|
116768
|
+
function buildDarwinDnsSdRegisterArgs(options) {
|
|
116769
|
+
return [
|
|
116770
|
+
"-R",
|
|
116771
|
+
options.name,
|
|
116772
|
+
`_${options.type}._${options.protocol}`,
|
|
116773
|
+
"local.",
|
|
116774
|
+
String(options.port),
|
|
116775
|
+
...Object.entries(options.txt).map(([key, value]) => `${key}=${value}`)
|
|
116776
|
+
];
|
|
116777
|
+
}
|
|
116778
|
+
function createDarwinMdnsResponder(browserResponder, spawnProcess3 = spawn12, logger = console, processEvents = process) {
|
|
116779
|
+
const registrations = new Set;
|
|
116780
|
+
const stopRegistration = (child) => {
|
|
116781
|
+
registrations.delete(child);
|
|
116782
|
+
if (child.killed)
|
|
116783
|
+
return;
|
|
116784
|
+
try {
|
|
116785
|
+
child.kill("SIGTERM");
|
|
116786
|
+
} catch {}
|
|
116787
|
+
};
|
|
116788
|
+
const stopAll = () => {
|
|
116789
|
+
for (const child of registrations)
|
|
116790
|
+
stopRegistration(child);
|
|
116791
|
+
};
|
|
116792
|
+
processEvents.once("exit", stopAll);
|
|
116793
|
+
return {
|
|
116794
|
+
publish(options) {
|
|
116795
|
+
let diagnosticOutput = "";
|
|
116796
|
+
let failure = null;
|
|
116797
|
+
const failureListeners = new Set;
|
|
116798
|
+
const child = spawnProcess3("/usr/bin/dns-sd", buildDarwinDnsSdRegisterArgs(options), {
|
|
116799
|
+
argv0: "openscout-mesh-mdns",
|
|
116800
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
116801
|
+
});
|
|
116802
|
+
registrations.add(child);
|
|
116803
|
+
const appendDiagnostic = (chunk) => {
|
|
116804
|
+
diagnosticOutput = `${diagnosticOutput}${String(chunk)}`.slice(-4096);
|
|
116805
|
+
};
|
|
116806
|
+
child.stdout?.on("data", appendDiagnostic);
|
|
116807
|
+
child.stderr?.on("data", appendDiagnostic);
|
|
116808
|
+
const reportFailure = (error48) => {
|
|
116809
|
+
if (failure)
|
|
116810
|
+
return;
|
|
116811
|
+
failure = error48;
|
|
116812
|
+
registrations.delete(child);
|
|
116813
|
+
logger.warn(`[mesh-mdns] native registration failed: ${error48.message}`);
|
|
116814
|
+
for (const listener of failureListeners)
|
|
116815
|
+
listener(error48);
|
|
116816
|
+
failureListeners.clear();
|
|
116817
|
+
};
|
|
116818
|
+
child.once("exit", (code, signal) => {
|
|
116819
|
+
if (!registrations.has(child))
|
|
116820
|
+
return;
|
|
116821
|
+
const detail = code === null ? `signal ${signal ?? "unknown"}` : `exit ${code}`;
|
|
116822
|
+
const diagnostic = diagnosticOutput.trim();
|
|
116823
|
+
reportFailure(new Error(`${detail}${diagnostic ? `: ${diagnostic}` : ""}`));
|
|
116824
|
+
});
|
|
116825
|
+
child.once("error", reportFailure);
|
|
116826
|
+
return {
|
|
116827
|
+
stop(callback) {
|
|
116828
|
+
failureListeners.clear();
|
|
116829
|
+
stopRegistration(child);
|
|
116830
|
+
callback?.();
|
|
116831
|
+
},
|
|
116832
|
+
onFailure(listener) {
|
|
116833
|
+
if (failure) {
|
|
116834
|
+
listener(failure);
|
|
116835
|
+
} else {
|
|
116836
|
+
failureListeners.add(listener);
|
|
116837
|
+
}
|
|
116838
|
+
}
|
|
116839
|
+
};
|
|
116840
|
+
},
|
|
116841
|
+
unpublishAll(callback) {
|
|
116842
|
+
stopAll();
|
|
116843
|
+
callback?.();
|
|
116844
|
+
},
|
|
116845
|
+
find(options, onup) {
|
|
116846
|
+
return browserResponder.find(options, onup);
|
|
116847
|
+
},
|
|
116848
|
+
destroy(callback) {
|
|
116849
|
+
stopAll();
|
|
116850
|
+
processEvents.off("exit", stopAll);
|
|
116851
|
+
browserResponder.destroy(callback);
|
|
116852
|
+
}
|
|
116853
|
+
};
|
|
116854
|
+
}
|
|
116855
|
+
function selectMdnsResponderForPlatform(browserResponder, platform = process.platform, spawnProcess3 = spawn12, logger = console, processEvents = process) {
|
|
116856
|
+
return platform === "darwin" ? createDarwinMdnsResponder(browserResponder, spawnProcess3, logger, processEvents) : browserResponder;
|
|
116857
|
+
}
|
|
116858
|
+
function defaultResponderFactory(logger = console) {
|
|
116656
116859
|
const Bonjour = require3("bonjour-service");
|
|
116657
|
-
|
|
116860
|
+
const responder = new Bonjour;
|
|
116861
|
+
return selectMdnsResponderForPlatform(responder, process.platform, spawn12, logger, process);
|
|
116658
116862
|
}
|
|
116659
116863
|
function meshMdnsKeyIdDigest(keyId) {
|
|
116660
116864
|
const normalized = keyId.trim().toLowerCase();
|
|
@@ -116696,13 +116900,19 @@ class MeshMdnsService {
|
|
|
116696
116900
|
return;
|
|
116697
116901
|
}
|
|
116698
116902
|
const responder = this.ensureResponder();
|
|
116699
|
-
|
|
116903
|
+
const published = responder.publish({
|
|
116700
116904
|
name: options.name ?? `OpenScout Node ${this.ownKidDigest.slice(0, 8)}`,
|
|
116905
|
+
host: `openscout-${this.ownKidDigest}.local`,
|
|
116701
116906
|
type: MESH_MDNS_SERVICE_TYPE,
|
|
116702
116907
|
protocol: "tcp",
|
|
116703
116908
|
port: options.port,
|
|
116704
116909
|
txt: buildMeshMdnsTxt(options)
|
|
116705
116910
|
});
|
|
116911
|
+
this.published = published;
|
|
116912
|
+
published.onFailure?.(() => {
|
|
116913
|
+
if (this.published === published)
|
|
116914
|
+
this.published = null;
|
|
116915
|
+
});
|
|
116706
116916
|
}
|
|
116707
116917
|
startBrowse(options = {}) {
|
|
116708
116918
|
if (this.browser) {
|
|
@@ -116745,7 +116955,7 @@ class MeshMdnsService {
|
|
|
116745
116955
|
}
|
|
116746
116956
|
ensureResponder() {
|
|
116747
116957
|
if (!this.responder) {
|
|
116748
|
-
this.responder =
|
|
116958
|
+
this.responder = this.options.responderFactory ? this.options.responderFactory() : defaultResponderFactory(this.options.logger);
|
|
116749
116959
|
}
|
|
116750
116960
|
return this.responder;
|
|
116751
116961
|
}
|
|
@@ -116853,16 +117063,23 @@ function createMeshBindController(deps) {
|
|
|
116853
117063
|
responderFactory: deps.mdnsResponderFactory,
|
|
116854
117064
|
logger
|
|
116855
117065
|
});
|
|
116856
|
-
service.start({
|
|
116857
|
-
port: deps.port,
|
|
116858
|
-
keyId: deps.keyId,
|
|
116859
|
-
tls: true
|
|
116860
|
-
});
|
|
116861
|
-
service.startBrowse({
|
|
116862
|
-
onPeerFound: deps.onPeerFound,
|
|
116863
|
-
onPeerLost: deps.onPeerLost
|
|
116864
|
-
});
|
|
116865
117066
|
mdns = service;
|
|
117067
|
+
try {
|
|
117068
|
+
service.start({
|
|
117069
|
+
port: deps.port,
|
|
117070
|
+
keyId: deps.keyId,
|
|
117071
|
+
tls: true
|
|
117072
|
+
});
|
|
117073
|
+
service.startBrowse({
|
|
117074
|
+
onPeerFound: deps.onPeerFound,
|
|
117075
|
+
onPeerLost: deps.onPeerLost
|
|
117076
|
+
});
|
|
117077
|
+
} catch (error48) {
|
|
117078
|
+
service.stop();
|
|
117079
|
+
if (mdns === service)
|
|
117080
|
+
mdns = null;
|
|
117081
|
+
throw error48;
|
|
117082
|
+
}
|
|
116866
117083
|
logger?.log(`[openscout-runtime] mesh mDNS advertising _openscout._tcp on port ${deps.port} (tls=1)`);
|
|
116867
117084
|
}
|
|
116868
117085
|
async function openTlsListeners(addresses, identity2) {
|
|
@@ -117017,6 +117234,7 @@ var MESH_ROUTE_MATRIX = {
|
|
|
117017
117234
|
"POST /v1/mesh/collaboration/events": "control",
|
|
117018
117235
|
"POST /v1/mesh/collaboration/records": "control",
|
|
117019
117236
|
"POST /v1/mesh/discover": "control",
|
|
117237
|
+
"POST /v1/mesh/flights": "control",
|
|
117020
117238
|
"POST /v1/mesh/invocations": "control",
|
|
117021
117239
|
"POST /v1/mesh/messages": "control",
|
|
117022
117240
|
[TRPC_UPGRADE_ROUTE]: "control",
|
|
@@ -117509,16 +117727,18 @@ function currentSignedNodeCard() {
|
|
|
117509
117727
|
function effectiveGateMode() {
|
|
117510
117728
|
return meshBindController?.hasNonLoopbackListener() ? "enforce" : meshGateMode;
|
|
117511
117729
|
}
|
|
117730
|
+
function trustedPeerForBrokerBaseUrl(baseUrl) {
|
|
117731
|
+
const normalized = baseUrl.replace(/\/$/, "");
|
|
117732
|
+
const node = Object.values(runtime.snapshot().nodes).find((candidate) => candidate.brokerUrl?.replace(/\/$/, "") === normalized);
|
|
117733
|
+
if (!node || !trustedPeerStore) {
|
|
117734
|
+
return;
|
|
117735
|
+
}
|
|
117736
|
+
return trustedPeerStore.listTrustedPeers().find((peer) => peer.nodeId === node.id);
|
|
117737
|
+
}
|
|
117512
117738
|
var daemonMeshPeerFetch = createMeshPeerFetch({
|
|
117513
117739
|
loadIdentity: () => nodeIdentity,
|
|
117514
|
-
expectedPeerKeyId: (baseUrl) =>
|
|
117515
|
-
|
|
117516
|
-
const node = Object.values(runtime.snapshot().nodes).find((candidate) => candidate.brokerUrl?.replace(/\/$/, "") === normalized);
|
|
117517
|
-
if (!node || !trustedPeerStore) {
|
|
117518
|
-
return;
|
|
117519
|
-
}
|
|
117520
|
-
return trustedPeerStore.listTrustedPeers().find((peer) => peer.nodeId === node.id)?.keyId;
|
|
117521
|
-
}
|
|
117740
|
+
expectedPeerKeyId: (baseUrl) => trustedPeerForBrokerBaseUrl(baseUrl)?.keyId,
|
|
117741
|
+
expectedPeerTlsPin: (baseUrl) => trustedPeerForBrokerBaseUrl(baseUrl)?.tlsSpkiFingerprint
|
|
117522
117742
|
});
|
|
117523
117743
|
var threadEvents = new ThreadEventPlane({
|
|
117524
117744
|
nodeId,
|
|
@@ -117560,7 +117780,8 @@ var meshForwardingService = new BrokerMeshForwardingService({
|
|
|
117560
117780
|
currentLocalNode,
|
|
117561
117781
|
invocationFor: (invocationId) => knownInvocations.get(invocationId),
|
|
117562
117782
|
endpointForAgent: (agentId) => homeEndpointForAgent(runtime.snapshot(), agentId),
|
|
117563
|
-
projectRootForTarget: brokerTargetProjectRoot
|
|
117783
|
+
projectRootForTarget: brokerTargetProjectRoot,
|
|
117784
|
+
peerFetch: daemonMeshPeerFetch
|
|
117564
117785
|
});
|
|
117565
117786
|
var controlStreams = new BrokerControlStreamService({
|
|
117566
117787
|
enqueueEvent: (event) => projection.enqueueEvent(event),
|
|
@@ -117608,6 +117829,7 @@ var meshDiscoveryService = new BrokerMeshDiscoveryService({
|
|
|
117608
117829
|
upsertNode: upsertNodeDurably,
|
|
117609
117830
|
upsertAgent: upsertAgentDurably,
|
|
117610
117831
|
notifyPeerOnline: (peerNodeId) => peerDelivery.notifyPeerOnline(peerNodeId),
|
|
117832
|
+
fetchPeerAgents: (peerBrokerUrl) => fetchPeerAgents(peerBrokerUrl, daemonMeshPeerFetch),
|
|
117611
117833
|
log: (message) => console.log(message)
|
|
117612
117834
|
});
|
|
117613
117835
|
var deliveryStore = new BrokerDeliveryStore({
|
|
@@ -117689,9 +117911,9 @@ var deliveryRouter = new BrokerDeliveryRouter({
|
|
|
117689
117911
|
remediation: `bring a ${session.harness} worker online first, or use a resumable harness`
|
|
117690
117912
|
};
|
|
117691
117913
|
}
|
|
117692
|
-
let
|
|
117914
|
+
let spawn13;
|
|
117693
117915
|
try {
|
|
117694
|
-
|
|
117916
|
+
spawn13 = resolveCardlessSessionSpawnTarget(session.harness);
|
|
117695
117917
|
} catch (error48) {
|
|
117696
117918
|
return {
|
|
117697
117919
|
ok: false,
|
|
@@ -117730,8 +117952,8 @@ var deliveryRouter = new BrokerDeliveryRouter({
|
|
|
117730
117952
|
}, {
|
|
117731
117953
|
sessionId: scoutSessionId,
|
|
117732
117954
|
handle: scoutSessionId,
|
|
117733
|
-
transport:
|
|
117734
|
-
harness:
|
|
117955
|
+
transport: spawn13.transport,
|
|
117956
|
+
harness: spawn13.harness,
|
|
117735
117957
|
cwd,
|
|
117736
117958
|
projectRoot: cwd,
|
|
117737
117959
|
nodeId,
|
|
@@ -117740,7 +117962,7 @@ var deliveryRouter = new BrokerDeliveryRouter({
|
|
|
117740
117962
|
flatDispatch: true,
|
|
117741
117963
|
displayName: `${basename24(cwd)}:${session.nativeSessionId.slice(0, 8)}`
|
|
117742
117964
|
});
|
|
117743
|
-
console.log(`[openscout-runtime] flat-dispatch wake ${session.harness}:${session.nativeSessionId} via ${
|
|
117965
|
+
console.log(`[openscout-runtime] flat-dispatch wake ${session.harness}:${session.nativeSessionId} via ${spawn13.transport} cwd=${cwd}`);
|
|
117744
117966
|
return { ok: true };
|
|
117745
117967
|
} catch (error48) {
|
|
117746
117968
|
return {
|