@openscout/scout 0.2.87 → 0.2.90

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/README.md +10 -5
  2. package/bin/scoutd +0 -0
  3. package/dist/build-manifest.json +4 -4
  4. package/dist/client/assets/ActivityScreen-BUeb4ERK.js +1 -0
  5. package/dist/client/assets/{AddProjectForm-Dw2oyCcz.js → AddProjectForm-DtTfn4Zk.js} +1 -1
  6. package/dist/client/assets/AgentAvatar-CneOa70z.js +1 -0
  7. package/dist/client/assets/AgentConfigurationScreen-CkZ7EjZh.js +1 -0
  8. package/dist/client/assets/AgentDefinitionsWorkspace-0Y3kqMtv.js +1 -0
  9. package/dist/client/assets/{AgentDetailCard-2DZQahiN.js → AgentDetailCard-Dtc02KUO.js} +1 -1
  10. package/dist/client/assets/AgentFloorView-B5raPB_U.js +1 -0
  11. package/dist/client/assets/AgentInfoScreen-DFG4ElZD.js +1 -0
  12. package/dist/client/assets/{AgentLaneCard-CeSjWWwh.js → AgentLaneCard-BRAkw8YJ.js} +1 -1
  13. package/dist/client/assets/{AgentLaneChrome-Do7CXwin.js → AgentLaneChrome-T8QE5742.js} +1 -1
  14. package/dist/client/assets/AgentLaneDetailSheet-C8RYotnv.js +4 -0
  15. package/dist/client/assets/{AgentLaneSummaryResize--lHgnncr.js → AgentLaneSummaryResize-FyYweLo_.js} +1 -1
  16. package/dist/client/assets/AgentLanesEmbedScreen-Br7cmZVO.js +1 -0
  17. package/dist/client/assets/{AgentLanesPreflight-BwkGk8JH.js → AgentLanesPreflight-Cil3dNwu.js} +1 -1
  18. package/dist/client/assets/AgentLanesView-DPfO8MOo.js +2 -0
  19. package/dist/client/assets/{AgentLiveActions-BmXDRxER.js → AgentLiveActions-DwScaVRF.js} +1 -1
  20. package/dist/client/assets/AgentSessions-DKoWA0Lm.js +6 -0
  21. package/dist/client/assets/AgentsConsole-DoBIWGoq.js +1 -0
  22. package/dist/client/assets/AgentsScreen-JuUiSuwY.js +1 -0
  23. package/dist/client/assets/AgentsSubnav-BV0WAgzf.js +1 -0
  24. package/dist/client/assets/{AtopView-DOKJbiJL.js → AtopView-ycxMrRwp.js} +1 -1
  25. package/dist/client/assets/BackToPicker-D6WgIDb-.js +1 -0
  26. package/dist/client/assets/BriefingDetailScreen-Zw-taW1s.js +6 -0
  27. package/dist/client/assets/{BriefingsScreen-DLIJ8eYj.js → BriefingsScreen-BerYOoWS.js} +1 -1
  28. package/dist/client/assets/{BrokerMetadataPanel-C8WERmHF.js → BrokerMetadataPanel-Cu93j-Ga.js} +1 -1
  29. package/dist/client/assets/BrokerScreen-CeN90URH.js +5 -0
  30. package/dist/client/assets/ChatCollapsedStrip-DdKyMSEM.js +1 -0
  31. package/dist/client/assets/{CodeDiffPane-CtgqIuS0.js → CodeDiffPane-BjCOBLze.js} +1 -1
  32. package/dist/client/assets/{CodeProjectPicker-C4W_udc7.js → CodeProjectPicker-NSGdCaK0.js} +1 -1
  33. package/dist/client/assets/{CodeScreen-WhTvVUKY.js → CodeScreen-CA9Sq6Dx.js} +1 -1
  34. package/dist/client/assets/ContextMenu-DnFcmfMR.js +1 -0
  35. package/dist/client/assets/ConversationComposer-CjRXFkvY.js +1 -0
  36. package/dist/client/assets/ConversationFeedRows-CgRTIpAv.js +1 -0
  37. package/dist/client/assets/ConversationHeader-CRmdtuL7.js +1 -0
  38. package/dist/client/assets/ConversationPanels-DCkcLIHk.js +2 -0
  39. package/dist/client/assets/ConversationScreen-Br0QQ3xo.js +1 -0
  40. package/dist/client/assets/ConversationScreen-yIKEsm-8.css +1 -0
  41. package/dist/client/assets/ConversationStatus-BJ1CMbAv.js +1 -0
  42. package/dist/client/assets/{DataTable-DFacT2uu.js → DataTable-Dzqiaha4.js} +1 -1
  43. package/dist/client/assets/{DispatchAftermath-D797PbCe.js → DispatchAftermath-B0WMg_z3.js} +1 -1
  44. package/dist/client/assets/DocumentFocusViewer-CZVVIAD5.js +1 -0
  45. package/dist/client/assets/{EmbeddableSurfacesLab-JczLmmF-.js → EmbeddableSurfacesLab-C3a7hJWO.js} +1 -1
  46. package/dist/client/assets/{EmptyState-uQbB-bvP.js → EmptyState-CYNJZMrZ.js} +1 -1
  47. package/dist/client/assets/{FileViewerPane-ebbCtnHE.js → FileViewerPane-Fwt8_KmD.js} +1 -1
  48. package/dist/client/assets/FleetSearch-Dsi_l2KW.js +1 -0
  49. package/dist/client/assets/FleetSearch-EXOe8ulE.css +1 -0
  50. package/dist/client/assets/FlightObserveScreen-g_tiGmvz.js +1 -0
  51. package/dist/client/assets/{FollowScreen-Bfu2_KtU.js → FollowScreen-Bb_rcrzi.js} +1 -1
  52. package/dist/client/assets/{HarnessMark-CEzmPFHC.js → HarnessMark-DrE57dUq.js} +1 -1
  53. package/dist/client/assets/HarnessesScreen-CAsCJ_tG.js +1 -0
  54. package/dist/client/assets/{HerdrSession-BDLa_rrK.js → HerdrSession-1eVu9Owj.js} +1 -1
  55. package/dist/client/assets/HomeHero-DEl-WBsT.css +1 -0
  56. package/dist/client/assets/HomeHero-W445QrG1.js +1 -0
  57. package/dist/client/assets/{KnowledgeSearchInspector-GjmxYBi_.js → KnowledgeSearchInspector-CbPVg3fr.js} +1 -1
  58. package/dist/client/assets/KnowledgeSearchScreen-C1lN1xJk.js +1 -0
  59. package/dist/client/assets/{LaneToolHoverCard-DCY-m0JK.js → LaneToolHoverCard-BkBcDYm-.js} +1 -1
  60. package/dist/client/assets/LaneTraceDetailSheet-CzTd44rf.js +1 -0
  61. package/dist/client/assets/{LaneTraceEventFocus-BfKZ7G5c.js → LaneTraceEventFocus-BmMmPTyJ.js} +1 -1
  62. package/dist/client/assets/{MeshCanvas-CZYHLTvw.js → MeshCanvas-DwkjsiJ5.js} +2 -2
  63. package/dist/client/assets/{MeshCanvasMinimap-D3mJ78CM.js → MeshCanvasMinimap-vmCpU1sD.js} +1 -1
  64. package/dist/client/assets/MeshScreen-CkMepUpT.js +1 -0
  65. package/dist/client/assets/{MeshTopologyView-A-wh0Ad1.js → MeshTopologyView-BD2xLE2C.js} +2 -2
  66. package/dist/client/assets/MessageComposerSuggestions-qbalTne_.js +1 -0
  67. package/dist/client/assets/MessagesScreen-C8UynyLC.js +1 -0
  68. package/dist/client/assets/{MissionContextRail-MTL2EAnr.js → MissionContextRail-D5MEP2f4.js} +1 -1
  69. package/dist/client/assets/MissionControlView-K_I7eftL.js +1 -0
  70. package/dist/client/assets/MissionFocusOverlay-CWKLdUKG.js +1 -0
  71. package/dist/client/assets/MissionLeftAgentRow-ByGrNAcs.js +1 -0
  72. package/dist/client/assets/MissionLogPane-ZwHJ137T.js +1 -0
  73. package/dist/client/assets/{NewAgentModal-Ctixol4_.js → NewAgentModal-Do9aVvan.js} +1 -1
  74. package/dist/client/assets/NewChatComposer-DKlNX1UA.js +19 -0
  75. package/dist/client/assets/{NewChatOrigin-CCiPg_WR.js → NewChatOrigin-DXPvX-hh.js} +1 -1
  76. package/dist/client/assets/ObserveEmbedScreen-Dghsq2on.js +2 -0
  77. package/dist/client/assets/ObserveTextFlow-DWNlmTVm.js +2 -0
  78. package/dist/client/assets/ObservedTopologyPanel-BlmGoxCE.js +2 -0
  79. package/dist/client/assets/OpenScoutAppShell-DDqQi-oe.js +87 -0
  80. package/dist/client/assets/OpsAgentsView-Bn_fGBdo.js +1 -0
  81. package/dist/client/assets/OpsScreen-DHnT-Q9R.js +1 -0
  82. package/dist/client/assets/OpsSubnav-CJRD7MjM.js +1 -0
  83. package/dist/client/assets/PlanView-B6gKo543.js +1 -0
  84. package/dist/client/assets/ProjectAgentProfile-Be1VOkI4.js +1 -0
  85. package/dist/client/assets/{ProjectAgentProfileBar-B4RqrI0Q.js → ProjectAgentProfileBar-C5QWwZCn.js} +1 -1
  86. package/dist/client/assets/ProjectAgentProfileHero-DC7Dd8VL.js +1 -0
  87. package/dist/client/assets/ProjectsInbox-DCLrDmj1.js +2 -0
  88. package/dist/client/assets/ProjectsRail-C4hiXYSb.js +1 -0
  89. package/dist/client/assets/ProjectsScreen-jruZRjgD.js +1 -0
  90. package/dist/client/assets/ProjectsThreadAside-DYmL2dCY.js +1 -0
  91. package/dist/client/assets/Provider-p-xuaAoE.js +1 -0
  92. package/dist/client/assets/RailRow-Cf9LOiEj.css +1 -0
  93. package/dist/client/assets/RailRow-bRkkXIpR.js +1 -0
  94. package/dist/client/assets/RawSessionsTable-B7WKmXrk.js +1 -0
  95. package/dist/client/assets/RealtimeVoiceScreen-BzP3BQq9.js +1 -0
  96. package/dist/client/assets/{RepoDiffEmbedScreen-Cr1SL5ht.js → RepoDiffEmbedScreen-xjzjcJ_c.js} +1 -1
  97. package/dist/client/assets/{RepoDiffPageScreen-DeC8fsh_.js → RepoDiffPageScreen-DRzIY-dk.js} +1 -1
  98. package/dist/client/assets/RepoDiffViewer-CNDp01KM.js +7 -0
  99. package/dist/client/assets/RepoDiffViewerLazy-b6vjYxez.js +2 -0
  100. package/dist/client/assets/{ReposScreen-BQwIShXf.js → ReposScreen-CpaLC_NU.js} +6 -6
  101. package/dist/client/assets/ScoutDeckSurface-DkpZ-0DH.js +1 -0
  102. package/dist/client/assets/{ScoutSurface-DdVzN3DA.js → ScoutSurface-BENBUt5-.js} +1 -1
  103. package/dist/client/assets/ScoutbotBroadcastChip-CGZyxS5H.js +2 -0
  104. package/dist/client/assets/{agent-autocomplete-C7xwIcwd.css → ScoutbotBroadcastChip-CxtYZWPZ.css} +1 -1
  105. package/dist/client/assets/{ScoutbotFxLab-sLjfSKtS.js → ScoutbotFxLab-Bk2ZsfPp.js} +1 -1
  106. package/dist/client/assets/ScoutbotRealtimeVoiceCall-n63LdBZs.js +1 -0
  107. package/dist/client/assets/{SecondaryNav-CCQqTT3e.js → SecondaryNav-B4IsujYh.js} +1 -1
  108. package/dist/client/assets/{SessionEmbedScreen-BrLMZJ3N.js → SessionEmbedScreen-CPfH-jqN.js} +1 -1
  109. package/dist/client/assets/{SessionObserve-pbozyqVv.js → SessionObserve-B-SkP3tu.js} +1 -1
  110. package/dist/client/assets/{SessionObserveEvidence-C54Xvbps.js → SessionObserveEvidence-CF5jnH3-.js} +1 -1
  111. package/dist/client/assets/SessionRefScreen-C-4jjmVG.js +1 -0
  112. package/dist/client/assets/SessionsScreen-HAjFvmIq.js +1 -0
  113. package/dist/client/assets/SettingsDrawer-DATxwZrn.js +3 -0
  114. package/dist/client/assets/SettingsDrawer-UX7pFJU_.css +1 -0
  115. package/dist/client/assets/SettingsScreen-Bu53X7J_.js +1 -0
  116. package/dist/client/assets/{ShikiPane-CiVH-45m.js → ShikiPane-DH8yYDks.js} +1 -1
  117. package/dist/client/assets/{SlidePanel-BLrLF9dt.js → SlidePanel-RFXJpfUa.js} +1 -1
  118. package/dist/client/assets/{SpriteAvatar-vpHO-rXs.js → SpriteAvatar-CEYdCzem.js} +1 -1
  119. package/dist/client/assets/{StatusPill-a3XBw1GG.js → StatusPill-9uy70ttd.js} +1 -1
  120. package/dist/client/assets/{TailView-C3rjOV7i.js → TailView-6bIrgdxN.js} +2 -2
  121. package/dist/client/assets/Terminal-BI6km7H4.js +1 -0
  122. package/dist/client/assets/TerminalEmbedScreen-D4JOWwtm.js +1 -0
  123. package/dist/client/assets/{TextDocumentSurface-B29xZNlI.js → TextDocumentSurface-BcP9vvji.js} +1 -1
  124. package/dist/client/assets/{TmuxPeek-eVfqPB4m.js → TmuxPeek-IaWqCgyJ.js} +1 -1
  125. package/dist/client/assets/{VoicePermissionsPanel-DpInOlVq.js → VoicePermissionsPanel-C80iZxgy.js} +1 -1
  126. package/dist/client/assets/{WorkDetailScreen-DYwgGaJs.js → WorkDetailScreen-CweZ6fEd.js} +3 -3
  127. package/dist/client/assets/WorkFilesViewer-Dy_-06iI.js +1 -0
  128. package/dist/client/assets/{activity-DTqqWiyV.js → activity-DS0u0Itf.js} +1 -1
  129. package/dist/client/assets/{addon-fit-CcaylYTX.js → addon-fit-CN888B3D.js} +1 -1
  130. package/dist/client/assets/{addon-webgl-B37iuzOG.js → addon-webgl-CoAnanQS.js} +1 -1
  131. package/dist/client/assets/{agent-essentials-DbbJm3ne.js → agent-essentials-CuK4G_zS.js} +1 -1
  132. package/dist/client/assets/agent-identity-BxCsXnDp.js +1 -0
  133. package/dist/client/assets/{agent-lane-card-model-CSugZCdy.js → agent-lane-card-model-q4cwzLX4.js} +1 -1
  134. package/dist/client/assets/{agent-lane-detail-D5EIlX7_.js → agent-lane-detail-BNNm6FNu.js} +1 -1
  135. package/dist/client/assets/{agent-lane-preview-BhplDYGf.js → agent-lane-preview-C33Dwpn7.js} +1 -1
  136. package/dist/client/assets/{agent-lanes-DlqcEf0l.css → agent-lanes-BDNktFBZ.css} +1 -1
  137. package/dist/client/assets/{agent-lanes-model-BKOs_32K.js → agent-lanes-model-VYQ5a68i.js} +2 -2
  138. package/dist/client/assets/{api-BHHEUSS3.js → api-BkjHJfgJ.js} +1 -1
  139. package/dist/client/assets/api-h5zurxmi.js +1 -0
  140. package/dist/client/assets/{arc.es-BRPqOKIx.js → arc.es-BET9ev6q.js} +1 -1
  141. package/dist/client/assets/arrow-down-DxxPnPwh.js +1 -0
  142. package/dist/client/assets/{arrow-left-B0CdJdAC.js → arrow-left-CXDkJuCg.js} +1 -1
  143. package/dist/client/assets/{arrow-up-right-CilNLf4t.js → arrow-up-right-Bj8RjSqW.js} +1 -1
  144. package/dist/client/assets/{bot-Ba3gcRVa.js → bot-BSGSicKC.js} +1 -1
  145. package/dist/client/assets/broker-display-pp33bLsu.js +2 -0
  146. package/dist/client/assets/{cache-BO2Bd_LV.js → cache-Dr0why2k.js} +1 -1
  147. package/dist/client/assets/{check-BdovFDz8.js → check-BfA0T8UD.js} +1 -1
  148. package/dist/client/assets/{chevron-down-Jh540uf3.js → chevron-down-BVg09D6U.js} +1 -1
  149. package/dist/client/assets/{chevron-right-CV7sEVBS.js → chevron-right-CaEwYkxE.js} +1 -1
  150. package/dist/client/assets/{chunk-HRAB3GC3-BYQZ1LOn.js → chunk-HRAB3GC3-HhKwnZCi.js} +1 -1
  151. package/dist/client/assets/chunk-JTPDIGGW-DX2eTIQ_.js +46 -0
  152. package/dist/client/assets/chunk-T65CQEWV-D-bOfuCH.js +1 -0
  153. package/dist/client/assets/chunk-YOZR3KYS-oS9dlQCI.js +2 -0
  154. package/dist/client/assets/{clock-DpfYdWcr.js → clock-C3TUL7D7.js} +1 -1
  155. package/dist/client/assets/{code-xml-CPzpZkhu.js → code-xml-Dbvjk9Kw.js} +1 -1
  156. package/dist/client/assets/collapsed-strip-Dz-of2SM.css +1 -0
  157. package/dist/client/assets/content-BQuEedeL.js +1 -0
  158. package/dist/client/assets/content-BUae-L_N.js +1 -0
  159. package/dist/client/assets/content-BfG98J1k.js +1 -0
  160. package/dist/client/assets/content-BkVTfkAC.js +1 -0
  161. package/dist/client/assets/content-BsNMos_d.js +1 -0
  162. package/dist/client/assets/content-C2TZOKSE.js +1 -0
  163. package/dist/client/assets/content-CCn98eSk.js +1 -0
  164. package/dist/client/assets/content-CJuH5cDP.js +1 -0
  165. package/dist/client/assets/content-CYnPp9yo.js +1 -0
  166. package/dist/client/assets/content-CcrUhm4P.js +1 -0
  167. package/dist/client/assets/content-CiOMtgQc.js +1 -0
  168. package/dist/client/assets/content-CxuVONeQ.js +1 -0
  169. package/dist/client/assets/content-Dmq9n1_L.js +1 -0
  170. package/dist/client/assets/content-DskHP2NI.js +1 -0
  171. package/dist/client/assets/content-DvvzL2HK.js +1 -0
  172. package/dist/client/assets/content-snCAUbwv.js +1 -0
  173. package/dist/client/assets/{conversation-icons-bHIIZ9z3.js → conversation-icons-DmC_Ak3z.js} +1 -1
  174. package/dist/client/assets/conversation-model-CHwHZNw-.js +1 -0
  175. package/dist/client/assets/conversation-motion-features-DPiGTO21.js +1 -0
  176. package/dist/client/assets/{copy-DQAM0eSY.js → copy-C79v_7D-.js} +1 -1
  177. package/dist/client/assets/{createLucideIcon-Da0lq809.js → createLucideIcon-DCq_3fQn.js} +1 -1
  178. package/dist/client/assets/ctx-panel-B4s49N9e.css +1 -0
  179. package/dist/client/assets/discover-IEnbrH8_.js +2 -0
  180. package/dist/client/assets/embed-entry-XUPb-AzL.js +2 -0
  181. package/dist/client/assets/{external-link-BheHazeW.js → external-link-Dd8xaveL.js} +1 -1
  182. package/dist/client/assets/{eye-B908WSFH.js → eye-DkU59kfl.js} +1 -1
  183. package/dist/client/assets/{file-text-BGVkHS4_.js → file-text-BITQqGtF.js} +1 -1
  184. package/dist/client/assets/gestures-B5rLNRpi.js +1 -0
  185. package/dist/client/assets/home-moving-signal-Bs635mVw.js +1 -0
  186. package/dist/client/assets/home-moving-signal-CAa0V91u.css +1 -0
  187. package/dist/client/assets/home-now-card-VxlLjg1A.js +1 -0
  188. package/dist/client/assets/{home-now-card-nano-iwd10r9G.js → home-now-card-nano-C06GMiwD.js} +1 -1
  189. package/dist/client/assets/hooks-BWiLxTw1.js +2 -0
  190. package/dist/client/assets/index-9as_JTUs.css +1 -0
  191. package/dist/client/assets/index-BTj2MguM.js +1 -0
  192. package/dist/client/assets/index-BZovGpDk.js +10 -0
  193. package/dist/client/assets/index-CvF09yvf.css +1 -0
  194. package/dist/client/assets/index-DiiEQwdc.js +1 -0
  195. package/dist/client/assets/index-vbaJ8sin.js +1 -0
  196. package/dist/client/assets/inspector-panel-C96HcyK5.js +2 -0
  197. package/dist/client/assets/{keyboard-nav-feLCB3Zm.js → keyboard-nav-CHo_xmjw.js} +1 -1
  198. package/dist/client/assets/{lane-observe-vfyACHi0.js → lane-observe-BA3g9aVd.js} +1 -1
  199. package/dist/client/assets/{lane-roster-store-BAmj273z.js → lane-roster-store-B6ybJlHJ.js} +1 -1
  200. package/dist/client/assets/left-Bk3XnxPD.css +1 -0
  201. package/dist/client/assets/left-BuJ0wJW1.js +2 -0
  202. package/dist/client/assets/left-C6Zj3cR4.js +1 -0
  203. package/dist/client/assets/left-CCoobxPS.css +1 -0
  204. package/dist/client/assets/left-COMAiMfB.js +2 -0
  205. package/dist/client/assets/left-Ce4WKYPK.js +1 -0
  206. package/dist/client/assets/left-DMJkmJOF.js +1 -0
  207. package/dist/client/assets/left-DrCbY6ja.js +1 -0
  208. package/dist/client/assets/left-agents-BuSyVNGE.js +1 -0
  209. package/dist/client/assets/left-default-DRHywOKX.js +1 -0
  210. package/dist/client/assets/left-l92tw5Kc.js +1 -0
  211. package/dist/client/assets/left-lanes-4-aUyyrV.js +1 -0
  212. package/dist/client/assets/left-mission-e849d_Td.js +1 -0
  213. package/dist/client/assets/left-plan-MchYwAB_.js +2 -0
  214. package/dist/client/assets/library-DygjpA6u.js +1 -0
  215. package/dist/client/assets/{loader-circle-Be0T8xv2.js → loader-circle-B-l2Wj3-.js} +1 -1
  216. package/dist/client/assets/{local-agents-Q6KQ12B9.js → local-agents-Wof5knTJ.js} +1 -1
  217. package/dist/client/assets/{mentions-KNASbAjG.js → mentions-BjXfeF7t.js} +1 -1
  218. package/dist/client/assets/{mesh-ops-C-i8OMiM.js → mesh-ops-C1gq8zKf.js} +1 -1
  219. package/dist/client/assets/{mesh-view-store-B0lqpw8M.js → mesh-view-store-B56D3f77.js} +1 -1
  220. package/dist/client/assets/{message-circle-2v9Udia0.js → message-circle-BwVx5X0q.js} +1 -1
  221. package/dist/client/assets/{message-markup-BP2nH9kQ.js → message-markup-DlVX-iuc.js} +1 -1
  222. package/dist/client/assets/{message-square-DURSOrUr.js → message-square-BnkG6tae.js} +1 -1
  223. package/dist/client/assets/mission-control-m3BTDQ9l.css +1 -0
  224. package/dist/client/assets/{mission-control-store-HeCy97KT.js → mission-control-store-CMgIVjLJ.js} +1 -1
  225. package/dist/client/assets/model-Co0zkMIc.js +1 -0
  226. package/dist/client/assets/{observe-DkAhvkfn.js → observe-DVHAcIrv.js} +1 -1
  227. package/dist/client/assets/{operator-attention-BqoWAlhp.js → operator-attention-BwSPeheT.js} +1 -1
  228. package/dist/client/assets/{page-status-CEP5pGf3.js → page-status-Bg2hd27j.js} +1 -1
  229. package/dist/client/assets/paperclip-DblaLD_N.js +1 -0
  230. package/dist/client/assets/plan-view-D56fneVF.css +1 -0
  231. package/dist/client/assets/{plus-ZReaTFF-.js → plus-BAI0t5g9.js} +1 -1
  232. package/dist/client/assets/profile-3Q4sUtvJ.js +1 -0
  233. package/dist/client/assets/projects-inbox-Da2hYEn6.js +1 -0
  234. package/dist/client/assets/{radio-BC9TO5Pl.js → radio-BGtkyCG9.js} +1 -1
  235. package/dist/client/assets/{refresh-cw-C4E58VJK.js → refresh-cw-DtF8xPqX.js} +1 -1
  236. package/dist/client/assets/resolve-panes-D4tlKNCT.js +1 -0
  237. package/dist/client/assets/resolve-sidebar-context-B27lj3Ci.js +1 -0
  238. package/dist/client/assets/right-B8qg3JdB.js +1 -0
  239. package/dist/client/assets/{right-BarpRgcv.js → right-BU_W1kSH.js} +1 -1
  240. package/dist/client/assets/right-BlR7h0US.js +1 -0
  241. package/dist/client/assets/right-BwgwTGGd.js +1 -0
  242. package/dist/client/assets/right-ByptvkVX.js +1 -0
  243. package/dist/client/assets/right-CUP-NIDG.js +1 -0
  244. package/dist/client/assets/right-Ch_jrNe2.js +1 -0
  245. package/dist/client/assets/right-Dd2DscRz.js +1 -0
  246. package/dist/client/assets/right-DmVHd8Xj.js +1 -0
  247. package/dist/client/assets/{right-CIzaNH58.js → right-c4PAdFYZ.js} +1 -1
  248. package/dist/client/assets/{rocket-BahfIwFz.js → rocket-BWh18pt_.js} +1 -1
  249. package/dist/client/assets/router-63XV_E7f.js +1 -0
  250. package/dist/client/assets/{text-B2UZi3l9.js → runtime-picker-BXKJbLot.js} +1 -1
  251. package/dist/client/assets/runtime-picker-vhm0gtLs.css +1 -0
  252. package/dist/client/assets/{scope-views-CmG2X_S0.js → scope-views-Dm2_-NPi.js} +1 -1
  253. package/dist/client/assets/scout-voice-D8Q5sZOL.js +1 -0
  254. package/dist/client/assets/{scoutbot-D4vuKzOL.js → scoutbot-BTIErYHo.js} +2 -2
  255. package/dist/client/assets/{scroll-text-uulNqrf7.js → scroll-text-DZb3mmYo.js} +1 -1
  256. package/dist/client/assets/{search-HmdKXdtR.js → search-1QMVOxF3.js} +1 -1
  257. package/dist/client/assets/secondaryNavConfig-c0cz3MkJ.js +1 -0
  258. package/dist/client/assets/{selection-bridge-n4wNTm1B.js → selection-bridge-O9C4kGfF.js} +1 -1
  259. package/dist/client/assets/{send-horizontal-DOjHkZCD.js → send-horizontal-DbyEkGql.js} +1 -1
  260. package/dist/client/assets/{server-CX-xQjJA.js → server-Bncn9S7r.js} +1 -1
  261. package/dist/client/assets/{session-catalog-b7B1Sof1.js → session-catalog-DC6BlBBC.js} +1 -1
  262. package/dist/client/assets/{session-table-Djain1Qr.js → session-table-BUPq9Viy.js} +1 -1
  263. package/dist/client/assets/{sliders-horizontal-D2O6QiDN.js → sliders-horizontal-CMe8Bay1.js} +1 -1
  264. package/dist/client/assets/{sparkles-CgTby-ap.js → sparkles-_7cTZsIH.js} +1 -1
  265. package/dist/client/assets/{sse-QSbhyq9A.js → sse-Bb0EOcU9.js} +1 -1
  266. package/dist/client/assets/system-surfaces-redesign-B7GQhfpw.css +1 -0
  267. package/dist/client/assets/{tail-display-DcliDVkW.js → tail-display-BRcJltQa.js} +1 -1
  268. package/dist/client/assets/{tail-events-B7BrDaFi.js → tail-events-C12pfUax.js} +1 -1
  269. package/dist/client/assets/{terminal-relay-C2TUIuh1.js → terminal-relay-BgfVJXIL.js} +1 -1
  270. package/dist/client/assets/{terminal-sessions-D4dHTRkt.js → terminal-sessions-AmSgHklm.js} +1 -1
  271. package/dist/client/assets/{terminal-takeover-BArLfNtd.js → terminal-takeover--05EYhJm.js} +1 -1
  272. package/dist/client/assets/{terminal-DNZTCr6a.js → terminal-xGf_F3y7.js} +1 -1
  273. package/dist/client/assets/text-DsBWV_4k.js +1 -0
  274. package/dist/client/assets/{use-conversation-list-htp0Ui63.js → use-conversation-list-DWX02INv.js} +1 -1
  275. package/dist/client/assets/{use-fleet-active-asks-BhuTn5mV.js → use-fleet-active-asks-Cnwa4hTK.js} +1 -1
  276. package/dist/client/assets/{use-mesh-ops-items-CD-qsvNX.js → use-mesh-ops-items-BRFm37oY.js} +1 -1
  277. package/dist/client/assets/use-reduced-motion-C8cWvIZ3.js +1 -0
  278. package/dist/client/assets/use-scout-dev-flags-FkMreOOb.js +1 -0
  279. package/dist/client/assets/{useAgentHoverCard-BIrm8esH.js → useAgentHoverCard-DvPZSJK3.js} +1 -1
  280. package/dist/client/assets/useContentSecondaryNav-CNlrhvvx.js +1 -0
  281. package/dist/client/assets/{usePierreRuntime-CVTMzChM.js → usePierreRuntime-C8WJ0X3F.js} +1 -1
  282. package/dist/client/assets/{wrench-DwFKomxg.js → wrench-_tHBGTop.js} +1 -1
  283. package/dist/client/assets/{x-DuzAbpk5.js → x-CrGUKNRv.js} +1 -1
  284. package/dist/client/assets/{xterm-xQGYNyB-.js → xterm-Ks-VlLTq.js} +1 -1
  285. package/dist/client/index.html +2 -2
  286. package/dist/main.mjs +38 -169
  287. package/dist/node/main.mjs +240 -272
  288. package/dist/pairing-runtime-controller.mjs +476 -394
  289. package/dist/runtime/base-daemon.mjs +121 -49
  290. package/dist/runtime/broker-daemon.mjs +60 -171
  291. package/dist/runtime/broker-process-manager.mjs +0 -6
  292. package/dist/runtime/mesh-discover.mjs +0 -6
  293. package/dist/scout-control-plane-web.mjs +477 -672
  294. package/dist/scout-web-server.mjs +477 -672
  295. package/package.json +7 -6
  296. package/dist/client/assets/ActivityScreen-DRHTQIxu.js +0 -1
  297. package/dist/client/assets/AgentAvatar-CQqJcwOQ.js +0 -1
  298. package/dist/client/assets/AgentAvatar-CUZZARWG.css +0 -1
  299. package/dist/client/assets/AgentConfigurationScreen-C3OI6JmZ.js +0 -1
  300. package/dist/client/assets/AgentDefinitionsWorkspace-D0LDEqfl.js +0 -1
  301. package/dist/client/assets/AgentFloorView-CoGh2q5f.js +0 -1
  302. package/dist/client/assets/AgentInfoScreen-5ybfIL9p.js +0 -1
  303. package/dist/client/assets/AgentLaneDetailSheet-BD8B51ka.js +0 -4
  304. package/dist/client/assets/AgentLanesEmbedScreen-FRTVASPw.js +0 -1
  305. package/dist/client/assets/AgentLanesView-Bm85ittm.js +0 -2
  306. package/dist/client/assets/AgentSessions-C_tAfGN2.js +0 -6
  307. package/dist/client/assets/AgentsConsole-DsHWsaOJ.js +0 -1
  308. package/dist/client/assets/AgentsScreen-Bod6AHlA.js +0 -1
  309. package/dist/client/assets/AgentsSubnav-CsvYzzQ-.js +0 -1
  310. package/dist/client/assets/AstronautSuit-C05Ezxl9.js +0 -1
  311. package/dist/client/assets/BackToPicker-CXsbxbHM.js +0 -1
  312. package/dist/client/assets/BriefingDetailScreen-Uvnk3t0v.js +0 -1
  313. package/dist/client/assets/BrokerScreen-LZ3T7hGG.js +0 -5
  314. package/dist/client/assets/Canvas-BO9mx5_P.js +0 -1
  315. package/dist/client/assets/ChatCollapsedStrip-CtLPTLTY.js +0 -1
  316. package/dist/client/assets/ConversationComposer-DPWu3HvK.js +0 -1
  317. package/dist/client/assets/ConversationFeedRows-MhcPfxUr.js +0 -1
  318. package/dist/client/assets/ConversationHeader-Ce7TENb9.js +0 -1
  319. package/dist/client/assets/ConversationPanels-D-b5SLO-.js +0 -6
  320. package/dist/client/assets/ConversationScreen-C5HnXd5w.css +0 -1
  321. package/dist/client/assets/ConversationScreen-D77SoLos.js +0 -1
  322. package/dist/client/assets/ConversationStatus-lIvSKRic.js +0 -1
  323. package/dist/client/assets/CrewWorkspaces-CJhBKVoZ.css +0 -1
  324. package/dist/client/assets/CrewWorkspaces-CdojnRMG.js +0 -1
  325. package/dist/client/assets/DocumentFocusViewer-CetjnYut.js +0 -1
  326. package/dist/client/assets/FlightObserveScreen-sqvt7HUO.js +0 -1
  327. package/dist/client/assets/HarnessesScreen-CGhRsqD5.js +0 -1
  328. package/dist/client/assets/HomeHero-7JwycwFY.css +0 -1
  329. package/dist/client/assets/HomeHero-DdxTQ-6a.js +0 -1
  330. package/dist/client/assets/HostAdvisorView-BAUi5ZxX.js +0 -1
  331. package/dist/client/assets/KnowledgeSearchScreen-CRei9pyl.js +0 -1
  332. package/dist/client/assets/LaneTraceDetailSheet-CFsCvKa3.js +0 -1
  333. package/dist/client/assets/MeshScreen-dxNxRtKm.js +0 -1
  334. package/dist/client/assets/MessagesScreen-CR5v-WIE.js +0 -1
  335. package/dist/client/assets/MissionControlView-BGj1qnI2.js +0 -1
  336. package/dist/client/assets/MissionFocusOverlay-hWi6y87j.js +0 -1
  337. package/dist/client/assets/MissionLeftAgentRow-BSRRiiig.js +0 -1
  338. package/dist/client/assets/MissionLogPane-bbG_pM9B.js +0 -1
  339. package/dist/client/assets/NewChatComposer-BPsg8shF.js +0 -19
  340. package/dist/client/assets/ObserveEmbedScreen-Be87Chod.js +0 -2
  341. package/dist/client/assets/ObserveTextFlow-CKYltTPJ.js +0 -2
  342. package/dist/client/assets/ObservedTopologyPanel-CfHYu-4Z.js +0 -2
  343. package/dist/client/assets/OpenScoutAppShell-DPeP1vtK.js +0 -88
  344. package/dist/client/assets/OpsAgentsView-dEtw9yt-.js +0 -1
  345. package/dist/client/assets/OpsScreen-QXRJY8Vf.js +0 -1
  346. package/dist/client/assets/OpsSubnav-BK9Fj3gU.js +0 -1
  347. package/dist/client/assets/ProjectAgentProfile-BjykZ2Xd.js +0 -1
  348. package/dist/client/assets/ProjectAgentProfileHero-Bc0g8rhW.js +0 -1
  349. package/dist/client/assets/ProjectsInbox--ZIqo-IE.js +0 -2
  350. package/dist/client/assets/ProjectsRail-CzS0qTCI.js +0 -1
  351. package/dist/client/assets/ProjectsScreen-0gx7f30h.js +0 -1
  352. package/dist/client/assets/ProjectsThreadAside-BsQRFbdy.js +0 -1
  353. package/dist/client/assets/Provider-Cd-QZltN.js +0 -1
  354. package/dist/client/assets/RailRow-B0sRaJc6.css +0 -1
  355. package/dist/client/assets/RailRow-BY6fxePa.js +0 -1
  356. package/dist/client/assets/RawSessionsTable-CbopOF34.js +0 -1
  357. package/dist/client/assets/RealtimeVoiceScreen-CU4uXz4C.js +0 -9
  358. package/dist/client/assets/RepoDiffViewer-CiTOWK_Z.js +0 -7
  359. package/dist/client/assets/RepoDiffViewerLazy-BU3V7Kwq.js +0 -2
  360. package/dist/client/assets/ScoutDeckSurface-BncYKicb.js +0 -1
  361. package/dist/client/assets/SessionRefScreen-UVNVrwAf.js +0 -1
  362. package/dist/client/assets/SessionsScreen-KeDb5gz4.js +0 -1
  363. package/dist/client/assets/SettingsDrawer-CWdj0VvN.js +0 -3
  364. package/dist/client/assets/SettingsDrawer-J-8x1eII.css +0 -1
  365. package/dist/client/assets/SettingsScreen-C7zJgZzj.js +0 -1
  366. package/dist/client/assets/Terminal-CMQFmHnn.js +0 -1
  367. package/dist/client/assets/TerminalEmbedScreen-GvpoGERN.js +0 -1
  368. package/dist/client/assets/TerminalRelay-CIHlLVf1.js +0 -46
  369. package/dist/client/assets/WorkFilesViewer-C7H5fXaZ.js +0 -1
  370. package/dist/client/assets/agent-autocomplete-cOPLtuhM.js +0 -2
  371. package/dist/client/assets/agent-identity-CIMT7oV6.js +0 -1
  372. package/dist/client/assets/agent-specialization-D3-sqwhU.js +0 -1
  373. package/dist/client/assets/api-DEHEgJ9m.js +0 -1
  374. package/dist/client/assets/archive-DPMdoW_D.js +0 -1
  375. package/dist/client/assets/arrow-right-YRBoTTyf.js +0 -1
  376. package/dist/client/assets/broker-display-Q75fupqG.js +0 -2
  377. package/dist/client/assets/collapsed-strip-raJWthAH.css +0 -1
  378. package/dist/client/assets/compass-D5Io6BIV.js +0 -1
  379. package/dist/client/assets/content-3b_jmxEx.js +0 -1
  380. package/dist/client/assets/content-B-i0XY-t.js +0 -1
  381. package/dist/client/assets/content-BD-DNFmb.js +0 -1
  382. package/dist/client/assets/content-BGeo5tgd.js +0 -1
  383. package/dist/client/assets/content-BMvXPLiQ.js +0 -1
  384. package/dist/client/assets/content-BWTbfMDg.js +0 -1
  385. package/dist/client/assets/content-BwCmeUmF.js +0 -1
  386. package/dist/client/assets/content-C1K3NcZa.js +0 -1
  387. package/dist/client/assets/content-C34J5_Af.js +0 -1
  388. package/dist/client/assets/content-CGRtIS2m.js +0 -1
  389. package/dist/client/assets/content-CIJo_-JS.js +0 -1
  390. package/dist/client/assets/content-CvqIqVAV.js +0 -1
  391. package/dist/client/assets/content-DRnwm-Vu.js +0 -1
  392. package/dist/client/assets/content-Dh39SSvP.js +0 -1
  393. package/dist/client/assets/content-DoypqDj5.js +0 -1
  394. package/dist/client/assets/content-n3mvc6NQ.js +0 -1
  395. package/dist/client/assets/conversation-model-CIzM7aXT.js +0 -1
  396. package/dist/client/assets/conversation-motion-features-CrP5K-dk.js +0 -1
  397. package/dist/client/assets/cpu-CtQc0Z9D.js +0 -1
  398. package/dist/client/assets/credentials-qwds23lv.js +0 -1
  399. package/dist/client/assets/ctx-panel-D_HJ3nhb.css +0 -1
  400. package/dist/client/assets/discover-DdkMhTAV.js +0 -2
  401. package/dist/client/assets/embed-entry-DoSM1GZB.js +0 -2
  402. package/dist/client/assets/file-code-corner-C5Pc6znt.js +0 -1
  403. package/dist/client/assets/gauge-sc_gb5Zw.js +0 -1
  404. package/dist/client/assets/gestures-AzPBSf20.js +0 -1
  405. package/dist/client/assets/git-branch-CdJU49Af.js +0 -1
  406. package/dist/client/assets/home-moving-signal-CZo2bYBi.js +0 -1
  407. package/dist/client/assets/home-moving-signal-DMguaRWR.css +0 -1
  408. package/dist/client/assets/home-now-card-DgxfZHcR.js +0 -1
  409. package/dist/client/assets/hooks-CeCCO6Yg.js +0 -2
  410. package/dist/client/assets/host-advisor-B2Fqs5Dd.css +0 -1
  411. package/dist/client/assets/index-BIiI9gfa.js +0 -1
  412. package/dist/client/assets/index-CD2foMB8.js +0 -1
  413. package/dist/client/assets/index-DReHD_4U.js +0 -1
  414. package/dist/client/assets/index-DzlEgstl.css +0 -1
  415. package/dist/client/assets/index-NRbRrZw-.js +0 -10
  416. package/dist/client/assets/index-wLwc74Pu.css +0 -1
  417. package/dist/client/assets/inspector-panel-CBf8pW7s.js +0 -2
  418. package/dist/client/assets/layers-D9fblkql.js +0 -1
  419. package/dist/client/assets/layout-grid-Vd1chalc.js +0 -1
  420. package/dist/client/assets/left-41_3QKk1.js +0 -1
  421. package/dist/client/assets/left-B3ofA1Pr.js +0 -2
  422. package/dist/client/assets/left-BWBZQhxQ.js +0 -1
  423. package/dist/client/assets/left-BhA6essi.js +0 -1
  424. package/dist/client/assets/left-BmTKCv4f.js +0 -1
  425. package/dist/client/assets/left-CCGR6tIF.js +0 -2
  426. package/dist/client/assets/left-DH44V4I_.css +0 -1
  427. package/dist/client/assets/left-Dfwzkwh_.js +0 -1
  428. package/dist/client/assets/left-R2OOE7VG.css +0 -1
  429. package/dist/client/assets/left-advisor-yrzW1Kwz.js +0 -1
  430. package/dist/client/assets/left-agents-Bgahk0FF.js +0 -1
  431. package/dist/client/assets/left-default-CtkfAquc.js +0 -1
  432. package/dist/client/assets/left-lanes-CpujaVN3.js +0 -1
  433. package/dist/client/assets/left-mission-Bbd-fW6W.js +0 -1
  434. package/dist/client/assets/library-Dx14WNGd.js +0 -1
  435. package/dist/client/assets/mission-control-CnU7dNt1.css +0 -1
  436. package/dist/client/assets/persistent-state-Bm_0TmZL.js +0 -1
  437. package/dist/client/assets/profile-Y0X7HZHc.js +0 -1
  438. package/dist/client/assets/projects-inbox-Cbfj4Hx7.js +0 -1
  439. package/dist/client/assets/provider-Bq0ScH3v.js +0 -1
  440. package/dist/client/assets/proxy-DtC2iXnT.js +0 -1
  441. package/dist/client/assets/resolve-panes-BI3WdDS-.js +0 -1
  442. package/dist/client/assets/resolve-sidebar-context-_g0pIxOr.js +0 -1
  443. package/dist/client/assets/right-BA0F8fPI.js +0 -1
  444. package/dist/client/assets/right-C4GXB45w.js +0 -1
  445. package/dist/client/assets/right-CXetlD8X.js +0 -1
  446. package/dist/client/assets/right-CnRcQS_I.js +0 -1
  447. package/dist/client/assets/right-D2_rmbAH.js +0 -1
  448. package/dist/client/assets/right-Dqp--KwX.js +0 -1
  449. package/dist/client/assets/right-HJJzRuGD.js +0 -1
  450. package/dist/client/assets/right-WCMb8YXJ.js +0 -1
  451. package/dist/client/assets/router-Bx1tiwVe.js +0 -1
  452. package/dist/client/assets/scout-voice-BT3gYDhU.js +0 -1
  453. package/dist/client/assets/scoutbot-markdown-DIhLsYxz.js +0 -6
  454. package/dist/client/assets/secondaryNavConfig-BVQiyAXu.js +0 -1
  455. package/dist/client/assets/settings-BpKRzxOD.js +0 -1
  456. package/dist/client/assets/system-surfaces-redesign-QVXNeGYw.css +0 -1
  457. package/dist/client/assets/text-rLpBg4_z.css +0 -1
  458. package/dist/client/assets/use-reduced-motion-0fAsybdo.js +0 -1
  459. package/dist/client/assets/use-scout-dev-flags-DV_I6URU.js +0 -1
  460. package/dist/client/assets/useContentSecondaryNav-4atpGgFw.js +0 -1
  461. package/dist/client/assets/usePersistentState-InmPXIN4.js +0 -1
  462. package/dist/client/assets/zap-CocRNtyr.js +0 -1
  463. package/dist/client/crew/brik-bust.webp +0 -0
  464. package/dist/client/crew/brik-chip-id.webp +0 -0
  465. package/dist/client/crew/lulu-bust.webp +0 -0
  466. package/dist/client/crew/milo-bust.webp +0 -0
  467. package/dist/client/crew/milo-chip-id.webp +0 -0
  468. package/dist/client/crew/nori-bust.webp +0 -0
  469. package/dist/client/crew/sheets/eye-plate-v1/blink-half.webp +0 -0
  470. package/dist/client/crew/sheets/eye-plate-v1/blink-shut.webp +0 -0
  471. package/dist/client/crew/sheets/eye-plate-v1/look-left.webp +0 -0
  472. package/dist/client/crew/sheets/eye-plate-v1/look-right.webp +0 -0
  473. package/dist/client/crew/sheets/eye-plate-v1/look-up.webp +0 -0
  474. package/dist/client/crew/sheets/eye-plate-v1/rest.webp +0 -0
  475. package/dist/client/crew/sheets/sprout/blink-half.webp +0 -0
  476. package/dist/client/crew/sheets/sprout/blink-shut.webp +0 -0
  477. package/dist/client/crew/sheets/sprout/look-left.webp +0 -0
  478. package/dist/client/crew/sheets/sprout/look-right.webp +0 -0
  479. package/dist/client/crew/sheets/sprout/look-up.webp +0 -0
  480. package/dist/client/crew/sprout-bust.webp +0 -0
  481. package/dist/client/crew/sprout-chip-id.webp +0 -0
  482. package/dist/client/crew/vex-bust.webp +0 -0
  483. package/dist/client/crew/vex-chip-id.webp +0 -0
  484. package/dist/client/crew/wrench-bust.webp +0 -0
  485. package/dist/client/crew/wrench-chip-id.webp +0 -0
  486. /package/dist/client/assets/{DocumentFocusViewer-BSC_JwVE.css → document-focus-viewer-BSC_JwVE.css} +0 -0
