@openscout/scout 0.2.92 → 0.2.94
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 +22 -28
- package/bin/scoutd +0 -0
- package/dist/build-manifest.json +3 -3
- package/dist/client/apple-touch-icon.png +0 -0
- package/dist/client/assets/ActivityScreen--eANwuxa.js +1 -0
- package/dist/client/assets/{AddProjectForm-CpyytDf2.js → AddProjectForm-CcD6qvV8.js} +1 -1
- package/dist/client/assets/AgentAvatar-CYhf6twS.js +1 -0
- package/dist/client/assets/AgentConfigurationScreen-BTI24HQX.js +1 -0
- package/dist/client/assets/AgentDefinitionsWorkspace-srmN6-vj.js +1 -0
- package/dist/client/assets/{AgentDetailCard-BTiOmh-a.js → AgentDetailCard-UqPNpcvB.js} +1 -1
- package/dist/client/assets/AgentFloorView-XXNgI5Cj.js +1 -0
- package/dist/client/assets/AgentInfoScreen-CimdOnZ9.js +1 -0
- package/dist/client/assets/{AgentLaneCard-lfRNb7JD.js → AgentLaneCard-Z-aOBR3W.js} +1 -1
- package/dist/client/assets/{AgentLaneChrome-Dlwrbq3g.js → AgentLaneChrome-CyhA1reW.js} +1 -1
- package/dist/client/assets/AgentLaneDetailSheet-BNzjMjIH.js +4 -0
- package/dist/client/assets/{AgentLaneSummaryResize-6SOEWUnr.js → AgentLaneSummaryResize-Box8-_rS.js} +1 -1
- package/dist/client/assets/AgentLanesEmbedScreen-BmLnN4on.js +1 -0
- package/dist/client/assets/{AgentLanesPreflight-C3uOiOzd.js → AgentLanesPreflight-5B6sXvRB.js} +1 -1
- package/dist/client/assets/AgentLanesView-DHyzVBk6.js +2 -0
- package/dist/client/assets/{AgentLiveActions-BJ5dIfL3.js → AgentLiveActions-BwuzOE8h.js} +1 -1
- package/dist/client/assets/AgentSessions-CsZwoukw.js +6 -0
- package/dist/client/assets/AgentsConsole-KCao4XmX.js +1 -0
- package/dist/client/assets/AgentsScreen-CtPAmwRX.js +1 -0
- package/dist/client/assets/AgentsSubnav-CDMjKeYC.js +1 -0
- package/dist/client/assets/AstronautSuit-Ckx7lu7G.js +1 -0
- package/dist/client/assets/AtopView-DYlpgEHf.js +1 -0
- package/dist/client/assets/{BackToPicker-D1LV6Cqp.js → BackToPicker-4JaeRvDm.js} +1 -1
- package/dist/client/assets/BriefingDetailScreen-D6-xqrpo.js +1 -0
- package/dist/client/assets/BriefingsScreen-DKxSDEmk.js +1 -0
- package/dist/client/assets/{BrokerMetadataPanel-BhjECqOK.js → BrokerMetadataPanel-BbREmsbK.js} +1 -1
- package/dist/client/assets/BrokerScreen-fbPIouMw.js +5 -0
- package/dist/client/assets/CastPicker-BcA2vDDV.js +1 -0
- package/dist/client/assets/CastPicker-zXsnkTIy.css +1 -0
- package/dist/client/assets/ChatCollapsedStrip-Ycm0ecaX.js +1 -0
- package/dist/client/assets/{CodeDiffPane-Bx_2VAzv.js → CodeDiffPane-Cn8Y9hAt.js} +1 -1
- package/dist/client/assets/{CodeProjectPicker-C1yOJKvs.js → CodeProjectPicker-nPFktrco.js} +1 -1
- package/dist/client/assets/CodeScreen-BlAxtxE5.js +1 -0
- package/dist/client/assets/ConversationComposer-2HjbGPL9.js +1 -0
- package/dist/client/assets/ConversationFeedRows-C6wUqJrx.js +1 -0
- package/dist/client/assets/ConversationHeader-C8vfXaTF.js +1 -0
- package/dist/client/assets/ConversationPanels-CNCIbpqU.js +6 -0
- package/dist/client/assets/ConversationScreen-BNULZAp2.js +2 -0
- package/dist/client/assets/ConversationScreen-CkWnKXt6.css +1 -0
- package/dist/client/assets/ConversationStatus-DZuyKsWN.js +1 -0
- package/dist/client/assets/CrewAvatar-CTIuxp4G.js +1 -0
- package/dist/client/assets/CrewAvatar-D0c9z5Qr.css +1 -0
- package/dist/client/assets/CrewWorkspaces-CJhBKVoZ.css +1 -0
- package/dist/client/assets/CrewWorkspaces-CkPYIA46.js +1 -0
- package/dist/client/assets/{DataTable-CJbbgBdA.js → DataTable-6IDhanr5.js} +1 -1
- package/dist/client/assets/DispatchAftermath-DC1u9itO.js +1 -0
- package/dist/client/assets/DocumentFocusViewer-DZVhS7as.js +1 -0
- package/dist/client/assets/{EmbeddableSurfacesLab-BdsYRDky.js → EmbeddableSurfacesLab-BKUFJMCV.js} +1 -1
- package/dist/client/assets/{EmptyState-BRY5jTpz.js → EmptyState-CeBl0iGd.js} +1 -1
- package/dist/client/assets/{FileViewerPane-9Bveqm9c.js → FileViewerPane-DQlpNt2S.js} +2 -2
- package/dist/client/assets/FlightObserveScreen-CDWGSKZg.js +1 -0
- package/dist/client/assets/FollowScreen-BXHOp3gb.js +1 -0
- package/dist/client/assets/{HarnessMark-BPAphNjx.js → HarnessMark-D5CA5uSp.js} +1 -1
- package/dist/client/assets/HarnessesScreen-DhFXq1qz.js +1 -0
- package/dist/client/assets/{HerdrSession-BujfGzrP.js → HerdrSession-BRhs5LIR.js} +1 -1
- package/dist/client/assets/HomeHero-7JwycwFY.css +1 -0
- package/dist/client/assets/HomeHero-DMABJuze.js +1 -0
- package/dist/client/assets/HostAdvisorView-RAociATV.js +1 -0
- package/dist/client/assets/{KnowledgeSearchInspector-B4ZY24xE.js → KnowledgeSearchInspector-CZPyVNSw.js} +1 -1
- package/dist/client/assets/KnowledgeSearchScreen-mGTKIg00.js +1 -0
- package/dist/client/assets/{LaneToolHoverCard-B7KdvQvf.js → LaneToolHoverCard-D_DMlBeT.js} +1 -1
- package/dist/client/assets/LaneTraceDetailSheet-BEHg3LmH.js +1 -0
- package/dist/client/assets/{LaneTraceEventFocus-mkMw2wJU.js → LaneTraceEventFocus-DVimcizS.js} +1 -1
- package/dist/client/assets/{MeshCanvas-CpKcWxKy.js → MeshCanvas-BOuZx4AM.js} +2 -2
- package/dist/client/assets/{MeshCanvasMinimap-C9IoGHbe.js → MeshCanvasMinimap-wL-1N94e.js} +1 -1
- package/dist/client/assets/MeshScreen-DMY9Bmh5.js +1 -0
- package/dist/client/assets/{MeshTopologyView-DFzr0IZM.js → MeshTopologyView-DiDcX5f4.js} +2 -2
- package/dist/client/assets/MessagesScreen-Eulveud3.js +1 -0
- package/dist/client/assets/{MissionContextRail-Y8QxUZGE.js → MissionContextRail-DrNKXG5u.js} +1 -1
- package/dist/client/assets/MissionControlView-ByBlHVN8.js +1 -0
- package/dist/client/assets/MissionFocusOverlay-D1i6R6Zt.js +1 -0
- package/dist/client/assets/MissionLeftAgentRow-DN9NcCML.js +1 -0
- package/dist/client/assets/MissionLogPane-DSeIv3Xo.js +1 -0
- package/dist/client/assets/NewAgentModal-V7yK6J6j.js +1 -0
- package/dist/client/assets/NewChatComposer-hlWT-nbR.js +19 -0
- package/dist/client/assets/{NewChatOrigin-DmuJ32wa.js → NewChatOrigin-DdpzE4kz.js} +1 -1
- package/dist/client/assets/ObserveEmbedScreen-l_Q3ts2q.js +2 -0
- package/dist/client/assets/ObserveTextFlow-BSEtYTxU.js +2 -0
- package/dist/client/assets/ObservedTopologyPanel-CdGUXxGR.js +2 -0
- package/dist/client/assets/OpenScoutAppShell-DN8dOSK4.js +79 -0
- package/dist/client/assets/OpsAgentsView-ntGr4pz4.js +1 -0
- package/dist/client/assets/OpsScreen-Ppen_Lmj.js +1 -0
- package/dist/client/assets/OpsSubnav-GAKsoSor.js +1 -0
- package/dist/client/assets/ProjectAgentProfile-BLlp2e6t.js +1 -0
- package/dist/client/assets/{ProjectAgentProfileBar-BLVg5EeA.js → ProjectAgentProfileBar-BQET-qrY.js} +1 -1
- package/dist/client/assets/ProjectAgentProfileHero-Ck8mThtx.js +1 -0
- package/dist/client/assets/ProjectsInbox-Dlt8OQ8O.js +2 -0
- package/dist/client/assets/ProjectsRail-DCfNMmnW.js +1 -0
- package/dist/client/assets/ProjectsScreen-BP-hmI1m.js +1 -0
- package/dist/client/assets/ProjectsThreadAside-CWpMjGIH.js +1 -0
- package/dist/client/assets/Provider-B2xuo3rf.js +1 -0
- package/dist/client/assets/RailRow-B-GycCBx.js +1 -0
- package/dist/client/assets/RailRow-B0sRaJc6.css +1 -0
- package/dist/client/assets/RawSessionsTable-AQThi6sm.js +1 -0
- package/dist/client/assets/RealtimeVoiceScreen-D7zZHK_t.js +1 -0
- package/dist/client/assets/{RepoDiffEmbedScreen-BCDXFE3D.js → RepoDiffEmbedScreen-DXWoRF_c.js} +1 -1
- package/dist/client/assets/{RepoDiffPageScreen-m62FiWXC.js → RepoDiffPageScreen-D_274ExO.js} +1 -1
- package/dist/client/assets/RepoDiffViewer-DbedmHDX.js +7 -0
- package/dist/client/assets/RepoDiffViewerLazy-C0--fPtk.js +2 -0
- package/dist/client/assets/ReposScreen-D39_YG4H.js +6 -0
- package/dist/client/assets/ScoutDeckSurface-CKT3qdqY.js +1 -0
- package/dist/client/assets/{ScoutSurface-CkgT7A-c.js → ScoutSurface-UsRy0t-I.js} +1 -1
- package/dist/client/assets/{ScoutbotFxLab-D-kV5j4T.js → ScoutbotFxLab-Fmdfboxs.js} +1 -1
- package/dist/client/assets/{SecondaryNav-_wyKjwNf.js → SecondaryNav-o2RL9H8H.js} +1 -1
- package/dist/client/assets/{SessionEmbedScreen-CJZmIBV7.js → SessionEmbedScreen-RD5XOx7R.js} +1 -1
- package/dist/client/assets/{SessionObserve-yYA8Gy5s.js → SessionObserve-Dsd0j05N.js} +9 -9
- package/dist/client/assets/{SessionObserveEvidence-cHdjYOJe.js → SessionObserveEvidence-DopQYDkD.js} +1 -1
- package/dist/client/assets/SessionRefScreen-B_cTv47v.js +1 -0
- package/dist/client/assets/SessionsScreen-Bq0Z77On.js +1 -0
- package/dist/client/assets/SettingsDrawer-R8a0TlJD.css +1 -0
- package/dist/client/assets/SettingsDrawer-_AwuopMS.js +3 -0
- package/dist/client/assets/SettingsScreen-Cw4DDfJP.js +1 -0
- package/dist/client/assets/{ShikiPane-dBS9hD-z.js → ShikiPane-BfHc_3pM.js} +1 -1
- package/dist/client/assets/{SlidePanel-CH-3-8_2.js → SlidePanel-C-q7XwTa.js} +1 -1
- package/dist/client/assets/SpriteAvatar-Bs68ZENy.js +1 -0
- package/dist/client/assets/{StatusPill-C8m9ZymF.js → StatusPill-ZZQwxB1a.js} +1 -1
- package/dist/client/assets/{TailView-B0BSopPs.js → TailView-Q4FVMsUH.js} +2 -2
- package/dist/client/assets/Terminal-D7zqHwHV.js +1 -0
- package/dist/client/assets/TerminalEmbedScreen-CXIJ7qv6.js +1 -0
- package/dist/client/assets/TerminalHeaderMount-BnBLOPbb.js +1 -0
- package/dist/client/assets/{TextDocumentSurface-BWJCGBZf.js → TextDocumentSurface-CKQP-cBT.js} +1 -1
- package/dist/client/assets/{TmuxPeek-B4QdHbGm.js → TmuxPeek-V9dGESfO.js} +1 -1
- package/dist/client/assets/{VoicePermissionsPanel-Dd4ITJy_.js → VoicePermissionsPanel-k7sbLXx2.js} +1 -1
- package/dist/client/assets/WorkDetailScreen-60p9litn.js +5 -0
- package/dist/client/assets/WorkFilesViewer-BjJS7GyM.js +1 -0
- package/dist/client/assets/{activity-CC8JzJNH.js → activity-Bj3Hnbj3.js} +1 -1
- package/dist/client/assets/{addon-fit-CaZ-uLrg.js → addon-fit-BL-NTWRU.js} +1 -1
- package/dist/client/assets/{addon-webgl-B8utL3bM.js → addon-webgl-CIMgmNjg.js} +1 -1
- package/dist/client/assets/{ScoutbotBroadcastChip-CxtYZWPZ.css → agent-autocomplete-C7xwIcwd.css} +1 -1
- package/dist/client/assets/agent-autocomplete-DXlvdc4b.js +10 -0
- package/dist/client/assets/{agent-essentials-B3wcxg_v.js → agent-essentials-BOMHR0_U.js} +1 -1
- package/dist/client/assets/{agent-lane-card-model-q4cwzLX4.js → agent-lane-card-model-CTLxf3R4.js} +1 -1
- package/dist/client/assets/agent-lane-detail-ppJId6Jc.js +2 -0
- package/dist/client/assets/{agent-lane-preview-C33Dwpn7.js → agent-lane-preview-BhplDYGf.js} +1 -1
- package/dist/client/assets/{agent-lanes-BDNktFBZ.css → agent-lanes-DlqcEf0l.css} +1 -1
- package/dist/client/assets/{agent-lanes-model-VYQ5a68i.js → agent-lanes-model-AfrjRNK5.js} +2 -2
- package/dist/client/assets/agent-specialization-BIPIBW8u.js +1 -0
- package/dist/client/assets/api-Co9aQ2Jw.js +1 -0
- package/dist/client/assets/{api-BkjHJfgJ.js → api-HFH8wFyb.js} +1 -1
- package/dist/client/assets/{arc.es-uFv9UrHn.js → arc.es-IR5r6sj_.js} +1 -1
- package/dist/client/assets/archive-BjcGiAy8.js +1 -0
- package/dist/client/assets/{arrow-down-w1HPzDSE.js → arrow-down-BydciYFZ.js} +1 -1
- package/dist/client/assets/{arrow-left-B-3GJ7ct.js → arrow-left-CghA0kTw.js} +1 -1
- package/dist/client/assets/arrow-right-iJFv3jNh.js +1 -0
- package/dist/client/assets/{arrow-up-right-G6bJXxhK.js → arrow-up-right-CCfZXPqD.js} +1 -1
- package/dist/client/assets/{bot-DzCOGKi6.js → bot-B5sub1-i.js} +1 -1
- package/dist/client/assets/broker-display-Q75fupqG.js +2 -0
- package/dist/client/assets/{cache-Dr0why2k.js → cache-CeWH_KzJ.js} +1 -1
- package/dist/client/assets/{check-BX8nRgop.js → check-C18YQC90.js} +1 -1
- package/dist/client/assets/{chevron-down-B3VVRJcV.js → chevron-down-Mp9mu_yd.js} +1 -1
- package/dist/client/assets/{chevron-right-BYMV1511.js → chevron-right-CzH-TaSF.js} +1 -1
- package/dist/client/assets/{chunk-HRAB3GC3-dRd2eQMJ.js → chunk-HRAB3GC3-swV8PA2k.js} +1 -1
- package/dist/client/assets/{chunk-JTPDIGGW-BjX67kHU.js → chunk-JTPDIGGW-BKXqcLKw.js} +3 -3
- package/dist/client/assets/{chunk-T65CQEWV-kP6nJjkU.js → chunk-T65CQEWV-vYbNJ8E6.js} +1 -1
- package/dist/client/assets/{chunk-YOZR3KYS-C13bZPVd.js → chunk-YOZR3KYS-U65yUmqt.js} +1 -1
- package/dist/client/assets/{clock-B9ukVaVn.js → clock-B4PTFi5m.js} +1 -1
- package/dist/client/assets/{code-xml-BFc3TMSm.js → code-xml-Jtxsp5d1.js} +1 -1
- package/dist/client/assets/collapsed-strip-raJWthAH.css +1 -0
- package/dist/client/assets/compass-0_54-vz3.js +1 -0
- package/dist/client/assets/content-6RvWTrtk.js +1 -0
- package/dist/client/assets/content-BCgwMUqz.js +1 -0
- package/dist/client/assets/content-Bf2VLhx0.js +1 -0
- package/dist/client/assets/content-BrU_38-m.js +1 -0
- package/dist/client/assets/content-BvvJN8rN.js +1 -0
- package/dist/client/assets/content-CAeEqYPw.js +1 -0
- package/dist/client/assets/content-CHghn-rT.js +1 -0
- package/dist/client/assets/{content-Uqt8AG-s.css → content-CINHz-rZ.css} +1 -1
- package/dist/client/assets/content-CI_Z9DXk.js +1 -0
- package/dist/client/assets/content-CbyKONhW.js +1 -0
- package/dist/client/assets/content-Czogvp43.js +1 -0
- package/dist/client/assets/content-DFk0zNzX.js +1 -0
- package/dist/client/assets/content-DHe4DgkA.js +1 -0
- package/dist/client/assets/content-DMbawvqU.js +1 -0
- package/dist/client/assets/content-DTz7cKjo.js +1 -0
- package/dist/client/assets/content-E3kudY-W.js +1 -0
- package/dist/client/assets/content-LpO0aO_U.js +1 -0
- package/dist/client/assets/{conversation-icons-gpsv650H.js → conversation-icons-BV10B2Me.js} +1 -1
- package/dist/client/assets/conversation-model-CwF6Y9gx.js +1 -0
- package/dist/client/assets/conversation-motion-features-BKkCRaWR.js +1 -0
- package/dist/client/assets/{copy-BFmOcWof.js → copy-Dtpx4FOE.js} +1 -1
- package/dist/client/assets/cpu-BjVis9mc.js +1 -0
- package/dist/client/assets/{createLucideIcon-CFBn0Sdk.js → createLucideIcon-DXpqZP7I.js} +1 -1
- package/dist/client/assets/credentials-BTce3VP1.js +1 -0
- package/dist/client/assets/ctx-panel-D_HJ3nhb.css +1 -0
- package/dist/client/assets/discover-CHbrEItO.js +2 -0
- package/dist/client/assets/embed-entry-vil28MyU.js +2 -0
- package/dist/client/assets/{external-link-B1TI5yIt.js → external-link-Ckiyzjwo.js} +1 -1
- package/dist/client/assets/{eye-1J4yOUoG.js → eye-CpfyvdLq.js} +1 -1
- package/dist/client/assets/file-code-corner-7mo7EviR.js +1 -0
- package/dist/client/assets/{file-text-DcYSrI4v.js → file-text-KijGBnME.js} +1 -1
- package/dist/client/assets/gauge-y-Xg8Mrv.js +1 -0
- package/dist/client/assets/gestures-Bq9XnSqY.js +1 -0
- package/dist/client/assets/git-branch-BQ_x8KZL.js +1 -0
- package/dist/client/assets/harnesses-screen-2z36fJKE.css +1 -0
- package/dist/client/assets/home-moving-signal-DMguaRWR.css +1 -0
- package/dist/client/assets/home-moving-signal-DtRpiNa0.js +1 -0
- package/dist/client/assets/home-now-card-DFb4GOgM.js +1 -0
- package/dist/client/assets/{home-now-card-nano-y1EhBvVL.js → home-now-card-nano-D--m9jpq.js} +1 -1
- package/dist/client/assets/hooks-9d1SoaQA.js +2 -0
- package/dist/client/assets/host-advisor-B2Fqs5Dd.css +1 -0
- package/dist/client/assets/index-BVlMw8x_.js +1 -0
- package/dist/client/assets/index-CZ-05hKz.js +10 -0
- package/dist/client/assets/index-Cn0GR-q1.js +1 -0
- package/dist/client/assets/index-DosI4AG9.js +1 -0
- package/dist/client/assets/index-i7TMxlwW.css +1 -0
- package/dist/client/assets/index-wLwc74Pu.css +1 -0
- package/dist/client/assets/inspector-panel-C-EhEDYy.js +2 -0
- package/dist/client/assets/{keyboard-nav-h1IdakpD.js → keyboard-nav-DFhAJkW3.js} +1 -1
- package/dist/client/assets/{lane-observe-BA3g9aVd.js → lane-observe-vfyACHi0.js} +1 -1
- package/dist/client/assets/{lane-roster-store-71vFgAem.js → lane-roster-store-gUBsydNf.js} +1 -1
- package/dist/client/assets/layers-CGou-LwV.js +1 -0
- package/dist/client/assets/layout-grid-BrZt31QH.js +1 -0
- package/dist/client/assets/left-B_o51JV6.js +1 -0
- package/dist/client/assets/left-BpgWnaah.js +1 -0
- package/dist/client/assets/left-CwHZCGO3.js +2 -0
- package/dist/client/assets/left-CwLs0okF.js +1 -0
- package/dist/client/assets/left-Cx0kv6pe.js +1 -0
- package/dist/client/assets/left-DA0amyfu.js +1 -0
- package/dist/client/assets/left-DH44V4I_.css +1 -0
- package/dist/client/assets/left-R2OOE7VG.css +1 -0
- package/dist/client/assets/left-advisor-DU3s01gk.js +1 -0
- package/dist/client/assets/left-agents-qL5PpUY-.js +1 -0
- package/dist/client/assets/left-default-uvuvDmt0.js +1 -0
- package/dist/client/assets/left-lanes-DnNLgec8.js +1 -0
- package/dist/client/assets/left-mission-DN3-NLPC.js +1 -0
- package/dist/client/assets/left-z-6CkuBe.js +2 -0
- package/dist/client/assets/library-DIo5NiGP.js +1 -0
- package/dist/client/assets/{loader-circle-d6PKL_KD.js → loader-circle-BiohlpM3.js} +1 -1
- package/dist/client/assets/{local-agents-B5pq17tZ.js → local-agents-wUIaBcEr.js} +1 -1
- package/dist/client/assets/{mentions-agCGDgyA.js → mentions-CcPFMbmZ.js} +1 -1
- package/dist/client/assets/mesh-buckets-ByyFXdKT.js +1 -0
- package/dist/client/assets/{mesh-ops-5pZCYptW.js → mesh-ops-CvGyjK84.js} +1 -1
- package/dist/client/assets/mesh-roster-n2nDpEmA.js +1 -0
- package/dist/client/assets/{mesh-screen-BSDUjrnV.css → mesh-screen-D1Yvo8fU.css} +1 -1
- package/dist/client/assets/{mesh-view-store-KJzABIkN.js → mesh-view-store-BpxGm71b.js} +1 -1
- package/dist/client/assets/{message-circle-CJO-pi7b.js → message-circle-B2ddzBrX.js} +1 -1
- package/dist/client/assets/{message-markup-CyRDLdOn.js → message-markup-RkfmDfME.js} +1 -1
- package/dist/client/assets/{message-square-D1hMsMj_.js → message-square-D9YYWE0x.js} +1 -1
- package/dist/client/assets/message-visibility-DwxgcgYK.js +1 -0
- package/dist/client/assets/mission-control-CnU7dNt1.css +1 -0
- package/dist/client/assets/{mission-control-store-Ce6dOvnZ.js → mission-control-store-Bf4b54MV.js} +1 -1
- package/dist/client/assets/{observe-BSWVM8YA.js → observe-CJRIvOCn.js} +1 -1
- package/dist/client/assets/{operator-attention-BwSPeheT.js → operator-attention-RqieiSY8.js} +1 -1
- package/dist/client/assets/{page-status-D2FQLJOX.js → page-status-BptpTdQ-.js} +1 -1
- package/dist/client/assets/{paperclip-iZmDMOS5.js → paperclip-B1UNGl5d.js} +1 -1
- package/dist/client/assets/perf-PX8Rx0EP.js +1 -0
- package/dist/client/assets/persistent-state-YI-WHSCF.js +1 -0
- package/dist/client/assets/{plus-gZ0T0eBI.js → plus-CuU_X0-8.js} +1 -1
- package/dist/client/assets/profile-rY8jO38P.js +1 -0
- package/dist/client/assets/projects-inbox-BBs1hG13.css +1 -0
- package/dist/client/assets/projects-inbox-D-zAb9Gp.js +1 -0
- package/dist/client/assets/proxy-DnLpZIi9.js +1 -0
- package/dist/client/assets/{radio-RMLfV4EO.js → radio-Dm1ItnA4.js} +1 -1
- package/dist/client/assets/{refresh-cw-C4x1x6b_.js → refresh-cw-BRn9Oxxl.js} +1 -1
- package/dist/client/assets/resolve-panes-DO6LkwhQ.js +1 -0
- package/dist/client/assets/resolve-sidebar-context-CIF288wY.js +1 -0
- package/dist/client/assets/right-BJltPRnd.js +1 -0
- package/dist/client/assets/right-BbyYdzHn.js +1 -0
- package/dist/client/assets/right-Beh3nCUB.js +1 -0
- package/dist/client/assets/right-C1yumXNx.js +1 -0
- package/dist/client/assets/{right-D-k9Z1Fe.js → right-CJnB_Bg7.js} +2 -2
- package/dist/client/assets/right-CPP7GyOm.js +1 -0
- package/dist/client/assets/right-D3aTKf1F.js +1 -0
- package/dist/client/assets/right-DI1B79nR.js +1 -0
- package/dist/client/assets/right-DtsRNX5b.js +1 -0
- package/dist/client/assets/right-Shpw_xDy.js +1 -0
- package/dist/client/assets/{rocket-CMM-IdLy.js → rocket-DOwXHKWA.js} +1 -1
- package/dist/client/assets/router-DJj2WbDg.js +1 -0
- package/dist/client/assets/{scope-views-BIfMTXU4.js → scope-views-A4_vP97W.js} +1 -1
- package/dist/client/assets/scout-voice-BhPzrc6P.js +1 -0
- package/dist/client/assets/{scoutbot-BTIErYHo.js → scoutbot-BJIamJOH.js} +2 -2
- package/dist/client/assets/scoutbot-markdown-jh7tzFB1.js +6 -0
- package/dist/client/assets/{scroll-text-DPPYrqB9.js → scroll-text-DO0GQzvN.js} +1 -1
- package/dist/client/assets/{search-DAyagUtF.js → search-D1tJSAWe.js} +1 -1
- package/dist/client/assets/secondaryNavConfig-B9IF8wXl.js +1 -0
- package/dist/client/assets/{selection-bridge-BXw09aRF.js → selection-bridge-i2S9zpf8.js} +1 -1
- package/dist/client/assets/{send-horizontal-IcG46D2M.js → send-horizontal-CgLppsIC.js} +1 -1
- package/dist/client/assets/{server-BySujhDV.js → server-Dymv5Emh.js} +1 -1
- package/dist/client/assets/{session-catalog-ClS9xf6i.js → session-catalog-DNaOEzoQ.js} +1 -1
- package/dist/client/assets/{session-table-BdpHs1GN.js → session-table-PTQVoTyc.js} +1 -1
- package/dist/client/assets/settings-2fC_G9nX.js +1 -0
- package/dist/client/assets/{sliders-horizontal-R5pWUUcH.js → sliders-horizontal-BPSMHhbm.js} +1 -1
- package/dist/client/assets/{sparkles-DJOBD_8l.js → sparkles-Dy8p5xN8.js} +1 -1
- package/dist/client/assets/sse-CiOSzE5n.js +1 -0
- package/dist/client/assets/system-surfaces-redesign-QVXNeGYw.css +1 -0
- package/dist/client/assets/{tail-display-BRcJltQa.js → tail-display-DcliDVkW.js} +1 -1
- package/dist/client/assets/{tail-events-BdvqZHLr.js → tail-events-BMQmSx1n.js} +1 -1
- package/dist/client/assets/{terminal-relay-TffuSPGs.js → terminal-relay-9lhzEp2V.js} +1 -1
- package/dist/client/assets/terminal-screen-BLk4PAYt.css +1 -0
- package/dist/client/assets/terminal-sessions-BQ6t92tJ.js +1 -0
- package/dist/client/assets/{terminal-takeover-BOFPRPjR.js → terminal-takeover-DANQfTcy.js} +1 -1
- package/dist/client/assets/{terminal-DJPUp_Qn.js → terminal-yN9xN-h9.js} +1 -1
- package/dist/client/assets/{runtime-picker--IW3cRry.js → text-CnZ0e1-V.js} +1 -1
- package/dist/client/assets/text-rLpBg4_z.css +1 -0
- package/dist/client/assets/use-conversation-list-D9BNLfnW.js +1 -0
- package/dist/client/assets/{use-fleet-active-asks-BHzeBZSW.js → use-fleet-active-asks-BeAdcl09.js} +1 -1
- package/dist/client/assets/{use-mesh-ops-items-KmaauBr_.js → use-mesh-ops-items-BIvIHlqe.js} +1 -1
- package/dist/client/assets/use-reduced-motion-CKkhq9c5.js +1 -0
- package/dist/client/assets/{use-scout-dev-flags-BJbw87PK.js → use-scout-dev-flags-B2KCzPxn.js} +1 -1
- package/dist/client/assets/{useAgentHoverCard-C6o0tlat.js → useAgentHoverCard-CHBsxcbp.js} +1 -1
- package/dist/client/assets/useContentSecondaryNav-D0mUhxTF.js +1 -0
- package/dist/client/assets/{usePierreRuntime-Cm7-qdm0.js → usePierreRuntime-DUuXH5yp.js} +1 -1
- package/dist/client/assets/{wrench-CvRjjByE.js → wrench-YcXMlsh2.js} +1 -1
- package/dist/client/assets/{x-C8ayPBtj.js → x-e3h2hDsp.js} +1 -1
- package/dist/client/assets/{xterm-B0ci4Q9a.js → xterm-Byp1Hep_.js} +1 -1
- package/dist/client/assets/zap-nMcjPoWB.js +1 -0
- package/dist/client/favicon-16.png +0 -0
- package/dist/client/favicon-32.png +0 -0
- package/dist/client/favicon.ico +0 -0
- package/dist/client/favicon.svg +20 -47
- package/dist/client/index.html +5 -5
- package/dist/client/openscout-icon.png +0 -0
- package/dist/client/site.webmanifest +2 -2
- package/dist/client/web-app-icon-192.png +0 -0
- package/dist/client/web-app-icon-512.png +0 -0
- package/dist/main.mjs +20093 -78203
- package/dist/node/main.mjs +322 -252
- package/dist/pairing-runtime-controller.mjs +1032 -804
- package/dist/runtime/base-daemon.mjs +49 -121
- package/dist/runtime/broker-daemon.mjs +1105 -281
- package/dist/runtime/broker-process-manager.mjs +6 -0
- package/dist/runtime/mesh-discover.mjs +6 -0
- package/dist/scout-control-plane-web.mjs +3326 -1912
- package/package.json +7 -4
- package/dist/client/assets/ActivityScreen-DkUP7V7M.js +0 -1
- package/dist/client/assets/AgentAvatar-D8ZtMluU.js +0 -1
- package/dist/client/assets/AgentConfigurationScreen-BlGI6fuM.js +0 -1
- package/dist/client/assets/AgentDefinitionsWorkspace-CfaDVCVt.js +0 -1
- package/dist/client/assets/AgentFloorView-DjNLILLt.js +0 -1
- package/dist/client/assets/AgentInfoScreen-DG5dlHb_.js +0 -1
- package/dist/client/assets/AgentLaneDetailSheet-BzYzBfcW.js +0 -4
- package/dist/client/assets/AgentLanesEmbedScreen-Crxx1srt.js +0 -1
- package/dist/client/assets/AgentLanesView-ChNlmY-F.js +0 -2
- package/dist/client/assets/AgentSessions-DpY0htZV.js +0 -6
- package/dist/client/assets/AgentsConsole-CHyXrjhm.js +0 -1
- package/dist/client/assets/AgentsScreen-BhCjX2lD.js +0 -1
- package/dist/client/assets/AgentsSubnav-az_VDkri.js +0 -1
- package/dist/client/assets/AtopView-BjjPM8OX.js +0 -1
- package/dist/client/assets/BriefingDetailScreen-B7qJ90Np.js +0 -6
- package/dist/client/assets/BriefingsScreen-CW6N829d.js +0 -1
- package/dist/client/assets/BrokerScreen-X3z50712.js +0 -5
- package/dist/client/assets/ChatCollapsedStrip-DNR9osDy.js +0 -1
- package/dist/client/assets/CodeScreen-CIKK1LcZ.js +0 -1
- package/dist/client/assets/ContextMenu-CHIuVKz7.js +0 -1
- package/dist/client/assets/ConversationComposer-Bf7Ga_49.js +0 -1
- package/dist/client/assets/ConversationFeedRows-Cm1Lgo43.js +0 -1
- package/dist/client/assets/ConversationHeader-B_GXrKR0.js +0 -1
- package/dist/client/assets/ConversationPanels-BTBbEvrP.js +0 -2
- package/dist/client/assets/ConversationScreen-B3l2m3JI.js +0 -1
- package/dist/client/assets/ConversationScreen-yIKEsm-8.css +0 -1
- package/dist/client/assets/ConversationStatus-BqhUHD85.js +0 -1
- package/dist/client/assets/DispatchAftermath-BDA9CrOd.js +0 -1
- package/dist/client/assets/DocumentFocusViewer-B9vodVmG.js +0 -1
- package/dist/client/assets/FleetSearch-Bj9SCl2f.js +0 -1
- package/dist/client/assets/FleetSearch-EXOe8ulE.css +0 -1
- package/dist/client/assets/FlightObserveScreen-BVMdsiCC.js +0 -1
- package/dist/client/assets/FollowScreen-BifwHWOV.js +0 -1
- package/dist/client/assets/HarnessesScreen-fMnbnrD4.js +0 -1
- package/dist/client/assets/HomeHero-BgM6S39l.js +0 -1
- package/dist/client/assets/HomeHero-DEl-WBsT.css +0 -1
- package/dist/client/assets/KnowledgeSearchScreen-Ch_WENUC.js +0 -1
- package/dist/client/assets/LaneTraceDetailSheet-H3AnN-vN.js +0 -1
- package/dist/client/assets/MeshScreen-48QkJSDI.js +0 -1
- package/dist/client/assets/MessageComposerSuggestions-FdVHnT_q.js +0 -1
- package/dist/client/assets/MessagesScreen-BMOOfbWX.js +0 -1
- package/dist/client/assets/MissionControlView-BpsHKu1F.js +0 -1
- package/dist/client/assets/MissionFocusOverlay-BPnAEA3F.js +0 -1
- package/dist/client/assets/MissionLeftAgentRow-iOZ6ds9L.js +0 -1
- package/dist/client/assets/MissionLogPane-B0csI89E.js +0 -1
- package/dist/client/assets/NewAgentModal-DBHJR9Qm.js +0 -1
- package/dist/client/assets/NewChatComposer-Hd7pI5Ac.js +0 -19
- package/dist/client/assets/ObserveEmbedScreen-DyArn7Id.js +0 -2
- package/dist/client/assets/ObserveTextFlow-CkMrtT8s.js +0 -2
- package/dist/client/assets/ObservedTopologyPanel-CaSZZP05.js +0 -2
- package/dist/client/assets/OpenScoutAppShell-BtlKkiuF.js +0 -87
- package/dist/client/assets/OpsAgentsView-CnqrwbC2.js +0 -1
- package/dist/client/assets/OpsScreen-DOlmlVkP.js +0 -1
- package/dist/client/assets/OpsSubnav-Dj3ShAKv.js +0 -1
- package/dist/client/assets/PlanView-BLGdWDx6.js +0 -1
- package/dist/client/assets/ProjectAgentProfile-Dv1sVnQl.js +0 -1
- package/dist/client/assets/ProjectAgentProfileHero-0-GDhsPT.js +0 -1
- package/dist/client/assets/ProjectsInbox-B3DpAI5b.js +0 -2
- package/dist/client/assets/ProjectsRail-BDl7U9Jq.js +0 -1
- package/dist/client/assets/ProjectsScreen-Dl2FcGrR.js +0 -1
- package/dist/client/assets/ProjectsThreadAside-BcGC5mHE.js +0 -1
- package/dist/client/assets/Provider-cJCdHAxu.js +0 -1
- package/dist/client/assets/RailRow-CLcVmywd.js +0 -1
- package/dist/client/assets/RailRow-Cf9LOiEj.css +0 -1
- package/dist/client/assets/RawSessionsTable-DBto4Ts-.js +0 -1
- package/dist/client/assets/RealtimeVoiceScreen-DXEU5v3g.js +0 -1
- package/dist/client/assets/RepoDiffViewer-PaNeZMhJ.js +0 -7
- package/dist/client/assets/RepoDiffViewerLazy-CWE5GxMP.js +0 -2
- package/dist/client/assets/ReposScreen-Cksv1cAD.js +0 -6
- package/dist/client/assets/ScoutDeckSurface-BCjPl7C4.js +0 -1
- package/dist/client/assets/ScoutbotBroadcastChip-DkiRCHuK.js +0 -2
- package/dist/client/assets/ScoutbotRealtimeVoiceCall-1ixiEn1L.js +0 -1
- package/dist/client/assets/SessionRefScreen-OkTY7Szg.js +0 -1
- package/dist/client/assets/SessionsScreen-B-GFjxIA.js +0 -1
- package/dist/client/assets/SettingsDrawer-Co11RFX0.js +0 -3
- package/dist/client/assets/SettingsDrawer-UX7pFJU_.css +0 -1
- package/dist/client/assets/SettingsScreen-Cn09nq5_.js +0 -1
- package/dist/client/assets/SpriteAvatar-DS6Tmyua.js +0 -1
- package/dist/client/assets/Terminal-U8gjIdm3.js +0 -1
- package/dist/client/assets/TerminalEmbedScreen-CTmdE7us.js +0 -1
- package/dist/client/assets/WorkDetailScreen-mJs0mb99.js +0 -5
- package/dist/client/assets/WorkFilesViewer-ODzLXKxj.js +0 -1
- package/dist/client/assets/agent-identity-BxCsXnDp.js +0 -1
- package/dist/client/assets/agent-lane-detail-BNNm6FNu.js +0 -2
- package/dist/client/assets/api-h5zurxmi.js +0 -1
- package/dist/client/assets/broker-display-pp33bLsu.js +0 -2
- package/dist/client/assets/collapsed-strip-Dz-of2SM.css +0 -1
- package/dist/client/assets/content-B8gahuBy.js +0 -1
- package/dist/client/assets/content-BIqX06OQ.js +0 -1
- package/dist/client/assets/content-BKDZ6Fxe.js +0 -1
- package/dist/client/assets/content-C15Ya-iu.js +0 -1
- package/dist/client/assets/content-CDE9tJDF.js +0 -1
- package/dist/client/assets/content-CSAfI-PX.js +0 -1
- package/dist/client/assets/content-CTF9D60D.js +0 -1
- package/dist/client/assets/content-CbAGkYQO.js +0 -1
- package/dist/client/assets/content-CtqLJOVp.js +0 -1
- package/dist/client/assets/content-Dvs1KRfo.js +0 -1
- package/dist/client/assets/content-DyJdVZjI.js +0 -1
- package/dist/client/assets/content-Ji7ATaf7.js +0 -1
- package/dist/client/assets/content-eqZXKWcP.js +0 -1
- package/dist/client/assets/content-iyyQKwvA.js +0 -1
- package/dist/client/assets/content-pDE7Fpb9.js +0 -1
- package/dist/client/assets/content-pPSd2dua.js +0 -1
- package/dist/client/assets/conversation-model-CHwHZNw-.js +0 -1
- package/dist/client/assets/conversation-motion-features-DXtKlmuM.js +0 -1
- package/dist/client/assets/ctx-panel-B4s49N9e.css +0 -1
- package/dist/client/assets/discover-DKf0aTr_.js +0 -2
- package/dist/client/assets/embed-entry-RlQUTtc4.js +0 -2
- package/dist/client/assets/gestures-CcEOV6Sr.js +0 -1
- package/dist/client/assets/harnesses-screen-DBZoTZz8.css +0 -1
- package/dist/client/assets/home-moving-signal-Bh2FugbH.js +0 -1
- package/dist/client/assets/home-moving-signal-CAa0V91u.css +0 -1
- package/dist/client/assets/home-now-card-ByRH5fFx.js +0 -1
- package/dist/client/assets/hooks-DUZwL3Aq.js +0 -2
- package/dist/client/assets/index-BBznYVWk.css +0 -1
- package/dist/client/assets/index-BTuq-8Iv.js +0 -1
- package/dist/client/assets/index-CmwGCxUk.js +0 -1
- package/dist/client/assets/index-CvF09yvf.css +0 -1
- package/dist/client/assets/index-DmFAhGPj.js +0 -10
- package/dist/client/assets/index-Dtaswdsh.js +0 -1
- package/dist/client/assets/inspector-panel-DzgS5_Mv.js +0 -2
- package/dist/client/assets/left-8NITBvFX.js +0 -1
- package/dist/client/assets/left-B2HEqrTM.js +0 -2
- package/dist/client/assets/left-Bk3XnxPD.css +0 -1
- package/dist/client/assets/left-CCoobxPS.css +0 -1
- package/dist/client/assets/left-CTYUvXbe.js +0 -1
- package/dist/client/assets/left-CwDRT50z.js +0 -2
- package/dist/client/assets/left-CxlDLJlw.js +0 -1
- package/dist/client/assets/left-XFXxNd4g.js +0 -1
- package/dist/client/assets/left-agents-Ck4Xn-R8.js +0 -1
- package/dist/client/assets/left-default-BeOyS0bR.js +0 -1
- package/dist/client/assets/left-lanes-DZp3jJMo.js +0 -1
- package/dist/client/assets/left-mission-CuKFQ5xL.js +0 -1
- package/dist/client/assets/left-p1hkO6P0.js +0 -1
- package/dist/client/assets/left-plan-3rrFENhp.js +0 -2
- package/dist/client/assets/library-E--gKzEZ.js +0 -1
- package/dist/client/assets/mesh-buckets-CfAukILK.js +0 -1
- package/dist/client/assets/message-visibility-kJM8XcSG.js +0 -1
- package/dist/client/assets/mission-control-m3BTDQ9l.css +0 -1
- package/dist/client/assets/model-Co0zkMIc.js +0 -1
- package/dist/client/assets/plan-view-D56fneVF.css +0 -1
- package/dist/client/assets/profile-Dxj3VVOM.js +0 -1
- package/dist/client/assets/projects-inbox-COZ23dLR.css +0 -1
- package/dist/client/assets/projects-inbox-Dzt_GQDv.js +0 -1
- package/dist/client/assets/resolve-panes-C9gF0w4e.js +0 -1
- package/dist/client/assets/resolve-sidebar-context-DxbY5RCH.js +0 -1
- package/dist/client/assets/right-5L7Tn0zG.js +0 -1
- package/dist/client/assets/right-CYtkMmRu.js +0 -1
- package/dist/client/assets/right-CreoQzPP.js +0 -1
- package/dist/client/assets/right-D9xFfy2b.js +0 -1
- package/dist/client/assets/right-DI7zHADe.js +0 -1
- package/dist/client/assets/right-DUbJ3WVc.js +0 -1
- package/dist/client/assets/right-DiybhsiK.js +0 -1
- package/dist/client/assets/right-Jh_1Q88s.js +0 -1
- package/dist/client/assets/right-udr1qTJG.js +0 -1
- package/dist/client/assets/router-Cn_s9IGH.js +0 -1
- package/dist/client/assets/runtime-picker-vhm0gtLs.css +0 -1
- package/dist/client/assets/scout-voice-CwbOz6EN.js +0 -1
- package/dist/client/assets/secondaryNavConfig-Dw3gS1jR.js +0 -1
- package/dist/client/assets/sse-CxXt4tqI.js +0 -1
- package/dist/client/assets/system-surfaces-redesign-B7GQhfpw.css +0 -1
- package/dist/client/assets/terminal-screen-BqVnCwl0.css +0 -1
- package/dist/client/assets/terminal-sessions-AmSgHklm.js +0 -1
- package/dist/client/assets/text-DsBWV_4k.js +0 -1
- package/dist/client/assets/use-conversation-list-C-dPcjQe.js +0 -1
- package/dist/client/assets/use-reduced-motion-CYqhYqHO.js +0 -1
- package/dist/client/assets/useContentSecondaryNav-DjHBrgnS.js +0 -1
- package/dist/highlights-eq9cgrbb.scm +0 -604
- package/dist/highlights-ghv9g403.scm +0 -205
- package/dist/highlights-hk7bwhj4.scm +0 -284
- package/dist/highlights-r812a2qc.scm +0 -150
- package/dist/highlights-x6tmsnaa.scm +0 -115
- package/dist/injections-73j83es3.scm +0 -27
- package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
- package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
- package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
- package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
- package/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
- /package/dist/client/assets/{document-focus-viewer-BSC_JwVE.css → DocumentFocusViewer-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 existsSync7, mkdirSync as mkdirSync4, readFileSync as readFileSync5, renameSync as renameSync3, writeFileSync as writeFileSync4 } from "node:fs";
|
|
14401
14401
|
import { homedir as homedir5, networkInterfaces } from "node:os";
|
|
14402
|
-
import { dirname as
|
|
14402
|
+
import { dirname as dirname4, join as join6, resolve as resolve2 } from "node:path";
|
|
14403
14403
|
import { fileURLToPath } from "node:url";
|
|
14404
14404
|
|
|
14405
14405
|
// ../runtime/dist/broker-api.js
|
|
@@ -16224,9 +16224,202 @@ function readTailscaleSelfWebHostsSync(env = process.env) {
|
|
|
16224
16224
|
}
|
|
16225
16225
|
|
|
16226
16226
|
// ../runtime/dist/local-config.js
|
|
16227
|
-
import { existsSync as
|
|
16227
|
+
import { existsSync as existsSync5, mkdirSync as mkdirSync3, readFileSync as readFileSync4, renameSync as renameSync2, writeFileSync as writeFileSync3 } 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";
|
|
16229
16234
|
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
|
|
16230
16423
|
var LOCAL_CONFIG_VERSION = 1;
|
|
16231
16424
|
var DEFAULT_SCOUT_WEB_PORTAL_HOST = "scout.local";
|
|
16232
16425
|
var DEFAULT_SCOUT_WEB_DEV_HOST = `dev.${DEFAULT_SCOUT_WEB_PORTAL_HOST}`;
|
|
@@ -16251,17 +16444,17 @@ var DEFAULT_LOCAL_CONFIG = {
|
|
|
16251
16444
|
}
|
|
16252
16445
|
};
|
|
16253
16446
|
function localConfigHome() {
|
|
16254
|
-
return process.env.OPENSCOUT_HOME ??
|
|
16447
|
+
return process.env.OPENSCOUT_HOME ?? join4(homedir3(), ".openscout");
|
|
16255
16448
|
}
|
|
16256
16449
|
function localConfigPath() {
|
|
16257
|
-
return
|
|
16450
|
+
return join4(localConfigHome(), "config.json");
|
|
16258
16451
|
}
|
|
16259
16452
|
function loadLocalConfig() {
|
|
16260
16453
|
const configPath = localConfigPath();
|
|
16261
|
-
if (!
|
|
16454
|
+
if (!existsSync5(configPath))
|
|
16262
16455
|
return { version: LOCAL_CONFIG_VERSION };
|
|
16263
16456
|
try {
|
|
16264
|
-
return validateLocalConfig(JSON.parse(
|
|
16457
|
+
return validateLocalConfig(JSON.parse(readFileSync4(configPath, "utf8")));
|
|
16265
16458
|
} catch {
|
|
16266
16459
|
return { version: LOCAL_CONFIG_VERSION };
|
|
16267
16460
|
}
|
|
@@ -16339,34 +16532,34 @@ function resolveBrokerPort() {
|
|
|
16339
16532
|
function writeLocalConfig(config) {
|
|
16340
16533
|
assertTestIsolatedUserData("write the OpenScout local config", "OPENSCOUT_HOME");
|
|
16341
16534
|
const configPath = localConfigPath();
|
|
16342
|
-
|
|
16535
|
+
mkdirSync3(dirname2(configPath), { recursive: true });
|
|
16343
16536
|
const body = JSON.stringify({ ...config, version: LOCAL_CONFIG_VERSION }, null, 2) + `
|
|
16344
16537
|
`;
|
|
16345
16538
|
const tmp = `${configPath}.tmp`;
|
|
16346
|
-
|
|
16347
|
-
|
|
16539
|
+
writeFileSync3(tmp, body, "utf8");
|
|
16540
|
+
renameSync2(tmp, configPath);
|
|
16348
16541
|
}
|
|
16349
16542
|
function localConfigExists() {
|
|
16350
|
-
return
|
|
16543
|
+
return existsSync5(localConfigPath());
|
|
16351
16544
|
}
|
|
16352
16545
|
|
|
16353
16546
|
// ../runtime/dist/tool-resolution.js
|
|
16354
|
-
import { accessSync, constants, existsSync as
|
|
16547
|
+
import { accessSync, constants, existsSync as existsSync6 } from "node:fs";
|
|
16355
16548
|
import { homedir as homedir4 } from "node:os";
|
|
16356
|
-
import { basename, dirname as
|
|
16549
|
+
import { basename, dirname as dirname3, join as join5, resolve } from "node:path";
|
|
16357
16550
|
var DEFAULT_COMMON_EXECUTABLE_DIRECTORIES = [
|
|
16358
|
-
|
|
16551
|
+
join5(homedir4(), ".bun", "bin"),
|
|
16359
16552
|
"/opt/homebrew/bin",
|
|
16360
16553
|
"/usr/local/bin"
|
|
16361
16554
|
];
|
|
16362
16555
|
function commonClaudeExecutableDirectories(env) {
|
|
16363
16556
|
const home = env.HOME ?? homedir4();
|
|
16364
16557
|
return [
|
|
16365
|
-
|
|
16366
|
-
|
|
16558
|
+
join5(home, ".local", "bin"),
|
|
16559
|
+
join5(home, ".claude", "local"),
|
|
16367
16560
|
"/opt/homebrew/bin",
|
|
16368
16561
|
"/usr/local/bin",
|
|
16369
|
-
|
|
16562
|
+
join5(home, ".bun", "bin")
|
|
16370
16563
|
];
|
|
16371
16564
|
}
|
|
16372
16565
|
function expandHomePath(value, env = process.env) {
|
|
@@ -16375,7 +16568,7 @@ function expandHomePath(value, env = process.env) {
|
|
|
16375
16568
|
return home;
|
|
16376
16569
|
}
|
|
16377
16570
|
if (value.startsWith("~/")) {
|
|
16378
|
-
return
|
|
16571
|
+
return join5(home, value.slice(2));
|
|
16379
16572
|
}
|
|
16380
16573
|
return value;
|
|
16381
16574
|
}
|
|
@@ -16432,7 +16625,7 @@ function resolveExecutableFromSearch(options) {
|
|
|
16432
16625
|
], env);
|
|
16433
16626
|
for (const directory of searchDirectories) {
|
|
16434
16627
|
for (const name of options.names) {
|
|
16435
|
-
const candidate =
|
|
16628
|
+
const candidate = join5(directory, name);
|
|
16436
16629
|
if (isExecutablePath(candidate)) {
|
|
16437
16630
|
return {
|
|
16438
16631
|
path: candidate,
|
|
@@ -16446,7 +16639,7 @@ function resolveExecutableFromSearch(options) {
|
|
|
16446
16639
|
function resolveExecutableFromDirectories(directories, names, env, source) {
|
|
16447
16640
|
for (const directory of dedupeDirectories(directories, env)) {
|
|
16448
16641
|
for (const name of names) {
|
|
16449
|
-
const candidate =
|
|
16642
|
+
const candidate = join5(directory, name);
|
|
16450
16643
|
if (isExecutablePath(candidate)) {
|
|
16451
16644
|
return { path: candidate, source };
|
|
16452
16645
|
}
|
|
@@ -16484,7 +16677,7 @@ function findExecutableOnSearchPath(name, env) {
|
|
|
16484
16677
|
...DEFAULT_COMMON_EXECUTABLE_DIRECTORIES
|
|
16485
16678
|
], env);
|
|
16486
16679
|
for (const directory of searchDirectories) {
|
|
16487
|
-
const candidate =
|
|
16680
|
+
const candidate = join5(directory, name);
|
|
16488
16681
|
if (isExecutablePath(candidate)) {
|
|
16489
16682
|
return { path: candidate, source: "path" };
|
|
16490
16683
|
}
|
|
@@ -16502,14 +16695,14 @@ var DEFAULT_ADVERTISE_SCOPE = "local";
|
|
|
16502
16695
|
var MESH_BIND_CONFIG_FILE = "mesh-bind.json";
|
|
16503
16696
|
function meshBindConfigPath(supportDirectory) {
|
|
16504
16697
|
const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
|
|
16505
|
-
return
|
|
16698
|
+
return join6(dir, MESH_BIND_CONFIG_FILE);
|
|
16506
16699
|
}
|
|
16507
16700
|
function readPersistedAdvertiseScope(supportDirectory) {
|
|
16508
16701
|
const path = meshBindConfigPath(supportDirectory);
|
|
16509
|
-
if (!
|
|
16702
|
+
if (!existsSync7(path))
|
|
16510
16703
|
return null;
|
|
16511
16704
|
try {
|
|
16512
|
-
const parsed = JSON.parse(
|
|
16705
|
+
const parsed = JSON.parse(readFileSync5(path, "utf8"));
|
|
16513
16706
|
if (parsed.version !== 1)
|
|
16514
16707
|
return null;
|
|
16515
16708
|
if (parsed.advertiseScope === "mesh" || parsed.advertiseScope === "local") {
|
|
@@ -16628,7 +16821,7 @@ function isWildcardHost(host) {
|
|
|
16628
16821
|
return trimmed === "0.0.0.0" || trimmed === "::" || trimmed === "[::]";
|
|
16629
16822
|
}
|
|
16630
16823
|
function buildDefaultBrokerSocketPath(runtimeDirectory) {
|
|
16631
|
-
return
|
|
16824
|
+
return join6(runtimeDirectory, "broker.sock");
|
|
16632
16825
|
}
|
|
16633
16826
|
var DEFAULT_BROKER_URL = buildDefaultBrokerUrl();
|
|
16634
16827
|
function resolveScoutBrokerControlUrl(_config = resolveBrokerServiceConfig()) {
|
|
@@ -16647,17 +16840,17 @@ function runtimePackageDir() {
|
|
|
16647
16840
|
const fromGlobal = findGlobalRuntimeDir();
|
|
16648
16841
|
if (fromGlobal)
|
|
16649
16842
|
return fromGlobal;
|
|
16650
|
-
const moduleDir =
|
|
16843
|
+
const moduleDir = dirname4(fileURLToPath(import.meta.url));
|
|
16651
16844
|
return resolve2(moduleDir, "..");
|
|
16652
16845
|
}
|
|
16653
16846
|
function isInstalledRuntimePackageDir(candidate) {
|
|
16654
|
-
return
|
|
16847
|
+
return existsSync7(join6(candidate, "package.json")) && existsSync7(join6(candidate, "bin", "openscout-runtime.mjs"));
|
|
16655
16848
|
}
|
|
16656
16849
|
function findGlobalRuntimeDir() {
|
|
16657
16850
|
const candidates = [
|
|
16658
|
-
|
|
16659
|
-
|
|
16660
|
-
|
|
16851
|
+
join6(homedir5(), ".bun", "node_modules", "@openscout", "runtime"),
|
|
16852
|
+
join6(homedir5(), ".bun", "install", "global", "node_modules", "@openscout", "runtime"),
|
|
16853
|
+
join6(homedir5(), ".bun", "install", "global", "node_modules", "@openscout", "scout", "node_modules", "@openscout", "runtime")
|
|
16661
16854
|
];
|
|
16662
16855
|
for (const c of candidates) {
|
|
16663
16856
|
if (isInstalledRuntimePackageDir(c))
|
|
@@ -16670,7 +16863,7 @@ function findGlobalRuntimeDir() {
|
|
|
16670
16863
|
const scoutPkg = resolve2(scoutBin, "..", "..");
|
|
16671
16864
|
if (isInstalledRuntimePackageDir(scoutPkg))
|
|
16672
16865
|
return scoutPkg;
|
|
16673
|
-
const nested =
|
|
16866
|
+
const nested = join6(scoutPkg, "node_modules", "@openscout", "runtime");
|
|
16674
16867
|
if (isInstalledRuntimePackageDir(nested))
|
|
16675
16868
|
return nested;
|
|
16676
16869
|
const sibling = resolve2(scoutPkg, "..", "runtime");
|
|
@@ -16681,7 +16874,7 @@ function findGlobalRuntimeDir() {
|
|
|
16681
16874
|
return null;
|
|
16682
16875
|
}
|
|
16683
16876
|
function findBundledRuntimeDir() {
|
|
16684
|
-
const moduleDir =
|
|
16877
|
+
const moduleDir = dirname4(fileURLToPath(import.meta.url));
|
|
16685
16878
|
return resolveBundledRuntimeDirFromModuleDir(moduleDir);
|
|
16686
16879
|
}
|
|
16687
16880
|
function resolveBundledRuntimeDirFromModuleDir(moduleDir) {
|
|
@@ -16698,11 +16891,11 @@ function resolveBundledRuntimeDirFromModuleDir(moduleDir) {
|
|
|
16698
16891
|
function findWorkspaceRuntimeDir(startDir) {
|
|
16699
16892
|
let current = resolve2(startDir);
|
|
16700
16893
|
while (true) {
|
|
16701
|
-
const candidate =
|
|
16702
|
-
if (
|
|
16894
|
+
const candidate = join6(current, "packages", "runtime");
|
|
16895
|
+
if (existsSync7(join6(candidate, "package.json")) && existsSync7(join6(candidate, "src"))) {
|
|
16703
16896
|
return candidate;
|
|
16704
16897
|
}
|
|
16705
|
-
const parent =
|
|
16898
|
+
const parent = dirname4(current);
|
|
16706
16899
|
if (parent === current)
|
|
16707
16900
|
return null;
|
|
16708
16901
|
current = parent;
|
|
@@ -16749,17 +16942,17 @@ function resolveBrokerServiceConfig() {
|
|
|
16749
16942
|
const serviceAdapter = resolveBrokerServiceAdapter();
|
|
16750
16943
|
const uid = typeof process.getuid === "function" ? process.getuid() : Number.parseInt(process.env.UID ?? "0", 10);
|
|
16751
16944
|
const supportPaths = resolveOpenScoutSupportPaths();
|
|
16752
|
-
const defaultSupportDir =
|
|
16945
|
+
const defaultSupportDir = join6(homedir5(), "Library", "Application Support", "OpenScout");
|
|
16753
16946
|
const supportDirectory = isTmpPath(supportPaths.supportDirectory) ? defaultSupportDir : supportPaths.supportDirectory;
|
|
16754
|
-
const runtimeDirectory =
|
|
16755
|
-
const logsDirectory =
|
|
16756
|
-
const controlHome = isTmpPath(supportPaths.controlHome) ?
|
|
16947
|
+
const runtimeDirectory = join6(supportDirectory, "runtime");
|
|
16948
|
+
const logsDirectory = join6(supportDirectory, "logs", "broker");
|
|
16949
|
+
const controlHome = isTmpPath(supportPaths.controlHome) ? join6(homedir5(), ".openscout", "control-plane") : supportPaths.controlHome;
|
|
16757
16950
|
const advertiseScope = resolveAdvertiseScope(process.env, () => readPersistedAdvertiseScope(supportDirectory));
|
|
16758
16951
|
const brokerHost = resolveBrokerHost(advertiseScope);
|
|
16759
16952
|
const brokerPort = Number.parseInt(process.env.OPENSCOUT_BROKER_PORT ?? String(resolveBrokerPort()), 10);
|
|
16760
16953
|
const brokerUrl = resolveBrokerUrl(brokerHost, brokerPort, advertiseScope);
|
|
16761
16954
|
const brokerSocketPath = process.env.OPENSCOUT_BROKER_SOCKET_PATH ?? buildDefaultBrokerSocketPath(runtimeDirectory);
|
|
16762
|
-
const launchAgentPath =
|
|
16955
|
+
const launchAgentPath = join6(homedir5(), "Library", "LaunchAgents", `${label}.plist`);
|
|
16763
16956
|
return {
|
|
16764
16957
|
label,
|
|
16765
16958
|
mode,
|
|
@@ -16770,8 +16963,8 @@ function resolveBrokerServiceConfig() {
|
|
|
16770
16963
|
supportDirectory,
|
|
16771
16964
|
runtimeDirectory,
|
|
16772
16965
|
logsDirectory,
|
|
16773
|
-
stdoutLogPath:
|
|
16774
|
-
stderrLogPath:
|
|
16966
|
+
stdoutLogPath: join6(logsDirectory, "stdout.log"),
|
|
16967
|
+
stderrLogPath: join6(logsDirectory, "stderr.log"),
|
|
16775
16968
|
controlHome,
|
|
16776
16969
|
runtimePackageDir: runtimePackageDir(),
|
|
16777
16970
|
bunExecutable: serviceAdapter === "macos-scoutd" ? resolveBunExecutable2() : resolveOptionalBunExecutable(),
|
|
@@ -16805,10 +16998,10 @@ function resolveEnvExecutable(value) {
|
|
|
16805
16998
|
function findWorkspaceRootFromRuntimeDir(runtimePackageDir2) {
|
|
16806
16999
|
let current = resolve2(runtimePackageDir2);
|
|
16807
17000
|
while (true) {
|
|
16808
|
-
if (
|
|
17001
|
+
if (existsSync7(join6(current, "Cargo.toml")) && existsSync7(join6(current, "crates", "scoutd", "Cargo.toml"))) {
|
|
16809
17002
|
return current;
|
|
16810
17003
|
}
|
|
16811
|
-
const parent =
|
|
17004
|
+
const parent = dirname4(current);
|
|
16812
17005
|
if (parent === current)
|
|
16813
17006
|
return null;
|
|
16814
17007
|
current = parent;
|
|
@@ -16825,13 +17018,13 @@ function resolveScoutdCommand(config = resolveBrokerServiceConfig()) {
|
|
|
16825
17018
|
}
|
|
16826
17019
|
const workspaceRoot = findWorkspaceRootFromRuntimeDir(config.runtimePackageDir);
|
|
16827
17020
|
const packageCandidates = [
|
|
16828
|
-
|
|
16829
|
-
|
|
16830
|
-
|
|
16831
|
-
workspaceRoot ?
|
|
16832
|
-
workspaceRoot ?
|
|
16833
|
-
|
|
16834
|
-
|
|
17021
|
+
join6(config.runtimePackageDir, "bin", "scoutd"),
|
|
17022
|
+
join6(config.runtimePackageDir, "native", "scoutd"),
|
|
17023
|
+
join6(config.runtimePackageDir, "scoutd"),
|
|
17024
|
+
workspaceRoot ? join6(workspaceRoot, "packages", "cli", "bin", "scoutd") : null,
|
|
17025
|
+
workspaceRoot ? join6(workspaceRoot, "packages", "runtime", "bin", "scoutd") : null,
|
|
17026
|
+
join6(config.runtimeDirectory, "scoutd"),
|
|
17027
|
+
join6(dirname4(config.runtimePackageDir), "scout", "bin", "scoutd")
|
|
16835
17028
|
];
|
|
16836
17029
|
for (const candidate of packageCandidates) {
|
|
16837
17030
|
const resolved = executableCandidate(candidate);
|
|
@@ -16845,8 +17038,8 @@ function resolveScoutdCommand(config = resolveBrokerServiceConfig()) {
|
|
|
16845
17038
|
}
|
|
16846
17039
|
if (workspaceRoot && workspaceScoutdAllowed()) {
|
|
16847
17040
|
for (const candidate of [
|
|
16848
|
-
|
|
16849
|
-
|
|
17041
|
+
join6(workspaceRoot, "target", "release", "scoutd"),
|
|
17042
|
+
join6(workspaceRoot, "target", "debug", "scoutd")
|
|
16850
17043
|
]) {
|
|
16851
17044
|
const resolved = executableCandidate(candidate);
|
|
16852
17045
|
if (resolved) {
|
|
@@ -16931,7 +17124,7 @@ function normalizeNativeServiceStatus(input, config) {
|
|
|
16931
17124
|
const healthMeshId = readString2(healthRecord.meshId);
|
|
16932
17125
|
const healthSocketFallbackError = readString2(healthRecord.socketFallbackError);
|
|
16933
17126
|
const healthCounts = isRecord3(healthRecord.counts) ? healthRecord.counts : undefined;
|
|
16934
|
-
const installed = readBoolean(input.installed) ??
|
|
17127
|
+
const installed = readBoolean(input.installed) ?? existsSync7(config.launchAgentPath);
|
|
16935
17128
|
const loaded = readBoolean(input.loaded) ?? false;
|
|
16936
17129
|
const stdoutLogPath = readString2(input.stdoutLogPath) ?? config.stdoutLogPath;
|
|
16937
17130
|
const stderrLogPath = readString2(input.stderrLogPath) ?? config.stderrLogPath;
|
|
@@ -17052,8 +17245,8 @@ var SCHEMA_GUARDED_SERVICE_COMMANDS = new Set([
|
|
|
17052
17245
|
"restart"
|
|
17053
17246
|
]);
|
|
17054
17247
|
function assertBrokerServiceSchemaCompatible(config) {
|
|
17055
|
-
const databasePath =
|
|
17056
|
-
if (!
|
|
17248
|
+
const databasePath = join6(config.controlHome, "control-plane.sqlite");
|
|
17249
|
+
if (!existsSync7(databasePath))
|
|
17057
17250
|
return;
|
|
17058
17251
|
const database = openControlPlaneSqliteDatabase(databasePath, { readonly: true });
|
|
17059
17252
|
try {
|
|
@@ -17086,7 +17279,7 @@ async function runScoutdServiceCommand(command, config, timeoutMs = SCOUTD_DEFAU
|
|
|
17086
17279
|
function readCoreAgentsSync() {
|
|
17087
17280
|
try {
|
|
17088
17281
|
const settingsPath = resolveOpenScoutSupportPaths().settingsPath;
|
|
17089
|
-
const raw =
|
|
17282
|
+
const raw = readFileSync5(settingsPath, "utf8");
|
|
17090
17283
|
const settings = JSON.parse(raw);
|
|
17091
17284
|
const raw_agents = settings?.agents?.coreAgents;
|
|
17092
17285
|
if (Array.isArray(raw_agents)) {
|
|
@@ -17099,10 +17292,10 @@ function bootoutCommand(config) {
|
|
|
17099
17292
|
return `/bin/launchctl bootout ${config.serviceTarget}`;
|
|
17100
17293
|
}
|
|
17101
17294
|
function readLogLines(path) {
|
|
17102
|
-
if (!
|
|
17295
|
+
if (!existsSync7(path)) {
|
|
17103
17296
|
return [];
|
|
17104
17297
|
}
|
|
17105
|
-
return
|
|
17298
|
+
return readFileSync5(path, "utf8").split(`
|
|
17106
17299
|
`).map((line) => line.trim()).filter(Boolean);
|
|
17107
17300
|
}
|
|
17108
17301
|
function isPackageScriptBanner(line) {
|
|
@@ -17326,15 +17519,15 @@ if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1] && !pr
|
|
|
17326
17519
|
|
|
17327
17520
|
// ../runtime/dist/harness-catalog.js
|
|
17328
17521
|
import { execFileSync as execFileSync3 } from "node:child_process";
|
|
17329
|
-
import { existsSync as
|
|
17522
|
+
import { existsSync as existsSync8, statSync } from "node:fs";
|
|
17330
17523
|
import { mkdir, readFile as readFile2, writeFile } from "node:fs/promises";
|
|
17331
17524
|
import { homedir as homedir6 } from "node:os";
|
|
17332
|
-
import { dirname as
|
|
17525
|
+
import { dirname as dirname5, join as join8 } from "node:path";
|
|
17333
17526
|
|
|
17334
17527
|
// ../agent-sessions/dist/codex-executable.js
|
|
17335
17528
|
import { execFileSync as execFileSync2 } from "node:child_process";
|
|
17336
17529
|
import { accessSync as accessSync2, constants as constants2 } from "node:fs";
|
|
17337
|
-
import { delimiter, join as
|
|
17530
|
+
import { delimiter, join as join7 } from "node:path";
|
|
17338
17531
|
function isExecutable(filePath) {
|
|
17339
17532
|
if (!filePath)
|
|
17340
17533
|
return false;
|
|
@@ -17378,11 +17571,11 @@ function codexAppBundleCandidates(env) {
|
|
|
17378
17571
|
const appNames = ["Codex.app", "ChatGPT.app"];
|
|
17379
17572
|
const candidates = appNames.flatMap((appName) => [
|
|
17380
17573
|
{
|
|
17381
|
-
path:
|
|
17574
|
+
path: join7("/Applications", appName, "Contents", "Resources", "codex"),
|
|
17382
17575
|
source: "codex_app_bundle"
|
|
17383
17576
|
},
|
|
17384
17577
|
{
|
|
17385
|
-
path:
|
|
17578
|
+
path: join7(env.HOME ?? "", "Applications", appName, "Contents", "Resources", "codex"),
|
|
17386
17579
|
source: "codex_app_bundle"
|
|
17387
17580
|
}
|
|
17388
17581
|
]);
|
|
@@ -17390,7 +17583,7 @@ function codexAppBundleCandidates(env) {
|
|
|
17390
17583
|
}
|
|
17391
17584
|
function pathCandidates(env) {
|
|
17392
17585
|
return (env.PATH ?? "").split(delimiter).filter(Boolean).map((directory) => ({
|
|
17393
|
-
path:
|
|
17586
|
+
path: join7(directory, "codex"),
|
|
17394
17587
|
source: "path"
|
|
17395
17588
|
}));
|
|
17396
17589
|
}
|
|
@@ -17401,7 +17594,7 @@ function commonCandidates(env) {
|
|
|
17401
17594
|
"/opt/homebrew/bin",
|
|
17402
17595
|
"/usr/local/bin"
|
|
17403
17596
|
].filter(Boolean).map((directory) => ({
|
|
17404
|
-
path:
|
|
17597
|
+
path: join7(directory, "codex"),
|
|
17405
17598
|
source: "common"
|
|
17406
17599
|
}));
|
|
17407
17600
|
}
|
|
@@ -18037,7 +18230,7 @@ function expandHomePath2(value) {
|
|
|
18037
18230
|
if (value === "~")
|
|
18038
18231
|
return home;
|
|
18039
18232
|
if (value.startsWith("~/"))
|
|
18040
|
-
return
|
|
18233
|
+
return join8(home, value.slice(2));
|
|
18041
18234
|
return value;
|
|
18042
18235
|
}
|
|
18043
18236
|
function defaultWhichBinary(binary, platform) {
|
|
@@ -18071,7 +18264,7 @@ function defaultRunCommand(command, platform) {
|
|
|
18071
18264
|
}
|
|
18072
18265
|
function defaultRequirementExists(requirement) {
|
|
18073
18266
|
const expanded = expandHomePath2(requirement.path);
|
|
18074
|
-
if (!
|
|
18267
|
+
if (!existsSync8(expanded))
|
|
18075
18268
|
return false;
|
|
18076
18269
|
if (requirement.fileType === "any" || !requirement.fileType)
|
|
18077
18270
|
return true;
|
|
@@ -18300,7 +18493,7 @@ async function readHarnessCatalogOverrides(overridePath = resolveOpenScoutSuppor
|
|
|
18300
18493
|
}
|
|
18301
18494
|
}
|
|
18302
18495
|
async function writeHarnessCatalogOverrides(overrides, overridePath = resolveOpenScoutSupportPaths().harnessCatalogPath) {
|
|
18303
|
-
await mkdir(
|
|
18496
|
+
await mkdir(dirname5(overridePath), { recursive: true });
|
|
18304
18497
|
const payload = {
|
|
18305
18498
|
version: HARNESS_CATALOG_VERSION,
|
|
18306
18499
|
entries: overrides,
|
|
@@ -18310,7 +18503,7 @@ async function writeHarnessCatalogOverrides(overrides, overridePath = resolveOpe
|
|
|
18310
18503
|
`, "utf8");
|
|
18311
18504
|
}
|
|
18312
18505
|
async function ensureHarnessCatalogOverrideFile(overridePath = resolveOpenScoutSupportPaths().harnessCatalogPath) {
|
|
18313
|
-
if (
|
|
18506
|
+
if (existsSync8(overridePath))
|
|
18314
18507
|
return;
|
|
18315
18508
|
await writeHarnessCatalogOverrides({}, overridePath);
|
|
18316
18509
|
}
|
|
@@ -20634,22 +20827,22 @@ function validateScoutRendezvousCodename(codename) {
|
|
|
20634
20827
|
|
|
20635
20828
|
// ../runtime/dist/claude-statusline.js
|
|
20636
20829
|
import { appendFile, mkdir as mkdir2, readFile as readFile3, writeFile as writeFile2 } from "node:fs/promises";
|
|
20637
|
-
import { basename as basename2, dirname as
|
|
20830
|
+
import { basename as basename2, dirname as dirname6, join as join9 } from "node:path";
|
|
20638
20831
|
function resolveClaudeStatuslineDirectory() {
|
|
20639
|
-
return
|
|
20832
|
+
return join9(resolveOpenScoutSupportPaths().runtimeDirectory, "statusline");
|
|
20640
20833
|
}
|
|
20641
20834
|
function resolveClaudeStatuslineDelegatePath() {
|
|
20642
|
-
return
|
|
20835
|
+
return join9(resolveClaudeStatuslineDirectory(), "claude-delegate.json");
|
|
20643
20836
|
}
|
|
20644
20837
|
function resolveClaudeStatuslineWrapperPath() {
|
|
20645
|
-
return
|
|
20838
|
+
return join9(resolveClaudeStatuslineDirectory(), "claude-statusline.sh");
|
|
20646
20839
|
}
|
|
20647
20840
|
async function writeClaudeStatuslineDelegate(delegate, path = resolveClaudeStatuslineDelegatePath()) {
|
|
20648
20841
|
const next = {
|
|
20649
20842
|
version: 1,
|
|
20650
20843
|
...delegate
|
|
20651
20844
|
};
|
|
20652
|
-
await mkdir2(
|
|
20845
|
+
await mkdir2(dirname6(path), { recursive: true });
|
|
20653
20846
|
await writeFile2(path, JSON.stringify(next, null, 2) + `
|
|
20654
20847
|
`, "utf8");
|
|
20655
20848
|
return next;
|
|
@@ -20664,9 +20857,9 @@ function isOpenScoutClaudeStatuslineCommand(command, wrapperPath = resolveClaude
|
|
|
20664
20857
|
}
|
|
20665
20858
|
|
|
20666
20859
|
// ../runtime/dist/managed-installs.js
|
|
20667
|
-
import { createHash } from "node:crypto";
|
|
20860
|
+
import { createHash as createHash2 } from "node:crypto";
|
|
20668
20861
|
import { mkdir as mkdir3, readFile as readFile4, writeFile as writeFile3 } from "node:fs/promises";
|
|
20669
|
-
import { dirname as
|
|
20862
|
+
import { dirname as dirname7 } from "node:path";
|
|
20670
20863
|
function emptyManagedInstallsFile(now = Date.now()) {
|
|
20671
20864
|
return {
|
|
20672
20865
|
version: 1,
|
|
@@ -20683,7 +20876,7 @@ function stableInstallId(input) {
|
|
|
20683
20876
|
input.provider ?? "",
|
|
20684
20877
|
input.targetPath ?? ""
|
|
20685
20878
|
].join("\x00");
|
|
20686
|
-
return `install.${
|
|
20879
|
+
return `install.${createHash2("sha256").update(key).digest("hex").slice(0, 18)}`;
|
|
20687
20880
|
}
|
|
20688
20881
|
function normalizeManagedInstallsFile(value) {
|
|
20689
20882
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
@@ -20706,7 +20899,7 @@ async function readManagedInstallsFile(path = resolveOpenScoutSupportPaths().man
|
|
|
20706
20899
|
}
|
|
20707
20900
|
async function writeManagedInstallsFile(file, path = resolveOpenScoutSupportPaths().managedInstallsPath) {
|
|
20708
20901
|
assertTestIsolatedUserData("write the managed-installs registry", "OPENSCOUT_SUPPORT_DIRECTORY");
|
|
20709
|
-
await mkdir3(
|
|
20902
|
+
await mkdir3(dirname7(path), { recursive: true });
|
|
20710
20903
|
await writeFile3(path, JSON.stringify(file, null, 2) + `
|
|
20711
20904
|
`, "utf8");
|
|
20712
20905
|
}
|
|
@@ -20732,167 +20925,6 @@ async function upsertManagedInstall(input, now = Date.now()) {
|
|
|
20732
20925
|
return next;
|
|
20733
20926
|
}
|
|
20734
20927
|
|
|
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
|
-
|
|
20896
20928
|
// ../runtime/dist/user-project-hints.js
|
|
20897
20929
|
import { readdir, readFile as readFile5, stat } from "node:fs/promises";
|
|
20898
20930
|
import { homedir as homedir7 } from "node:os";
|
|
@@ -21843,6 +21875,9 @@ function defaultSettings() {
|
|
|
21843
21875
|
quickHits: [],
|
|
21844
21876
|
preparedAt: null
|
|
21845
21877
|
},
|
|
21878
|
+
voice: {
|
|
21879
|
+
realtimeEnabled: false
|
|
21880
|
+
},
|
|
21846
21881
|
ui: {
|
|
21847
21882
|
scenes: [],
|
|
21848
21883
|
activeSceneIdBySurface: {}
|
|
@@ -22230,6 +22265,7 @@ async function normalizeSettingsRecord(value, options = {}) {
|
|
|
22230
22265
|
const telegram = typeof bridges.telegram === "object" && bridges.telegram ? bridges.telegram : {};
|
|
22231
22266
|
const network = typeof candidate.network === "object" && candidate.network ? candidate.network : {};
|
|
22232
22267
|
const phone = typeof candidate.phone === "object" && candidate.phone ? candidate.phone : {};
|
|
22268
|
+
const voice = typeof candidate.voice === "object" && candidate.voice ? candidate.voice : {};
|
|
22233
22269
|
const ui = typeof candidate.ui === "object" && candidate.ui ? candidate.ui : {};
|
|
22234
22270
|
const oldOperatorName = typeof candidate.operatorName === "string" ? candidate.operatorName : undefined;
|
|
22235
22271
|
const seededWorkspaceRoots = await seedWorkspaceRoots({
|
|
@@ -22302,6 +22338,9 @@ async function normalizeSettingsRecord(value, options = {}) {
|
|
|
22302
22338
|
quickHits: normalizeStringList(phone.quickHits),
|
|
22303
22339
|
preparedAt: normalizeOptionalTimestamp(phone.preparedAt)
|
|
22304
22340
|
},
|
|
22341
|
+
voice: {
|
|
22342
|
+
realtimeEnabled: typeof voice.realtimeEnabled === "boolean" ? voice.realtimeEnabled : base.voice.realtimeEnabled
|
|
22343
|
+
},
|
|
22305
22344
|
ui: normalizeUi(ui)
|
|
22306
22345
|
};
|
|
22307
22346
|
}
|
|
@@ -22422,6 +22461,10 @@ async function writeOpenScoutSettings(settings, options = {}) {
|
|
|
22422
22461
|
...current.phone,
|
|
22423
22462
|
...settings.phone ?? {}
|
|
22424
22463
|
},
|
|
22464
|
+
voice: {
|
|
22465
|
+
...current.voice,
|
|
22466
|
+
...settings.voice ?? {}
|
|
22467
|
+
},
|
|
22425
22468
|
ui: {
|
|
22426
22469
|
...current.ui,
|
|
22427
22470
|
...settings.ui ?? {}
|
|
@@ -23390,21 +23433,47 @@ async function initializeOpenScoutSetup(options = {}) {
|
|
|
23390
23433
|
}
|
|
23391
23434
|
|
|
23392
23435
|
// ../runtime/dist/user-config.js
|
|
23393
|
-
import { existsSync as existsSync10, readFileSync as readFileSync7, writeFileSync as writeFileSync5, mkdirSync as mkdirSync5 } from "node:fs";
|
|
23436
|
+
import { existsSync as existsSync10, readFileSync as readFileSync7, statSync as statSync2, writeFileSync as writeFileSync5, mkdirSync as mkdirSync5 } from "node:fs";
|
|
23394
23437
|
import { homedir as homedir9 } from "node:os";
|
|
23395
23438
|
import { dirname as dirname10, join as join12 } from "node:path";
|
|
23396
23439
|
function userConfigPath() {
|
|
23397
23440
|
return join12(process.env.OPENSCOUT_HOME ?? join12(homedir9(), ".openscout"), "user.json");
|
|
23398
23441
|
}
|
|
23399
|
-
|
|
23400
|
-
|
|
23401
|
-
|
|
23402
|
-
return {};
|
|
23442
|
+
var userConfigCache = null;
|
|
23443
|
+
var USER_CONFIG_STAT_INTERVAL_MS = 100;
|
|
23444
|
+
function userConfigFileKey(configPath) {
|
|
23403
23445
|
try {
|
|
23404
|
-
|
|
23446
|
+
const stats = statSync2(configPath);
|
|
23447
|
+
return `${stats.ino}:${stats.mtimeMs}:${stats.size}`;
|
|
23405
23448
|
} catch {
|
|
23406
|
-
return
|
|
23449
|
+
return "missing";
|
|
23450
|
+
}
|
|
23451
|
+
}
|
|
23452
|
+
function readUserConfigFromDisk(configPath, now) {
|
|
23453
|
+
const fileKey = userConfigFileKey(configPath);
|
|
23454
|
+
let value = {};
|
|
23455
|
+
if (existsSync10(configPath)) {
|
|
23456
|
+
try {
|
|
23457
|
+
value = JSON.parse(readFileSync7(configPath, "utf8"));
|
|
23458
|
+
} catch {
|
|
23459
|
+
value = {};
|
|
23460
|
+
}
|
|
23461
|
+
}
|
|
23462
|
+
userConfigCache = { path: configPath, value, fileKey, statCheckedAt: now };
|
|
23463
|
+
return { ...value };
|
|
23464
|
+
}
|
|
23465
|
+
function loadUserConfig(now = Date.now()) {
|
|
23466
|
+
const configPath = userConfigPath();
|
|
23467
|
+
if (userConfigCache && userConfigCache.path === configPath) {
|
|
23468
|
+
if (now - userConfigCache.statCheckedAt < USER_CONFIG_STAT_INTERVAL_MS) {
|
|
23469
|
+
return { ...userConfigCache.value };
|
|
23470
|
+
}
|
|
23471
|
+
if (userConfigFileKey(configPath) === userConfigCache.fileKey) {
|
|
23472
|
+
userConfigCache.statCheckedAt = now;
|
|
23473
|
+
return { ...userConfigCache.value };
|
|
23474
|
+
}
|
|
23407
23475
|
}
|
|
23476
|
+
return readUserConfigFromDisk(configPath, now);
|
|
23408
23477
|
}
|
|
23409
23478
|
function saveUserConfig(config) {
|
|
23410
23479
|
assertTestIsolatedUserData("write the OpenScout user config", "OPENSCOUT_HOME");
|
|
@@ -23412,6 +23481,7 @@ function saveUserConfig(config) {
|
|
|
23412
23481
|
mkdirSync5(dirname10(configPath), { recursive: true });
|
|
23413
23482
|
writeFileSync5(configPath, JSON.stringify(config, null, 2) + `
|
|
23414
23483
|
`, "utf8");
|
|
23484
|
+
userConfigCache = null;
|
|
23415
23485
|
}
|
|
23416
23486
|
function readSettingsOperatorName() {
|
|
23417
23487
|
const settingsPath = resolveOpenScoutSupportPaths().settingsPath;
|
|
@@ -33766,7 +33836,7 @@ async function requestJsonWithBun2(connect, socketPath, payload, timeoutMs) {
|
|
|
33766
33836
|
}
|
|
33767
33837
|
|
|
33768
33838
|
// ../runtime/dist/system-probes/git-build-info.js
|
|
33769
|
-
import { existsSync as existsSync13, realpathSync, statSync as
|
|
33839
|
+
import { existsSync as existsSync13, realpathSync, statSync as statSync3 } from "node:fs";
|
|
33770
33840
|
import { dirname as dirname12, resolve as resolve6 } from "node:path";
|
|
33771
33841
|
var staticMetadataByRepo = new Map;
|
|
33772
33842
|
function realpathOrResolved(path) {
|
|
@@ -33779,7 +33849,7 @@ function realpathOrResolved(path) {
|
|
|
33779
33849
|
function directoryOrParent(path) {
|
|
33780
33850
|
const resolved = resolve6(path);
|
|
33781
33851
|
try {
|
|
33782
|
-
const stat3 =
|
|
33852
|
+
const stat3 = statSync3(resolved);
|
|
33783
33853
|
return stat3.isDirectory() ? resolved : dirname12(resolved);
|
|
33784
33854
|
} catch {
|
|
33785
33855
|
return resolved;
|
|
@@ -35910,7 +35980,7 @@ var sessions2 = new Map;
|
|
|
35910
35980
|
var CODEX_ROLLOUT_STALE_ACTIVE_TURN_MS = 10 * 60 * 1000;
|
|
35911
35981
|
|
|
35912
35982
|
// ../runtime/dist/pi-rpc.js
|
|
35913
|
-
import { existsSync as existsSync16, readFileSync as readFileSync9, statSync as
|
|
35983
|
+
import { existsSync as existsSync16, readFileSync as readFileSync9, statSync as statSync4 } from "node:fs";
|
|
35914
35984
|
import { mkdir as mkdir6, writeFile as writeFile6 } from "node:fs/promises";
|
|
35915
35985
|
import { execFileSync as execFileSync5 } from "node:child_process";
|
|
35916
35986
|
import { homedir as homedir14 } from "node:os";
|
|
@@ -36017,12 +36087,12 @@ function readPiRpcCredentialFile(name, options = {}) {
|
|
|
36017
36087
|
return;
|
|
36018
36088
|
}
|
|
36019
36089
|
try {
|
|
36020
|
-
const directoryStat =
|
|
36090
|
+
const directoryStat = statSync4(directory);
|
|
36021
36091
|
if (!directoryStat.isDirectory() || (directoryStat.mode & 63) !== 0) {
|
|
36022
36092
|
return;
|
|
36023
36093
|
}
|
|
36024
36094
|
const path = join17(directory, name);
|
|
36025
|
-
const stat4 =
|
|
36095
|
+
const stat4 = statSync4(path);
|
|
36026
36096
|
if (!stat4.isFile() || (stat4.mode & 63) !== 0 || stat4.size > 16 * 1024) {
|
|
36027
36097
|
return;
|
|
36028
36098
|
}
|