@openscout/scout 0.2.105 → 0.2.107
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 +26 -0
- package/bin/scoutd +0 -0
- package/dist/build-manifest.json +3 -3
- package/dist/chat.mjs +23 -1
- package/dist/client/assets/ActivityScreen-CZmGwQ2U.js +1 -0
- package/dist/client/assets/{AddProjectForm-CHNJ4NnS.js → AddProjectForm-CusDRiVO.js} +1 -1
- package/dist/client/assets/{AdventureEvidence-B4mEvXeD.js → AdventureEvidence-CyegKk1V.js} +1 -1
- package/dist/client/assets/{AdventureReader-ZsBDQITY.js → AdventureReader-X-hbTOi0.js} +1 -1
- package/dist/client/assets/{AdventureScenery-DSxDlqG1.js → AdventureScenery-LPXSVP67.js} +1 -1
- package/dist/client/assets/AgentAdventures-BAgxdOF8.js +1 -0
- package/dist/client/assets/AgentAvatar-CrP1eXxk.js +1 -0
- package/dist/client/assets/AgentConfigurationScreen-1L0IQm2w.js +1 -0
- package/dist/client/assets/AgentDefinitionsWorkspace-DguGs7jZ.js +1 -0
- package/dist/client/assets/{AgentDetailCard-MIEBKw_S.js → AgentDetailCard-DtHT3sCo.js} +1 -1
- package/dist/client/assets/AgentFloorView-DH4jiDgw.js +1 -0
- package/dist/client/assets/{AgentFloorWorld-BTqwmK5G.js → AgentFloorWorld-CjoIa6jA.js} +1 -1
- package/dist/client/assets/AgentInfoScreen-DYtmKkeE.js +1 -0
- package/dist/client/assets/{AgentLaneCard-C4rKLLdT.js → AgentLaneCard-BaZ2g-f8.js} +1 -1
- package/dist/client/assets/{AgentLaneChrome-fGC-ZrJS.js → AgentLaneChrome-TF1SlJSc.js} +1 -1
- package/dist/client/assets/{AgentLaneDetailSheet-BTF4_th9.js → AgentLaneDetailSheet-EzEPsn3g.js} +1 -1
- package/dist/client/assets/{AgentLaneSummaryResize-DgSeA_vS.js → AgentLaneSummaryResize-dpp7YvrX.js} +1 -1
- package/dist/client/assets/AgentLanesEmbedScreen-BlSof_6S.js +1 -0
- package/dist/client/assets/{AgentLanesPreflight-CcS23wij.js → AgentLanesPreflight-Ry-aqDTr.js} +1 -1
- package/dist/client/assets/AgentLanesView-BJi9xXz6.js +2 -0
- package/dist/client/assets/{AgentLiveActions-6Kfr1uOT.js → AgentLiveActions-CfTupTEl.js} +1 -1
- package/dist/client/assets/AgentMasterScreen-EJhmuKgl.js +1 -0
- package/dist/client/assets/AgentSessions-B1gOhDBf.js +6 -0
- package/dist/client/assets/AgentsConsole-RXGqRvcb.js +1 -0
- package/dist/client/assets/AgentsScreen-ChwMBs11.js +1 -0
- package/dist/client/assets/AgentsSubnav-DwNX4yy0.js +1 -0
- package/dist/client/assets/{AstronautSuit-D67fIBdR.js → AstronautSuit-Cchnc4Ug.js} +1 -1
- package/dist/client/assets/{AtopView-Ck30FbzG.js → AtopView-gkEp4y__.js} +1 -1
- package/dist/client/assets/{BackToPicker-CkBhGRlD.js → BackToPicker-CUkjnoVk.js} +1 -1
- package/dist/client/assets/BriefingDetailScreen-DrlC3qkm.js +1 -0
- package/dist/client/assets/{BriefingsScreen-DTxYMr3a.js → BriefingsScreen-B1HlBMGZ.js} +1 -1
- package/dist/client/assets/{BrokerMetadataPanel-crirZCdo.js → BrokerMetadataPanel-Dk242Yh_.js} +1 -1
- package/dist/client/assets/BrokerScreen-DwOF6bMA.js +8 -0
- package/dist/client/assets/{Canvas-CRP0KjKb.js → Canvas-X9pVSkw3.js} +1 -1
- package/dist/client/assets/{CastPicker-ZPomvOf-.js → CastPicker-BXUtPAGC.js} +1 -1
- package/dist/client/assets/ChannelComposer-DoK7IDGa.js +1 -0
- package/dist/client/assets/ChannelSidebar-e9DOPulb.js +1 -0
- package/dist/client/assets/{CharacterFamilyPreview-ckVkecDO.js → CharacterFamilyPreview-DMfw7UM_.js} +1 -1
- package/dist/client/assets/{ChatAvatar-DKBsbOqk.js → ChatAvatar-C3a_o5Hj.js} +1 -1
- package/dist/client/assets/ChatBits-CsvxbToF.js +1 -0
- package/dist/client/assets/{ChatCollapsedStrip-Co0NmqOO.js → ChatCollapsedStrip-FEmQ_G9J.js} +1 -1
- package/dist/client/assets/ChatRichInput-DhtwFxQE.js +31 -0
- package/dist/client/assets/ChatRightPanel-C1h_aIkn.js +1 -0
- package/dist/client/assets/ChatSpaceSurface-BXyLYKHn.js +1 -0
- package/dist/client/assets/ChatSpaceTheme-3wLZGsvT.css +1 -0
- package/dist/client/assets/ChatSpaceTheme-CUH8bTZc.js +1 -0
- package/dist/client/assets/{CodeDiffPane-D-iv28LJ.js → CodeDiffPane-DuQRwpgK.js} +1 -1
- package/dist/client/assets/{CodeProjectPicker-CZ3gDdiT.js → CodeProjectPicker-ZQ6gSBpg.js} +1 -1
- package/dist/client/assets/{CodeScreen-CSC-zbP9.js → CodeScreen-BXyKeL5T.js} +1 -1
- package/dist/client/assets/{CommsCanvas-DdNAwjGW.js → CommsCanvas-THp0r_U8.js} +1 -1
- package/dist/client/assets/{CommsDeck-mGWY7Ivi.js → CommsDeck-BVmSMV2V.js} +1 -1
- package/dist/client/assets/{CommsFlowGraph-voDD9M5R.js → CommsFlowGraph-DxoOaLF_.js} +1 -1
- package/dist/client/assets/{CommsFlowMap-C33sgD48.js → CommsFlowMap-Vi8ziCPg.js} +1 -1
- package/dist/client/assets/{CommsSelection-BL8aYD7z.js → CommsSelection-BUoRbu9o.js} +1 -1
- package/dist/client/assets/ComposerAttachments-DW0AIb8k.js +1 -0
- package/dist/client/assets/ConversationComposer-CUQyArlk.js +1 -0
- package/dist/client/assets/ConversationFeedRows-DWiOfT-y.js +1 -0
- package/dist/client/assets/ConversationHeader-C-ZWscKj.js +1 -0
- package/dist/client/assets/{ConversationPanels-6pprBpmq.js → ConversationPanels-D9oC0xG5.js} +2 -2
- package/dist/client/assets/ConversationScreen-9MlMnEo4.css +1 -0
- package/dist/client/assets/ConversationScreen-CUfsQ4MR.js +2 -0
- package/dist/client/assets/ConversationStatus--IPm2nGh.js +1 -0
- package/dist/client/assets/{CrewAvatar-D0c9z5Qr.css → CrewAvatar-BnIPIn_Z.css} +1 -1
- package/dist/client/assets/CrewAvatar-kTznzqcO.js +1 -0
- package/dist/client/assets/{CrewSprite-Dp9KBBGY.js → CrewSprite-Dhryjx2c.js} +1 -1
- package/dist/client/assets/CrewStage-vdO0qm3D.js +1 -0
- package/dist/client/assets/CrewWorkspaces-DCBzAAS4.js +1 -0
- package/dist/client/assets/{DataTable-av71ehJV.js → DataTable-aH-jCyDq.js} +1 -1
- package/dist/client/assets/{DispatchAftermath-CcYGUB10.js → DispatchAftermath-66uQAorV.js} +1 -1
- package/dist/client/assets/{DocumentFocusViewer-DlMiEALb.js → DocumentFocusViewer-DJr0v0D_.js} +1 -1
- package/dist/client/assets/{EmbeddableSurfacesLab-CTkO_tQR.js → EmbeddableSurfacesLab-BBa70EhJ.js} +1 -1
- package/dist/client/assets/{EmptyState-CYUwYyAW.js → EmptyState-CZlrHXy-.js} +1 -1
- package/dist/client/assets/{FileViewerPane-Cxhixtks.js → FileViewerPane-BAO6mtjD.js} +1 -1
- package/dist/client/assets/FleetRollCallHud-C5q2567n.js +1 -0
- package/dist/client/assets/FlightObserveScreen-DZ2mrw91.js +1 -0
- package/dist/client/assets/{FloorContextSheet-Vj_wVZq1.js → FloorContextSheet-2_NVPQor.js} +1 -1
- package/dist/client/assets/{FloorExchangePanel-CjHSDXad.js → FloorExchangePanel-BU1pPu8K.js} +1 -1
- package/dist/client/assets/{FloorMessagePasses-BG4ebnX5.js → FloorMessagePasses-cLW2UGNP.js} +1 -1
- package/dist/client/assets/{FloorReplay-BoYaGY9t.js → FloorReplay-VFzA6Kxc.js} +1 -1
- package/dist/client/assets/FloorResourcesSheet-C-kQ6Ren.js +1 -0
- package/dist/client/assets/{FloorSavedWork-jbtRs-YE.js → FloorSavedWork-BeHDejWz.js} +1 -1
- package/dist/client/assets/FloorTacticalHUD-CO-iiFpb.js +1 -0
- package/dist/client/assets/{FollowScreen-CupyOgt4.js → FollowScreen-CFfkIbc6.js} +1 -1
- package/dist/client/assets/HarnessMark-C4naWc16.js +1 -0
- package/dist/client/assets/HarnessesScreen-DX3NLcDG.js +1 -0
- package/dist/client/assets/{HerdrSession-Dcm3vf9U.js → HerdrSession-_t7yM8vX.js} +2 -2
- package/dist/client/assets/{HomeHero-pIZtE1cC.js → HomeHero-DouPyNmz.js} +1 -1
- package/dist/client/assets/{HostAdvisorView-Dv5meXo2.js → HostAdvisorView-CnM1i8hW.js} +1 -1
- package/dist/client/assets/InviteLandingScreen-CEjG2E34.js +1 -0
- package/dist/client/assets/InviteSheet-CwxZtWCl.js +1 -0
- package/dist/client/assets/{JumpPalette-BmiSOEmp.js → JumpPalette-O1aJE9gR.js} +1 -1
- package/dist/client/assets/{KnowledgeSearchInspector-B8yiM524.js → KnowledgeSearchInspector-32n9baT-.js} +1 -1
- package/dist/client/assets/KnowledgeSearchScreen-Dd6jrQ0A.js +1 -0
- package/dist/client/assets/{LaneToolHoverCard-D2cnTeUd.js → LaneToolHoverCard-CJa110yk.js} +1 -1
- package/dist/client/assets/LaneTraceDetailSheet-DYrd0BIf.js +1 -0
- package/dist/client/assets/{LaneTraceEventFocus-BLhVHwff.js → LaneTraceEventFocus-TbrNHRj_.js} +1 -1
- package/dist/client/assets/{MeshCanvas-BR25OBTJ.js → MeshCanvas-DWZHYh1A.js} +2 -2
- package/dist/client/assets/{MeshCanvasMinimap-ClVolr4-.js → MeshCanvasMinimap-iswYFpIb.js} +1 -1
- package/dist/client/assets/MeshScreen-8nAzQVbm.js +1 -0
- package/dist/client/assets/{MeshTopologyView-BT3ke2D1.js → MeshTopologyView-BVvtqI8q.js} +2 -2
- package/dist/client/assets/MessageEmbeds-ksPazAKH.js +1 -0
- package/dist/client/assets/MessagesScreen-C3WB4T21.js +1 -0
- package/dist/client/assets/{MissionContextRail-CafjuseK.js → MissionContextRail-D62-Wis8.js} +1 -1
- package/dist/client/assets/MissionControlView-B9cNPXvl.js +1 -0
- package/dist/client/assets/{MissionFocusOverlay-nhy3hkxQ.js → MissionFocusOverlay-C1zys3Jv.js} +1 -1
- package/dist/client/assets/MissionLeftAgentRow-vycMV77n.js +1 -0
- package/dist/client/assets/{MissionLogPane-DiUf3vWW.js → MissionLogPane-B19lYSY9.js} +1 -1
- package/dist/client/assets/NativeAreaScreen-B1RLa85C.js +1 -0
- package/dist/client/assets/NativeAreaScreen-CV0OhGra.js +1 -0
- package/dist/client/assets/NativeAreaScreen-CzuZt6o1.js +1 -0
- package/dist/client/assets/{NewAgentModal-BQ2wQ5gp.js → NewAgentModal-Bh-L-emz.js} +1 -1
- package/dist/client/assets/NewChatComposer-C97-iTMK.js +19 -0
- package/dist/client/assets/{NewChatOrigin-C8ROO4ps.js → NewChatOrigin-DFbF_XvR.js} +1 -1
- package/dist/client/assets/{NodeDetailPanel-BNTqYC7m.js → NodeDetailPanel-CElOEpCh.js} +1 -1
- package/dist/client/assets/{NodeMenu-CcOeFRCB.js → NodeMenu-B-jjHf1c.js} +1 -1
- package/dist/client/assets/ObserveEmbedScreen-B7Qt69Ms.js +2 -0
- package/dist/client/assets/{ObserveTextFlow-CC5mnngm.js → ObserveTextFlow-PFnG_10h.js} +2 -2
- package/dist/client/assets/{ObservedTopologyPanel-DF6tRZL_.js → ObservedTopologyPanel-CUTIoLZJ.js} +1 -1
- package/dist/client/assets/OpenScoutAppShell-37PDFfA4.js +31 -0
- package/dist/client/assets/OpsAgentsView-DajlX8LO.js +1 -0
- package/dist/client/assets/OpsScreen-jVcaBKGi.js +1 -0
- package/dist/client/assets/OpsSubnav-BOOYShHE.js +1 -0
- package/dist/client/assets/ProjectAgentProfile-D_wlW4sQ.js +1 -0
- package/dist/client/assets/{ProjectAgentProfileBar-C8z22pJ2.js → ProjectAgentProfileBar-DHuMKJj-.js} +1 -1
- package/dist/client/assets/ProjectAgentProfileHero-Dbebtug1.js +1 -0
- package/dist/client/assets/ProjectsInbox-B8zYE4vP.css +1 -0
- package/dist/client/assets/ProjectsInbox-Cgu7B4--.js +2 -0
- package/dist/client/assets/ProjectsRail-CDWocin_.js +1 -0
- package/dist/client/assets/ProjectsScreen-B_CJycqW.js +1 -0
- package/dist/client/assets/ProjectsThreadAside-1MMl_qUD.js +1 -0
- package/dist/client/assets/Provider-C35yu29I.js +5 -0
- package/dist/client/assets/{RailRow-DUPqXMZh.js → RailRow-BjmWK420.js} +1 -1
- package/dist/client/assets/RawSessionsTable-DzT90hWu.js +1 -0
- package/dist/client/assets/RealtimeVoiceScreen-B6ylX3WQ.js +16 -0
- package/dist/client/assets/{RenderedWorkerSprite-C8fxndAh.js → RenderedWorkerSprite-Dhlyg89J.js} +1 -1
- package/dist/client/assets/{ReplayClock-DUVJjrIu.js → ReplayClock-348f17bW.js} +1 -1
- package/dist/client/assets/{ReplayLog-Bek1Vc4W.js → ReplayLog-CBnAM3ui.js} +1 -1
- package/dist/client/assets/{ReplayOutpost-DlRg3172.js → ReplayOutpost-DyRPfNFx.js} +1 -1
- package/dist/client/assets/{RepoDiffEmbedScreen-CVUMnt6A.js → RepoDiffEmbedScreen-BWxvRDrS.js} +1 -1
- package/dist/client/assets/{RepoDiffPageScreen-D9-s5PyB.js → RepoDiffPageScreen-DN94irmY.js} +1 -1
- package/dist/client/assets/{RepoDiffViewer-D7FN-oyY.js → RepoDiffViewer-_4JVXBIW.js} +1 -1
- package/dist/client/assets/RepoDiffViewerLazy-XGVC3WXv.js +2 -0
- package/dist/client/assets/{ReposScreen-BQ7HO1om.js → ReposScreen-uMCpt0e9.js} +2 -2
- package/dist/client/assets/{RiggedWorkerCharacter-CJMWlvV-.js → RiggedWorkerCharacter-q6QRc7_o.js} +1 -1
- package/dist/client/assets/{SageModelStudio-B526NSnw.js → SageModelStudio-CNDhZhgD.js} +1 -1
- package/dist/client/assets/{ScoutDeckSurface-ChkvGyEW.js → ScoutDeckSurface-CUaU4R6T.js} +1 -1
- package/dist/client/assets/{ScoutSurface-6g1f5chk.js → ScoutSurface-3_25USO_.js} +1 -1
- package/dist/client/assets/{ScoutbotFxLab-BuwBdnPf.js → ScoutbotFxLab-CRqhYe0a.js} +1 -1
- package/dist/client/assets/{SecondaryNav-Bs-_VwTC.js → SecondaryNav-D7dbV2qo.js} +1 -1
- package/dist/client/assets/SessionContextStrip-CXfs9hUD.js +1 -0
- package/dist/client/assets/SessionContextStrip-DAIXwtHd.css +1 -0
- package/dist/client/assets/{SessionEmbedScreen-C2wf35-P.js → SessionEmbedScreen-D0zFmou-.js} +1 -1
- package/dist/client/assets/SessionHopMenu-E6VJZrE0.js +1 -0
- package/dist/client/assets/{SessionObserve-B64YsYhy.js → SessionObserve-DXxBvejJ.js} +9 -9
- package/dist/client/assets/SessionObserveEvidence-Cuj_KHxR.js +1 -0
- package/dist/client/assets/SessionRefScreen-DqLSUlCE.js +1 -0
- package/dist/client/assets/SessionsScreen-BLIRkohT.js +1 -0
- package/dist/client/assets/SettingsDrawer-juCpnbH6.js +3 -0
- package/dist/client/assets/SettingsScreen-BtGzE2-O.js +1 -0
- package/dist/client/assets/{SharedFloorCharacter-V04kD5T9.js → SharedFloorCharacter-DNEiaOUh.js} +1 -1
- package/dist/client/assets/SharedWorkFloor-0rqtdF-n.css +1 -0
- package/dist/client/assets/SharedWorkFloor-D9mf9KSg.js +2 -0
- package/dist/client/assets/{ShikiPane-XwFI-pCp.js → ShikiPane-CRtTYkMj.js} +1 -1
- package/dist/client/assets/{SlidePanel-BMpkXai_.js → SlidePanel-_CHAQdOa.js} +1 -1
- package/dist/client/assets/SpaceSwitcher-BLgSCf_T.js +1 -0
- package/dist/client/assets/{SpriteAvatar-aHeF4ZQZ.js → SpriteAvatar-CpZWf54-.js} +1 -1
- package/dist/client/assets/{SproutActionSprite-DI5N3gOj.js → SproutActionSprite-BSiTS4en.js} +1 -1
- package/dist/client/assets/{StatusPill-Dw4LP7wu.js → StatusPill-2gCP6H7A.js} +1 -1
- package/dist/client/assets/{TailView-BofjmUMJ.js → TailView-CYSijNTy.js} +2 -2
- package/dist/client/assets/Terminal-Bi97yb5s.js +4 -0
- package/dist/client/assets/TerminalEmbedScreen-Bqop67Bq.js +1 -0
- package/dist/client/assets/{TerminalHeaderMount-CwbQhXcI.js → TerminalHeaderMount-Cq4OD_xN.js} +1 -1
- package/dist/client/assets/{TerminalRelay--qOBwnbR.js → TerminalRelay-DrikpUSJ.js} +3 -3
- package/dist/client/assets/{TextDocumentSurface-BK6Qy41F.js → TextDocumentSurface-D52m7Vd8.js} +1 -1
- package/dist/client/assets/{TmuxPeek-DpUT9Tpc.js → TmuxPeek-CXFeweMg.js} +1 -1
- package/dist/client/assets/VoiceControlWell-DF3bjcYA.js +1 -0
- package/dist/client/assets/VoicePathDiagram-CmpHWfO-.js +1 -0
- package/dist/client/assets/{VoicePermissionsPanel-D35fOnQj.js → VoicePermissionsPanel-Ok2nfxHw.js} +1 -1
- package/dist/client/assets/VoiceTurnDetails-wAByRaNB.js +8 -0
- package/dist/client/assets/VoiceTurnStage-edoJalLV.js +1 -0
- package/dist/client/assets/VoiceTurnView-D-8g5E4r.js +1 -0
- package/dist/client/assets/WorkDetailScreen-zQkNVy2F.js +5 -0
- package/dist/client/assets/{WorkFilesViewer-t8AEyx3Q.js → WorkFilesViewer-vNt01sDd.js} +1 -1
- package/dist/client/assets/{WorkRunView-_mhG_FR2.js → WorkRunView-BDkR7Edq.js} +1 -1
- package/dist/client/assets/WorldActorTalk-BvSg_b1y.js +1 -0
- package/dist/client/assets/{WorldCharacter-BRrj3MQN.js → WorldCharacter-CIIlutQq.js} +1 -1
- package/dist/client/assets/WorldMinimap-B6HNgcDe.js +1 -0
- package/dist/client/assets/{WorldSky-D-RJzSa6.js → WorldSky-Jm2Z6dfW.js} +1 -1
- package/dist/client/assets/{activity-BJqFrZyB.js → activity-CIlFrfPJ.js} +1 -1
- package/dist/client/assets/{addon-fit-CHohcvS3.js → addon-fit-dFpj9Kfq.js} +1 -1
- package/dist/client/assets/{addon-webgl-CaRy2x2b.js → addon-webgl-BFCGRtGh.js} +1 -1
- package/dist/client/assets/{agent-essentials-bKWYOZaH.js → agent-essentials-BGGvT5G6.js} +1 -1
- package/dist/client/assets/{agent-master-model-C-KdOFDK.js → agent-master-model-Bk_yuUXJ.js} +1 -1
- package/dist/client/assets/{agent-specialization-BplZUa_0.js → agent-specialization-DDc7mLCW.js} +1 -1
- package/dist/client/assets/agents-screen-BYakbO50.css +1 -0
- package/dist/client/assets/{arc.es-CubLvQ4W.js → arc.es-C1SQHJ3k.js} +1 -1
- package/dist/client/assets/{arrow-left-DFfKAq0d.js → arrow-left-MVUKauwQ.js} +1 -1
- package/dist/client/assets/{arrow-right-DmAWnyAH.js → arrow-right-Bp-FpE5V.js} +1 -1
- package/dist/client/assets/{arrow-up-right-B0aLKiyF.js → arrow-up-right-BPedAgxO.js} +1 -1
- package/dist/client/assets/{book-open-BL9qvhEI.js → book-open-CV98WMSp.js} +1 -1
- package/dist/client/assets/{bot-BhAVbcCA.js → bot-B4zLQ4IN.js} +1 -1
- package/dist/client/assets/chat-api-DSJMBYoT.js +2 -0
- package/dist/client/assets/chat-message-markup-91DIry6R.js +1 -0
- package/dist/client/assets/chat-space-model-aW3Fd8_U.js +4 -0
- package/dist/client/assets/chat-transport-DNS5CB2I.js +1 -0
- package/dist/client/assets/{check-g7D7-c1J.js → check-lrJ3a73a.js} +1 -1
- package/dist/client/assets/{chevron-down-CDzRQQGl.js → chevron-down-l1mrh5S9.js} +1 -1
- package/dist/client/assets/{chevron-right-DKGTLiqc.js → chevron-right-DrfqcerI.js} +1 -1
- package/dist/client/assets/{chevron-up-DX7R6KY2.js → chevron-up-CETZJzjV.js} +1 -1
- package/dist/client/assets/{chunk-HRAB3GC3-Dvk_QpRq.js → chunk-HRAB3GC3-DbVLgbWX.js} +1 -1
- package/dist/client/assets/{clock-CQb4FeMf.js → clock-BV1aqPkK.js} +1 -1
- package/dist/client/assets/{code-xml-Cmadr3pQ.js → code-xml-BhcNbLWU.js} +1 -1
- package/dist/client/assets/{coffee-ljG1_krY.js → coffee-D7EAOdCk.js} +1 -1
- package/dist/client/assets/{compass-CvzkzkIh.js → compass-63TUaz5_.js} +1 -1
- package/dist/client/assets/content-B1lgE8qr.js +1 -0
- package/dist/client/assets/content-B5l11YyQ.js +1 -0
- package/dist/client/assets/content-BNZOZEpX.js +1 -0
- package/dist/client/assets/content-BRIxP155.js +1 -0
- package/dist/client/assets/content-BWd8gt8L.js +1 -0
- package/dist/client/assets/content-BfwS2jAK.js +1 -0
- package/dist/client/assets/content-C4p43_eT.js +1 -0
- package/dist/client/assets/content-CdYfaoDV.js +1 -0
- package/dist/client/assets/content-CzldLxw0.js +1 -0
- package/dist/client/assets/content-D-olnc4U.js +1 -0
- package/dist/client/assets/content-DTioimq4.js +1 -0
- package/dist/client/assets/content-LOebm3_d.js +1 -0
- package/dist/client/assets/{content-CKJ9zb7Z.js → content-nGlEZhUI.js} +1 -1
- package/dist/client/assets/{content-D1Ze_FG9.js → content-oyzDM-LK.js} +1 -1
- package/dist/client/assets/content-x1PHxED7.js +1 -0
- package/dist/client/assets/content-zX3ZY3T9.js +1 -0
- package/dist/client/assets/{conversation-icons-CIRaxmid.js → conversation-icons-Tqba2d56.js} +1 -1
- package/dist/client/assets/conversation-model-FxDeWlle.js +1 -0
- package/dist/client/assets/conversation-motion-features-C5zjuNwE.js +1 -0
- package/dist/client/assets/conversations-DoAAO6kA.js +1 -0
- package/dist/client/assets/{copy-BGOC1tJB.js → copy-xKeM5ZtU.js} +1 -1
- package/dist/client/assets/{cpu-Q6nrHFTN.js → cpu-BOTa_WLr.js} +1 -1
- package/dist/client/assets/{createLucideIcon-ChvMq-zl.js → createLucideIcon-zZ8Hx7er.js} +1 -1
- package/dist/client/assets/ctx-panel-BC8fpcWJ.css +1 -0
- package/dist/client/assets/direct-voice-BbLPuJ04.js +2 -0
- package/dist/client/assets/direct-voice-DbO7CSv_.css +1 -0
- package/dist/client/assets/discover-DJFxyV1k.js +2 -0
- package/dist/client/assets/embed-entry-Lyvu0Kfc.js +2 -0
- package/dist/client/assets/{external-link-BVccgH0n.js → external-link-CUObqmgX.js} +1 -1
- package/dist/client/assets/{eye-CsGfEVR6.js → eye-LrO-cXQt.js} +1 -1
- package/dist/client/assets/{file-code-corner-Be6da5l3.js → file-code-corner-CsU7jJpu.js} +1 -1
- package/dist/client/assets/{file-text-DP6txVW-.js → file-text-CnISiiw6.js} +1 -1
- package/dist/client/assets/{flag-DAFE2wZ5.js → flag-C4wl8z2-.js} +1 -1
- package/dist/client/assets/fleet-roll-call-BUgf7w-V.css +1 -0
- package/dist/client/assets/{folder-B_S7gBVr.js → folder-D5prSkzz.js} +1 -1
- package/dist/client/assets/{gauge-DQCGlE3o.js → gauge-D9_5iJEm.js} +1 -1
- package/dist/client/assets/{gestures-CofqY4Km.js → gestures-QZub3Ot9.js} +1 -1
- package/dist/client/assets/{git-branch-DcUCsWdJ.js → git-branch-B0_fPLO7.js} +1 -1
- package/dist/client/assets/{go-shortcuts-KQy-ZOpV.js → go-shortcuts-DicR7sUf.js} +1 -1
- package/dist/client/assets/home-moving-signal-rpMhsOJB.js +1 -0
- package/dist/client/assets/home-now-card-ByE6Umcx.js +1 -0
- package/dist/client/assets/{home-now-card-nano-CvU8B61b.js → home-now-card-nano-B5Dv3-pb.js} +1 -1
- package/dist/client/assets/hooks-_eCZZPsR.js +2 -0
- package/dist/client/assets/index-724SdE6r.js +1 -0
- package/dist/client/assets/{index-kkXUq-zf.js → index-CHD0qcfL.js} +1 -1
- package/dist/client/assets/index-CN4rBB_s.css +1 -0
- package/dist/client/assets/index-D1d98iYf.js +1 -0
- package/dist/client/assets/{index-DReVb7jZ.js → index-EsrkGBcv.js} +8 -8
- package/dist/client/assets/index-gGHPA-By.js +1 -0
- package/dist/client/assets/{inspector-panel-CLU7wjnT.js → inspector-panel-BkgUDn6G.js} +2 -2
- package/dist/client/assets/{keyboard-nav-CJXPaHXj.js → keyboard-nav-DDHegDbx.js} +1 -1
- package/dist/client/assets/{lane-roster-store-Ch9t6lb0.js → lane-roster-store-D-RSWjb-.js} +1 -1
- package/dist/client/assets/{layers-BOwyWodP.js → layers-C8PDiMul.js} +1 -1
- package/dist/client/assets/{layout-grid-B36Qsh0y.js → layout-grid-Cor2frzj.js} +1 -1
- package/dist/client/assets/left-Bn5X7x2o.js +2 -0
- package/dist/client/assets/left-BqS0fYX1.js +1 -0
- package/dist/client/assets/left-CTCeeeD3.js +1 -0
- package/dist/client/assets/left-DhtVPVux.js +1 -0
- package/dist/client/assets/left-K39b-Wvx.js +2 -0
- package/dist/client/assets/left-KGmueNPt.js +1 -0
- package/dist/client/assets/left-P_GOYB-s.js +1 -0
- package/dist/client/assets/left-advisor-B0N47De2.js +1 -0
- package/dist/client/assets/left-agents-CsSNc51Y.js +1 -0
- package/dist/client/assets/left-default-BlO5LP2T.js +1 -0
- package/dist/client/assets/left-lanes-C4PhaJE6.js +1 -0
- package/dist/client/assets/left-mission-BjTE5vPa.js +1 -0
- package/dist/client/assets/library-CkWNPHRp.js +1 -0
- package/dist/client/assets/{loader-circle-DNUsuPWz.js → loader-circle-OvccU82H.js} +1 -1
- package/dist/client/assets/{local-agents-I40PawYA.js → local-agents-BqnoxJrq.js} +1 -1
- package/dist/client/assets/log-in-7SnYqW5w.js +1 -0
- package/dist/client/assets/{machine-children-CdhNzDF0.js → machine-children-DxcqCLmd.js} +1 -1
- package/dist/client/assets/media-blobs-Bi8pxr1u.js +1 -0
- package/dist/client/assets/{mentions-Ck_Vjnyp.js → mentions-ByUvhS-v.js} +1 -1
- package/dist/client/assets/{mesh-ops-DSlvHp-D.js → mesh-ops-CiZ8xSAx.js} +1 -1
- package/dist/client/assets/{mesh-view-store-C1-mdP3P.js → mesh-view-store-DZvJC4KU.js} +1 -1
- package/dist/client/assets/{message-circle-cI5_A5mj.js → message-circle-CxRVKNE-.js} +1 -1
- package/dist/client/assets/message-markup-BQW5jdJw.js +15 -0
- package/dist/client/assets/message-markup-Zwo3t4cI.js +1 -0
- package/dist/client/assets/{message-square-CJW4WRlo.js → message-square-BxesYglW.js} +1 -1
- package/dist/client/assets/mission-control-model-BpJHDV5D.js +1 -0
- package/dist/client/assets/{mission-control-store-p_cboAm4.js → mission-control-store-elEEsIvb.js} +1 -1
- package/dist/client/assets/{mission-wall-DOuGOxQy.js → mission-wall-CAo4BKfa.js} +1 -1
- package/dist/client/assets/{monitor-C7_cHlkC.js → monitor-DTTYEb73.js} +1 -1
- package/dist/client/assets/{nav-destinations-CU_euC-Q.js → nav-destinations-uorRqFxf.js} +1 -1
- package/dist/client/assets/{observe-CtS0l3zu.js → observe-BJqERJVj.js} +1 -1
- package/dist/client/assets/{page-status-DwFR4wSw.js → page-status-BswZLqvA.js} +1 -1
- package/dist/client/assets/{panel-right-qP17MwMl.js → panel-right-Bv7sP_fc.js} +1 -1
- package/dist/client/assets/paperclip-BjcuP_Hx.js +1 -0
- package/dist/client/assets/{pause-B_hliKuR.js → pause-C2XTlkjs.js} +1 -1
- package/dist/client/assets/{persistent-state-BUsTTZFE.js → persistent-state-KRk_yb0q.js} +1 -1
- package/dist/client/assets/{pin-Oi4qHR6M.js → pin-C2mFOV1l.js} +1 -1
- package/dist/client/assets/{play-CVeRmqLH.js → play-FT6K3It1.js} +1 -1
- package/dist/client/assets/{plus-D5NLH_fM.js → plus-DFDDeGKu.js} +1 -1
- package/dist/client/assets/profile-DTmzN16I.js +1 -0
- package/dist/client/assets/{projects-inbox-CfwxCTdN.js → projects-inbox-C0FUCv_p.js} +1 -1
- package/dist/client/assets/projects-inbox-ColX6lpx.css +1 -0
- package/dist/client/assets/{provider-DwmCoSlc.js → provider-Dojd8quC.js} +1 -1
- package/dist/client/assets/{proxy-DgzP27W8.js → proxy-AJsmwA6h.js} +1 -1
- package/dist/client/assets/{radio-Cas2qg1D.js → radio-DRoOZsws.js} +1 -1
- package/dist/client/assets/{refresh-cw-IcD2lPoT.js → refresh-cw-BmVr7sCD.js} +1 -1
- package/dist/client/assets/resolve-panes-pbY1fCWi.js +1 -0
- package/dist/client/assets/resolve-sidebar-context-YWkZTq1t.js +1 -0
- package/dist/client/assets/right-49kO-6nD.js +1 -0
- package/dist/client/assets/right-APtItA8A.js +1 -0
- package/dist/client/assets/right-BJwhPqtn.js +1 -0
- package/dist/client/assets/right-BPqrf4ek.js +1 -0
- package/dist/client/assets/right-D7djOy6K.js +1 -0
- package/dist/client/assets/right-DKOUCRob.js +1 -0
- package/dist/client/assets/right-DMNrVzg7.js +1 -0
- package/dist/client/assets/{right-cjPTwPXS.js → right-DWPVB-nK.js} +1 -1
- package/dist/client/assets/right-DppeMCy4.js +1 -0
- package/dist/client/assets/right-GAL5Mw1v.js +1 -0
- package/dist/client/assets/{rocket-DAqYvu8I.js → rocket-CGl4RTV7.js} +1 -1
- package/dist/client/assets/router-DCtl8wqb.js +1 -0
- package/dist/client/assets/runtime-picker-DXu2bOTh.js +1 -0
- package/dist/client/assets/{scope-views-Dl3ml9OZ.js → scope-views-RUWwCVAr.js} +1 -1
- package/dist/client/assets/scout-voice-CZx60X6E.js +1 -0
- package/dist/client/assets/{scoutbot-markdown-DwvGQOWo.js → scoutbot-markdown-BKEBSbG0.js} +1 -1
- package/dist/client/assets/{scroll-text-B0tKI9Sg.js → scroll-text-DNjxhyO2.js} +1 -1
- package/dist/client/assets/{search-UsM-9-_W.js → search-DT42oyRW.js} +1 -1
- package/dist/client/assets/secondaryNavConfig-CS1svh6n.js +1 -0
- package/dist/client/assets/{selection-bridge-OTS2iFkt.js → selection-bridge-x3wFUjxj.js} +1 -1
- package/dist/client/assets/{send-horizontal-BlQsRK6C.js → send-horizontal-CH0-fbZE.js} +1 -1
- package/dist/client/assets/{send-to-agent-session-C1mgqdow.js → send-to-agent-session-DoKCDBJ4.js} +1 -1
- package/dist/client/assets/{server-DBlPW0Mp.js → server-QfsgMLk1.js} +1 -1
- package/dist/client/assets/{session-catalog-CnpZMB7C.js → session-catalog-CvSdPHPe.js} +1 -1
- package/dist/client/assets/session-recap-lanes-D-eVJnpY.js +1 -0
- package/dist/client/assets/session-recap-queue-41l2XVkI.js +1 -0
- package/dist/client/assets/{session-table-CGkfG5Yd.js → session-table-L-pns6Zl.js} +1 -1
- package/dist/client/assets/{sessions-view-Bge4XZ4I.js → sessions-view-Dc-QAa7O.js} +1 -1
- package/dist/client/assets/{settings-C69Zjrpq.js → settings-BVh7kldq.js} +1 -1
- package/dist/client/assets/{sliders-horizontal-6bzeod7c.js → sliders-horizontal-782VC_yy.js} +1 -1
- package/dist/client/assets/{sparkles-Cc5lPZRv.js → sparkles-BjHq_DNK.js} +1 -1
- package/dist/client/assets/{sse-A8AyLH0g.js → sse-BCPRocpq.js} +1 -1
- package/dist/client/assets/system-surfaces-redesign-q2BmCB7e.css +1 -0
- package/dist/client/assets/{tail-events-C4WdhVeK.js → tail-events-d0yAYxR0.js} +1 -1
- package/dist/client/assets/{terminal-DMZjX1es.js → terminal-hQKQygcf.js} +1 -1
- package/dist/client/assets/{terminal-relay-mO89dX-Y.js → terminal-relay-Bxs1hp-j.js} +1 -1
- package/dist/client/assets/{terminal-takeover-CZZsnPzj.js → terminal-takeover-Ay5C2c-M.js} +1 -1
- package/dist/client/assets/theme-vars-DNK0nn3k.js +1 -0
- package/dist/client/assets/triangle-alert-CHoRGdVO.js +1 -0
- package/dist/client/assets/{use-beside-D3cJpA5p.js → use-beside-DoRC1nt0.js} +1 -1
- package/dist/client/assets/{use-conversation-list-D5EnpVba.js → use-conversation-list-CY4JciOV.js} +1 -1
- package/dist/client/assets/{use-fleet-active-asks-D_QOmjg5.js → use-fleet-active-asks-CymmXWH4.js} +1 -1
- package/dist/client/assets/{use-mesh-node-state-3V3ADQ-G.js → use-mesh-node-state-BvaqtODo.js} +1 -1
- package/dist/client/assets/{use-mesh-ops-items-DI9GKWlF.js → use-mesh-ops-items-BSYaqH_0.js} +1 -1
- package/dist/client/assets/{use-reduced-motion-CiaZHMnk.js → use-reduced-motion-3gMYZNIp.js} +1 -1
- package/dist/client/assets/{use-scout-dev-flags-CkdAHlDR.js → use-scout-dev-flags-DS_pYYQd.js} +1 -1
- package/dist/client/assets/{useAgentHoverCard-A3QGXqIy.js → useAgentHoverCard-BANmpjMh.js} +1 -1
- package/dist/client/assets/useContentSecondaryNav-C6OBu-3_.js +1 -0
- package/dist/client/assets/{useEmbedHeadline-atkQVfGw.js → useEmbedHeadline-D6pJRxUg.js} +1 -1
- package/dist/client/assets/usePersistentState-B8lP7TRb.js +1 -0
- package/dist/client/assets/{usePierreRuntime-DTvcwISe.js → usePierreRuntime-BAQdiN0L.js} +1 -1
- package/dist/client/assets/useSidebarCollapse-OL_8J5cL.js +1 -0
- package/dist/client/assets/{users-RLK3P5U4.js → users-BUjx36gx.js} +1 -1
- package/dist/client/assets/voice-paths-CJUuBPh3.css +1 -0
- package/dist/client/assets/voice-turn-DftA0iIb.css +1 -0
- package/dist/client/assets/voice-turn-ledger-BMZxlSjg.js +1 -0
- package/dist/client/assets/{wrench-B4maQJai.js → wrench-DR0i5BU7.js} +1 -1
- package/dist/client/assets/{x-rlMdRqJF.js → x-DAehov0E.js} +1 -1
- package/dist/client/assets/{xterm-B1zHHOLQ.js → xterm-BXQiLVnI.js} +1 -1
- package/dist/client/assets/{zap-B4X0OrEw.js → zap-CEjZNZbI.js} +1 -1
- package/dist/client/crew/sheets/eye-plate-v1/look-down-left.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/look-down-right.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/look-down.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/look-up-left.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/look-up-right.webp +0 -0
- package/dist/client/crew/sheets/eye-plate-v1/look-up.webp +0 -0
- package/dist/client/crew/sheets/sprout/blink-half.webp +0 -0
- package/dist/client/crew/sheets/sprout/blink-shut.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-down-left.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-down-right.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-down.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-left.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-right.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-up-left.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-up-right.webp +0 -0
- package/dist/client/crew/sheets/sprout/look-up.webp +0 -0
- package/dist/client/index.html +2 -2
- package/dist/drizzle/0020_message_reactions.sql +11 -0
- package/dist/drizzle/meta/_journal.json +7 -0
- package/dist/main.mjs +542 -150
- package/dist/node/main.mjs +131 -17
- package/dist/pairing-runtime-controller.mjs +375 -78
- package/dist/runtime/base-daemon.mjs +98 -5
- package/dist/runtime/broker-daemon.mjs +1879 -1198
- package/dist/runtime/broker-process-manager.mjs +96 -3
- package/dist/runtime/mesh-discover.mjs +96 -3
- package/dist/scout-control-plane-web.mjs +4817 -1616
- package/dist/update-helper.mjs +211 -39
- package/package.json +5 -3
- package/server.json +31 -0
- package/dist/client/assets/ActivityScreen-CcDdQTBK.js +0 -1
- package/dist/client/assets/AgentAdventures-BxrYq_2v.js +0 -1
- package/dist/client/assets/AgentAvatar-NZOqcsB2.js +0 -1
- package/dist/client/assets/AgentConfigurationScreen-BhD1PEAM.js +0 -1
- package/dist/client/assets/AgentDefinitionsWorkspace-BqS6MXqF.js +0 -1
- package/dist/client/assets/AgentFloorView-A0dDRlRV.js +0 -1
- package/dist/client/assets/AgentInfoScreen-DuaN0sgE.js +0 -1
- package/dist/client/assets/AgentLanesEmbedScreen-CeNiaZ9_.js +0 -1
- package/dist/client/assets/AgentLanesView-WZhEDBFE.js +0 -2
- package/dist/client/assets/AgentMasterScreen-DUDUTAnU.js +0 -1
- package/dist/client/assets/AgentSessions-CO1WGa8Z.js +0 -6
- package/dist/client/assets/AgentsConsole-BQOWkj35.js +0 -1
- package/dist/client/assets/AgentsScreen-BMNAj1PH.js +0 -1
- package/dist/client/assets/AgentsSubnav-CeHhuzyM.js +0 -1
- package/dist/client/assets/BriefingDetailScreen-yZG8_m4h.js +0 -1
- package/dist/client/assets/BrokerScreen-CT37VQiL.js +0 -8
- package/dist/client/assets/ChannelComposer-BVItWlEz.js +0 -1
- package/dist/client/assets/ChannelSidebar-B-2spawY.js +0 -1
- package/dist/client/assets/ChatBits-CLJ71hTY.js +0 -1
- package/dist/client/assets/ChatRightPanel-pKQtkAgl.js +0 -1
- package/dist/client/assets/ChatSpaceSurface-NrLwdPkE.js +0 -1
- package/dist/client/assets/ChatSpaceTheme-BPMgPdVK.css +0 -1
- package/dist/client/assets/ChatSpaceTheme-D37Jk7bl.js +0 -1
- package/dist/client/assets/ConversationComposer-DNcn5U6D.js +0 -1
- package/dist/client/assets/ConversationFeedRows-RnYSa7Io.js +0 -1
- package/dist/client/assets/ConversationHeader-Y9TEJxP_.js +0 -1
- package/dist/client/assets/ConversationScreen-Brfas2y0.css +0 -1
- package/dist/client/assets/ConversationScreen-tpj4cqWs.js +0 -2
- package/dist/client/assets/ConversationStatus-Cv-7hErW.js +0 -1
- package/dist/client/assets/CrewAvatar-zgzC3cbU.js +0 -1
- package/dist/client/assets/CrewWorkspaces-K2jcyLec.js +0 -1
- package/dist/client/assets/FlightObserveScreen-CvzhzuWc.js +0 -1
- package/dist/client/assets/FloorResourcesSheet-_Iy5UqgY.js +0 -1
- package/dist/client/assets/FloorTacticalHUD-BhyOqlL5.js +0 -1
- package/dist/client/assets/HarnessMark-DSvM_H7H.js +0 -1
- package/dist/client/assets/HarnessesScreen-DyjqbZ4k.js +0 -1
- package/dist/client/assets/InviteLandingScreen-xZQ2na1z.js +0 -1
- package/dist/client/assets/InviteSheet--5Zjct25.js +0 -1
- package/dist/client/assets/KnowledgeSearchScreen-BPqAjHnH.js +0 -1
- package/dist/client/assets/LaneTraceDetailSheet-jl4XQmEx.js +0 -1
- package/dist/client/assets/MeshScreen-BW1dMFWF.js +0 -1
- package/dist/client/assets/MessagesScreen-CtNMfIvC.js +0 -1
- package/dist/client/assets/MissionControlView-BjPOViGY.js +0 -1
- package/dist/client/assets/MissionLeftAgentRow-Dms0DBjO.js +0 -1
- package/dist/client/assets/NativeAreaScreen-BQSTo8As.js +0 -1
- package/dist/client/assets/NativeAreaScreen-Brix6xDB.js +0 -1
- package/dist/client/assets/NativeAreaScreen-D7HyQNlM.js +0 -1
- package/dist/client/assets/NewChatComposer-BEXS8vV6.js +0 -19
- package/dist/client/assets/ObserveEmbedScreen-Dh30EjAQ.js +0 -2
- package/dist/client/assets/OpenScoutAppShell-D9pgw36i.js +0 -31
- package/dist/client/assets/OpsAgentsView-D3rM0udq.js +0 -1
- package/dist/client/assets/OpsScreen-DySeNQ1V.js +0 -1
- package/dist/client/assets/OpsSubnav-C9E0r3GZ.js +0 -1
- package/dist/client/assets/ProjectAgentProfile-FUav75j2.js +0 -1
- package/dist/client/assets/ProjectAgentProfileHero-BLK0EwMg.js +0 -1
- package/dist/client/assets/ProjectsInbox-DfCXReZK.js +0 -2
- package/dist/client/assets/ProjectsRail-CELVubfJ.js +0 -1
- package/dist/client/assets/ProjectsScreen-DMw4TLKy.js +0 -1
- package/dist/client/assets/ProjectsThreadAside-D1Sh4fnX.js +0 -1
- package/dist/client/assets/Provider-CNZluAZb.js +0 -5
- package/dist/client/assets/RailToggle-BwmY70B8.js +0 -1
- package/dist/client/assets/RawSessionsTable-6OVJq0JZ.js +0 -1
- package/dist/client/assets/RealtimeVoiceScreen-D41TYY0x.js +0 -9
- package/dist/client/assets/RepoDiffViewerLazy-BpMR7tlx.js +0 -2
- package/dist/client/assets/SessionObserveEvidence-CS1aQBpQ.js +0 -1
- package/dist/client/assets/SessionRefScreen-DURV0MpF.js +0 -1
- package/dist/client/assets/SessionsScreen-D71ZR-8t.js +0 -1
- package/dist/client/assets/SettingsDrawer-Nz98oBVl.js +0 -3
- package/dist/client/assets/SettingsScreen-CYBHal6y.js +0 -1
- package/dist/client/assets/SharedWorkFloor-BCmdeb3Q.css +0 -1
- package/dist/client/assets/SharedWorkFloor-C0xxW4SN.js +0 -2
- package/dist/client/assets/SpaceSwitcher-BfeIf-ad.js +0 -1
- package/dist/client/assets/Terminal-jIqnIZZ6.js +0 -4
- package/dist/client/assets/TerminalEmbedScreen-3XsjuySR.js +0 -1
- package/dist/client/assets/WorkDetailScreen-Bcf_yHhU.js +0 -5
- package/dist/client/assets/WorldActorTalk-CKerDikx.js +0 -1
- package/dist/client/assets/WorldMinimap-DOptgrc4.js +0 -1
- package/dist/client/assets/agent-autocomplete-C7xwIcwd.css +0 -1
- package/dist/client/assets/agent-autocomplete-_u9o5EZu.js +0 -2
- package/dist/client/assets/agents-screen-BMu6PpRY.css +0 -1
- package/dist/client/assets/at-sign-DM7xeppo.js +0 -1
- package/dist/client/assets/chat-api-BPVC0asu.js +0 -1
- package/dist/client/assets/chat-space-model-B6Jg2CY4.js +0 -4
- package/dist/client/assets/content-0AXa0klu.js +0 -1
- package/dist/client/assets/content-BEyJ19Lx.js +0 -1
- package/dist/client/assets/content-BN5weWKW.js +0 -1
- package/dist/client/assets/content-BNokkm7C.js +0 -1
- package/dist/client/assets/content-BV4PUM9q.js +0 -1
- package/dist/client/assets/content-BxUPlcx5.js +0 -1
- package/dist/client/assets/content-CIC5sku8.js +0 -1
- package/dist/client/assets/content-CdkTyxqk.js +0 -1
- package/dist/client/assets/content-CnhhSCZq.js +0 -1
- package/dist/client/assets/content-DY3F9Vfr.js +0 -1
- package/dist/client/assets/content-DrKBYpcb.js +0 -1
- package/dist/client/assets/content-LSStQYj5.js +0 -1
- package/dist/client/assets/content-YvU-D0hF.js +0 -1
- package/dist/client/assets/content-oKQMyVnH.js +0 -1
- package/dist/client/assets/conversation-model-m8HhzroS.js +0 -1
- package/dist/client/assets/conversation-motion-features-D9PxLoDt.js +0 -1
- package/dist/client/assets/conversations-Cbg9h_Af.js +0 -1
- package/dist/client/assets/ctx-panel-F05jXK4Q.css +0 -1
- package/dist/client/assets/discover-DlwbftpC.js +0 -2
- package/dist/client/assets/embed-entry-c0lwtjBG.js +0 -2
- package/dist/client/assets/home-moving-signal-BIHUGNfI.js +0 -1
- package/dist/client/assets/home-now-card-CaLgZze2.js +0 -1
- package/dist/client/assets/hooks-DaUOREpP.js +0 -2
- package/dist/client/assets/index-CGbs0SBm.css +0 -1
- package/dist/client/assets/index-CbqBwfIW.js +0 -1
- package/dist/client/assets/index-CyPMl7Up.js +0 -1
- package/dist/client/assets/index-PQpJveGO.js +0 -1
- package/dist/client/assets/left-0vBrvrBG.js +0 -2
- package/dist/client/assets/left-C6SyaqlJ.js +0 -1
- package/dist/client/assets/left-CTuXysZR.js +0 -2
- package/dist/client/assets/left-Cc6s4DT2.js +0 -1
- package/dist/client/assets/left-DF5caiyh.js +0 -1
- package/dist/client/assets/left-DgT4tWCx.js +0 -1
- package/dist/client/assets/left-R0wppTTr.js +0 -1
- package/dist/client/assets/left-advisor-C-kt8V28.js +0 -1
- package/dist/client/assets/left-agents-thnBO156.js +0 -1
- package/dist/client/assets/left-default-CT42fnpF.js +0 -1
- package/dist/client/assets/left-lanes-CSmZgciK.js +0 -1
- package/dist/client/assets/left-mission-C86x6i9h.js +0 -1
- package/dist/client/assets/library-DdhYL_9v.js +0 -1
- package/dist/client/assets/message-markup-6Tgo4qFJ.js +0 -15
- package/dist/client/assets/mission-control-model-C30vU1Fe.js +0 -1
- package/dist/client/assets/profile-BegEUmB7.js +0 -1
- package/dist/client/assets/projects-inbox-CKPLZN8s.css +0 -1
- package/dist/client/assets/resolve-panes-pfZTezKo.js +0 -1
- package/dist/client/assets/resolve-sidebar-context-D5ksvrb_.js +0 -1
- package/dist/client/assets/right-BDaCJ0CF.js +0 -1
- package/dist/client/assets/right-BP6lXRFS.js +0 -1
- package/dist/client/assets/right-Cb1VCrdj.js +0 -1
- package/dist/client/assets/right-CeFaxfBo.js +0 -1
- package/dist/client/assets/right-Ck2SrYCj.js +0 -1
- package/dist/client/assets/right-D-uv5YfF.js +0 -1
- package/dist/client/assets/right-DJMSICky.js +0 -1
- package/dist/client/assets/right-Dnljs8ah.js +0 -1
- package/dist/client/assets/right-SdCSF8PP.js +0 -1
- package/dist/client/assets/router-C-MF5-mb.js +0 -1
- package/dist/client/assets/runtime-picker-C_AVYF63.js +0 -1
- package/dist/client/assets/scout-voice-CqAyfblr.js +0 -1
- package/dist/client/assets/secondaryNavConfig-DzNHk6IH.js +0 -1
- package/dist/client/assets/system-surfaces-redesign-DKFg4GB5.css +0 -1
- package/dist/client/assets/useContentSecondaryNav-DrL_nkCZ.js +0 -1
- package/dist/client/assets/usePersistentState-Y8XwSTg-.js +0 -1
- package/dist/drizzle/meta/0000_snapshot.json +0 -4575
- package/dist/drizzle/meta/0001_snapshot.json +0 -4624
- package/dist/drizzle/meta/0002_snapshot.json +0 -4631
- package/dist/drizzle/meta/0003_snapshot.json +0 -4952
- package/dist/drizzle/meta/0004_snapshot.json +0 -5235
- package/dist/drizzle/meta/0005_snapshot.json +0 -5599
- package/dist/drizzle/meta/0006_snapshot.json +0 -5606
- package/dist/drizzle/meta/0007_snapshot.json +0 -5767
- package/dist/drizzle/meta/0008_snapshot.json +0 -5774
- package/dist/drizzle/meta/0009_snapshot.json +0 -6262
- package/dist/drizzle/meta/0010_snapshot.json +0 -6286
- package/dist/drizzle/meta/0011_snapshot.json +0 -6337
- package/dist/drizzle/meta/0012_snapshot.json +0 -6458
- package/dist/drizzle/meta/0013_snapshot.json +0 -6465
- package/dist/drizzle/meta/0014_snapshot.json +0 -6503
- package/dist/drizzle/meta/0015_snapshot.json +0 -6596
- package/dist/drizzle/meta/0016_snapshot.json +0 -6611
- package/dist/drizzle/meta/0017_snapshot.json +0 -6785
- package/dist/drizzle/meta/0018_snapshot.json +0 -6804
- package/dist/drizzle/meta/0019_snapshot.json +0 -6804
package/dist/main.mjs
CHANGED
|
@@ -1619,6 +1619,31 @@ var init_orchestration_provider_map = __esm(() => {
|
|
|
1619
1619
|
};
|
|
1620
1620
|
});
|
|
1621
1621
|
|
|
1622
|
+
// ../protocol/src/message-reactions.ts
|
|
1623
|
+
var REACTION_EMOJI_QUICK, REACTION_EMOJI_MORE, REACTION_EMOJI_ALLOWLIST, REACTION_EMOJI_ALLOWLIST_SET;
|
|
1624
|
+
var init_message_reactions = __esm(() => {
|
|
1625
|
+
REACTION_EMOJI_QUICK = ["\uD83D\uDC4D", "\u2764\uFE0F", "\uD83D\uDE02", "\uD83D\uDC40", "\uD83C\uDF89"];
|
|
1626
|
+
REACTION_EMOJI_MORE = [
|
|
1627
|
+
"\uD83D\uDD25",
|
|
1628
|
+
"\uD83D\uDE4F",
|
|
1629
|
+
"\uD83D\uDC4F",
|
|
1630
|
+
"\uD83D\uDE22",
|
|
1631
|
+
"\uD83D\uDE2E",
|
|
1632
|
+
"\uD83D\uDE80",
|
|
1633
|
+
"\u2705",
|
|
1634
|
+
"\uD83D\uDCAF",
|
|
1635
|
+
"\uD83E\uDD14",
|
|
1636
|
+
"\uD83D\uDCA1",
|
|
1637
|
+
"\uD83D\uDE4C",
|
|
1638
|
+
"\u2728"
|
|
1639
|
+
];
|
|
1640
|
+
REACTION_EMOJI_ALLOWLIST = [
|
|
1641
|
+
...REACTION_EMOJI_QUICK,
|
|
1642
|
+
...REACTION_EMOJI_MORE
|
|
1643
|
+
];
|
|
1644
|
+
REACTION_EMOJI_ALLOWLIST_SET = new Set(REACTION_EMOJI_ALLOWLIST);
|
|
1645
|
+
});
|
|
1646
|
+
|
|
1622
1647
|
// ../protocol/src/permission-policy.ts
|
|
1623
1648
|
function normalizeScoutPermissionProfile(value) {
|
|
1624
1649
|
const normalized = value?.trim().replaceAll("-", "_");
|
|
@@ -2663,6 +2688,9 @@ var init_terminal_sessions = __esm(() => {
|
|
|
2663
2688
|
init_terminal_surface_id();
|
|
2664
2689
|
});
|
|
2665
2690
|
|
|
2691
|
+
// ../protocol/src/terminal-session-resolve.ts
|
|
2692
|
+
var init_terminal_session_resolve = () => {};
|
|
2693
|
+
|
|
2666
2694
|
// ../protocol/src/terminal-workspaces.ts
|
|
2667
2695
|
function normalizeTerminalWorkspaceColumnCount(value) {
|
|
2668
2696
|
return value === "dynamic" ? "dynamic" : normalizeTerminalWorkspaceColumns(value);
|
|
@@ -2811,6 +2839,8 @@ var init_broker_routes = __esm(() => {
|
|
|
2811
2839
|
machines: "/v1/machines",
|
|
2812
2840
|
machinesScan: "/v1/machines/scan",
|
|
2813
2841
|
messages: "/v1/messages",
|
|
2842
|
+
messageReactions: "/v1/message-reactions",
|
|
2843
|
+
messageReactionsRemove: "/v1/message-reactions/remove",
|
|
2814
2844
|
brokerMessages: "/v1/broker/messages",
|
|
2815
2845
|
eventsStream: "/v1/events/stream",
|
|
2816
2846
|
commands: "/v1/commands",
|
|
@@ -2874,6 +2904,7 @@ var init_src = __esm(() => {
|
|
|
2874
2904
|
init_assigned_roles();
|
|
2875
2905
|
init_orchestrator_prompt();
|
|
2876
2906
|
init_orchestration_provider_map();
|
|
2907
|
+
init_message_reactions();
|
|
2877
2908
|
init_agent_runs();
|
|
2878
2909
|
init_budget();
|
|
2879
2910
|
init_host_integrations();
|
|
@@ -2892,6 +2923,7 @@ var init_src = __esm(() => {
|
|
|
2892
2923
|
init_cursor_transport();
|
|
2893
2924
|
init_terminal_surface_id();
|
|
2894
2925
|
init_terminal_sessions();
|
|
2926
|
+
init_terminal_session_resolve();
|
|
2895
2927
|
init_terminal_workspaces();
|
|
2896
2928
|
init_herdr_workspace_digest();
|
|
2897
2929
|
init_broker_routes();
|
|
@@ -11600,6 +11632,101 @@ var init_broker_api = __esm(() => {
|
|
|
11600
11632
|
// ../runtime/src/schema-version.ts
|
|
11601
11633
|
var CONTROL_PLANE_SCHEMA_VERSION = 18;
|
|
11602
11634
|
|
|
11635
|
+
// ../runtime/src/sqlite-observation.ts
|
|
11636
|
+
import { createHash as createHash3 } from "crypto";
|
|
11637
|
+
function observeSqliteDatabase(database, options) {
|
|
11638
|
+
const configured = options.thresholdMs ?? Number(process.env.OPENSCOUT_SLOW_DB_MS ?? 100);
|
|
11639
|
+
const threshold = Number.isFinite(configured) && configured >= 0 ? configured : 100;
|
|
11640
|
+
if (threshold === 0)
|
|
11641
|
+
return database;
|
|
11642
|
+
const now = options.now ?? (() => performance.now());
|
|
11643
|
+
const emit = options.emit ?? ((event) => console.warn("[scout-db]", JSON.stringify(event)));
|
|
11644
|
+
const statements = new WeakMap;
|
|
11645
|
+
let windowStart = -Infinity;
|
|
11646
|
+
let emitted = 0;
|
|
11647
|
+
let suppressed = 0;
|
|
11648
|
+
function timed(operation, sql, call) {
|
|
11649
|
+
const start = now();
|
|
11650
|
+
let outcome = "error";
|
|
11651
|
+
try {
|
|
11652
|
+
const result = call();
|
|
11653
|
+
outcome = "ok";
|
|
11654
|
+
return result;
|
|
11655
|
+
} finally {
|
|
11656
|
+
try {
|
|
11657
|
+
const end = now();
|
|
11658
|
+
const duration = end - start;
|
|
11659
|
+
if (duration >= threshold) {
|
|
11660
|
+
if (end - windowStart >= 60000) {
|
|
11661
|
+
windowStart = end;
|
|
11662
|
+
emitted = 0;
|
|
11663
|
+
}
|
|
11664
|
+
if (emitted >= 10) {
|
|
11665
|
+
suppressed += 1;
|
|
11666
|
+
} else {
|
|
11667
|
+
emitted += 1;
|
|
11668
|
+
const caller = (new Error().stack ?? "").split(`
|
|
11669
|
+
`).filter((line) => !/sqlite-observation\.(?:ts|js):/.test(line)).map((line) => line.match(/(?:packages|apps)\/[\w./-]+:\d+:\d+/)?.[0]).filter((line) => Boolean(line)).slice(0, 4);
|
|
11670
|
+
emit({
|
|
11671
|
+
event: "slow_sqlite",
|
|
11672
|
+
database: options.database,
|
|
11673
|
+
pid: process.pid,
|
|
11674
|
+
operation,
|
|
11675
|
+
queryId: createHash3("sha256").update(sql).digest("hex").slice(0, 16),
|
|
11676
|
+
durationMs: Math.round(duration * 100) / 100,
|
|
11677
|
+
outcome,
|
|
11678
|
+
suppressed,
|
|
11679
|
+
caller
|
|
11680
|
+
});
|
|
11681
|
+
suppressed = 0;
|
|
11682
|
+
}
|
|
11683
|
+
}
|
|
11684
|
+
} catch {}
|
|
11685
|
+
}
|
|
11686
|
+
}
|
|
11687
|
+
function statementProxy(statement, sql) {
|
|
11688
|
+
const existing = statements.get(statement);
|
|
11689
|
+
if (existing)
|
|
11690
|
+
return existing;
|
|
11691
|
+
const proxy = bindProxy(statement, (key, method, args) => {
|
|
11692
|
+
if (["all", "get", "run", "values"].includes(key)) {
|
|
11693
|
+
return timed(key, sql, () => Reflect.apply(method, statement, args));
|
|
11694
|
+
}
|
|
11695
|
+
return Reflect.apply(method, statement, args);
|
|
11696
|
+
});
|
|
11697
|
+
statements.set(statement, proxy);
|
|
11698
|
+
return proxy;
|
|
11699
|
+
}
|
|
11700
|
+
return bindProxy(database, (key, method, args) => {
|
|
11701
|
+
if (["query", "prepare"].includes(key) && typeof args[0] === "string") {
|
|
11702
|
+
const sql = args[0];
|
|
11703
|
+
const statement = timed(`${key}.prepare`, sql, () => Reflect.apply(method, database, args));
|
|
11704
|
+
return statementProxy(statement, sql);
|
|
11705
|
+
}
|
|
11706
|
+
if (["exec", "run"].includes(key) && typeof args[0] === "string") {
|
|
11707
|
+
return timed(key, args[0], () => Reflect.apply(method, database, args));
|
|
11708
|
+
}
|
|
11709
|
+
return Reflect.apply(method, database, args);
|
|
11710
|
+
});
|
|
11711
|
+
}
|
|
11712
|
+
function bindProxy(target, invoke) {
|
|
11713
|
+
const methods = new Map;
|
|
11714
|
+
return new Proxy(target, {
|
|
11715
|
+
get(object, key) {
|
|
11716
|
+
const value = Reflect.get(object, key, object);
|
|
11717
|
+
if (typeof value !== "function" || key === "constructor")
|
|
11718
|
+
return value;
|
|
11719
|
+
const cached = methods.get(key);
|
|
11720
|
+
if (cached?.original === value)
|
|
11721
|
+
return cached.wrapped;
|
|
11722
|
+
const wrapped = (...args) => invoke(String(key), value, args);
|
|
11723
|
+
methods.set(key, { original: value, wrapped });
|
|
11724
|
+
return wrapped;
|
|
11725
|
+
}
|
|
11726
|
+
});
|
|
11727
|
+
}
|
|
11728
|
+
var init_sqlite_observation = () => {};
|
|
11729
|
+
|
|
11603
11730
|
// ../runtime/src/runtime-adapters.ts
|
|
11604
11731
|
function detectRuntimeHost(globalScope = globalThis) {
|
|
11605
11732
|
return typeof globalScope.Bun === "undefined" ? "node" : "bun";
|
|
@@ -11665,13 +11792,13 @@ function openRuntimeSqliteDatabase(path, options) {
|
|
|
11665
11792
|
const adapter = controlPlaneSqliteAdapterKind();
|
|
11666
11793
|
if (adapter === "bun-sqlite") {
|
|
11667
11794
|
const { Database } = require2("bun:sqlite");
|
|
11668
|
-
return new Database(path, options);
|
|
11795
|
+
return observeSqliteDatabase(new Database(path, options), { database: "runtime" });
|
|
11669
11796
|
}
|
|
11670
11797
|
const { DatabaseSync } = require2("node:sqlite");
|
|
11671
|
-
return new NodeSqliteDatabaseAdapter(new DatabaseSync(path, {
|
|
11798
|
+
return observeSqliteDatabase(new NodeSqliteDatabaseAdapter(new DatabaseSync(path, {
|
|
11672
11799
|
open: true,
|
|
11673
11800
|
readOnly: options?.readonly === true
|
|
11674
|
-
}));
|
|
11801
|
+
})), { database: "runtime" });
|
|
11675
11802
|
}
|
|
11676
11803
|
function prepareNodeSqliteSql(sql) {
|
|
11677
11804
|
const numberedParamIndexes = [];
|
|
@@ -11764,6 +11891,8 @@ class NodeSqliteDatabaseAdapter {
|
|
|
11764
11891
|
}
|
|
11765
11892
|
var require2;
|
|
11766
11893
|
var init_sqlite_adapter = __esm(() => {
|
|
11894
|
+
init_sqlite_observation();
|
|
11895
|
+
init_sqlite_observation();
|
|
11767
11896
|
require2 = createRequire(import.meta.url);
|
|
11768
11897
|
});
|
|
11769
11898
|
|
|
@@ -19592,6 +19721,7 @@ class CodexAppServerTransport {
|
|
|
19592
19721
|
});
|
|
19593
19722
|
}
|
|
19594
19723
|
async ensureStarted() {
|
|
19724
|
+
this.options.signal?.throwIfAborted();
|
|
19595
19725
|
if (this.isAlive() && this.threadId) {
|
|
19596
19726
|
return;
|
|
19597
19727
|
}
|
|
@@ -19623,6 +19753,7 @@ class CodexAppServerTransport {
|
|
|
19623
19753
|
});
|
|
19624
19754
|
throw failure;
|
|
19625
19755
|
}
|
|
19756
|
+
this.options.signal?.throwIfAborted();
|
|
19626
19757
|
const codexExecutable = resolveCodexExecutable();
|
|
19627
19758
|
const launchArgs = normalizeCodexAppServerLaunchArgs(this.options.launchArgs);
|
|
19628
19759
|
const env = this.options.processEnv ?? mergeEnvironmentOverrides(process.env, this.options.env);
|
|
@@ -20006,13 +20137,17 @@ class CodexAppServerClient {
|
|
|
20006
20137
|
return this.transport.ensureOnline();
|
|
20007
20138
|
}
|
|
20008
20139
|
async invoke(prompt, timeoutMs) {
|
|
20140
|
+
const onDelta = this.options.onDelta;
|
|
20141
|
+
const signal = this.options.signal;
|
|
20009
20142
|
return this.enqueue(async () => {
|
|
20143
|
+
signal?.throwIfAborted();
|
|
20010
20144
|
await this.transport.ensureOnline();
|
|
20145
|
+
signal?.throwIfAborted();
|
|
20011
20146
|
if (!this.transport.currentThreadId) {
|
|
20012
20147
|
throw new Error(`Codex app-server session for ${this.options.agentName} has no active thread.`);
|
|
20013
20148
|
}
|
|
20014
20149
|
const outputPromise = new Promise(async (resolve13, reject) => {
|
|
20015
|
-
const turn = this.createActiveTurn(resolve13, reject);
|
|
20150
|
+
const turn = this.createActiveTurn(resolve13, reject, onDelta);
|
|
20016
20151
|
try {
|
|
20017
20152
|
const response = await this.transport.startTurn(prompt);
|
|
20018
20153
|
turn.turnId = response.turn.id;
|
|
@@ -20029,8 +20164,12 @@ class CodexAppServerClient {
|
|
|
20029
20164
|
});
|
|
20030
20165
|
}
|
|
20031
20166
|
async start(prompt) {
|
|
20167
|
+
const onDelta = this.options.onDelta;
|
|
20168
|
+
const signal = this.options.signal;
|
|
20032
20169
|
return this.enqueue(async () => {
|
|
20170
|
+
signal?.throwIfAborted();
|
|
20033
20171
|
await this.transport.ensureOnline();
|
|
20172
|
+
signal?.throwIfAborted();
|
|
20034
20173
|
if (!this.transport.currentThreadId) {
|
|
20035
20174
|
throw new Error(`Codex app-server session for ${this.options.agentName} has no active thread.`);
|
|
20036
20175
|
}
|
|
@@ -20039,7 +20178,7 @@ class CodexAppServerClient {
|
|
|
20039
20178
|
}
|
|
20040
20179
|
let turn;
|
|
20041
20180
|
const completion = new Promise((resolve13, reject) => {
|
|
20042
|
-
turn = this.createActiveTurn(resolve13, reject);
|
|
20181
|
+
turn = this.createActiveTurn(resolve13, reject, onDelta);
|
|
20043
20182
|
});
|
|
20044
20183
|
completion.catch(() => {
|
|
20045
20184
|
return;
|
|
@@ -20136,11 +20275,12 @@ class CodexAppServerClient {
|
|
|
20136
20275
|
});
|
|
20137
20276
|
return next;
|
|
20138
20277
|
}
|
|
20139
|
-
createActiveTurn(resolve13, reject) {
|
|
20278
|
+
createActiveTurn(resolve13, reject, onDelta) {
|
|
20140
20279
|
if (this.activeTurn) {
|
|
20141
20280
|
throw new Error(`Codex app-server session for ${this.options.agentName} already has an active turn.`);
|
|
20142
20281
|
}
|
|
20143
20282
|
const turn = {
|
|
20283
|
+
onDelta,
|
|
20144
20284
|
turnId: "",
|
|
20145
20285
|
startedAt: Date.now(),
|
|
20146
20286
|
messageOrder: [],
|
|
@@ -20217,6 +20357,8 @@ class CodexAppServerClient {
|
|
|
20217
20357
|
this.activeTurn.messageByItemId.set(itemId, "");
|
|
20218
20358
|
}
|
|
20219
20359
|
this.activeTurn.messageByItemId.set(itemId, (this.activeTurn.messageByItemId.get(itemId) ?? "") + delta);
|
|
20360
|
+
if (delta)
|
|
20361
|
+
this.activeTurn.onDelta?.(delta);
|
|
20220
20362
|
return;
|
|
20221
20363
|
}
|
|
20222
20364
|
if (method === "item/completed") {
|
|
@@ -30949,7 +31091,7 @@ var init_sqlite_core = __esm(() => {
|
|
|
30949
31091
|
});
|
|
30950
31092
|
|
|
30951
31093
|
// ../runtime/src/drizzle-schema.ts
|
|
30952
|
-
var epochMsNow, nodesTable, machinesTable, trustedPeersTable, peerNoncesTable, actorsTable, agentsTable, agentEndpointsTable, runtimeSessionsTable, runtimeSessionAliasesTable, routeAliasBindingsTable, routeAliasRevisionsTable, conversationsTable, conversationMembersTable, messagesTable, messageMentionsTable, messageAttachmentsTable, conversationReadCursorsTable, brokerJournalProjectionCheckpointsTable, conversationProjectionMetaTable, conversationProjectionItemsTable, conversationProjectionMessageFactsTable, conversationProjectionMessageStatsTable, conversationProjectionSourcesTable, conversationProjectionEventsTable, invocationsTable, flightsTable, bindingsTable, deliveriesTable, deliveryAttemptsTable, durableActionsTable, durableAttemptsTable, durableCheckpointsTable, durableSignalsTable, collaborationRecordsTable, collaborationEventsTable, contextBlocksTable, contextPacksTable, eventsTable, threadEventsTable, threadCursorsTable, scoutDispatchesTable, activityItemsTable, budgetUsageEventsTable, budgetQuotaWindowSnapshotsTable, mobilePushRegistrationsTable, briefingsTable, roleAssignmentsTable, missionLogEntriesTable, controlPlaneDrizzleSchema;
|
|
31094
|
+
var epochMsNow, nodesTable, machinesTable, trustedPeersTable, peerNoncesTable, actorsTable, agentsTable, agentEndpointsTable, runtimeSessionsTable, runtimeSessionAliasesTable, routeAliasBindingsTable, routeAliasRevisionsTable, conversationsTable, conversationMembersTable, messagesTable, messageMentionsTable, messageReactionsTable, messageAttachmentsTable, conversationReadCursorsTable, brokerJournalProjectionCheckpointsTable, conversationProjectionMetaTable, conversationProjectionItemsTable, conversationProjectionMessageFactsTable, conversationProjectionMessageStatsTable, conversationProjectionSourcesTable, conversationProjectionEventsTable, invocationsTable, flightsTable, bindingsTable, deliveriesTable, deliveryAttemptsTable, durableActionsTable, durableAttemptsTable, durableCheckpointsTable, durableSignalsTable, collaborationRecordsTable, collaborationEventsTable, contextBlocksTable, contextPacksTable, eventsTable, threadEventsTable, threadCursorsTable, scoutDispatchesTable, activityItemsTable, budgetUsageEventsTable, budgetQuotaWindowSnapshotsTable, mobilePushRegistrationsTable, briefingsTable, roleAssignmentsTable, missionLogEntriesTable, controlPlaneDrizzleSchema;
|
|
30953
31095
|
var init_drizzle_schema = __esm(() => {
|
|
30954
31096
|
init_drizzle_orm();
|
|
30955
31097
|
init_sqlite_core();
|
|
@@ -31230,6 +31372,15 @@ var init_drizzle_schema = __esm(() => {
|
|
|
31230
31372
|
}, (table3) => [
|
|
31231
31373
|
primaryKey({ columns: [table3.messageId, table3.actorId] })
|
|
31232
31374
|
]);
|
|
31375
|
+
messageReactionsTable = sqliteTable("message_reactions", {
|
|
31376
|
+
messageId: text("message_id").notNull().references(() => messagesTable.id, { onDelete: "cascade" }),
|
|
31377
|
+
actorId: text("actor_id").notNull().references(() => actorsTable.id, { onDelete: "restrict" }),
|
|
31378
|
+
emoji: text("emoji").notNull(),
|
|
31379
|
+
createdAt: integer("created_at").notNull()
|
|
31380
|
+
}, (table3) => [
|
|
31381
|
+
primaryKey({ columns: [table3.messageId, table3.actorId, table3.emoji] }),
|
|
31382
|
+
index("idx_message_reactions_message").on(table3.messageId)
|
|
31383
|
+
]);
|
|
31233
31384
|
messageAttachmentsTable = sqliteTable("message_attachments", {
|
|
31234
31385
|
id: text("id").primaryKey(),
|
|
31235
31386
|
messageId: text("message_id").notNull().references(() => messagesTable.id, { onDelete: "cascade" }),
|
|
@@ -31808,6 +31959,7 @@ var init_drizzle_schema = __esm(() => {
|
|
|
31808
31959
|
conversationMembers: conversationMembersTable,
|
|
31809
31960
|
messages: messagesTable,
|
|
31810
31961
|
messageMentions: messageMentionsTable,
|
|
31962
|
+
messageReactions: messageReactionsTable,
|
|
31811
31963
|
messageAttachments: messageAttachmentsTable,
|
|
31812
31964
|
conversationReadCursors: conversationReadCursorsTable,
|
|
31813
31965
|
brokerJournalProjectionCheckpoints: brokerJournalProjectionCheckpointsTable,
|
|
@@ -32197,6 +32349,16 @@ CREATE TABLE IF NOT EXISTS message_mentions (
|
|
|
32197
32349
|
PRIMARY KEY (message_id, actor_id)
|
|
32198
32350
|
);
|
|
32199
32351
|
|
|
32352
|
+
CREATE TABLE IF NOT EXISTS message_reactions (
|
|
32353
|
+
message_id TEXT NOT NULL REFERENCES messages(id) ON DELETE CASCADE,
|
|
32354
|
+
actor_id TEXT NOT NULL REFERENCES actors(id) ON DELETE RESTRICT,
|
|
32355
|
+
emoji TEXT NOT NULL,
|
|
32356
|
+
created_at INTEGER NOT NULL,
|
|
32357
|
+
PRIMARY KEY (message_id, actor_id, emoji)
|
|
32358
|
+
);
|
|
32359
|
+
CREATE INDEX IF NOT EXISTS idx_message_reactions_message
|
|
32360
|
+
ON message_reactions (message_id);
|
|
32361
|
+
|
|
32200
32362
|
CREATE TABLE IF NOT EXISTS message_attachments (
|
|
32201
32363
|
id TEXT PRIMARY KEY,
|
|
32202
32364
|
message_id TEXT NOT NULL REFERENCES messages(id) ON DELETE CASCADE,
|
|
@@ -33599,7 +33761,7 @@ var init_broker = __esm(() => {
|
|
|
33599
33761
|
});
|
|
33600
33762
|
|
|
33601
33763
|
// ../runtime/src/conversation-thread-artifact.ts
|
|
33602
|
-
import { createHash as
|
|
33764
|
+
import { createHash as createHash4, randomBytes as randomBytes2 } from "crypto";
|
|
33603
33765
|
import {
|
|
33604
33766
|
existsSync as existsSync25,
|
|
33605
33767
|
mkdirSync as mkdirSync7,
|
|
@@ -33719,7 +33881,7 @@ function artifactBytes(artifact) {
|
|
|
33719
33881
|
return Buffer.byteLength(encodedArtifact(artifact), "utf8");
|
|
33720
33882
|
}
|
|
33721
33883
|
function contentCursorForArtifact(artifact) {
|
|
33722
|
-
return
|
|
33884
|
+
return createHash4("sha256").update(JSON.stringify({
|
|
33723
33885
|
feedId: artifact.feedId,
|
|
33724
33886
|
entityKind: artifact.entityKind,
|
|
33725
33887
|
conversationId: artifact.conversationId,
|
|
@@ -33729,7 +33891,7 @@ function contentCursorForArtifact(artifact) {
|
|
|
33729
33891
|
})).digest("hex");
|
|
33730
33892
|
}
|
|
33731
33893
|
function nativeReadThreadArtifactPath(outputDirectory, feedId) {
|
|
33732
|
-
const digest =
|
|
33894
|
+
const digest = createHash4("sha256").update(feedId).digest("hex");
|
|
33733
33895
|
return join28(outputDirectory, `${ARTIFACT_PREFIX}${digest}${ARTIFACT_SUFFIX}`);
|
|
33734
33896
|
}
|
|
33735
33897
|
function buildNativeReadThreadArtifact(snapshot) {
|
|
@@ -34752,9 +34914,9 @@ var init_budget_observations = __esm(() => {
|
|
|
34752
34914
|
});
|
|
34753
34915
|
|
|
34754
34916
|
// ../runtime/src/budget-observations.ts
|
|
34755
|
-
import { createHash as
|
|
34917
|
+
import { createHash as createHash5 } from "crypto";
|
|
34756
34918
|
function stableHash(value) {
|
|
34757
|
-
return
|
|
34919
|
+
return createHash5("sha256").update(JSON.stringify(value)).digest("hex").slice(0, 24);
|
|
34758
34920
|
}
|
|
34759
34921
|
function metadataRecord4(value) {
|
|
34760
34922
|
return value && typeof value === "object" && !Array.isArray(value) ? value : undefined;
|
|
@@ -34880,7 +35042,7 @@ var init_budget_observations2 = __esm(() => {
|
|
|
34880
35042
|
});
|
|
34881
35043
|
|
|
34882
35044
|
// ../runtime/src/runtime-session-handle.ts
|
|
34883
|
-
import { createHash as
|
|
35045
|
+
import { createHash as createHash6 } from "crypto";
|
|
34884
35046
|
function metadataStringValue(metadata, key) {
|
|
34885
35047
|
const value = metadata?.[key];
|
|
34886
35048
|
return typeof value === "string" && value.trim() ? value.trim() : null;
|
|
@@ -34903,7 +35065,7 @@ function runtimeSessionHandleForEndpoint(endpoint, primaryAlias = runtimeSession
|
|
|
34903
35065
|
endpoint.harness,
|
|
34904
35066
|
primaryAlias
|
|
34905
35067
|
].join("\x00");
|
|
34906
|
-
const token =
|
|
35068
|
+
const token = createHash6("sha256").update(resolutionKey).digest("hex").slice(0, 20);
|
|
34907
35069
|
return `${SCOUT_SESSION_HANDLE_PREFIX}${token}`;
|
|
34908
35070
|
}
|
|
34909
35071
|
var init_runtime_session_handle = __esm(() => {
|
|
@@ -34911,7 +35073,7 @@ var init_runtime_session_handle = __esm(() => {
|
|
|
34911
35073
|
});
|
|
34912
35074
|
|
|
34913
35075
|
// ../runtime/src/sqlite-store.ts
|
|
34914
|
-
import { createHash as
|
|
35076
|
+
import { createHash as createHash7 } from "crypto";
|
|
34915
35077
|
import { mkdirSync as mkdirSync8 } from "fs";
|
|
34916
35078
|
import { dirname as dirname18 } from "path";
|
|
34917
35079
|
function parseJson(value, fallback) {
|
|
@@ -34943,7 +35105,7 @@ function normalizeTimestampMs(value) {
|
|
|
34943
35105
|
return epochMs(value);
|
|
34944
35106
|
}
|
|
34945
35107
|
function stableHash2(value, length = 20) {
|
|
34946
|
-
return
|
|
35108
|
+
return createHash7("sha256").update(value).digest("hex").slice(0, length);
|
|
34947
35109
|
}
|
|
34948
35110
|
function metadataStringValue2(metadata, key) {
|
|
34949
35111
|
const value = metadata?.[key];
|
|
@@ -36535,6 +36697,62 @@ class SQLiteControlPlaneStore {
|
|
|
36535
36697
|
})(message, activityItem, threadMessageEvent);
|
|
36536
36698
|
return threadEvents;
|
|
36537
36699
|
}
|
|
36700
|
+
upsertMessageReaction(input) {
|
|
36701
|
+
const message = this.db.query(`SELECT id, conversation_id FROM messages WHERE id = ?1`).get(input.messageId);
|
|
36702
|
+
if (!message) {
|
|
36703
|
+
throw Object.assign(new Error("message not found"), { status: 404, reason: "message_not_found" });
|
|
36704
|
+
}
|
|
36705
|
+
if (message.conversation_id !== input.channelId) {
|
|
36706
|
+
const conversation = this.db.query(`SELECT kind, parent_conversation_id FROM conversations WHERE id = ?1`).get(message.conversation_id);
|
|
36707
|
+
if (conversation?.kind !== "thread" || conversation.parent_conversation_id !== input.channelId) {
|
|
36708
|
+
throw Object.assign(new Error("message is not in this channel"), {
|
|
36709
|
+
status: 404,
|
|
36710
|
+
reason: "wrong_channel"
|
|
36711
|
+
});
|
|
36712
|
+
}
|
|
36713
|
+
}
|
|
36714
|
+
const actor = this.db.query(`SELECT id FROM actors WHERE id = ?1`).get(input.actorId);
|
|
36715
|
+
if (!actor) {
|
|
36716
|
+
throw Object.assign(new Error("actor not found"), { status: 404, reason: "actor_not_found" });
|
|
36717
|
+
}
|
|
36718
|
+
const result = this.db.query(`INSERT OR IGNORE INTO message_reactions (message_id, actor_id, emoji, created_at)
|
|
36719
|
+
VALUES (?1, ?2, ?3, ?4)`).run(input.messageId, input.actorId, input.emoji, input.createdAt);
|
|
36720
|
+
return { replayed: Number(result.changes) === 0 };
|
|
36721
|
+
}
|
|
36722
|
+
removeMessageReaction(input) {
|
|
36723
|
+
const message = this.db.query(`SELECT id, conversation_id FROM messages WHERE id = ?1`).get(input.messageId);
|
|
36724
|
+
if (!message) {
|
|
36725
|
+
throw Object.assign(new Error("message not found"), { status: 404, reason: "message_not_found" });
|
|
36726
|
+
}
|
|
36727
|
+
if (message.conversation_id !== input.channelId) {
|
|
36728
|
+
const conversation = this.db.query(`SELECT kind, parent_conversation_id FROM conversations WHERE id = ?1`).get(message.conversation_id);
|
|
36729
|
+
if (conversation?.kind !== "thread" || conversation.parent_conversation_id !== input.channelId) {
|
|
36730
|
+
throw Object.assign(new Error("message is not in this channel"), {
|
|
36731
|
+
status: 404,
|
|
36732
|
+
reason: "wrong_channel"
|
|
36733
|
+
});
|
|
36734
|
+
}
|
|
36735
|
+
}
|
|
36736
|
+
const result = this.db.query(`DELETE FROM message_reactions
|
|
36737
|
+
WHERE message_id = ?1 AND actor_id = ?2 AND emoji = ?3`).run(input.messageId, input.actorId, input.emoji);
|
|
36738
|
+
return { replayed: Number(result.changes) === 0 };
|
|
36739
|
+
}
|
|
36740
|
+
listMessageReactions(channelId) {
|
|
36741
|
+
const rows = queryAll(this.readDb, `SELECT r.message_id, r.actor_id, r.emoji, r.created_at
|
|
36742
|
+
FROM message_reactions r
|
|
36743
|
+
JOIN messages m ON m.id = r.message_id
|
|
36744
|
+
WHERE m.conversation_id = ?1
|
|
36745
|
+
OR m.conversation_id IN (
|
|
36746
|
+
SELECT id FROM conversations WHERE parent_conversation_id = ?1
|
|
36747
|
+
)
|
|
36748
|
+
ORDER BY r.created_at ASC, r.emoji ASC`, channelId);
|
|
36749
|
+
return rows.map((row) => ({
|
|
36750
|
+
messageId: row.message_id,
|
|
36751
|
+
actorId: row.actor_id,
|
|
36752
|
+
emoji: row.emoji,
|
|
36753
|
+
createdAt: row.created_at
|
|
36754
|
+
}));
|
|
36755
|
+
}
|
|
36538
36756
|
upsertReadCursor(cursor) {
|
|
36539
36757
|
this.db.query(`INSERT INTO conversation_read_cursors (
|
|
36540
36758
|
conversation_id, actor_id, reader_node_id, last_read_message_id,
|
|
@@ -37667,7 +37885,7 @@ var init_sqlite_store = __esm(() => {
|
|
|
37667
37885
|
});
|
|
37668
37886
|
|
|
37669
37887
|
// ../runtime/src/mesh-peer-auth.ts
|
|
37670
|
-
import { createHash as
|
|
37888
|
+
import { createHash as createHash8, randomBytes as randomBytes3 } from "crypto";
|
|
37671
37889
|
function assertNoNewlines(component, name) {
|
|
37672
37890
|
if (component.includes(`
|
|
37673
37891
|
`) || component.includes("\r")) {
|
|
@@ -37693,7 +37911,7 @@ function peerRequestSigningPayload(input) {
|
|
|
37693
37911
|
`);
|
|
37694
37912
|
}
|
|
37695
37913
|
function sha256Hex(body) {
|
|
37696
|
-
return
|
|
37914
|
+
return createHash8("sha256").update(body).digest("hex");
|
|
37697
37915
|
}
|
|
37698
37916
|
function signPeerRequest(identity, input) {
|
|
37699
37917
|
const ts = input.ts ?? Date.now();
|
|
@@ -52749,14 +52967,14 @@ var init_x509_es = __esm(() => {
|
|
|
52749
52967
|
|
|
52750
52968
|
// ../runtime/src/node-tls-identity.ts
|
|
52751
52969
|
import {
|
|
52752
|
-
createHash as
|
|
52970
|
+
createHash as createHash9,
|
|
52753
52971
|
createPrivateKey as createPrivateKey2,
|
|
52754
52972
|
createPublicKey as createPublicKey2,
|
|
52755
52973
|
generateKeyPairSync as generateKeyPairSync2,
|
|
52756
52974
|
randomBytes as randomBytes4
|
|
52757
52975
|
} from "crypto";
|
|
52758
52976
|
function tlsSpkiFingerprintFromDer(spkiDer) {
|
|
52759
|
-
return
|
|
52977
|
+
return createHash9("sha256").update(spkiDer).digest("hex");
|
|
52760
52978
|
}
|
|
52761
52979
|
function tlsSpkiFingerprintFromCertificateDer(certificateDer) {
|
|
52762
52980
|
const certificate2 = new X509Certificate(asBufferSource(certificateDer));
|
|
@@ -54719,9 +54937,9 @@ var init_eff_short_wordlist = __esm(() => {
|
|
|
54719
54937
|
});
|
|
54720
54938
|
|
|
54721
54939
|
// ../runtime/src/mesh-sas.ts
|
|
54722
|
-
import { createHash as
|
|
54940
|
+
import { createHash as createHash10, createHmac } from "crypto";
|
|
54723
54941
|
function createEnrollmentCommitment(nonce, cardSignature) {
|
|
54724
|
-
return
|
|
54942
|
+
return createHash10("sha256").update(Buffer.concat([nonce, Buffer.from(cardSignature, "utf8")])).digest("base64");
|
|
54725
54943
|
}
|
|
54726
54944
|
function verifyEnrollmentCommitment(commitment, nonce, cardSignature) {
|
|
54727
54945
|
const expected = createEnrollmentCommitment(nonce, cardSignature);
|
|
@@ -56223,6 +56441,9 @@ function hasNonEmpty(value) {
|
|
|
56223
56441
|
function envEquals(env, key, expected) {
|
|
56224
56442
|
return env[key]?.trim().toLowerCase() === expected;
|
|
56225
56443
|
}
|
|
56444
|
+
function isHerdrManagedAgent(env, kind) {
|
|
56445
|
+
return isTruthyFlag(env.HERDR_ENV) && hasNonEmpty(env.HERDR_PANE_ID) && hasNonEmpty(env.HERDR_AGENT_NAME) && envEquals(env, "HERDR_AGENT", kind);
|
|
56446
|
+
}
|
|
56226
56447
|
function detectCodingAgentHost(env = process.env) {
|
|
56227
56448
|
for (const entry of HARNESS_SIGNALS) {
|
|
56228
56449
|
if (entry.matches(env)) {
|
|
@@ -56248,6 +56469,36 @@ var init_coding_agent_host = __esm(() => {
|
|
|
56248
56469
|
signal: "OPENSCOUT_MANAGED_AGENT",
|
|
56249
56470
|
matches: (env) => isTruthyFlag(env.OPENSCOUT_MANAGED_AGENT)
|
|
56250
56471
|
},
|
|
56472
|
+
{
|
|
56473
|
+
harness: "cursor",
|
|
56474
|
+
signal: "HERDR_AGENT_NAME",
|
|
56475
|
+
matches: (env) => isHerdrManagedAgent(env, "cursor")
|
|
56476
|
+
},
|
|
56477
|
+
{
|
|
56478
|
+
harness: "claude",
|
|
56479
|
+
signal: "HERDR_AGENT_NAME",
|
|
56480
|
+
matches: (env) => isHerdrManagedAgent(env, "claude")
|
|
56481
|
+
},
|
|
56482
|
+
{
|
|
56483
|
+
harness: "codex",
|
|
56484
|
+
signal: "HERDR_AGENT_NAME",
|
|
56485
|
+
matches: (env) => isHerdrManagedAgent(env, "codex")
|
|
56486
|
+
},
|
|
56487
|
+
{
|
|
56488
|
+
harness: "devin",
|
|
56489
|
+
signal: "HERDR_AGENT_NAME",
|
|
56490
|
+
matches: (env) => isHerdrManagedAgent(env, "devin")
|
|
56491
|
+
},
|
|
56492
|
+
{
|
|
56493
|
+
harness: "kimi",
|
|
56494
|
+
signal: "HERDR_AGENT_NAME",
|
|
56495
|
+
matches: (env) => isHerdrManagedAgent(env, "kimi")
|
|
56496
|
+
},
|
|
56497
|
+
{
|
|
56498
|
+
harness: "pi",
|
|
56499
|
+
signal: "HERDR_AGENT_NAME",
|
|
56500
|
+
matches: (env) => isHerdrManagedAgent(env, "pi")
|
|
56501
|
+
},
|
|
56251
56502
|
{
|
|
56252
56503
|
harness: "cursor",
|
|
56253
56504
|
signal: "CURSOR_AGENT",
|
|
@@ -57584,7 +57835,7 @@ async function broadcastPushRelayAlert(alert) {
|
|
|
57584
57835
|
retryAfterSeconds: retryAfter ? Number.parseInt(retryAfter, 10) || null : null,
|
|
57585
57836
|
rateLimitWindow: window2,
|
|
57586
57837
|
failures: [{
|
|
57587
|
-
deviceId:
|
|
57838
|
+
deviceId: PUSH_RELAY_TRANSPORT_DEVICE_ID,
|
|
57588
57839
|
tokenSuffix: "relay",
|
|
57589
57840
|
status: 429,
|
|
57590
57841
|
reason: detail || `HTTP 429 (window=${window2 ?? "unknown"})`
|
|
@@ -57600,7 +57851,7 @@ async function broadcastPushRelayAlert(alert) {
|
|
|
57600
57851
|
failedCount: 1,
|
|
57601
57852
|
configMissing: false,
|
|
57602
57853
|
failures: [{
|
|
57603
|
-
deviceId:
|
|
57854
|
+
deviceId: PUSH_RELAY_TRANSPORT_DEVICE_ID,
|
|
57604
57855
|
tokenSuffix: "relay",
|
|
57605
57856
|
status: response.status,
|
|
57606
57857
|
reason: detail || `HTTP ${response.status}`
|
|
@@ -57900,15 +58151,30 @@ async function sendApnsAlertToRegistration(registration, alert) {
|
|
|
57900
58151
|
request.end(payload);
|
|
57901
58152
|
});
|
|
57902
58153
|
}
|
|
58154
|
+
function relayRejectedOurCredential(result) {
|
|
58155
|
+
return result.failures.some((failure) => failure.deviceId === PUSH_RELAY_TRANSPORT_DEVICE_ID && (failure.status === 401 || failure.status === 403));
|
|
58156
|
+
}
|
|
58157
|
+
function hasDirectApnsCredentials() {
|
|
58158
|
+
try {
|
|
58159
|
+
return loadApnsCredentials() !== null;
|
|
58160
|
+
} catch {
|
|
58161
|
+
return false;
|
|
58162
|
+
}
|
|
58163
|
+
}
|
|
57903
58164
|
async function broadcastApnsAlertToActiveMobileDevices(alert) {
|
|
58165
|
+
let relayFailures = [];
|
|
57904
58166
|
if (resolvePushRelayConfig()) {
|
|
57905
|
-
|
|
58167
|
+
const relayResult = await broadcastPushRelayAlert(alert);
|
|
58168
|
+
if (!relayRejectedOurCredential(relayResult) || !hasDirectApnsCredentials()) {
|
|
58169
|
+
return relayResult;
|
|
58170
|
+
}
|
|
58171
|
+
relayFailures = relayResult.failures;
|
|
57906
58172
|
}
|
|
57907
58173
|
const registrations = listActiveMobilePushRegistrations();
|
|
57908
58174
|
let deliveredCount = 0;
|
|
57909
58175
|
let skippedCount = 0;
|
|
57910
58176
|
let configMissing = false;
|
|
57911
|
-
const failures = [];
|
|
58177
|
+
const failures = [...relayFailures];
|
|
57912
58178
|
for (const registration of registrations) {
|
|
57913
58179
|
try {
|
|
57914
58180
|
const outcome = await sendApnsAlertToRegistration(registration, alert);
|
|
@@ -57969,7 +58235,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS idx_mobile_push_registrations_push_token
|
|
|
57969
58235
|
ON mobile_push_registrations (push_token);
|
|
57970
58236
|
CREATE INDEX IF NOT EXISTS idx_mobile_push_registrations_device_updated_at
|
|
57971
58237
|
ON mobile_push_registrations (device_id, updated_at DESC);
|
|
57972
|
-
`, dbHandle = null, dbPath = null, cachedApnsJwt = null, OPAQUE_MOBILE_PUSH_PAYLOAD_KEYS;
|
|
58238
|
+
`, dbHandle = null, dbPath = null, cachedApnsJwt = null, PUSH_RELAY_TRANSPORT_DEVICE_ID = "push-relay", OPAQUE_MOBILE_PUSH_PAYLOAD_KEYS;
|
|
57973
58239
|
var init_mobile_push = __esm(() => {
|
|
57974
58240
|
init_support_paths();
|
|
57975
58241
|
OPAQUE_MOBILE_PUSH_PAYLOAD_KEYS = [
|
|
@@ -58652,11 +58918,11 @@ var init_paths2 = __esm(() => {
|
|
|
58652
58918
|
|
|
58653
58919
|
// ../runtime/src/knowledge/store.ts
|
|
58654
58920
|
import { existsSync as existsSync30, mkdirSync as mkdirSync11, statSync as statSync7 } from "fs";
|
|
58655
|
-
import { createHash as
|
|
58921
|
+
import { createHash as createHash11, randomUUID as randomUUID4 } from "crypto";
|
|
58656
58922
|
import { dirname as dirname22 } from "path";
|
|
58657
58923
|
import { Database as Database3 } from "bun:sqlite";
|
|
58658
58924
|
function ftsRowidForChunk(chunkId) {
|
|
58659
|
-
return
|
|
58925
|
+
return createHash11("sha256").update(chunkId).digest().readBigInt64BE(0);
|
|
58660
58926
|
}
|
|
58661
58927
|
function stringify3(value) {
|
|
58662
58928
|
return JSON.stringify(value ?? null);
|
|
@@ -58695,7 +58961,7 @@ function normalizeFtsQueryOr(value) {
|
|
|
58695
58961
|
return terms.map(quoteFtsTerm).join(" OR ");
|
|
58696
58962
|
}
|
|
58697
58963
|
function textHash(value) {
|
|
58698
|
-
return `sha256:${
|
|
58964
|
+
return `sha256:${createHash11("sha256").update(value).digest("hex")}`;
|
|
58699
58965
|
}
|
|
58700
58966
|
function deterministicKnowledgeChunkId(input) {
|
|
58701
58967
|
return textHash([
|
|
@@ -59450,7 +59716,7 @@ var init_store = __esm(() => {
|
|
|
59450
59716
|
});
|
|
59451
59717
|
|
|
59452
59718
|
// ../runtime/src/knowledge/session-indexer.ts
|
|
59453
|
-
import { createHash as
|
|
59719
|
+
import { createHash as createHash12 } from "crypto";
|
|
59454
59720
|
import {
|
|
59455
59721
|
createReadStream as createReadStream2,
|
|
59456
59722
|
existsSync as existsSync31,
|
|
@@ -59564,7 +59830,7 @@ function discoverRecentSessionFiles(cutoffMs, limit, harnessFilter) {
|
|
|
59564
59830
|
async function parseJsonl(file) {
|
|
59565
59831
|
const maybeYield = createYieldBudget();
|
|
59566
59832
|
const records = [];
|
|
59567
|
-
const hash =
|
|
59833
|
+
const hash = createHash12("sha256");
|
|
59568
59834
|
let carry = "";
|
|
59569
59835
|
let offset = 0;
|
|
59570
59836
|
let index2 = 0;
|
|
@@ -59895,10 +60161,10 @@ function trimOneLine(value, max) {
|
|
|
59895
60161
|
return flat.length <= max ? flat : `${flat.slice(0, Math.max(0, max - 3))}...`;
|
|
59896
60162
|
}
|
|
59897
60163
|
function hashText(value) {
|
|
59898
|
-
return `sha256:${
|
|
60164
|
+
return `sha256:${createHash12("sha256").update(value).digest("hex")}`;
|
|
59899
60165
|
}
|
|
59900
60166
|
function stableId(value, length = 16) {
|
|
59901
|
-
return
|
|
60167
|
+
return createHash12("sha256").update(value).digest("hex").slice(0, length);
|
|
59902
60168
|
}
|
|
59903
60169
|
function portablePath(filePath) {
|
|
59904
60170
|
const home = homedir24();
|
|
@@ -60664,6 +60930,16 @@ function resolveScoutAgentName(agentName) {
|
|
|
60664
60930
|
}
|
|
60665
60931
|
return resolveOperatorName();
|
|
60666
60932
|
}
|
|
60933
|
+
function resolveHerdrAgentName(env) {
|
|
60934
|
+
const herdrEnv = env.HERDR_ENV?.trim().toLowerCase();
|
|
60935
|
+
if (!herdrEnv || !TRUTHY_ENV_VALUES.has(herdrEnv)) {
|
|
60936
|
+
return null;
|
|
60937
|
+
}
|
|
60938
|
+
if (!env.HERDR_PANE_ID?.trim()) {
|
|
60939
|
+
return null;
|
|
60940
|
+
}
|
|
60941
|
+
return normalizeAgentSelectorSegment(env.HERDR_AGENT_NAME ?? "") || null;
|
|
60942
|
+
}
|
|
60667
60943
|
function resolveHumanAskSenderName(agentName, env = process.env) {
|
|
60668
60944
|
if (agentName?.trim()) {
|
|
60669
60945
|
return agentName.trim();
|
|
@@ -60673,7 +60949,7 @@ function resolveHumanAskSenderName(agentName, env = process.env) {
|
|
|
60673
60949
|
}
|
|
60674
60950
|
return "operator";
|
|
60675
60951
|
}
|
|
60676
|
-
function resolveConfiguredSenderIdForProjectRoot(overrides, projectRoot, preferredDefinitionIds = []) {
|
|
60952
|
+
function resolveConfiguredSenderIdForProjectRoot(overrides, projectRoot, preferredDefinitionIds = [], allowProjectFallback = true) {
|
|
60677
60953
|
let fallbackSenderId = null;
|
|
60678
60954
|
const normalizedPreferredDefinitionIds = preferredDefinitionIds.map((value) => normalizeAgentSelectorSegment(value)).filter(Boolean);
|
|
60679
60955
|
for (const preferredDefinitionId of normalizedPreferredDefinitionIds) {
|
|
@@ -60689,6 +60965,9 @@ function resolveConfiguredSenderIdForProjectRoot(overrides, projectRoot, preferr
|
|
|
60689
60965
|
}
|
|
60690
60966
|
}
|
|
60691
60967
|
}
|
|
60968
|
+
if (!allowProjectFallback) {
|
|
60969
|
+
return null;
|
|
60970
|
+
}
|
|
60692
60971
|
for (const [agentId, override] of Object.entries(overrides)) {
|
|
60693
60972
|
if (BUILT_IN_AGENT_DEFINITION_IDS.has(agentId)) {
|
|
60694
60973
|
continue;
|
|
@@ -60700,10 +60979,16 @@ function resolveConfiguredSenderIdForProjectRoot(overrides, projectRoot, preferr
|
|
|
60700
60979
|
}
|
|
60701
60980
|
return fallbackSenderId;
|
|
60702
60981
|
}
|
|
60703
|
-
async function inferSenderIdForProjectRoot(projectRoot) {
|
|
60982
|
+
async function inferSenderIdForProjectRoot(projectRoot, preferredDefinitionIds = []) {
|
|
60704
60983
|
const overrides = await readRelayAgentOverrides();
|
|
60705
60984
|
const projectConfig = await readProjectConfig(projectRoot);
|
|
60706
60985
|
const configuredDefinitionId = normalizeAgentSelectorSegment(projectConfig?.agent?.id?.trim() ?? "");
|
|
60986
|
+
const normalizedPreferredDefinitionIds = preferredDefinitionIds.map((value) => normalizeAgentSelectorSegment(value)).filter(Boolean);
|
|
60987
|
+
const preferredDefinitionId = normalizedPreferredDefinitionIds[0];
|
|
60988
|
+
if (preferredDefinitionId) {
|
|
60989
|
+
const preferredSenderId = resolveConfiguredSenderIdForProjectRoot(overrides, projectRoot, [preferredDefinitionId], false);
|
|
60990
|
+
return preferredSenderId ?? buildRelayAgentInstance(preferredDefinitionId, projectRoot).id;
|
|
60991
|
+
}
|
|
60707
60992
|
const projectDefaultDefinitionIds2 = [
|
|
60708
60993
|
configuredDefinitionId,
|
|
60709
60994
|
projectConfig?.project?.id,
|
|
@@ -60723,11 +61008,12 @@ async function resolveScoutSenderId(agentName, currentDirectory, env = process.e
|
|
|
60723
61008
|
if (env.OPENSCOUT_AGENT?.trim()) {
|
|
60724
61009
|
return env.OPENSCOUT_AGENT.trim();
|
|
60725
61010
|
}
|
|
61011
|
+
const herdrAgentName = resolveHerdrAgentName(env);
|
|
60726
61012
|
const projectRoot = await findNearestProjectRoot(currentDirectory);
|
|
60727
61013
|
if (!projectRoot) {
|
|
60728
|
-
return resolveOperatorName();
|
|
61014
|
+
return herdrAgentName ? buildRelayAgentInstance(herdrAgentName, currentDirectory).id : resolveOperatorName();
|
|
60729
61015
|
}
|
|
60730
|
-
return inferSenderIdForProjectRoot(projectRoot);
|
|
61016
|
+
return inferSenderIdForProjectRoot(projectRoot, herdrAgentName ? [herdrAgentName] : []);
|
|
60731
61017
|
}
|
|
60732
61018
|
async function resolveScoutMatchParticipantId(sessionIdOverride, env = process.env) {
|
|
60733
61019
|
const sessionId = sessionIdOverride?.trim() || env.OPENSCOUT_SESSION_ID?.trim() || env.CODEX_THREAD_ID?.trim() || env.OPENSCOUT_CODEX_THREAD_ID?.trim() || env.CLAUDE_CODE_SESSION_ID?.trim() || env.CLAUDE_SESSION_ID?.trim() || env.CLAUDE_CODE_REMOTE_SESSION_ID?.trim();
|
|
@@ -60741,18 +61027,20 @@ async function resolveScoutMatchParticipantId(sessionIdOverride, env = process.e
|
|
|
60741
61027
|
}
|
|
60742
61028
|
return parsed.value;
|
|
60743
61029
|
}
|
|
61030
|
+
var TRUTHY_ENV_VALUES;
|
|
60744
61031
|
var init_sender = __esm(() => {
|
|
60745
61032
|
init_src();
|
|
60746
61033
|
init_setup();
|
|
60747
61034
|
init_src2();
|
|
60748
61035
|
init_user_config();
|
|
61036
|
+
TRUTHY_ENV_VALUES = new Set(["1", "true", "yes", "on"]);
|
|
60749
61037
|
});
|
|
60750
61038
|
|
|
60751
61039
|
// ../../apps/desktop/src/core/broker/service.ts
|
|
60752
61040
|
import { setTimeout as delay2 } from "timers/promises";
|
|
60753
61041
|
import { mkdir as mkdir11, readFile as readFile14, unlink, writeFile as writeFile10 } from "fs/promises";
|
|
60754
61042
|
import { basename as basename13, join as join37, resolve as resolve17 } from "path";
|
|
60755
|
-
import { createHash as
|
|
61043
|
+
import { createHash as createHash13, randomUUID as randomUUID5 } from "crypto";
|
|
60756
61044
|
function relayHubDirectory() {
|
|
60757
61045
|
return resolveOpenScoutSupportPaths().relayHubDirectory;
|
|
60758
61046
|
}
|
|
@@ -60844,7 +61132,7 @@ function deliveryRequestId(clientMessageId, createdAt) {
|
|
|
60844
61132
|
if (!normalized) {
|
|
60845
61133
|
return `deliver-${createdAt.toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
60846
61134
|
}
|
|
60847
|
-
const digest =
|
|
61135
|
+
const digest = createHash13("sha256").update(normalized).digest("hex").slice(0, 32);
|
|
60848
61136
|
return `deliver-client-${digest}`;
|
|
60849
61137
|
}
|
|
60850
61138
|
function metadataStringList(metadata, key) {
|
|
@@ -65179,15 +65467,20 @@ function findRepoDistDirectory(startDirectory) {
|
|
|
65179
65467
|
current = parent;
|
|
65180
65468
|
}
|
|
65181
65469
|
}
|
|
65470
|
+
function isRepoBuildOutput(bundlePath) {
|
|
65471
|
+
const distDir = dirname24(bundlePath);
|
|
65472
|
+
return basename15(distDir) === "dist" && basename15(dirname24(distDir)) === "macos";
|
|
65473
|
+
}
|
|
65182
65474
|
function selectInstalledAppBundle(indexedPaths, home, pathExists3 = existsSync33) {
|
|
65183
|
-
|
|
65184
|
-
|
|
65185
|
-
join39(home, "Applications"
|
|
65186
|
-
|
|
65187
|
-
|
|
65188
|
-
|
|
65475
|
+
const names2 = [INSTALLED_APP_BUNDLE_NAME, ...LEGACY_INSTALLED_APP_BUNDLE_NAMES];
|
|
65476
|
+
for (const name2 of names2) {
|
|
65477
|
+
for (const root of ["/Applications", join39(home, "Applications")]) {
|
|
65478
|
+
const candidate = join39(root, name2);
|
|
65479
|
+
if (pathExists3(candidate))
|
|
65480
|
+
return candidate;
|
|
65481
|
+
}
|
|
65189
65482
|
}
|
|
65190
|
-
return indexedPaths.map((line) => line.trim()).filter((candidate) => basename15(candidate)
|
|
65483
|
+
return indexedPaths.map((line) => line.trim()).filter((candidate) => names2.includes(basename15(candidate))).filter((candidate) => !isRepoBuildOutput(candidate)).find(pathExists3) ?? null;
|
|
65191
65484
|
}
|
|
65192
65485
|
function findInstalledAppBundle(env) {
|
|
65193
65486
|
const spotlight = spawnSync5("mdfind", [`kMDItemCFBundleIdentifier == '${INSTALLED_APP_BUNDLE_ID}'`], {
|
|
@@ -65204,7 +65497,7 @@ function resolveBundlePaths(context) {
|
|
|
65204
65497
|
const installed = findInstalledAppBundle(context.env);
|
|
65205
65498
|
if (installed)
|
|
65206
65499
|
return resolveAppBundlePaths(installed);
|
|
65207
|
-
throw new ScoutCliError("No
|
|
65500
|
+
throw new ScoutCliError("No Scout app bundle found. Build one with `bun run scout:build` from a checkout, or install with `scout install`.");
|
|
65208
65501
|
}
|
|
65209
65502
|
function readTree(paths2) {
|
|
65210
65503
|
return classifyProcesses(readProcessTable(), paths2);
|
|
@@ -65408,12 +65701,13 @@ async function runAppCommand(context, args) {
|
|
|
65408
65701
|
throw new ScoutCliError(result.message);
|
|
65409
65702
|
}
|
|
65410
65703
|
}
|
|
65411
|
-
var HELP_FLAGS3, INSTALLED_APP_BUNDLE_ID = "app.openscout.scout", INSTALLED_APP_BUNDLE_NAME = "
|
|
65704
|
+
var HELP_FLAGS3, INSTALLED_APP_BUNDLE_ID = "app.openscout.scout", INSTALLED_APP_BUNDLE_NAME = "Scout.app", LEGACY_INSTALLED_APP_BUNDLE_NAMES, READY_TIMEOUT_MS = 30000, SUPERVISED_READY_TIMEOUT_MS = 120000, SUPERVISED_DRAIN_TIMEOUT_MS = 20000, POLL_MS = 250;
|
|
65412
65705
|
var init_app = __esm(() => {
|
|
65413
65706
|
init_app_lifecycle();
|
|
65414
65707
|
init_context();
|
|
65415
65708
|
init_errors();
|
|
65416
65709
|
HELP_FLAGS3 = new Set(["help", "--help", "-h"]);
|
|
65710
|
+
LEGACY_INSTALLED_APP_BUNDLE_NAMES = ["OpenScout.app"];
|
|
65417
65711
|
});
|
|
65418
65712
|
|
|
65419
65713
|
// ../../apps/desktop/src/cli/commands/status.ts
|
|
@@ -67217,15 +67511,18 @@ function renderSendCommandHelp() {
|
|
|
67217
67511
|
" --body-file <path> -> alias for --message-file",
|
|
67218
67512
|
"",
|
|
67219
67513
|
"Examples:",
|
|
67220
|
-
' scout send --to hudson "
|
|
67514
|
+
' scout send --to hudson "review completed; literal @codex stays text"',
|
|
67221
67515
|
' scout send --to target:mw-talkie "status update for that worker"',
|
|
67222
|
-
' scout send --ref 7f3a9c21 "
|
|
67223
|
-
' scout send --to lattices#codex?5.5 "
|
|
67224
|
-
' scout send --to hudson --wake "
|
|
67516
|
+
' scout send --ref 7f3a9c21 "FYI: the build passed; no action needed"',
|
|
67517
|
+
' scout send --to lattices#codex?5.5 "review completed; findings recorded in the PR"',
|
|
67518
|
+
' scout send --to hudson --wake "FYI: the chrome feedback is already applied"',
|
|
67225
67519
|
" scout send --channel triage --message-file ./status.md",
|
|
67226
67520
|
' scout send --as premotion.master.mini --to hudson "editor branch is green"',
|
|
67227
|
-
' scout send --channel triage "
|
|
67228
|
-
' scout send "@hudson
|
|
67521
|
+
' scout send --channel triage "both reviews are complete"',
|
|
67522
|
+
' scout send "@hudson build passed" # legacy body-mention shorthand',
|
|
67523
|
+
"",
|
|
67524
|
+
"For work instead:",
|
|
67525
|
+
' scout ask --to hudson --notify "apply the chrome feedback and report back"'
|
|
67229
67526
|
].join(`
|
|
67230
67527
|
`);
|
|
67231
67528
|
}
|
|
@@ -67764,7 +68061,7 @@ __export(exports_chat, {
|
|
|
67764
68061
|
chatRequest: () => chatRequest,
|
|
67765
68062
|
chatPath: () => chatPath
|
|
67766
68063
|
});
|
|
67767
|
-
import { createHash as
|
|
68064
|
+
import { createHash as createHash14, randomUUID as randomUUID7 } from "crypto";
|
|
67768
68065
|
import { mkdir as mkdir12, readFile as readFile16, writeFile as writeFile11, rename, chmod as chmod2, rm as rm5 } from "fs/promises";
|
|
67769
68066
|
import { homedir as homedir27 } from "os";
|
|
67770
68067
|
import { join as join41 } from "path";
|
|
@@ -67820,6 +68117,8 @@ function renderChatHelp(commandName = "scout chat") {
|
|
|
67820
68117
|
${commandName} read [--channel <id>]
|
|
67821
68118
|
${commandName} say "Hello" [--request-id <id>]
|
|
67822
68119
|
${commandName} reply <message-id> "My reply" [--request-id <id>]
|
|
68120
|
+
${commandName} react <message-id> <emoji> [--request-id <id>]
|
|
68121
|
+
${commandName} unreact <message-id> <emoji> [--request-id <id>]
|
|
67823
68122
|
${commandName} watch [--for 10m] [--once] [--compact] [--reset-cursor] [--channel <id>]
|
|
67824
68123
|
${commandName} status
|
|
67825
68124
|
|
|
@@ -67836,7 +68135,9 @@ with reply; ignore your own messages. Run watch again to resume from its saved
|
|
|
67836
68135
|
cursor. If history has expired, read the room, then explicitly use watch
|
|
67837
68136
|
--reset-cursor to replay retained history. Deduplicate by message id.
|
|
67838
68137
|
Listening does not itself generate replies.
|
|
67839
|
-
Use the same --request-id to retry a send whose outcome was uncertain
|
|
68138
|
+
Use the same --request-id to retry a send whose outcome was uncertain.
|
|
68139
|
+
React and unreact acknowledge a message without posting a turn. They never
|
|
68140
|
+
wake an agent or create a flight.`;
|
|
67840
68141
|
}
|
|
67841
68142
|
async function runChatCommand(context, args, commandName = "scout chat") {
|
|
67842
68143
|
if (!args.length || args.includes("--help") || args.includes("-h")) {
|
|
@@ -67860,7 +68161,7 @@ async function runChatCommand(context, args, commandName = "scout chat") {
|
|
|
67860
68161
|
positional.push(arg);
|
|
67861
68162
|
}
|
|
67862
68163
|
const [command, ...values] = positional;
|
|
67863
|
-
const scope2 =
|
|
68164
|
+
const scope2 = createHash14("sha256").update(`${context.cwd}
|
|
67864
68165
|
${currentChatSession(context.env) ?? "shell"}`).digest("hex");
|
|
67865
68166
|
const directory = join41(context.env.OPENSCOUT_CHAT_HOME ?? join41(homedir27(), ".openscout", "chat"), scope2);
|
|
67866
68167
|
await mkdir12(directory, { recursive: true, mode: 448 });
|
|
@@ -67883,7 +68184,7 @@ ${currentChatSession(context.env) ?? "shell"}`).digest("hex");
|
|
|
67883
68184
|
if (values.length !== 1)
|
|
67884
68185
|
throw new Error(`Usage: ${commandName} join <invite-url>`);
|
|
67885
68186
|
const invite = parseChatInvite(values[0]);
|
|
67886
|
-
const attempt =
|
|
68187
|
+
const attempt = createHash14("sha256").update(`${invite.origin}/${invite.token}`).digest("hex");
|
|
67887
68188
|
state.attempts[attempt] ??= randomUUID7();
|
|
67888
68189
|
await save();
|
|
67889
68190
|
const { data, cookie } = await chatRequest(invite.origin, `/api/invites/${invite.token}/participate`, {
|
|
@@ -67916,6 +68217,24 @@ Watch returns message records with IDs. Reply with ${commandName} reply <message
|
|
|
67916
68217
|
context.output.writeValue(data, (d) => JSON.stringify(d, null, 2));
|
|
67917
68218
|
return;
|
|
67918
68219
|
}
|
|
68220
|
+
if (command === "react" || command === "unreact") {
|
|
68221
|
+
const messageId = values[0]?.trim();
|
|
68222
|
+
const emoji = values[1]?.trim();
|
|
68223
|
+
if (!messageId || !emoji)
|
|
68224
|
+
throw new Error(`Usage: ${commandName} ${command} <message-id> <emoji>`);
|
|
68225
|
+
const requestId = flags["request-id"] ?? randomUUID7();
|
|
68226
|
+
const resource = command === "unreact" ? "reactions/remove" : "reactions";
|
|
68227
|
+
try {
|
|
68228
|
+
const { data } = await chatRequest(room.origin, chatPath(room, resource), {
|
|
68229
|
+
token: room.token,
|
|
68230
|
+
body: { requestId, messageId, emoji }
|
|
68231
|
+
});
|
|
68232
|
+
context.output.writeValue({ ...data, requestId, messageId, emoji }, () => `${command === "unreact" ? "Removed" : "Reacted"} ${emoji} on ${messageId}.`);
|
|
68233
|
+
} catch (error) {
|
|
68234
|
+
throw new Error(`${error.message} Retry with --request-id ${requestId} to avoid duplicates.`);
|
|
68235
|
+
}
|
|
68236
|
+
return;
|
|
68237
|
+
}
|
|
67919
68238
|
if (command === "say" || command === "reply") {
|
|
67920
68239
|
const replyToMessageId = command === "reply" ? values.shift() : undefined;
|
|
67921
68240
|
const body = values.join(" ").trim();
|
|
@@ -67938,7 +68257,7 @@ After watch returns, answer relevant messages with ${commandName} reply <message
|
|
|
67938
68257
|
const milliseconds = match ? Number(match[1]) * (match[2] === "m" ? 60000 : 1000) : 0;
|
|
67939
68258
|
if (milliseconds < 1000 || milliseconds > 3600000)
|
|
67940
68259
|
throw new Error("Watch duration must be between 1s and 60m.");
|
|
67941
|
-
const cursorFile = join41(directory, `cursor-${
|
|
68260
|
+
const cursorFile = join41(directory, `cursor-${createHash14("sha256").update(`${room.origin}/${room.channelId}`).digest("hex")}.json`);
|
|
67942
68261
|
if (flags["reset-cursor"]) {
|
|
67943
68262
|
await rm5(cursorFile, { force: true });
|
|
67944
68263
|
room.cursor = null;
|
|
@@ -96082,7 +96401,7 @@ var init_stdio2 = __esm(() => {
|
|
|
96082
96401
|
// ../../apps/desktop/src/shared/product.ts
|
|
96083
96402
|
var SCOUT_APP_VERSION;
|
|
96084
96403
|
var init_product = __esm(() => {
|
|
96085
|
-
SCOUT_APP_VERSION = process.env.SCOUT_APP_VERSION?.trim() || "0.2.
|
|
96404
|
+
SCOUT_APP_VERSION = process.env.SCOUT_APP_VERSION?.trim() || "0.2.107";
|
|
96086
96405
|
});
|
|
96087
96406
|
|
|
96088
96407
|
// ../../apps/desktop/src/core/mcp/stdio-server-lifecycle.ts
|
|
@@ -100441,10 +100760,11 @@ __export(exports_install, {
|
|
|
100441
100760
|
OPENSCOUT_RELEASE_OWNER: () => OPENSCOUT_RELEASE_OWNER,
|
|
100442
100761
|
OPENSCOUT_APP_NAME: () => OPENSCOUT_APP_NAME,
|
|
100443
100762
|
OPENSCOUT_APP_BUNDLE_ID: () => OPENSCOUT_APP_BUNDLE_ID,
|
|
100763
|
+
LEGACY_APP_BUNDLE_NAMES: () => LEGACY_APP_BUNDLE_NAMES,
|
|
100444
100764
|
DEFAULT_OPENSCOUT_APP_PATH: () => DEFAULT_OPENSCOUT_APP_PATH
|
|
100445
100765
|
});
|
|
100446
100766
|
import { spawnSync as spawnSync8 } from "child_process";
|
|
100447
|
-
import { createHash as
|
|
100767
|
+
import { createHash as createHash15 } from "crypto";
|
|
100448
100768
|
import {
|
|
100449
100769
|
existsSync as fsExistsSync,
|
|
100450
100770
|
mkdirSync as fsMkdirSync,
|
|
@@ -100455,23 +100775,23 @@ import {
|
|
|
100455
100775
|
readFileSync as readFileSync20
|
|
100456
100776
|
} from "fs";
|
|
100457
100777
|
import { tmpdir as osTmpdir } from "os";
|
|
100458
|
-
import { join as join49 } from "path";
|
|
100778
|
+
import { dirname as dirname30, join as join49 } from "path";
|
|
100459
100779
|
function renderInstallCommandHelp() {
|
|
100460
100780
|
return [
|
|
100461
|
-
"scout install \u2014 download and install the
|
|
100781
|
+
"scout install \u2014 download and install the Scout macOS app",
|
|
100462
100782
|
"",
|
|
100463
100783
|
"Usage:",
|
|
100464
100784
|
" scout install # install or update to the latest signed release",
|
|
100465
100785
|
" scout install --check # report installed vs latest, install nothing",
|
|
100466
100786
|
" scout install --version <tag> # install a specific release (e.g. v0.2.70)",
|
|
100467
100787
|
" scout install --force # reinstall even if already up to date",
|
|
100468
|
-
" scout install --no-restart # do not relaunch
|
|
100788
|
+
" scout install --no-restart # do not relaunch Scout after installing",
|
|
100469
100789
|
" scout install --candidate <receipt.json> --dmg <file> # explicit local signed candidate",
|
|
100470
100790
|
"",
|
|
100471
100791
|
"Behavior:",
|
|
100472
100792
|
" Downloads the signed + notarized OpenScout.dmg from the GitHub release,",
|
|
100473
100793
|
" verifies the published byte size and sha256 digest when GitHub provides one,",
|
|
100474
|
-
" then codesign and Gatekeeper-assess the DMG before mounting.
|
|
100794
|
+
" then codesign and Gatekeeper-assess the DMG before mounting. Scout.app",
|
|
100475
100795
|
" must match the pinned bundle id and Team ID, pass codesign --deep --strict,",
|
|
100476
100796
|
" and pass Gatekeeper execute after staging. A running copy of the installed",
|
|
100477
100797
|
" app and any stale ScoutMenu helpers from other checkouts are stopped first;",
|
|
@@ -100570,7 +100890,7 @@ function stripLeadingV(tag) {
|
|
|
100570
100890
|
function normalizeReleaseVersion(tag) {
|
|
100571
100891
|
const version3 = stripLeadingV(tag);
|
|
100572
100892
|
if (!/^\d+\.\d+\.\d+$/.test(version3)) {
|
|
100573
|
-
throw new ScoutCliError(`unsupported
|
|
100893
|
+
throw new ScoutCliError(`unsupported Scout release tag: ${tag}`);
|
|
100574
100894
|
}
|
|
100575
100895
|
return version3;
|
|
100576
100896
|
}
|
|
@@ -100666,7 +100986,7 @@ function verifyDownloadedAsset(buffer, asset) {
|
|
|
100666
100986
|
const parsed = parseGithubAssetDigest(digest);
|
|
100667
100987
|
let actual;
|
|
100668
100988
|
try {
|
|
100669
|
-
actual =
|
|
100989
|
+
actual = createHash15(parsed.algorithm).update(buffer).digest("hex");
|
|
100670
100990
|
} catch {
|
|
100671
100991
|
throw new ScoutCliError(`unsupported GitHub asset digest algorithm: ${parsed.algorithm}`);
|
|
100672
100992
|
}
|
|
@@ -100683,7 +101003,7 @@ function findAppDmgAsset(release2) {
|
|
|
100683
101003
|
const latestAlias = assets.find((asset) => asset.name === LATEST_DMG_ALIAS);
|
|
100684
101004
|
if (latestAlias)
|
|
100685
101005
|
return latestAlias;
|
|
100686
|
-
throw new ScoutCliError(`no
|
|
101006
|
+
throw new ScoutCliError(`no product DMG found in release ${release2.tag_name}. Assets: ${assets.map((asset) => asset.name).join(", ") || "(none)"}`);
|
|
100687
101007
|
}
|
|
100688
101008
|
function infoPlistPath(appPath) {
|
|
100689
101009
|
return join49(appPath, "Contents", "Info.plist");
|
|
@@ -100716,7 +101036,7 @@ async function fetchRelease(version3, deps) {
|
|
|
100716
101036
|
if ((gh.status ?? 1) === 0 && gh.stdout.trim()) {
|
|
100717
101037
|
return JSON.parse(gh.stdout);
|
|
100718
101038
|
}
|
|
100719
|
-
throw new ScoutCliError(version3 ? `release "${version3}" not found on GitHub (${OPENSCOUT_RELEASE_OWNER}/${OPENSCOUT_RELEASE_REPOSITORY})` : `could not fetch the latest
|
|
101039
|
+
throw new ScoutCliError(version3 ? `release "${version3}" not found on GitHub (${OPENSCOUT_RELEASE_OWNER}/${OPENSCOUT_RELEASE_REPOSITORY})` : `could not fetch the latest Scout release from GitHub (${OPENSCOUT_RELEASE_OWNER}/${OPENSCOUT_RELEASE_REPOSITORY})`);
|
|
100720
101040
|
}
|
|
100721
101041
|
async function downloadDmg(asset, destination, context, deps) {
|
|
100722
101042
|
context.stderr(`Downloading ${asset.name} (${formatBytes(asset.size)})\u2026`);
|
|
@@ -100753,11 +101073,13 @@ function unmountDmg(mountPoint, deps) {
|
|
|
100753
101073
|
deps.run("hdiutil", ["detach", mountPoint, "-force", "-quiet"]);
|
|
100754
101074
|
}
|
|
100755
101075
|
function requireMountedOpenScoutApp(mountPoint, deps) {
|
|
100756
|
-
const
|
|
100757
|
-
|
|
100758
|
-
|
|
101076
|
+
for (const name2 of [OPENSCOUT_APP_NAME, ...LEGACY_APP_BUNDLE_NAMES]) {
|
|
101077
|
+
const source = join49(mountPoint, name2);
|
|
101078
|
+
if (deps.existsSync(source) && deps.existsSync(infoPlistPath(source)))
|
|
101079
|
+
return source;
|
|
100759
101080
|
}
|
|
100760
|
-
|
|
101081
|
+
const names2 = [OPENSCOUT_APP_NAME, ...LEGACY_APP_BUNDLE_NAMES].join(" or ");
|
|
101082
|
+
throw new ScoutCliError(`no ${names2} found in the mounted DMG at ${mountPoint}`);
|
|
100761
101083
|
}
|
|
100762
101084
|
function codesignField(output, key) {
|
|
100763
101085
|
const match = output.match(new RegExp(`^${key}=(.+)$`, "m"));
|
|
@@ -100978,7 +101300,7 @@ function processIdsForMenuOutsideApp(psOutput, appPath) {
|
|
|
100978
101300
|
}
|
|
100979
101301
|
function inspectInstallProcessIds(deps) {
|
|
100980
101302
|
const result = deps.run("ps", ["-axo", "pid=,args="]);
|
|
100981
|
-
requireSuccess(result, "could not inspect running
|
|
101303
|
+
requireSuccess(result, "could not inspect running Scout processes");
|
|
100982
101304
|
return {
|
|
100983
101305
|
installed: processIdsForInstalledApp(result.stdout, deps.appPath),
|
|
100984
101306
|
staleMenus: processIdsForMenuOutsideApp(result.stdout, deps.appPath)
|
|
@@ -101016,7 +101338,57 @@ function stopRunningApp(deps) {
|
|
|
101016
101338
|
}
|
|
101017
101339
|
if (waitUntilInstallUnblocked(deps, STOP_POLL_ATTEMPTS))
|
|
101018
101340
|
return hadInstalledRunning;
|
|
101019
|
-
throw new ScoutCliError("could not stop
|
|
101341
|
+
throw new ScoutCliError("could not stop Scout before replacing it");
|
|
101342
|
+
}
|
|
101343
|
+
function stopAppAtPath(appPath, deps) {
|
|
101344
|
+
const scan = () => {
|
|
101345
|
+
const result = deps.run("ps", ["-axo", "pid=,args="]);
|
|
101346
|
+
requireSuccess(result, "could not inspect running Scout processes");
|
|
101347
|
+
return processIdsForInstalledApp(result.stdout, appPath);
|
|
101348
|
+
};
|
|
101349
|
+
if (scan().length === 0)
|
|
101350
|
+
return false;
|
|
101351
|
+
for (const pid of scan())
|
|
101352
|
+
deps.run("kill", [String(pid)]);
|
|
101353
|
+
for (let attempt = 0;attempt < STOP_POLL_ATTEMPTS; attempt += 1) {
|
|
101354
|
+
if (scan().length === 0)
|
|
101355
|
+
return true;
|
|
101356
|
+
deps.sleep(STOP_POLL_MS);
|
|
101357
|
+
}
|
|
101358
|
+
for (const pid of scan())
|
|
101359
|
+
deps.run("kill", ["-9", String(pid)]);
|
|
101360
|
+
for (let attempt = 0;attempt < STOP_POLL_ATTEMPTS; attempt += 1) {
|
|
101361
|
+
if (scan().length === 0)
|
|
101362
|
+
return true;
|
|
101363
|
+
deps.sleep(STOP_POLL_MS);
|
|
101364
|
+
}
|
|
101365
|
+
throw new ScoutCliError(`could not stop the pre-rename app at ${appPath}`);
|
|
101366
|
+
}
|
|
101367
|
+
function retireLegacyAppBundles(deps, context) {
|
|
101368
|
+
const removed = [];
|
|
101369
|
+
let hadRunning = false;
|
|
101370
|
+
let blocked = false;
|
|
101371
|
+
for (const name2 of LEGACY_APP_BUNDLE_NAMES) {
|
|
101372
|
+
const legacyPath = join49(dirname30(deps.appPath), name2);
|
|
101373
|
+
if (legacyPath === deps.appPath || !deps.existsSync(legacyPath))
|
|
101374
|
+
continue;
|
|
101375
|
+
try {
|
|
101376
|
+
if (stopAppAtPath(legacyPath, deps))
|
|
101377
|
+
hadRunning = true;
|
|
101378
|
+
} catch (error48) {
|
|
101379
|
+
blocked = true;
|
|
101380
|
+
context.stderr(`Kept ${legacyPath}; automatic relaunch skipped: ${error48 instanceof Error ? error48.message : String(error48)}`);
|
|
101381
|
+
continue;
|
|
101382
|
+
}
|
|
101383
|
+
try {
|
|
101384
|
+
deps.rmSync(legacyPath, { recursive: true, force: true });
|
|
101385
|
+
removed.push(legacyPath);
|
|
101386
|
+
context.stderr(`Removed the pre-rename bundle at ${legacyPath}.`);
|
|
101387
|
+
} catch (error48) {
|
|
101388
|
+
context.stderr(`Could not remove the pre-rename bundle at ${legacyPath}: ${error48 instanceof Error ? error48.message : String(error48)}`);
|
|
101389
|
+
}
|
|
101390
|
+
}
|
|
101391
|
+
return { removed, hadRunning, blocked };
|
|
101020
101392
|
}
|
|
101021
101393
|
function launchApp(deps) {
|
|
101022
101394
|
requireSuccess(deps.run("open", [deps.appPath]), `could not relaunch ${deps.appPath}`);
|
|
@@ -101042,24 +101414,24 @@ async function runCheck(context, options, deps) {
|
|
|
101042
101414
|
if (!deps.existsSync(deps.appPath)) {
|
|
101043
101415
|
if (deps.existsSync(backupPathFor(deps.appPath))) {
|
|
101044
101416
|
status = "repair-needed";
|
|
101045
|
-
message = "An interrupted
|
|
101417
|
+
message = "An interrupted Scout install needs repair \u2014 run `scout install --force`.";
|
|
101046
101418
|
} else {
|
|
101047
101419
|
status = "not-installed";
|
|
101048
|
-
message = "
|
|
101420
|
+
message = "Scout is not installed \u2014 run `scout install`.";
|
|
101049
101421
|
}
|
|
101050
101422
|
} else {
|
|
101051
101423
|
try {
|
|
101052
101424
|
installed = verifyStagedOpenScoutApp(deps.appPath, deps);
|
|
101053
101425
|
if (installed === target2) {
|
|
101054
101426
|
status = "up-to-date";
|
|
101055
|
-
message = `
|
|
101427
|
+
message = `Scout ${installed} is up to date.`;
|
|
101056
101428
|
} else {
|
|
101057
101429
|
status = "update-available";
|
|
101058
101430
|
message = `Update available: ${installed} \u2192 ${target2}. Run \`scout install\`.`;
|
|
101059
101431
|
}
|
|
101060
101432
|
} catch (error48) {
|
|
101061
101433
|
status = "repair-needed";
|
|
101062
|
-
message = `
|
|
101434
|
+
message = `Scout needs repair (${error48 instanceof Error ? error48.message : String(error48)}). ` + "Run `scout install --force`.";
|
|
101063
101435
|
}
|
|
101064
101436
|
}
|
|
101065
101437
|
context.output.writeValue({ action: "check", status, installed, target: target2, bundlePath: deps.appPath, message }, renderInstallResult);
|
|
@@ -101080,7 +101452,7 @@ async function runInstallCommand(context, args, dependencies = {}) {
|
|
|
101080
101452
|
await runCheck(context, options, deps);
|
|
101081
101453
|
return;
|
|
101082
101454
|
}
|
|
101083
|
-
context.stderr(options.candidate ? "Verifying explicit local candidate (unpublished)\u2026" : options.version ? `Fetching release ${options.version}\u2026` : "Fetching the latest
|
|
101455
|
+
context.stderr(options.candidate ? "Verifying explicit local candidate (unpublished)\u2026" : options.version ? `Fetching release ${options.version}\u2026` : "Fetching the latest Scout release\u2026");
|
|
101084
101456
|
const release2 = options.candidate && options.dmg ? loadInstallCandidate(options.candidate, options.dmg) : await fetchRelease(options.version, deps);
|
|
101085
101457
|
const target2 = normalizeReleaseVersion(release2.tag_name);
|
|
101086
101458
|
const releaseInstallLock = acquireInstallLock(deps);
|
|
@@ -101098,12 +101470,12 @@ async function runInstallCommand(context, args, dependencies = {}) {
|
|
|
101098
101470
|
installed: verifiedVersion,
|
|
101099
101471
|
target: target2,
|
|
101100
101472
|
bundlePath: deps.appPath,
|
|
101101
|
-
message: `
|
|
101473
|
+
message: `Scout ${target2} is already installed (use --force to reinstall).`
|
|
101102
101474
|
}, renderInstallResult);
|
|
101103
101475
|
return;
|
|
101104
101476
|
} catch (error48) {
|
|
101105
101477
|
repairingInstalledApp = true;
|
|
101106
|
-
context.stderr(`Installed
|
|
101478
|
+
context.stderr(`Installed Scout ${target2} failed verification; repairing it: ${error48 instanceof Error ? error48.message : String(error48)}`);
|
|
101107
101479
|
}
|
|
101108
101480
|
}
|
|
101109
101481
|
const asset = findAppDmgAsset(release2);
|
|
@@ -101122,7 +101494,7 @@ async function runInstallCommand(context, args, dependencies = {}) {
|
|
|
101122
101494
|
} else {
|
|
101123
101495
|
await downloadDmg(asset, dmgPath, context, deps);
|
|
101124
101496
|
}
|
|
101125
|
-
context.stderr(`Installing
|
|
101497
|
+
context.stderr(`Installing Scout ${target2} to ${deps.appPath}\u2026`);
|
|
101126
101498
|
verifyDownloadedDmg(dmgPath, deps);
|
|
101127
101499
|
mountDmg(dmgPath, mountPoint, deps);
|
|
101128
101500
|
mounted = true;
|
|
@@ -101136,11 +101508,14 @@ async function runInstallCommand(context, args, dependencies = {}) {
|
|
|
101136
101508
|
unmountDmg(mountPoint, deps);
|
|
101137
101509
|
deps.rmSync(workDir, { recursive: true, force: true });
|
|
101138
101510
|
}
|
|
101139
|
-
|
|
101511
|
+
const retirement = retireLegacyAppBundles(deps, context);
|
|
101512
|
+
if (retirement.hadRunning)
|
|
101513
|
+
wasRunning = true;
|
|
101514
|
+
if (wasRunning && options.restart && !retirement.blocked) {
|
|
101140
101515
|
launchApp(deps);
|
|
101141
101516
|
}
|
|
101142
101517
|
const status = hadInstalledApp ? "updated" : "installed";
|
|
101143
|
-
const relaunchNote = wasRunning ? options.restart ? " (relaunched)" : " (restart
|
|
101518
|
+
const relaunchNote = retirement.blocked ? " (legacy app cleanup incomplete; automatic relaunch skipped)" : wasRunning ? options.restart ? " (relaunched)" : " (restart Scout to use the new version)" : "";
|
|
101144
101519
|
let verb = "Installed";
|
|
101145
101520
|
if (repairingInstalledApp || hadInstalledApp && !installedBefore) {
|
|
101146
101521
|
verb = "Repaired";
|
|
@@ -101153,15 +101528,16 @@ async function runInstallCommand(context, args, dependencies = {}) {
|
|
|
101153
101528
|
installed: installedAfter,
|
|
101154
101529
|
target: target2,
|
|
101155
101530
|
bundlePath: deps.appPath,
|
|
101156
|
-
message: `${verb}
|
|
101531
|
+
message: `${verb} Scout ${installedAfter} \u2192 ${deps.appPath}${relaunchNote}`
|
|
101157
101532
|
}, renderInstallResult);
|
|
101158
101533
|
} finally {
|
|
101159
101534
|
releaseInstallLock();
|
|
101160
101535
|
}
|
|
101161
101536
|
}
|
|
101162
|
-
var OPENSCOUT_RELEASE_OWNER = "oscout", OPENSCOUT_RELEASE_REPOSITORY = "scout", OPENSCOUT_APP_NAME = "
|
|
101537
|
+
var OPENSCOUT_RELEASE_OWNER = "oscout", OPENSCOUT_RELEASE_REPOSITORY = "scout", OPENSCOUT_APP_NAME = "Scout.app", LEGACY_APP_BUNDLE_NAMES, OPENSCOUT_APP_BUNDLE_ID = "app.openscout.scout", OPENSCOUT_SIGNING_TEAM_ID = "2U83JFPW66", DEFAULT_OPENSCOUT_APP_PATH, GITHUB_ASSET_DIGEST_ALGORITHM = "sha256", GITHUB_ASSET_DIGEST_HEX_LENGTH = 64, LATEST_DMG_ALIAS = "OpenScout.dmg", USER_AGENT = "scout-cli", BACKUP_SUFFIX = ".openscout-previous", INSTALL_LOCK_SUFFIX = ".openscout-install.lock", SHLOCK_PATH = "/usr/bin/shlock", STOP_POLL_ATTEMPTS = 50, STOP_POLL_MS = 100, MENU_PROCESS_EXECUTABLE = "ScoutMenu", HELP_FLAGS9;
|
|
101163
101538
|
var init_install = __esm(() => {
|
|
101164
101539
|
init_errors();
|
|
101540
|
+
LEGACY_APP_BUNDLE_NAMES = ["OpenScout.app"];
|
|
101165
101541
|
DEFAULT_OPENSCOUT_APP_PATH = `/Applications/${OPENSCOUT_APP_NAME}`;
|
|
101166
101542
|
HELP_FLAGS9 = new Set(["help", "--help", "-h"]);
|
|
101167
101543
|
});
|
|
@@ -110208,7 +110584,7 @@ __export(exports_menu, {
|
|
|
110208
110584
|
import { spawnSync as spawnSync10 } from "child_process";
|
|
110209
110585
|
import { existsSync as existsSync39 } from "fs";
|
|
110210
110586
|
import { homedir as homedir32 } from "os";
|
|
110211
|
-
import { dirname as
|
|
110587
|
+
import { dirname as dirname31, join as join51, resolve as resolve30 } from "path";
|
|
110212
110588
|
import { fileURLToPath as fileURLToPath12 } from "url";
|
|
110213
110589
|
function renderMenuCommandHelp() {
|
|
110214
110590
|
return [
|
|
@@ -110228,8 +110604,8 @@ function renderMenuCommandHelp() {
|
|
|
110228
110604
|
" quit = stop",
|
|
110229
110605
|
"",
|
|
110230
110606
|
"Behavior:",
|
|
110231
|
-
" On macOS, `scout menu` loads the menu bar app from the installed
|
|
110232
|
-
" (the menu ships as an embedded helper). If
|
|
110607
|
+
" On macOS, `scout menu` loads the menu bar app from the installed Scout.app",
|
|
110608
|
+
" (the menu ships as an embedded helper). If Scout.app is not installed, a",
|
|
110233
110609
|
" repo checkout can fall back to `apps/macos/bin/openscout-menu.ts` for local",
|
|
110234
110610
|
" development. `scout menu build` and `scout menu dmg` always require a checkout.",
|
|
110235
110611
|
"",
|
|
@@ -110299,7 +110675,7 @@ function findRepoMenuHelper(startDirectory) {
|
|
|
110299
110675
|
if (existsSync39(candidate)) {
|
|
110300
110676
|
return candidate;
|
|
110301
110677
|
}
|
|
110302
|
-
const parent =
|
|
110678
|
+
const parent = dirname31(current);
|
|
110303
110679
|
if (parent === current) {
|
|
110304
110680
|
break;
|
|
110305
110681
|
}
|
|
@@ -110309,7 +110685,7 @@ function findRepoMenuHelper(startDirectory) {
|
|
|
110309
110685
|
return existsSync39(sourceRelativeCandidate) ? sourceRelativeCandidate : null;
|
|
110310
110686
|
}
|
|
110311
110687
|
function resolveRepoBundlePath(helperPath) {
|
|
110312
|
-
return resolve30(
|
|
110688
|
+
return resolve30(dirname31(helperPath), "..", "dist", "Scout.app", EMBEDDED_MENU_RELATIVE_PATH);
|
|
110313
110689
|
}
|
|
110314
110690
|
function menuProcesses(helperBundlePath) {
|
|
110315
110691
|
const expected = helperBundlePath ? join51(helperBundlePath, "Contents", "MacOS", MENU_PROCESS_NAME) : null;
|
|
@@ -110501,18 +110877,16 @@ async function runMenuCommand(context, args) {
|
|
|
110501
110877
|
const result = preferRepoHelper && repoHelperPath ? await runWithRepoHelper(context, repoHelperPath, command) : installedAppPath ? await runWithInstalledApp(context, command) : repoHelperPath ? await runWithRepoHelper(context, repoHelperPath, command) : await runWithInstalledApp(context, command);
|
|
110502
110878
|
context.output.writeValue(result, renderMenuResult);
|
|
110503
110879
|
}
|
|
110504
|
-
var MENU_BUNDLE_ID = "app.openscout.scout.menu", MENU_PROCESS_NAME = "ScoutMenu", APP_BUNDLE_ID = "app.openscout.scout", APP_BUNDLE_NAME = "
|
|
110880
|
+
var MENU_BUNDLE_ID = "app.openscout.scout.menu", MENU_PROCESS_NAME = "ScoutMenu", APP_BUNDLE_ID = "app.openscout.scout", APP_BUNDLE_NAME = "Scout.app", LEGACY_APP_BUNDLE_NAMES2, EMBEDDED_MENU_RELATIVE_PATH, HELP_FLAGS14, COMMON_APP_BUNDLE_PATHS;
|
|
110505
110881
|
var init_menu = __esm(() => {
|
|
110506
110882
|
init_src2();
|
|
110507
110883
|
init_app_lifecycle();
|
|
110508
110884
|
init_context();
|
|
110509
110885
|
init_errors();
|
|
110886
|
+
LEGACY_APP_BUNDLE_NAMES2 = ["OpenScout.app"];
|
|
110510
110887
|
EMBEDDED_MENU_RELATIVE_PATH = join51("Contents", "Library", "LoginItems", "ScoutMenu.app");
|
|
110511
110888
|
HELP_FLAGS14 = new Set(["help", "--help", "-h"]);
|
|
110512
|
-
COMMON_APP_BUNDLE_PATHS = [
|
|
110513
|
-
join51("/Applications", APP_BUNDLE_NAME),
|
|
110514
|
-
join51(homedir32(), "Applications", APP_BUNDLE_NAME)
|
|
110515
|
-
];
|
|
110889
|
+
COMMON_APP_BUNDLE_PATHS = [APP_BUNDLE_NAME, ...LEGACY_APP_BUNDLE_NAMES2].flatMap((name2) => [join51("/Applications", name2), join51(homedir32(), "Applications", name2)]);
|
|
110516
110890
|
});
|
|
110517
110891
|
|
|
110518
110892
|
// ../runtime/src/mesh-join.ts
|
|
@@ -111319,7 +111693,7 @@ var init_mesh = () => {};
|
|
|
111319
111693
|
|
|
111320
111694
|
// ../../apps/desktop/src/core/mesh/enroll-pending.ts
|
|
111321
111695
|
import { existsSync as existsSync40, mkdirSync as mkdirSync14, readFileSync as readFileSync22, rmSync as rmSync6, writeFileSync as writeFileSync11 } from "fs";
|
|
111322
|
-
import { dirname as
|
|
111696
|
+
import { dirname as dirname32, join as join52 } from "path";
|
|
111323
111697
|
function pendingMeshEnrollmentPath(supportDirectory) {
|
|
111324
111698
|
const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
|
|
111325
111699
|
return join52(dir, PENDING_FILE);
|
|
@@ -111329,7 +111703,7 @@ function savePendingMeshEnrollment(handshake, supportDirectory) {
|
|
|
111329
111703
|
assertTestIsolatedUserData("write the pending mesh enrollment", "OPENSCOUT_SUPPORT_DIRECTORY");
|
|
111330
111704
|
}
|
|
111331
111705
|
const path = pendingMeshEnrollmentPath(supportDirectory);
|
|
111332
|
-
mkdirSync14(
|
|
111706
|
+
mkdirSync14(dirname32(path), { recursive: true });
|
|
111333
111707
|
writeFileSync11(path, `${JSON.stringify(handshake, null, 2)}
|
|
111334
111708
|
`, { encoding: "utf8", mode: 384 });
|
|
111335
111709
|
}
|
|
@@ -114912,7 +115286,7 @@ function createLiveNormalizerContext(sessionId) {
|
|
|
114912
115286
|
// ../agent-sessions/src/adapters/claude-code/team-topology.ts
|
|
114913
115287
|
import { existsSync as existsSync45, readdirSync as readdirSync5, readFileSync as readFileSync28, statSync as statSync12 } from "fs";
|
|
114914
115288
|
import { homedir as homedir36 } from "os";
|
|
114915
|
-
import { basename as basename20, dirname as
|
|
115289
|
+
import { basename as basename20, dirname as dirname33, join as join55, relative as relative6 } from "path";
|
|
114916
115290
|
function isObject4(value) {
|
|
114917
115291
|
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
114918
115292
|
}
|
|
@@ -115153,7 +115527,7 @@ function parseTaskFile(taskPath, teamName, tasksRoot, sourceRef) {
|
|
|
115153
115527
|
const relativePath = relative6(join55(tasksRoot, teamName), taskPath);
|
|
115154
115528
|
const fallbackId = relativePath.replace(/\.[^.]+$/u, "");
|
|
115155
115529
|
const fallbackTitle = firstMarkdownTitle(raw) ?? basename20(fallbackId);
|
|
115156
|
-
const inferredState = inferTaskStateFromPath(
|
|
115530
|
+
const inferredState = inferTaskStateFromPath(dirname33(relativePath));
|
|
115157
115531
|
let parsed = null;
|
|
115158
115532
|
try {
|
|
115159
115533
|
const json2 = JSON.parse(raw);
|
|
@@ -123833,7 +124207,7 @@ var init_service9 = __esm(() => {
|
|
|
123833
124207
|
});
|
|
123834
124208
|
|
|
123835
124209
|
// ../../apps/desktop/src/core/pairing/runtime/bridge/ssh-terminal-access.ts
|
|
123836
|
-
import { createHash as
|
|
124210
|
+
import { createHash as createHash16 } from "crypto";
|
|
123837
124211
|
function validateIosGeneratedSshPublicKey(publicKey) {
|
|
123838
124212
|
const fields = publicKey.trim().split(/\s+/);
|
|
123839
124213
|
if (fields.length < 2) {
|
|
@@ -123994,10 +124368,10 @@ function readSshWireString(buffer, offset) {
|
|
|
123994
124368
|
};
|
|
123995
124369
|
}
|
|
123996
124370
|
function fingerprintKeyData(keyData) {
|
|
123997
|
-
return `SHA256:${
|
|
124371
|
+
return `SHA256:${createHash16("sha256").update(Buffer.from(keyData, "base64")).digest("base64").replace(/=+$/, "")}`;
|
|
123998
124372
|
}
|
|
123999
124373
|
function fingerprintUtf8(value) {
|
|
124000
|
-
return `SHA256:${
|
|
124374
|
+
return `SHA256:${createHash16("sha256").update(value, "utf8").digest("base64").replace(/=+$/, "")}`;
|
|
124001
124375
|
}
|
|
124002
124376
|
function encodeMarkerValue(value) {
|
|
124003
124377
|
return Buffer.from(value, "utf8").toString("base64url");
|
|
@@ -124020,10 +124394,10 @@ var init_ssh_terminal_access = __esm(() => {
|
|
|
124020
124394
|
});
|
|
124021
124395
|
|
|
124022
124396
|
// ../../apps/desktop/src/core/pairing/runtime/bridge/mobile-terminal-session.ts
|
|
124023
|
-
import { createHash as
|
|
124397
|
+
import { createHash as createHash17 } from "crypto";
|
|
124024
124398
|
function mobileTerminalSessionName(sshPublicKey, deviceClass) {
|
|
124025
124399
|
const normalizedClass = normalizeMobileTerminalDeviceClass(deviceClass);
|
|
124026
|
-
const signature =
|
|
124400
|
+
const signature = createHash17("sha256").update(sshPublicKey.trim()).digest("hex").slice(0, 8);
|
|
124027
124401
|
return `scout-${normalizedClass}-${signature}`;
|
|
124028
124402
|
}
|
|
124029
124403
|
function provisionedMobileTerminalSessionName(sshPublicKey, deviceClass) {
|
|
@@ -124059,7 +124433,7 @@ var init_mobile_terminal_session = __esm(() => {
|
|
|
124059
124433
|
});
|
|
124060
124434
|
|
|
124061
124435
|
// ../../apps/desktop/src/core/pairing/runtime/bridge/mobile-terminal-provision.ts
|
|
124062
|
-
import { createHash as
|
|
124436
|
+
import { createHash as createHash18 } from "crypto";
|
|
124063
124437
|
import {
|
|
124064
124438
|
chmodSync as chmodSync3,
|
|
124065
124439
|
closeSync,
|
|
@@ -124209,7 +124583,7 @@ function readRequiredHostKeyFingerprint() {
|
|
|
124209
124583
|
const keyData = pub.trim().split(/\s+/)[1];
|
|
124210
124584
|
if (!keyData)
|
|
124211
124585
|
throw new Error("missing key data");
|
|
124212
|
-
const digest =
|
|
124586
|
+
const digest = createHash18("sha256").update(Buffer.from(keyData, "base64")).digest("base64").replace(/=+$/, "");
|
|
124213
124587
|
return `SHA256:${digest}`;
|
|
124214
124588
|
} catch (error48) {
|
|
124215
124589
|
const detail = error48 instanceof Error ? error48.message : String(error48);
|
|
@@ -131463,7 +131837,7 @@ __export(exports_session, {
|
|
|
131463
131837
|
mergeTerminalSurfaces: () => mergeTerminalSurfaces
|
|
131464
131838
|
});
|
|
131465
131839
|
import { spawnSync as spawnSync11 } from "child_process";
|
|
131466
|
-
import { createHash as
|
|
131840
|
+
import { createHash as createHash19 } from "crypto";
|
|
131467
131841
|
import { mkdirSync as mkdirSync23 } from "fs";
|
|
131468
131842
|
import { homedir as homedir50 } from "os";
|
|
131469
131843
|
import { basename as basename25, join as join68, resolve as resolve35 } from "path";
|
|
@@ -131828,7 +132202,7 @@ function terminalSurfaceKey(surface) {
|
|
|
131828
132202
|
function defaultTerminalSessionName(input) {
|
|
131829
132203
|
const projectName2 = sanitizeTerminalSessionNamePart(basename25(input.cwd) || "workspace", 28);
|
|
131830
132204
|
const harnessName = sanitizeTerminalSessionNamePart(input.harness, 18);
|
|
131831
|
-
const fingerprint =
|
|
132205
|
+
const fingerprint = createHash19("sha1").update(`${input.backend}\x00${input.harness}\x00${input.cwd}\x00${input.sessionId}`).digest("hex").slice(0, 10);
|
|
131832
132206
|
return `scout-${harnessName}-${projectName2}-${fingerprint}`;
|
|
131833
132207
|
}
|
|
131834
132208
|
function sanitizeTerminalSessionNamePart(value, maxLength) {
|
|
@@ -132199,7 +132573,7 @@ __export(exports_server, {
|
|
|
132199
132573
|
import { spawn as spawn11 } from "child_process";
|
|
132200
132574
|
import { existsSync as existsSync52, mkdirSync as mkdirSync24, openSync as openSync2, writeFileSync as writeFileSync17 } from "fs";
|
|
132201
132575
|
import { homedir as homedir51 } from "os";
|
|
132202
|
-
import { dirname as
|
|
132576
|
+
import { dirname as dirname34, join as join69, resolve as resolve36 } from "path";
|
|
132203
132577
|
import { fileURLToPath as fileURLToPath13 } from "url";
|
|
132204
132578
|
function renderServerCommandHelp() {
|
|
132205
132579
|
return [
|
|
@@ -132259,7 +132633,7 @@ function resolveScoutControlPlaneWebServerEntry() {
|
|
|
132259
132633
|
startDirectories: [
|
|
132260
132634
|
process.env.OPENSCOUT_SETUP_CWD,
|
|
132261
132635
|
process.cwd(),
|
|
132262
|
-
|
|
132636
|
+
dirname34(fileURLToPath13(import.meta.url))
|
|
132263
132637
|
]
|
|
132264
132638
|
});
|
|
132265
132639
|
const source = resolveRepoEntrypoint(repoRoot, "packages/web/server/index.ts");
|
|
@@ -132781,14 +133155,14 @@ __export(exports_setup, {
|
|
|
132781
133155
|
});
|
|
132782
133156
|
import { existsSync as existsSync53 } from "fs";
|
|
132783
133157
|
import { homedir as homedir52 } from "os";
|
|
132784
|
-
import { dirname as
|
|
133158
|
+
import { dirname as dirname35, join as join70, resolve as resolve37 } from "path";
|
|
132785
133159
|
import { createInterface as createInterface4 } from "readline/promises";
|
|
132786
133160
|
function findGitRoot(startDirectory) {
|
|
132787
133161
|
let current = resolve37(startDirectory);
|
|
132788
133162
|
while (true) {
|
|
132789
133163
|
if (existsSync53(join70(current, ".git")))
|
|
132790
133164
|
return current;
|
|
132791
|
-
const parent =
|
|
133165
|
+
const parent = dirname35(current);
|
|
132792
133166
|
if (parent === current)
|
|
132793
133167
|
return null;
|
|
132794
133168
|
current = parent;
|
|
@@ -132797,7 +133171,7 @@ function findGitRoot(startDirectory) {
|
|
|
132797
133171
|
function suggestProjectSourceRoot(currentDirectory, homeDirectory = homedir52()) {
|
|
132798
133172
|
const gitRoot = findGitRoot(currentDirectory);
|
|
132799
133173
|
if (gitRoot && resolve37(gitRoot) !== resolve37(homeDirectory))
|
|
132800
|
-
return
|
|
133174
|
+
return dirname35(gitRoot);
|
|
132801
133175
|
for (const candidate of [
|
|
132802
133176
|
join70(homeDirectory, "dev"),
|
|
132803
133177
|
join70(homeDirectory, "Developer"),
|
|
@@ -133046,49 +133420,62 @@ var init_cursor_source = __esm(() => {
|
|
|
133046
133420
|
HEAD_READ_BYTES3 = 512 * 1024;
|
|
133047
133421
|
});
|
|
133048
133422
|
|
|
133049
|
-
// ../runtime/src/tail/
|
|
133050
|
-
var DEFAULT_HOT_DISCOVERY_WINDOW_MS4, DEFAULT_SHALLOW_DISCOVERY_WINDOW_MS4, DEFAULT_DEEP_DISCOVERY_WINDOW_MS4, HEAD_READ_BYTES4,
|
|
133051
|
-
var
|
|
133423
|
+
// ../runtime/src/tail/devin-source.ts
|
|
133424
|
+
var DEFAULT_HOT_DISCOVERY_WINDOW_MS4, DEFAULT_SHALLOW_DISCOVERY_WINDOW_MS4, DEFAULT_DEEP_DISCOVERY_WINDOW_MS4, HEAD_READ_BYTES4, sessionDbCache;
|
|
133425
|
+
var init_devin_source = __esm(() => {
|
|
133052
133426
|
init_discover();
|
|
133053
133427
|
init_tool_format();
|
|
133428
|
+
init_user_config();
|
|
133054
133429
|
DEFAULT_HOT_DISCOVERY_WINDOW_MS4 = 10 * 60 * 1000;
|
|
133055
133430
|
DEFAULT_SHALLOW_DISCOVERY_WINDOW_MS4 = 24 * 60 * 60 * 1000;
|
|
133056
133431
|
DEFAULT_DEEP_DISCOVERY_WINDOW_MS4 = 24 * 60 * 60 * 1000;
|
|
133057
|
-
HEAD_READ_BYTES4 =
|
|
133432
|
+
HEAD_READ_BYTES4 = 8 * 1024;
|
|
133433
|
+
sessionDbCache = new Map;
|
|
133434
|
+
});
|
|
133435
|
+
|
|
133436
|
+
// ../runtime/src/tail/grok-source.ts
|
|
133437
|
+
var DEFAULT_HOT_DISCOVERY_WINDOW_MS5, DEFAULT_SHALLOW_DISCOVERY_WINDOW_MS5, DEFAULT_DEEP_DISCOVERY_WINDOW_MS5, HEAD_READ_BYTES5, grokToolCallMatchers, metadataCache3;
|
|
133438
|
+
var init_grok_source = __esm(() => {
|
|
133439
|
+
init_discover();
|
|
133440
|
+
init_tool_format();
|
|
133441
|
+
DEFAULT_HOT_DISCOVERY_WINDOW_MS5 = 10 * 60 * 1000;
|
|
133442
|
+
DEFAULT_SHALLOW_DISCOVERY_WINDOW_MS5 = 24 * 60 * 60 * 1000;
|
|
133443
|
+
DEFAULT_DEEP_DISCOVERY_WINDOW_MS5 = 24 * 60 * 60 * 1000;
|
|
133444
|
+
HEAD_READ_BYTES5 = 256 * 1024;
|
|
133058
133445
|
grokToolCallMatchers = new Map;
|
|
133059
133446
|
metadataCache3 = new Map;
|
|
133060
133447
|
});
|
|
133061
133448
|
|
|
133062
133449
|
// ../runtime/src/tail/kimi-source.ts
|
|
133063
|
-
var
|
|
133450
|
+
var DEFAULT_HOT_DISCOVERY_WINDOW_MS6, DEFAULT_SHALLOW_DISCOVERY_WINDOW_MS6, DEFAULT_DEEP_DISCOVERY_WINDOW_MS6, metadataCache4;
|
|
133064
133451
|
var init_kimi_source = __esm(() => {
|
|
133065
133452
|
init_discover();
|
|
133066
133453
|
init_tool_format();
|
|
133067
|
-
|
|
133068
|
-
|
|
133069
|
-
|
|
133454
|
+
DEFAULT_HOT_DISCOVERY_WINDOW_MS6 = 10 * 60 * 1000;
|
|
133455
|
+
DEFAULT_SHALLOW_DISCOVERY_WINDOW_MS6 = 24 * 60 * 60 * 1000;
|
|
133456
|
+
DEFAULT_DEEP_DISCOVERY_WINDOW_MS6 = 24 * 60 * 60 * 1000;
|
|
133070
133457
|
metadataCache4 = new Map;
|
|
133071
133458
|
});
|
|
133072
133459
|
|
|
133073
133460
|
// ../runtime/src/tail/opencode-source.ts
|
|
133074
|
-
var
|
|
133461
|
+
var DEFAULT_HOT_DISCOVERY_WINDOW_MS7, DEFAULT_SHALLOW_DISCOVERY_WINDOW_MS7, DEFAULT_DEEP_DISCOVERY_WINDOW_MS7, HEAD_READ_BYTES6;
|
|
133075
133462
|
var init_opencode_source = __esm(() => {
|
|
133076
133463
|
init_discover();
|
|
133077
|
-
|
|
133078
|
-
|
|
133079
|
-
|
|
133080
|
-
|
|
133464
|
+
DEFAULT_HOT_DISCOVERY_WINDOW_MS7 = 10 * 60 * 1000;
|
|
133465
|
+
DEFAULT_SHALLOW_DISCOVERY_WINDOW_MS7 = 24 * 60 * 60 * 1000;
|
|
133466
|
+
DEFAULT_DEEP_DISCOVERY_WINDOW_MS7 = 24 * 60 * 60 * 1000;
|
|
133467
|
+
HEAD_READ_BYTES6 = 128 * 1024;
|
|
133081
133468
|
});
|
|
133082
133469
|
|
|
133083
133470
|
// ../runtime/src/tail/pi-source.ts
|
|
133084
|
-
var
|
|
133471
|
+
var DEFAULT_HOT_DISCOVERY_WINDOW_MS8, DEFAULT_SHALLOW_DISCOVERY_WINDOW_MS8, DEFAULT_DEEP_DISCOVERY_WINDOW_MS8, HEAD_READ_BYTES7, metadataCache5;
|
|
133085
133472
|
var init_pi_source = __esm(() => {
|
|
133086
133473
|
init_discover();
|
|
133087
133474
|
init_tool_format();
|
|
133088
|
-
|
|
133089
|
-
|
|
133090
|
-
|
|
133091
|
-
|
|
133475
|
+
DEFAULT_HOT_DISCOVERY_WINDOW_MS8 = 10 * 60 * 1000;
|
|
133476
|
+
DEFAULT_SHALLOW_DISCOVERY_WINDOW_MS8 = 24 * 60 * 60 * 1000;
|
|
133477
|
+
DEFAULT_DEEP_DISCOVERY_WINDOW_MS8 = 24 * 60 * 60 * 1000;
|
|
133478
|
+
HEAD_READ_BYTES7 = 256 * 1024;
|
|
133092
133479
|
metadataCache5 = new Map;
|
|
133093
133480
|
});
|
|
133094
133481
|
// ../runtime/src/tail/service.ts
|
|
@@ -133101,6 +133488,7 @@ var init_service11 = __esm(() => {
|
|
|
133101
133488
|
init_claude_source();
|
|
133102
133489
|
init_codex_source();
|
|
133103
133490
|
init_cursor_source();
|
|
133491
|
+
init_devin_source();
|
|
133104
133492
|
init_grok_source();
|
|
133105
133493
|
init_kimi_source();
|
|
133106
133494
|
init_opencode_source();
|
|
@@ -133694,7 +134082,7 @@ __export(exports_tui, {
|
|
|
133694
134082
|
});
|
|
133695
134083
|
import { spawnSync as spawnSync12 } from "child_process";
|
|
133696
134084
|
import { accessSync as accessSync5, constants as constants5, existsSync as existsSync54 } from "fs";
|
|
133697
|
-
import { dirname as
|
|
134085
|
+
import { dirname as dirname36, join as join71, resolve as resolve38 } from "path";
|
|
133698
134086
|
import { fileURLToPath as fileURLToPath14 } from "url";
|
|
133699
134087
|
function renderTuiCommandHelp() {
|
|
133700
134088
|
return [
|
|
@@ -133816,7 +134204,7 @@ function findScoutTuiCheckout(cwd, env) {
|
|
|
133816
134204
|
const starts = [
|
|
133817
134205
|
cwd,
|
|
133818
134206
|
env.OPENSCOUT_SETUP_CWD?.trim(),
|
|
133819
|
-
|
|
134207
|
+
dirname36(fileURLToPath14(import.meta.url))
|
|
133820
134208
|
].filter((value) => Boolean(value));
|
|
133821
134209
|
for (const start of starts) {
|
|
133822
134210
|
let current = resolve38(start);
|
|
@@ -133824,7 +134212,7 @@ function findScoutTuiCheckout(cwd, env) {
|
|
|
133824
134212
|
if (existsSync54(join71(current, "crates/scout-tui/Cargo.toml"))) {
|
|
133825
134213
|
return current;
|
|
133826
134214
|
}
|
|
133827
|
-
const parent =
|
|
134215
|
+
const parent = dirname36(current);
|
|
133828
134216
|
if (parent === current)
|
|
133829
134217
|
break;
|
|
133830
134218
|
current = parent;
|
|
@@ -134538,12 +134926,12 @@ var init_machine_update = __esm(() => {
|
|
|
134538
134926
|
});
|
|
134539
134927
|
|
|
134540
134928
|
// ../../apps/desktop/src/cli/machine-update-remote.ts
|
|
134541
|
-
import { createHash as
|
|
134929
|
+
import { createHash as createHash20 } from "crypto";
|
|
134542
134930
|
import { existsSync as existsSync56, readFileSync as readFileSync33 } from "fs";
|
|
134543
|
-
import { dirname as
|
|
134931
|
+
import { dirname as dirname37, resolve as resolve40 } from "path";
|
|
134544
134932
|
import { fileURLToPath as fileURLToPath15 } from "url";
|
|
134545
134933
|
function resolveUpdateHelperPath() {
|
|
134546
|
-
const here =
|
|
134934
|
+
const here = dirname37(fileURLToPath15(import.meta.url));
|
|
134547
134935
|
const candidates = [
|
|
134548
134936
|
resolve40(here, "update-helper.mjs"),
|
|
134549
134937
|
resolve40(here, "../update-helper.mjs"),
|
|
@@ -134572,7 +134960,7 @@ async function runRemoteCandidateInstall(options) {
|
|
|
134572
134960
|
["OpenScout.dmg", options.dmg]
|
|
134573
134961
|
]) {
|
|
134574
134962
|
const bytes = readFileSync33(path2);
|
|
134575
|
-
files[name2] = { data: bytes.toString("base64"), sha256:
|
|
134963
|
+
files[name2] = { data: bytes.toString("base64"), sha256: createHash20("sha256").update(bytes).digest("hex") };
|
|
134576
134964
|
}
|
|
134577
134965
|
const argv = ["ssh", "-o", "BatchMode=yes", "-o", "StrictHostKeyChecking=yes", "-o", "ConnectTimeout=8"];
|
|
134578
134966
|
if (options.target.port !== undefined)
|
|
@@ -134779,15 +135167,15 @@ function readSshConfigAliases(read2 = (path2) => readFileSync34(path2, "utf8"))
|
|
|
134779
135167
|
}
|
|
134780
135168
|
function resolveMachineSshDestination(machine, options = {}) {
|
|
134781
135169
|
const label = machineLabel(machine);
|
|
134782
|
-
if (!machine.capabilities.includes("ssh")) {
|
|
134783
|
-
throw new ScoutCliError(`${label} does not advertise ssh \u2014 cannot read its versions.`);
|
|
134784
|
-
}
|
|
134785
135170
|
const aliases = options.aliases ?? new Set;
|
|
134786
135171
|
const names2 = [machine.displayName ?? "", machine.name, ...machine.hostNames].map((name2) => name2.trim()).filter((name2) => name2.length > 0);
|
|
134787
135172
|
for (const name2 of names2) {
|
|
134788
135173
|
if (aliases.has(name2.toLowerCase()))
|
|
134789
135174
|
return name2;
|
|
134790
135175
|
}
|
|
135176
|
+
if (!machine.capabilities.includes("ssh")) {
|
|
135177
|
+
throw new ScoutCliError(`${label} does not advertise ssh \u2014 cannot read its versions.`);
|
|
135178
|
+
}
|
|
134791
135179
|
const tiers = [
|
|
134792
135180
|
machine.routes.filter((route2) => route2.kind === "tailnet").map((route2) => route2.host),
|
|
134793
135181
|
machine.routes.filter((route2) => route2.kind === "lan").map((route2) => route2.host),
|
|
@@ -135393,6 +135781,7 @@ async function loadScoutWhoAmIReport(context, currentDirectory) {
|
|
|
135393
135781
|
return {
|
|
135394
135782
|
defaultSenderId,
|
|
135395
135783
|
envAgent: context.env.OPENSCOUT_AGENT?.trim() || null,
|
|
135784
|
+
herdrAgentName: resolveHerdrAgentName(context.env),
|
|
135396
135785
|
codingAgentHost: detectCodingAgentHost(context.env),
|
|
135397
135786
|
currentDirectory,
|
|
135398
135787
|
projectRoot,
|
|
@@ -135409,6 +135798,9 @@ function renderScoutWhoAmIReport(report) {
|
|
|
135409
135798
|
if (report.envAgent) {
|
|
135410
135799
|
lines.push(`OPENSCOUT_AGENT: ${report.envAgent}`);
|
|
135411
135800
|
}
|
|
135801
|
+
if (report.herdrAgentName) {
|
|
135802
|
+
lines.push(`Herdr Agent: ${report.herdrAgentName}`);
|
|
135803
|
+
}
|
|
135412
135804
|
if (report.codingAgentHost) {
|
|
135413
135805
|
lines.push(`Host Harness: ${report.codingAgentHost.harness} (${report.codingAgentHost.signal})`);
|
|
135414
135806
|
}
|
|
@@ -135746,7 +136138,7 @@ function renderScoutHelp(version3 = "0.2.19") {
|
|
|
135746
136138
|
" scout server open",
|
|
135747
136139
|
"",
|
|
135748
136140
|
"macOS app:",
|
|
135749
|
-
" scout install # download + install
|
|
136141
|
+
" scout install # download + install Scout.app from the latest signed release",
|
|
135750
136142
|
" scout install --check # compare the installed app against the latest release",
|
|
135751
136143
|
"",
|
|
135752
136144
|
"Lifecycle:",
|
|
@@ -135830,7 +136222,7 @@ init_options();
|
|
|
135830
136222
|
// ../../apps/desktop/src/cli/broker-update.ts
|
|
135831
136223
|
import { randomUUID as randomUUID9 } from "crypto";
|
|
135832
136224
|
import { mkdir as mkdir16, readFile as readFile19, rename as rename2, rm as rm7, stat as stat7, writeFile as writeFile13 } from "fs/promises";
|
|
135833
|
-
import { basename as basename26, dirname as
|
|
136225
|
+
import { basename as basename26, dirname as dirname38, join as join74 } from "path";
|
|
135834
136226
|
|
|
135835
136227
|
// ../../apps/desktop/src/cli/runtime-freshness.ts
|
|
135836
136228
|
function isRecord18(value) {
|
|
@@ -135970,7 +136362,7 @@ async function tryCreateOwnedLock(lockPath) {
|
|
|
135970
136362
|
};
|
|
135971
136363
|
}
|
|
135972
136364
|
async function tryReclaimDeadLock(lockPath, observedOwner) {
|
|
135973
|
-
const reclaimPath = join74(
|
|
136365
|
+
const reclaimPath = join74(dirname38(lockPath), BROKER_UPDATE_RECLAIM_DIRECTORY);
|
|
135974
136366
|
const reclaimGuard = await tryCreateOwnedLock(reclaimPath);
|
|
135975
136367
|
if (!reclaimGuard.acquired) {
|
|
135976
136368
|
return false;
|
|
@@ -136012,7 +136404,7 @@ async function waitForBrokerUpdateLockRelease(lockPath, deadline) {
|
|
|
136012
136404
|
return false;
|
|
136013
136405
|
}
|
|
136014
136406
|
async function acquireBrokerUpdateLock(lockPath, waitTimeoutMs) {
|
|
136015
|
-
await mkdir16(
|
|
136407
|
+
await mkdir16(dirname38(lockPath), { recursive: true });
|
|
136016
136408
|
const waitDeadline = Date.now() + waitTimeoutMs;
|
|
136017
136409
|
for (;; ) {
|
|
136018
136410
|
const created = await tryCreateOwnedLock(lockPath);
|
|
@@ -136039,7 +136431,7 @@ async function acquireBrokerUpdateLock(lockPath, waitTimeoutMs) {
|
|
|
136039
136431
|
}
|
|
136040
136432
|
}
|
|
136041
136433
|
async function writeCliMtimeCheckpointAtomically(checkpointPath, mtime) {
|
|
136042
|
-
const checkpointDirectory =
|
|
136434
|
+
const checkpointDirectory = dirname38(checkpointPath);
|
|
136043
136435
|
await mkdir16(checkpointDirectory, { recursive: true });
|
|
136044
136436
|
const temporaryPath = join74(checkpointDirectory, `.${basename26(checkpointPath)}.${process.pid}.${randomUUID9()}.tmp`);
|
|
136045
136437
|
try {
|
|
@@ -136076,7 +136468,7 @@ async function ensureBrokerUptodate(options) {
|
|
|
136076
136468
|
const report = options.report ?? (() => {
|
|
136077
136469
|
return;
|
|
136078
136470
|
});
|
|
136079
|
-
const lockPath = join74(
|
|
136471
|
+
const lockPath = join74(dirname38(options.checkpointPath), BROKER_UPDATE_LOCK_DIRECTORY);
|
|
136080
136472
|
let lock;
|
|
136081
136473
|
try {
|
|
136082
136474
|
lock = await acquireBrokerUpdateLock(lockPath, options.lockWaitTimeoutMs ?? BROKER_UPDATE_LOCK_WAIT_MS);
|