@@ -14397,9 +14397,9 @@ var require_cjs11 = __commonJS((exports) => {
14397
14397
 
14398
14398
  // ../runtime/dist/broker-process-manager.js
14399
14399
  import { spawn as spawn2, spawnSync } from "node:child_process";
14400
- import { existsSync as existsSync7, mkdirSync as mkdirSync4, readFileSync as readFileSync5, renameSync as renameSync3, writeFileSync as writeFileSync4 } from "node:fs";
14400
+ import { existsSync as existsSync6, mkdirSync as mkdirSync3, readFileSync as readFileSync4, renameSync as renameSync2, writeFileSync as writeFileSync3 } from "node:fs";
14401
14401
  import { homedir as homedir5, networkInterfaces } from "node:os";
14402
- import { dirname as dirname4, join as join6, resolve as resolve2 } from "node:path";
14402
+ import { dirname as dirname3, join as join5, resolve as resolve2 } from "node:path";
14403
14403
  import { fileURLToPath } from "node:url";
14404
14404
 
14405
14405
  // ../runtime/dist/broker-api.js
@@ -16224,202 +16224,9 @@ function readTailscaleSelfWebHostsSync(env = process.env) {
16224
16224
  }
16225
16225
 
16226
16226
  // ../runtime/dist/local-config.js
16227
- import { existsSync as existsSync5, mkdirSync as mkdirSync3, readFileSync as readFileSync4, renameSync as renameSync2, writeFileSync as writeFileSync3 } from "node:fs";
16227
+ import { existsSync as existsSync4, mkdirSync as mkdirSync2, readFileSync as readFileSync3, renameSync, writeFileSync as writeFileSync2 } from "node:fs";
16228
16228
  import { homedir as homedir3, hostname as osHostname } from "node:os";
16229
- import { dirname as dirname2, join as join4 } from "node:path";
16230
-
16231
- // ../runtime/dist/node-identity.js
16232
- import { createHash, createPrivateKey, createPublicKey, generateKeyPairSync, randomBytes, sign, verify } from "node:crypto";
16233
- import { chmodSync, existsSync as existsSync4, mkdirSync as mkdirSync2, readFileSync as readFileSync3, renameSync, rmSync as rmSync2, writeFileSync as writeFileSync2 } from "node:fs";
16234
16229
  import { dirname, join as join3 } from "node:path";
16235
- var NODE_IDENTITY_FILE = "node-identity.json";
16236
- var NODE_FINGERPRINT_PREFIX = "osc1";
16237
- var NODE_CARD_TTL_MS = 24 * 60 * 60 * 1000;
16238
- var stableNodeQualifierCache = new Map;
16239
- function stripBonjourCollisionSuffix(value) {
16240
- if (!value || typeof value !== "string")
16241
- return "";
16242
- let trimmed = value.trim();
16243
- const isDotLocal = /\.local\.?$/i.test(trimmed);
16244
- if (isDotLocal) {
16245
- trimmed = trimmed.replace(/\.local\.?$/i, "");
16246
- }
16247
- const isHyphenLocalOpenscout = /-local-openscout$/i.test(trimmed);
16248
- const isHyphenLocal = !isHyphenLocalOpenscout && /-local$/i.test(trimmed);
16249
- if (isHyphenLocalOpenscout) {
16250
- trimmed = trimmed.replace(/-local-openscout$/i, "");
16251
- } else if (isHyphenLocal) {
16252
- trimmed = trimmed.replace(/-local$/i, "");
16253
- }
16254
- if (!isDotLocal && !isHyphenLocalOpenscout && !isHyphenLocal) {
16255
- return trimmed;
16256
- }
16257
- trimmed = trimmed.replace(/(?<=[a-zA-Z].*?)(?:-\d+)+$/, "");
16258
- if (isDotLocal)
16259
- return `${trimmed}.local`;
16260
- if (isHyphenLocalOpenscout)
16261
- return `${trimmed}-local-openscout`;
16262
- if (isHyphenLocal)
16263
- return `${trimmed}-local`;
16264
- return trimmed;
16265
- }
16266
- function nodeIdentityPath(supportDirectory) {
16267
- const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
16268
- return join3(dir, NODE_IDENTITY_FILE);
16269
- }
16270
- function loadOrCreateNodeIdentity(supportDirectory) {
16271
- const path = nodeIdentityPath(supportDirectory);
16272
- if (existsSync4(path)) {
16273
- return readAndValidateNodeIdentity(path);
16274
- }
16275
- return createNodeIdentity(supportDirectory);
16276
- }
16277
- function readStableNodeQualifier(supportDirectory) {
16278
- const path = nodeIdentityPath(supportDirectory);
16279
- const cached = stableNodeQualifierCache.get(path);
16280
- if (cached) {
16281
- return cached;
16282
- }
16283
- if (!existsSync4(path)) {
16284
- return null;
16285
- }
16286
- const nodeQualifier = normalizeNodeQualifier(readAndValidateNodeIdentity(path).nodeQualifier);
16287
- if (nodeQualifier) {
16288
- stableNodeQualifierCache.set(path, nodeQualifier);
16289
- }
16290
- return nodeQualifier || null;
16291
- }
16292
- function readAndValidateNodeIdentity(path) {
16293
- let parsed;
16294
- try {
16295
- parsed = JSON.parse(readFileSync3(path, "utf8"));
16296
- } catch {
16297
- throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
16298
- }
16299
- if (parsed.version !== 1 || !parsed.publicKey || !parsed.privateKey) {
16300
- throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
16301
- }
16302
- if (parsed.nodeQualifier !== undefined && normalizePersistedNodeQualifier(parsed.nodeQualifier) !== parsed.nodeQualifier) {
16303
- throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
16304
- }
16305
- try {
16306
- const derived = createPublicKey(importPrivateKey(parsed.privateKey)).export({ type: "spki", format: "der" }).toString("base64");
16307
- if (derived !== parsed.publicKey) {
16308
- throw new Error("mismatch");
16309
- }
16310
- } catch {
16311
- throw new Error(`Node identity at ${path} has mismatched or invalid keys; remove it to generate a fresh one.`);
16312
- }
16313
- return parsed;
16314
- }
16315
- function normalizePersistedNodeQualifier(value) {
16316
- return typeof value === "string" ? value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "") : "";
16317
- }
16318
- function normalizeNodeQualifier(value) {
16319
- return stripBonjourCollisionSuffix(normalizePersistedNodeQualifier(value));
16320
- }
16321
- function createNodeIdentity(supportDirectory) {
16322
- if (!supportDirectory) {
16323
- assertTestIsolatedUserData("write the node identity", "OPENSCOUT_SUPPORT_DIRECTORY");
16324
- }
16325
- const path = nodeIdentityPath(supportDirectory);
16326
- const { publicKey, privateKey } = generateKeyPairSync("ed25519");
16327
- const identity = {
16328
- version: 1,
16329
- publicKey: publicKey.export({ type: "spki", format: "der" }).toString("base64"),
16330
- privateKey: privateKey.export({ type: "pkcs8", format: "der" }).toString("base64"),
16331
- createdAt: Date.now()
16332
- };
16333
- mkdirSync2(dirname(path), { recursive: true });
16334
- try {
16335
- writeFileSync2(path, `${JSON.stringify(identity, null, 2)}
16336
- `, { encoding: "utf8", mode: 384, flag: "wx" });
16337
- } catch (error) {
16338
- if (error.code === "EEXIST") {
16339
- return readAndValidateNodeIdentity(path);
16340
- }
16341
- throw error;
16342
- }
16343
- try {
16344
- chmodSync(path, 384);
16345
- } catch {}
16346
- return identity;
16347
- }
16348
- function nodeKeyId(publicKeyBase64) {
16349
- return createHash("sha256").update(Buffer.from(publicKeyBase64, "base64")).digest("hex");
16350
- }
16351
- function nodeFingerprint(publicKeyBase64) {
16352
- const digest = createHash("sha256").update(Buffer.from(publicKeyBase64, "base64")).digest();
16353
- const encoded = base32Encode(digest.subarray(0, 10)).toLowerCase();
16354
- return `${NODE_FINGERPRINT_PREFIX}:${encoded.slice(0, 4)}-${encoded.slice(4, 8)}`;
16355
- }
16356
- function signNodePayload(identity, payload) {
16357
- const key = importPrivateKey(identity.privateKey);
16358
- return sign(null, typeof payload === "string" ? Buffer.from(payload, "utf8") : payload, key).toString("base64");
16359
- }
16360
- function verifyNodeSignature(publicKeyBase64, payload, signatureBase64) {
16361
- try {
16362
- const key = importPublicKey(publicKeyBase64);
16363
- return verify(null, typeof payload === "string" ? Buffer.from(payload, "utf8") : payload, key, Buffer.from(signatureBase64, "base64"));
16364
- } catch {
16365
- return false;
16366
- }
16367
- }
16368
- function canonicalJson(value) {
16369
- if (value === null || typeof value !== "object") {
16370
- return JSON.stringify(value);
16371
- }
16372
- if (Array.isArray(value)) {
16373
- return `[${value.map(canonicalJson).join(",")}]`;
16374
- }
16375
- const record = value;
16376
- const keys = Object.keys(record).sort();
16377
- return `{${keys.map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`).join(",")}}`;
16378
- }
16379
- function verifySignedNodeCard(card, now = Date.now()) {
16380
- if (nodeKeyId(card.publicKey) !== card.keyId) {
16381
- return false;
16382
- }
16383
- if (nodeFingerprint(card.publicKey) !== card.fingerprint) {
16384
- return false;
16385
- }
16386
- if (!Number.isFinite(card.expiresAt) || card.expiresAt <= now) {
16387
- return false;
16388
- }
16389
- if (card.tls !== undefined) {
16390
- if (typeof card.tls !== "object" || card.tls === null || typeof card.tls.spkiFingerprint !== "string" || !/^[0-9a-f]{64}$/.test(card.tls.spkiFingerprint)) {
16391
- return false;
16392
- }
16393
- }
16394
- const { signature, ...unsigned } = card;
16395
- return verifyNodeSignature(card.publicKey, canonicalJson(unsigned), signature);
16396
- }
16397
- var BASE32_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
16398
- function base32Encode(input) {
16399
- let bits = 0;
16400
- let value = 0;
16401
- let output = "";
16402
- for (const byte of input) {
16403
- value = value << 8 | byte;
16404
- bits += 8;
16405
- while (bits >= 5) {
16406
- output += BASE32_ALPHABET[value >>> bits - 5 & 31];
16407
- bits -= 5;
16408
- }
16409
- }
16410
- if (bits > 0) {
16411
- output += BASE32_ALPHABET[value << 5 - bits & 31];
16412
- }
16413
- return output;
16414
- }
16415
- function importPrivateKey(privateKeyBase64) {
16416
- return createPrivateKey({ key: Buffer.from(privateKeyBase64, "base64"), format: "der", type: "pkcs8" });
16417
- }
16418
- function importPublicKey(publicKeyBase64) {
16419
- return createPublicKey({ key: Buffer.from(publicKeyBase64, "base64"), format: "der", type: "spki" });
16420
- }
16421
-
16422
- // ../runtime/dist/local-config.js
16423
16230
  var LOCAL_CONFIG_VERSION = 1;
16424
16231
  var DEFAULT_SCOUT_WEB_PORTAL_HOST = "scout.local";
16425
16232
  var DEFAULT_SCOUT_WEB_DEV_HOST = `dev.${DEFAULT_SCOUT_WEB_PORTAL_HOST}`;
@@ -16444,17 +16251,17 @@ var DEFAULT_LOCAL_CONFIG = {
16444
16251
  }
16445
16252
  };
16446
16253
  function localConfigHome() {
16447
- return process.env.OPENSCOUT_HOME ?? join4(homedir3(), ".openscout");
16254
+ return process.env.OPENSCOUT_HOME ?? join3(homedir3(), ".openscout");
16448
16255
  }
16449
16256
  function localConfigPath() {
16450
- return join4(localConfigHome(), "config.json");
16257
+ return join3(localConfigHome(), "config.json");
16451
16258
  }
16452
16259
  function loadLocalConfig() {
16453
16260
  const configPath = localConfigPath();
16454
- if (!existsSync5(configPath))
16261
+ if (!existsSync4(configPath))
16455
16262
  return { version: LOCAL_CONFIG_VERSION };
16456
16263
  try {
16457
- return validateLocalConfig(JSON.parse(readFileSync4(configPath, "utf8")));
16264
+ return validateLocalConfig(JSON.parse(readFileSync3(configPath, "utf8")));
16458
16265
  } catch {
16459
16266
  return { version: LOCAL_CONFIG_VERSION };
16460
16267
  }
@@ -16532,34 +16339,34 @@ function resolveBrokerPort() {
16532
16339
  function writeLocalConfig(config) {
16533
16340
  assertTestIsolatedUserData("write the OpenScout local config", "OPENSCOUT_HOME");
16534
16341
  const configPath = localConfigPath();
16535
- mkdirSync3(dirname2(configPath), { recursive: true });
16342
+ mkdirSync2(dirname(configPath), { recursive: true });
16536
16343
  const body = JSON.stringify({ ...config, version: LOCAL_CONFIG_VERSION }, null, 2) + `
16537
16344
  `;
16538
16345
  const tmp = `${configPath}.tmp`;
16539
- writeFileSync3(tmp, body, "utf8");
16540
- renameSync2(tmp, configPath);
16346
+ writeFileSync2(tmp, body, "utf8");
16347
+ renameSync(tmp, configPath);
16541
16348
  }
16542
16349
  function localConfigExists() {
16543
- return existsSync5(localConfigPath());
16350
+ return existsSync4(localConfigPath());
16544
16351
  }
16545
16352
 
16546
16353
  // ../runtime/dist/tool-resolution.js
16547
- import { accessSync, constants, existsSync as existsSync6 } from "node:fs";
16354
+ import { accessSync, constants, existsSync as existsSync5 } from "node:fs";
16548
16355
  import { homedir as homedir4 } from "node:os";
16549
- import { basename, dirname as dirname3, join as join5, resolve } from "node:path";
16356
+ import { basename, dirname as dirname2, join as join4, resolve } from "node:path";
16550
16357
  var DEFAULT_COMMON_EXECUTABLE_DIRECTORIES = [
16551
- join5(homedir4(), ".bun", "bin"),
16358
+ join4(homedir4(), ".bun", "bin"),
16552
16359
  "/opt/homebrew/bin",
16553
16360
  "/usr/local/bin"
16554
16361
  ];
16555
16362
  function commonClaudeExecutableDirectories(env) {
16556
16363
  const home = env.HOME ?? homedir4();
16557
16364
  return [
16558
- join5(home, ".local", "bin"),
16559
- join5(home, ".claude", "local"),
16365
+ join4(home, ".local", "bin"),
16366
+ join4(home, ".claude", "local"),
16560
16367
  "/opt/homebrew/bin",
16561
16368
  "/usr/local/bin",
16562
- join5(home, ".bun", "bin")
16369
+ join4(home, ".bun", "bin")
16563
16370
  ];
16564
16371
  }
16565
16372
  function expandHomePath(value, env = process.env) {
@@ -16568,7 +16375,7 @@ function expandHomePath(value, env = process.env) {
16568
16375
  return home;
16569
16376
  }
16570
16377
  if (value.startsWith("~/")) {
16571
- return join5(home, value.slice(2));
16378
+ return join4(home, value.slice(2));
16572
16379
  }
16573
16380
  return value;
16574
16381
  }
@@ -16625,7 +16432,7 @@ function resolveExecutableFromSearch(options) {
16625
16432
  ], env);
16626
16433
  for (const directory of searchDirectories) {
16627
16434
  for (const name of options.names) {
16628
- const candidate = join5(directory, name);
16435
+ const candidate = join4(directory, name);
16629
16436
  if (isExecutablePath(candidate)) {
16630
16437
  return {
16631
16438
  path: candidate,
@@ -16639,7 +16446,7 @@ function resolveExecutableFromSearch(options) {
16639
16446
  function resolveExecutableFromDirectories(directories, names, env, source) {
16640
16447
  for (const directory of dedupeDirectories(directories, env)) {
16641
16448
  for (const name of names) {
16642
- const candidate = join5(directory, name);
16449
+ const candidate = join4(directory, name);
16643
16450
  if (isExecutablePath(candidate)) {
16644
16451
  return { path: candidate, source };
16645
16452
  }
@@ -16677,7 +16484,7 @@ function findExecutableOnSearchPath(name, env) {
16677
16484
  ...DEFAULT_COMMON_EXECUTABLE_DIRECTORIES
16678
16485
  ], env);
16679
16486
  for (const directory of searchDirectories) {
16680
- const candidate = join5(directory, name);
16487
+ const candidate = join4(directory, name);
16681
16488
  if (isExecutablePath(candidate)) {
16682
16489
  return { path: candidate, source: "path" };
16683
16490
  }
@@ -16695,14 +16502,14 @@ var DEFAULT_ADVERTISE_SCOPE = "local";
16695
16502
  var MESH_BIND_CONFIG_FILE = "mesh-bind.json";
16696
16503
  function meshBindConfigPath(supportDirectory) {
16697
16504
  const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
16698
- return join6(dir, MESH_BIND_CONFIG_FILE);
16505
+ return join5(dir, MESH_BIND_CONFIG_FILE);
16699
16506
  }
16700
16507
  function readPersistedAdvertiseScope(supportDirectory) {
16701
16508
  const path = meshBindConfigPath(supportDirectory);
16702
- if (!existsSync7(path))
16509
+ if (!existsSync6(path))
16703
16510
  return null;
16704
16511
  try {
16705
- const parsed = JSON.parse(readFileSync5(path, "utf8"));
16512
+ const parsed = JSON.parse(readFileSync4(path, "utf8"));
16706
16513
  if (parsed.version !== 1)
16707
16514
  return null;
16708
16515
  if (parsed.advertiseScope === "mesh" || parsed.advertiseScope === "local") {
@@ -16821,7 +16628,7 @@ function isWildcardHost(host) {
16821
16628
  return trimmed === "0.0.0.0" || trimmed === "::" || trimmed === "[::]";
16822
16629
  }
16823
16630
  function buildDefaultBrokerSocketPath(runtimeDirectory) {
16824
- return join6(runtimeDirectory, "broker.sock");
16631
+ return join5(runtimeDirectory, "broker.sock");
16825
16632
  }
16826
16633
  var DEFAULT_BROKER_URL = buildDefaultBrokerUrl();
16827
16634
  function resolveScoutBrokerControlUrl(_config = resolveBrokerServiceConfig()) {
@@ -16840,17 +16647,17 @@ function runtimePackageDir() {
16840
16647
  const fromGlobal = findGlobalRuntimeDir();
16841
16648
  if (fromGlobal)
16842
16649
  return fromGlobal;
16843
- const moduleDir = dirname4(fileURLToPath(import.meta.url));
16650
+ const moduleDir = dirname3(fileURLToPath(import.meta.url));
16844
16651
  return resolve2(moduleDir, "..");
16845
16652
  }
16846
16653
  function isInstalledRuntimePackageDir(candidate) {
16847
- return existsSync7(join6(candidate, "package.json")) && existsSync7(join6(candidate, "bin", "openscout-runtime.mjs"));
16654
+ return existsSync6(join5(candidate, "package.json")) && existsSync6(join5(candidate, "bin", "openscout-runtime.mjs"));
16848
16655
  }
16849
16656
  function findGlobalRuntimeDir() {
16850
16657
  const candidates = [
16851
- join6(homedir5(), ".bun", "node_modules", "@openscout", "runtime"),
16852
- join6(homedir5(), ".bun", "install", "global", "node_modules", "@openscout", "runtime"),
16853
- join6(homedir5(), ".bun", "install", "global", "node_modules", "@openscout", "scout", "node_modules", "@openscout", "runtime")
16658
+ join5(homedir5(), ".bun", "node_modules", "@openscout", "runtime"),
16659
+ join5(homedir5(), ".bun", "install", "global", "node_modules", "@openscout", "runtime"),
16660
+ join5(homedir5(), ".bun", "install", "global", "node_modules", "@openscout", "scout", "node_modules", "@openscout", "runtime")
16854
16661
  ];
16855
16662
  for (const c of candidates) {
16856
16663
  if (isInstalledRuntimePackageDir(c))
@@ -16863,7 +16670,7 @@ function findGlobalRuntimeDir() {
16863
16670
  const scoutPkg = resolve2(scoutBin, "..", "..");
16864
16671
  if (isInstalledRuntimePackageDir(scoutPkg))
16865
16672
  return scoutPkg;
16866
- const nested = join6(scoutPkg, "node_modules", "@openscout", "runtime");
16673
+ const nested = join5(scoutPkg, "node_modules", "@openscout", "runtime");
16867
16674
  if (isInstalledRuntimePackageDir(nested))
16868
16675
  return nested;
16869
16676
  const sibling = resolve2(scoutPkg, "..", "runtime");
@@ -16874,7 +16681,7 @@ function findGlobalRuntimeDir() {
16874
16681
  return null;
16875
16682
  }
16876
16683
  function findBundledRuntimeDir() {
16877
- const moduleDir = dirname4(fileURLToPath(import.meta.url));
16684
+ const moduleDir = dirname3(fileURLToPath(import.meta.url));
16878
16685
  return resolveBundledRuntimeDirFromModuleDir(moduleDir);
16879
16686
  }
16880
16687
  function resolveBundledRuntimeDirFromModuleDir(moduleDir) {
@@ -16891,11 +16698,11 @@ function resolveBundledRuntimeDirFromModuleDir(moduleDir) {
16891
16698
  function findWorkspaceRuntimeDir(startDir) {
16892
16699
  let current = resolve2(startDir);
16893
16700
  while (true) {
16894
- const candidate = join6(current, "packages", "runtime");
16895
- if (existsSync7(join6(candidate, "package.json")) && existsSync7(join6(candidate, "src"))) {
16701
+ const candidate = join5(current, "packages", "runtime");
16702
+ if (existsSync6(join5(candidate, "package.json")) && existsSync6(join5(candidate, "src"))) {
16896
16703
  return candidate;
16897
16704
  }
16898
- const parent = dirname4(current);
16705
+ const parent = dirname3(current);
16899
16706
  if (parent === current)
16900
16707
  return null;
16901
16708
  current = parent;
@@ -16942,17 +16749,17 @@ function resolveBrokerServiceConfig() {
16942
16749
  const serviceAdapter = resolveBrokerServiceAdapter();
16943
16750
  const uid = typeof process.getuid === "function" ? process.getuid() : Number.parseInt(process.env.UID ?? "0", 10);
16944
16751
  const supportPaths = resolveOpenScoutSupportPaths();
16945
- const defaultSupportDir = join6(homedir5(), "Library", "Application Support", "OpenScout");
16752
+ const defaultSupportDir = join5(homedir5(), "Library", "Application Support", "OpenScout");
16946
16753
  const supportDirectory = isTmpPath(supportPaths.supportDirectory) ? defaultSupportDir : supportPaths.supportDirectory;
16947
- const runtimeDirectory = join6(supportDirectory, "runtime");
16948
- const logsDirectory = join6(supportDirectory, "logs", "broker");
16949
- const controlHome = isTmpPath(supportPaths.controlHome) ? join6(homedir5(), ".openscout", "control-plane") : supportPaths.controlHome;
16754
+ const runtimeDirectory = join5(supportDirectory, "runtime");
16755
+ const logsDirectory = join5(supportDirectory, "logs", "broker");
16756
+ const controlHome = isTmpPath(supportPaths.controlHome) ? join5(homedir5(), ".openscout", "control-plane") : supportPaths.controlHome;
16950
16757
  const advertiseScope = resolveAdvertiseScope(process.env, () => readPersistedAdvertiseScope(supportDirectory));
16951
16758
  const brokerHost = resolveBrokerHost(advertiseScope);
16952
16759
  const brokerPort = Number.parseInt(process.env.OPENSCOUT_BROKER_PORT ?? String(resolveBrokerPort()), 10);
16953
16760
  const brokerUrl = resolveBrokerUrl(brokerHost, brokerPort, advertiseScope);
16954
16761
  const brokerSocketPath = process.env.OPENSCOUT_BROKER_SOCKET_PATH ?? buildDefaultBrokerSocketPath(runtimeDirectory);
16955
- const launchAgentPath = join6(homedir5(), "Library", "LaunchAgents", `${label}.plist`);
16762
+ const launchAgentPath = join5(homedir5(), "Library", "LaunchAgents", `${label}.plist`);
16956
16763
  return {
16957
16764
  label,
16958
16765
  mode,
@@ -16963,8 +16770,8 @@ function resolveBrokerServiceConfig() {
16963
16770
  supportDirectory,
16964
16771
  runtimeDirectory,
16965
16772
  logsDirectory,
16966
- stdoutLogPath: join6(logsDirectory, "stdout.log"),
16967
- stderrLogPath: join6(logsDirectory, "stderr.log"),
16773
+ stdoutLogPath: join5(logsDirectory, "stdout.log"),
16774
+ stderrLogPath: join5(logsDirectory, "stderr.log"),
16968
16775
  controlHome,
16969
16776
  runtimePackageDir: runtimePackageDir(),
16970
16777
  bunExecutable: serviceAdapter === "macos-scoutd" ? resolveBunExecutable2() : resolveOptionalBunExecutable(),
@@ -16998,10 +16805,10 @@ function resolveEnvExecutable(value) {
16998
16805
  function findWorkspaceRootFromRuntimeDir(runtimePackageDir2) {
16999
16806
  let current = resolve2(runtimePackageDir2);
17000
16807
  while (true) {
17001
- if (existsSync7(join6(current, "Cargo.toml")) && existsSync7(join6(current, "crates", "scoutd", "Cargo.toml"))) {
16808
+ if (existsSync6(join5(current, "Cargo.toml")) && existsSync6(join5(current, "crates", "scoutd", "Cargo.toml"))) {
17002
16809
  return current;
17003
16810
  }
17004
- const parent = dirname4(current);
16811
+ const parent = dirname3(current);
17005
16812
  if (parent === current)
17006
16813
  return null;
17007
16814
  current = parent;
@@ -17018,13 +16825,13 @@ function resolveScoutdCommand(config = resolveBrokerServiceConfig()) {
17018
16825
  }
17019
16826
  const workspaceRoot = findWorkspaceRootFromRuntimeDir(config.runtimePackageDir);
17020
16827
  const packageCandidates = [
17021
- join6(config.runtimePackageDir, "bin", "scoutd"),
17022
- join6(config.runtimePackageDir, "native", "scoutd"),
17023
- join6(config.runtimePackageDir, "scoutd"),
17024
- workspaceRoot ? join6(workspaceRoot, "packages", "cli", "bin", "scoutd") : null,
17025
- workspaceRoot ? join6(workspaceRoot, "packages", "runtime", "bin", "scoutd") : null,
17026
- join6(config.runtimeDirectory, "scoutd"),
17027
- join6(dirname4(config.runtimePackageDir), "scout", "bin", "scoutd")
16828
+ join5(config.runtimePackageDir, "bin", "scoutd"),
16829
+ join5(config.runtimePackageDir, "native", "scoutd"),
16830
+ join5(config.runtimePackageDir, "scoutd"),
16831
+ workspaceRoot ? join5(workspaceRoot, "packages", "cli", "bin", "scoutd") : null,
16832
+ workspaceRoot ? join5(workspaceRoot, "packages", "runtime", "bin", "scoutd") : null,
16833
+ join5(config.runtimeDirectory, "scoutd"),
16834
+ join5(dirname3(config.runtimePackageDir), "scout", "bin", "scoutd")
17028
16835
  ];
17029
16836
  for (const candidate of packageCandidates) {
17030
16837
  const resolved = executableCandidate(candidate);
@@ -17038,8 +16845,8 @@ function resolveScoutdCommand(config = resolveBrokerServiceConfig()) {
17038
16845
  }
17039
16846
  if (workspaceRoot && workspaceScoutdAllowed()) {
17040
16847
  for (const candidate of [
17041
- join6(workspaceRoot, "target", "release", "scoutd"),
17042
- join6(workspaceRoot, "target", "debug", "scoutd")
16848
+ join5(workspaceRoot, "target", "release", "scoutd"),
16849
+ join5(workspaceRoot, "target", "debug", "scoutd")
17043
16850
  ]) {
17044
16851
  const resolved = executableCandidate(candidate);
17045
16852
  if (resolved) {
@@ -17124,7 +16931,7 @@ function normalizeNativeServiceStatus(input, config) {
17124
16931
  const healthMeshId = readString2(healthRecord.meshId);
17125
16932
  const healthSocketFallbackError = readString2(healthRecord.socketFallbackError);
17126
16933
  const healthCounts = isRecord3(healthRecord.counts) ? healthRecord.counts : undefined;
17127
- const installed = readBoolean(input.installed) ?? existsSync7(config.launchAgentPath);
16934
+ const installed = readBoolean(input.installed) ?? existsSync6(config.launchAgentPath);
17128
16935
  const loaded = readBoolean(input.loaded) ?? false;
17129
16936
  const stdoutLogPath = readString2(input.stdoutLogPath) ?? config.stdoutLogPath;
17130
16937
  const stderrLogPath = readString2(input.stderrLogPath) ?? config.stderrLogPath;
@@ -17245,8 +17052,8 @@ var SCHEMA_GUARDED_SERVICE_COMMANDS = new Set([
17245
17052
  "restart"
17246
17053
  ]);
17247
17054
  function assertBrokerServiceSchemaCompatible(config) {
17248
- const databasePath = join6(config.controlHome, "control-plane.sqlite");
17249
- if (!existsSync7(databasePath))
17055
+ const databasePath = join5(config.controlHome, "control-plane.sqlite");
17056
+ if (!existsSync6(databasePath))
17250
17057
  return;
17251
17058
  const database = openControlPlaneSqliteDatabase(databasePath, { readonly: true });
17252
17059
  try {
@@ -17279,7 +17086,7 @@ async function runScoutdServiceCommand(command, config, timeoutMs = SCOUTD_DEFAU
17279
17086
  function readCoreAgentsSync() {
17280
17087
  try {
17281
17088
  const settingsPath = resolveOpenScoutSupportPaths().settingsPath;
17282
- const raw = readFileSync5(settingsPath, "utf8");
17089
+ const raw = readFileSync4(settingsPath, "utf8");
17283
17090
  const settings = JSON.parse(raw);
17284
17091
  const raw_agents = settings?.agents?.coreAgents;
17285
17092
  if (Array.isArray(raw_agents)) {
@@ -17292,10 +17099,10 @@ function bootoutCommand(config) {
17292
17099
  return `/bin/launchctl bootout ${config.serviceTarget}`;
17293
17100
  }
17294
17101
  function readLogLines(path) {
17295
- if (!existsSync7(path)) {
17102
+ if (!existsSync6(path)) {
17296
17103
  return [];
17297
17104
  }
17298
- return readFileSync5(path, "utf8").split(`
17105
+ return readFileSync4(path, "utf8").split(`
17299
17106
  `).map((line) => line.trim()).filter(Boolean);
17300
17107
  }
17301
17108
  function isPackageScriptBanner(line) {
@@ -17519,15 +17326,15 @@ if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1] && !pr
17519
17326
 
17520
17327
  // ../runtime/dist/harness-catalog.js
17521
17328
  import { execFileSync as execFileSync3 } from "node:child_process";
17522
- import { existsSync as existsSync8, statSync } from "node:fs";
17329
+ import { existsSync as existsSync7, statSync } from "node:fs";
17523
17330
  import { mkdir, readFile as readFile2, writeFile } from "node:fs/promises";
17524
17331
  import { homedir as homedir6 } from "node:os";
17525
- import { dirname as dirname5, join as join8 } from "node:path";
17332
+ import { dirname as dirname4, join as join7 } from "node:path";
17526
17333
 
17527
17334
  // ../agent-sessions/dist/codex-executable.js
17528
17335
  import { execFileSync as execFileSync2 } from "node:child_process";
17529
17336
  import { accessSync as accessSync2, constants as constants2 } from "node:fs";
17530
- import { delimiter, join as join7 } from "node:path";
17337
+ import { delimiter, join as join6 } from "node:path";
17531
17338
  function isExecutable(filePath) {
17532
17339
  if (!filePath)
17533
17340
  return false;
@@ -17571,11 +17378,11 @@ function codexAppBundleCandidates(env) {
17571
17378
  const appNames = ["Codex.app", "ChatGPT.app"];
17572
17379
  const candidates = appNames.flatMap((appName) => [
17573
17380
  {
17574
- path: join7("/Applications", appName, "Contents", "Resources", "codex"),
17381
+ path: join6("/Applications", appName, "Contents", "Resources", "codex"),
17575
17382
  source: "codex_app_bundle"
17576
17383
  },
17577
17384
  {
17578
- path: join7(env.HOME ?? "", "Applications", appName, "Contents", "Resources", "codex"),
17385
+ path: join6(env.HOME ?? "", "Applications", appName, "Contents", "Resources", "codex"),
17579
17386
  source: "codex_app_bundle"
17580
17387
  }
17581
17388
  ]);
@@ -17583,7 +17390,7 @@ function codexAppBundleCandidates(env) {
17583
17390
  }
17584
17391
  function pathCandidates(env) {
17585
17392
  return (env.PATH ?? "").split(delimiter).filter(Boolean).map((directory) => ({
17586
- path: join7(directory, "codex"),
17393
+ path: join6(directory, "codex"),
17587
17394
  source: "path"
17588
17395
  }));
17589
17396
  }
@@ -17594,7 +17401,7 @@ function commonCandidates(env) {
17594
17401
  "/opt/homebrew/bin",
17595
17402
  "/usr/local/bin"
17596
17403
  ].filter(Boolean).map((directory) => ({
17597
- path: join7(directory, "codex"),
17404
+ path: join6(directory, "codex"),
17598
17405
  source: "common"
17599
17406
  }));
17600
17407
  }
@@ -18230,7 +18037,7 @@ function expandHomePath2(value) {
18230
18037
  if (value === "~")
18231
18038
  return home;
18232
18039
  if (value.startsWith("~/"))
18233
- return join8(home, value.slice(2));
18040
+ return join7(home, value.slice(2));
18234
18041
  return value;
18235
18042
  }
18236
18043
  function defaultWhichBinary(binary, platform) {
@@ -18264,7 +18071,7 @@ function defaultRunCommand(command, platform) {
18264
18071
  }
18265
18072
  function defaultRequirementExists(requirement) {
18266
18073
  const expanded = expandHomePath2(requirement.path);
18267
- if (!existsSync8(expanded))
18074
+ if (!existsSync7(expanded))
18268
18075
  return false;
18269
18076
  if (requirement.fileType === "any" || !requirement.fileType)
18270
18077
  return true;
@@ -18493,7 +18300,7 @@ async function readHarnessCatalogOverrides(overridePath = resolveOpenScoutSuppor
18493
18300
  }
18494
18301
  }
18495
18302
  async function writeHarnessCatalogOverrides(overrides, overridePath = resolveOpenScoutSupportPaths().harnessCatalogPath) {
18496
- await mkdir(dirname5(overridePath), { recursive: true });
18303
+ await mkdir(dirname4(overridePath), { recursive: true });
18497
18304
  const payload = {
18498
18305
  version: HARNESS_CATALOG_VERSION,
18499
18306
  entries: overrides,
@@ -18503,7 +18310,7 @@ async function writeHarnessCatalogOverrides(overrides, overridePath = resolveOpe
18503
18310
  `, "utf8");
18504
18311
  }
18505
18312
  async function ensureHarnessCatalogOverrideFile(overridePath = resolveOpenScoutSupportPaths().harnessCatalogPath) {
18506
- if (existsSync8(overridePath))
18313
+ if (existsSync7(overridePath))
18507
18314
  return;
18508
18315
  await writeHarnessCatalogOverrides({}, overridePath);
18509
18316
  }
@@ -20827,22 +20634,22 @@ function validateScoutRendezvousCodename(codename) {
20827
20634
 
20828
20635
  // ../runtime/dist/claude-statusline.js
20829
20636
  import { appendFile, mkdir as mkdir2, readFile as readFile3, writeFile as writeFile2 } from "node:fs/promises";
20830
- import { basename as basename2, dirname as dirname6, join as join9 } from "node:path";
20637
+ import { basename as basename2, dirname as dirname5, join as join8 } from "node:path";
20831
20638
  function resolveClaudeStatuslineDirectory() {
20832
- return join9(resolveOpenScoutSupportPaths().runtimeDirectory, "statusline");
20639
+ return join8(resolveOpenScoutSupportPaths().runtimeDirectory, "statusline");
20833
20640
  }
20834
20641
  function resolveClaudeStatuslineDelegatePath() {
20835
- return join9(resolveClaudeStatuslineDirectory(), "claude-delegate.json");
20642
+ return join8(resolveClaudeStatuslineDirectory(), "claude-delegate.json");
20836
20643
  }
20837
20644
  function resolveClaudeStatuslineWrapperPath() {
20838
- return join9(resolveClaudeStatuslineDirectory(), "claude-statusline.sh");
20645
+ return join8(resolveClaudeStatuslineDirectory(), "claude-statusline.sh");
20839
20646
  }
20840
20647
  async function writeClaudeStatuslineDelegate(delegate, path = resolveClaudeStatuslineDelegatePath()) {
20841
20648
  const next = {
20842
20649
  version: 1,
20843
20650
  ...delegate
20844
20651
  };
20845
- await mkdir2(dirname6(path), { recursive: true });
20652
+ await mkdir2(dirname5(path), { recursive: true });
20846
20653
  await writeFile2(path, JSON.stringify(next, null, 2) + `
20847
20654
  `, "utf8");
20848
20655
  return next;
@@ -20857,9 +20664,9 @@ function isOpenScoutClaudeStatuslineCommand(command, wrapperPath = resolveClaude
20857
20664
  }
20858
20665
 
20859
20666
  // ../runtime/dist/managed-installs.js
20860
- import { createHash as createHash2 } from "node:crypto";
20667
+ import { createHash } from "node:crypto";
20861
20668
  import { mkdir as mkdir3, readFile as readFile4, writeFile as writeFile3 } from "node:fs/promises";
20862
- import { dirname as dirname7 } from "node:path";
20669
+ import { dirname as dirname6 } from "node:path";
20863
20670
  function emptyManagedInstallsFile(now = Date.now()) {
20864
20671
  return {
20865
20672
  version: 1,
@@ -20876,7 +20683,7 @@ function stableInstallId(input) {
20876
20683
  input.provider ?? "",
20877
20684
  input.targetPath ?? ""
20878
20685
  ].join("\x00");
20879
- return `install.${createHash2("sha256").update(key).digest("hex").slice(0, 18)}`;
20686
+ return `install.${createHash("sha256").update(key).digest("hex").slice(0, 18)}`;
20880
20687
  }
20881
20688
  function normalizeManagedInstallsFile(value) {
20882
20689
  if (!value || typeof value !== "object" || Array.isArray(value)) {
@@ -20899,7 +20706,7 @@ async function readManagedInstallsFile(path = resolveOpenScoutSupportPaths().man
20899
20706
  }
20900
20707
  async function writeManagedInstallsFile(file, path = resolveOpenScoutSupportPaths().managedInstallsPath) {
20901
20708
  assertTestIsolatedUserData("write the managed-installs registry", "OPENSCOUT_SUPPORT_DIRECTORY");
20902
- await mkdir3(dirname7(path), { recursive: true });
20709
+ await mkdir3(dirname6(path), { recursive: true });
20903
20710
  await writeFile3(path, JSON.stringify(file, null, 2) + `
20904
20711
  `, "utf8");
20905
20712
  }
@@ -20925,6 +20732,167 @@ async function upsertManagedInstall(input, now = Date.now()) {
20925
20732
  return next;
20926
20733
  }
20927
20734
 
20735
+ // ../runtime/dist/node-identity.js
20736
+ import { createHash as createHash2, createPrivateKey, createPublicKey, generateKeyPairSync, randomBytes, sign, verify } from "node:crypto";
20737
+ import { chmodSync, existsSync as existsSync8, mkdirSync as mkdirSync4, readFileSync as readFileSync5, renameSync as renameSync3, rmSync as rmSync2, writeFileSync as writeFileSync4 } from "node:fs";
20738
+ import { dirname as dirname7, join as join9 } from "node:path";
20739
+ var NODE_IDENTITY_FILE = "node-identity.json";
20740
+ var NODE_FINGERPRINT_PREFIX = "osc1";
20741
+ var NODE_CARD_TTL_MS = 24 * 60 * 60 * 1000;
20742
+ var stableNodeQualifierCache = new Map;
20743
+ function nodeIdentityPath(supportDirectory) {
20744
+ const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
20745
+ return join9(dir, NODE_IDENTITY_FILE);
20746
+ }
20747
+ function loadOrCreateNodeIdentity(supportDirectory) {
20748
+ const path = nodeIdentityPath(supportDirectory);
20749
+ if (existsSync8(path)) {
20750
+ return readAndValidateNodeIdentity(path);
20751
+ }
20752
+ return createNodeIdentity(supportDirectory);
20753
+ }
20754
+ function readStableNodeQualifier(supportDirectory) {
20755
+ const path = nodeIdentityPath(supportDirectory);
20756
+ const cached = stableNodeQualifierCache.get(path);
20757
+ if (cached) {
20758
+ return cached;
20759
+ }
20760
+ if (!existsSync8(path)) {
20761
+ return null;
20762
+ }
20763
+ const nodeQualifier = normalizeNodeQualifier(readAndValidateNodeIdentity(path).nodeQualifier);
20764
+ if (nodeQualifier) {
20765
+ stableNodeQualifierCache.set(path, nodeQualifier);
20766
+ }
20767
+ return nodeQualifier || null;
20768
+ }
20769
+ function readAndValidateNodeIdentity(path) {
20770
+ let parsed;
20771
+ try {
20772
+ parsed = JSON.parse(readFileSync5(path, "utf8"));
20773
+ } catch {
20774
+ throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
20775
+ }
20776
+ if (parsed.version !== 1 || !parsed.publicKey || !parsed.privateKey) {
20777
+ throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
20778
+ }
20779
+ if (parsed.nodeQualifier !== undefined && normalizeNodeQualifier(parsed.nodeQualifier) !== parsed.nodeQualifier) {
20780
+ throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
20781
+ }
20782
+ try {
20783
+ const derived = createPublicKey(importPrivateKey(parsed.privateKey)).export({ type: "spki", format: "der" }).toString("base64");
20784
+ if (derived !== parsed.publicKey) {
20785
+ throw new Error("mismatch");
20786
+ }
20787
+ } catch {
20788
+ throw new Error(`Node identity at ${path} has mismatched or invalid keys; remove it to generate a fresh one.`);
20789
+ }
20790
+ return parsed;
20791
+ }
20792
+ function normalizeNodeQualifier(value) {
20793
+ return typeof value === "string" ? value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "") : "";
20794
+ }
20795
+ function createNodeIdentity(supportDirectory) {
20796
+ if (!supportDirectory) {
20797
+ assertTestIsolatedUserData("write the node identity", "OPENSCOUT_SUPPORT_DIRECTORY");
20798
+ }
20799
+ const path = nodeIdentityPath(supportDirectory);
20800
+ const { publicKey, privateKey } = generateKeyPairSync("ed25519");
20801
+ const identity = {
20802
+ version: 1,
20803
+ publicKey: publicKey.export({ type: "spki", format: "der" }).toString("base64"),
20804
+ privateKey: privateKey.export({ type: "pkcs8", format: "der" }).toString("base64"),
20805
+ createdAt: Date.now()
20806
+ };
20807
+ mkdirSync4(dirname7(path), { recursive: true });
20808
+ try {
20809
+ writeFileSync4(path, `${JSON.stringify(identity, null, 2)}
20810
+ `, { encoding: "utf8", mode: 384, flag: "wx" });
20811
+ } catch (error) {
20812
+ if (error.code === "EEXIST") {
20813
+ return readAndValidateNodeIdentity(path);
20814
+ }
20815
+ throw error;
20816
+ }
20817
+ try {
20818
+ chmodSync(path, 384);
20819
+ } catch {}
20820
+ return identity;
20821
+ }
20822
+ function nodeKeyId(publicKeyBase64) {
20823
+ return createHash2("sha256").update(Buffer.from(publicKeyBase64, "base64")).digest("hex");
20824
+ }
20825
+ function nodeFingerprint(publicKeyBase64) {
20826
+ const digest = createHash2("sha256").update(Buffer.from(publicKeyBase64, "base64")).digest();
20827
+ const encoded = base32Encode(digest.subarray(0, 10)).toLowerCase();
20828
+ return `${NODE_FINGERPRINT_PREFIX}:${encoded.slice(0, 4)}-${encoded.slice(4, 8)}`;
20829
+ }
20830
+ function signNodePayload(identity, payload) {
20831
+ const key = importPrivateKey(identity.privateKey);
20832
+ return sign(null, typeof payload === "string" ? Buffer.from(payload, "utf8") : payload, key).toString("base64");
20833
+ }
20834
+ function verifyNodeSignature(publicKeyBase64, payload, signatureBase64) {
20835
+ try {
20836
+ const key = importPublicKey(publicKeyBase64);
20837
+ return verify(null, typeof payload === "string" ? Buffer.from(payload, "utf8") : payload, key, Buffer.from(signatureBase64, "base64"));
20838
+ } catch {
20839
+ return false;
20840
+ }
20841
+ }
20842
+ function canonicalJson(value) {
20843
+ if (value === null || typeof value !== "object") {
20844
+ return JSON.stringify(value);
20845
+ }
20846
+ if (Array.isArray(value)) {
20847
+ return `[${value.map(canonicalJson).join(",")}]`;
20848
+ }
20849
+ const record2 = value;
20850
+ const keys = Object.keys(record2).sort();
20851
+ return `{${keys.map((key) => `${JSON.stringify(key)}:${canonicalJson(record2[key])}`).join(",")}}`;
20852
+ }
20853
+ function verifySignedNodeCard(card, now = Date.now()) {
20854
+ if (nodeKeyId(card.publicKey) !== card.keyId) {
20855
+ return false;
20856
+ }
20857
+ if (nodeFingerprint(card.publicKey) !== card.fingerprint) {
20858
+ return false;
20859
+ }
20860
+ if (!Number.isFinite(card.expiresAt) || card.expiresAt <= now) {
20861
+ return false;
20862
+ }
20863
+ if (card.tls !== undefined) {
20864
+ if (typeof card.tls !== "object" || card.tls === null || typeof card.tls.spkiFingerprint !== "string" || !/^[0-9a-f]{64}$/.test(card.tls.spkiFingerprint)) {
20865
+ return false;
20866
+ }
20867
+ }
20868
+ const { signature, ...unsigned } = card;
20869
+ return verifyNodeSignature(card.publicKey, canonicalJson(unsigned), signature);
20870
+ }
20871
+ var BASE32_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
20872
+ function base32Encode(input) {
20873
+ let bits = 0;
20874
+ let value = 0;
20875
+ let output = "";
20876
+ for (const byte of input) {
20877
+ value = value << 8 | byte;
20878
+ bits += 8;
20879
+ while (bits >= 5) {
20880
+ output += BASE32_ALPHABET[value >>> bits - 5 & 31];
20881
+ bits -= 5;
20882
+ }
20883
+ }
20884
+ if (bits > 0) {
20885
+ output += BASE32_ALPHABET[value << 5 - bits & 31];
20886
+ }
20887
+ return output;
20888
+ }
20889
+ function importPrivateKey(privateKeyBase64) {
20890
+ return createPrivateKey({ key: Buffer.from(privateKeyBase64, "base64"), format: "der", type: "pkcs8" });
20891
+ }
20892
+ function importPublicKey(publicKeyBase64) {
20893
+ return createPublicKey({ key: Buffer.from(publicKeyBase64, "base64"), format: "der", type: "spki" });
20894
+ }
20895
+
20928
20896
  // ../runtime/dist/user-project-hints.js
20929
20897
  import { readdir, readFile as readFile5, stat } from "node:fs/promises";
20930
20898
  import { homedir as homedir7 } from "node:os";