@openscout/scout 0.2.92 → 0.2.94

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/README.md +22 -28
  2. package/bin/scoutd +0 -0
  3. package/dist/build-manifest.json +3 -3
  4. package/dist/client/apple-touch-icon.png +0 -0
  5. package/dist/client/assets/ActivityScreen--eANwuxa.js +1 -0
  6. package/dist/client/assets/{AddProjectForm-CpyytDf2.js → AddProjectForm-CcD6qvV8.js} +1 -1
  7. package/dist/client/assets/AgentAvatar-CYhf6twS.js +1 -0
  8. package/dist/client/assets/AgentConfigurationScreen-BTI24HQX.js +1 -0
  9. package/dist/client/assets/AgentDefinitionsWorkspace-srmN6-vj.js +1 -0
  10. package/dist/client/assets/{AgentDetailCard-BTiOmh-a.js → AgentDetailCard-UqPNpcvB.js} +1 -1
  11. package/dist/client/assets/AgentFloorView-XXNgI5Cj.js +1 -0
  12. package/dist/client/assets/AgentInfoScreen-CimdOnZ9.js +1 -0
  13. package/dist/client/assets/{AgentLaneCard-lfRNb7JD.js → AgentLaneCard-Z-aOBR3W.js} +1 -1
  14. package/dist/client/assets/{AgentLaneChrome-Dlwrbq3g.js → AgentLaneChrome-CyhA1reW.js} +1 -1
  15. package/dist/client/assets/AgentLaneDetailSheet-BNzjMjIH.js +4 -0
  16. package/dist/client/assets/{AgentLaneSummaryResize-6SOEWUnr.js → AgentLaneSummaryResize-Box8-_rS.js} +1 -1
  17. package/dist/client/assets/AgentLanesEmbedScreen-BmLnN4on.js +1 -0
  18. package/dist/client/assets/{AgentLanesPreflight-C3uOiOzd.js → AgentLanesPreflight-5B6sXvRB.js} +1 -1
  19. package/dist/client/assets/AgentLanesView-DHyzVBk6.js +2 -0
  20. package/dist/client/assets/{AgentLiveActions-BJ5dIfL3.js → AgentLiveActions-BwuzOE8h.js} +1 -1
  21. package/dist/client/assets/AgentSessions-CsZwoukw.js +6 -0
  22. package/dist/client/assets/AgentsConsole-KCao4XmX.js +1 -0
  23. package/dist/client/assets/AgentsScreen-CtPAmwRX.js +1 -0
  24. package/dist/client/assets/AgentsSubnav-CDMjKeYC.js +1 -0
  25. package/dist/client/assets/AstronautSuit-Ckx7lu7G.js +1 -0
  26. package/dist/client/assets/AtopView-DYlpgEHf.js +1 -0
  27. package/dist/client/assets/{BackToPicker-D1LV6Cqp.js → BackToPicker-4JaeRvDm.js} +1 -1
  28. package/dist/client/assets/BriefingDetailScreen-D6-xqrpo.js +1 -0
  29. package/dist/client/assets/BriefingsScreen-DKxSDEmk.js +1 -0
  30. package/dist/client/assets/{BrokerMetadataPanel-BhjECqOK.js → BrokerMetadataPanel-BbREmsbK.js} +1 -1
  31. package/dist/client/assets/BrokerScreen-fbPIouMw.js +5 -0
  32. package/dist/client/assets/CastPicker-BcA2vDDV.js +1 -0
  33. package/dist/client/assets/CastPicker-zXsnkTIy.css +1 -0
  34. package/dist/client/assets/ChatCollapsedStrip-Ycm0ecaX.js +1 -0
  35. package/dist/client/assets/{CodeDiffPane-Bx_2VAzv.js → CodeDiffPane-Cn8Y9hAt.js} +1 -1
  36. package/dist/client/assets/{CodeProjectPicker-C1yOJKvs.js → CodeProjectPicker-nPFktrco.js} +1 -1
  37. package/dist/client/assets/CodeScreen-BlAxtxE5.js +1 -0
  38. package/dist/client/assets/ConversationComposer-2HjbGPL9.js +1 -0
  39. package/dist/client/assets/ConversationFeedRows-C6wUqJrx.js +1 -0
  40. package/dist/client/assets/ConversationHeader-C8vfXaTF.js +1 -0
  41. package/dist/client/assets/ConversationPanels-CNCIbpqU.js +6 -0
  42. package/dist/client/assets/ConversationScreen-BNULZAp2.js +2 -0
  43. package/dist/client/assets/ConversationScreen-CkWnKXt6.css +1 -0
  44. package/dist/client/assets/ConversationStatus-DZuyKsWN.js +1 -0
  45. package/dist/client/assets/CrewAvatar-CTIuxp4G.js +1 -0
  46. package/dist/client/assets/CrewAvatar-D0c9z5Qr.css +1 -0
  47. package/dist/client/assets/CrewWorkspaces-CJhBKVoZ.css +1 -0
  48. package/dist/client/assets/CrewWorkspaces-CkPYIA46.js +1 -0
  49. package/dist/client/assets/{DataTable-CJbbgBdA.js → DataTable-6IDhanr5.js} +1 -1
  50. package/dist/client/assets/DispatchAftermath-DC1u9itO.js +1 -0
  51. package/dist/client/assets/DocumentFocusViewer-DZVhS7as.js +1 -0
  52. package/dist/client/assets/{EmbeddableSurfacesLab-BdsYRDky.js → EmbeddableSurfacesLab-BKUFJMCV.js} +1 -1
  53. package/dist/client/assets/{EmptyState-BRY5jTpz.js → EmptyState-CeBl0iGd.js} +1 -1
  54. package/dist/client/assets/{FileViewerPane-9Bveqm9c.js → FileViewerPane-DQlpNt2S.js} +2 -2
  55. package/dist/client/assets/FlightObserveScreen-CDWGSKZg.js +1 -0
  56. package/dist/client/assets/FollowScreen-BXHOp3gb.js +1 -0
  57. package/dist/client/assets/{HarnessMark-BPAphNjx.js → HarnessMark-D5CA5uSp.js} +1 -1
  58. package/dist/client/assets/HarnessesScreen-DhFXq1qz.js +1 -0
  59. package/dist/client/assets/{HerdrSession-BujfGzrP.js → HerdrSession-BRhs5LIR.js} +1 -1
  60. package/dist/client/assets/HomeHero-7JwycwFY.css +1 -0
  61. package/dist/client/assets/HomeHero-DMABJuze.js +1 -0
  62. package/dist/client/assets/HostAdvisorView-RAociATV.js +1 -0
  63. package/dist/client/assets/{KnowledgeSearchInspector-B4ZY24xE.js → KnowledgeSearchInspector-CZPyVNSw.js} +1 -1
  64. package/dist/client/assets/KnowledgeSearchScreen-mGTKIg00.js +1 -0
  65. package/dist/client/assets/{LaneToolHoverCard-B7KdvQvf.js → LaneToolHoverCard-D_DMlBeT.js} +1 -1
  66. package/dist/client/assets/LaneTraceDetailSheet-BEHg3LmH.js +1 -0
  67. package/dist/client/assets/{LaneTraceEventFocus-mkMw2wJU.js → LaneTraceEventFocus-DVimcizS.js} +1 -1
  68. package/dist/client/assets/{MeshCanvas-CpKcWxKy.js → MeshCanvas-BOuZx4AM.js} +2 -2
  69. package/dist/client/assets/{MeshCanvasMinimap-C9IoGHbe.js → MeshCanvasMinimap-wL-1N94e.js} +1 -1
  70. package/dist/client/assets/MeshScreen-DMY9Bmh5.js +1 -0
  71. package/dist/client/assets/{MeshTopologyView-DFzr0IZM.js → MeshTopologyView-DiDcX5f4.js} +2 -2
  72. package/dist/client/assets/MessagesScreen-Eulveud3.js +1 -0
  73. package/dist/client/assets/{MissionContextRail-Y8QxUZGE.js → MissionContextRail-DrNKXG5u.js} +1 -1
  74. package/dist/client/assets/MissionControlView-ByBlHVN8.js +1 -0
  75. package/dist/client/assets/MissionFocusOverlay-D1i6R6Zt.js +1 -0
  76. package/dist/client/assets/MissionLeftAgentRow-DN9NcCML.js +1 -0
  77. package/dist/client/assets/MissionLogPane-DSeIv3Xo.js +1 -0
  78. package/dist/client/assets/NewAgentModal-V7yK6J6j.js +1 -0
  79. package/dist/client/assets/NewChatComposer-hlWT-nbR.js +19 -0
  80. package/dist/client/assets/{NewChatOrigin-DmuJ32wa.js → NewChatOrigin-DdpzE4kz.js} +1 -1
  81. package/dist/client/assets/ObserveEmbedScreen-l_Q3ts2q.js +2 -0
  82. package/dist/client/assets/ObserveTextFlow-BSEtYTxU.js +2 -0
  83. package/dist/client/assets/ObservedTopologyPanel-CdGUXxGR.js +2 -0
  84. package/dist/client/assets/OpenScoutAppShell-DN8dOSK4.js +79 -0
  85. package/dist/client/assets/OpsAgentsView-ntGr4pz4.js +1 -0
  86. package/dist/client/assets/OpsScreen-Ppen_Lmj.js +1 -0
  87. package/dist/client/assets/OpsSubnav-GAKsoSor.js +1 -0
  88. package/dist/client/assets/ProjectAgentProfile-BLlp2e6t.js +1 -0
  89. package/dist/client/assets/{ProjectAgentProfileBar-BLVg5EeA.js → ProjectAgentProfileBar-BQET-qrY.js} +1 -1
  90. package/dist/client/assets/ProjectAgentProfileHero-Ck8mThtx.js +1 -0
  91. package/dist/client/assets/ProjectsInbox-Dlt8OQ8O.js +2 -0
  92. package/dist/client/assets/ProjectsRail-DCfNMmnW.js +1 -0
  93. package/dist/client/assets/ProjectsScreen-BP-hmI1m.js +1 -0
  94. package/dist/client/assets/ProjectsThreadAside-CWpMjGIH.js +1 -0
  95. package/dist/client/assets/Provider-B2xuo3rf.js +1 -0
  96. package/dist/client/assets/RailRow-B-GycCBx.js +1 -0
  97. package/dist/client/assets/RailRow-B0sRaJc6.css +1 -0
  98. package/dist/client/assets/RawSessionsTable-AQThi6sm.js +1 -0
  99. package/dist/client/assets/RealtimeVoiceScreen-D7zZHK_t.js +1 -0
  100. package/dist/client/assets/{RepoDiffEmbedScreen-BCDXFE3D.js → RepoDiffEmbedScreen-DXWoRF_c.js} +1 -1
  101. package/dist/client/assets/{RepoDiffPageScreen-m62FiWXC.js → RepoDiffPageScreen-D_274ExO.js} +1 -1
  102. package/dist/client/assets/RepoDiffViewer-DbedmHDX.js +7 -0
  103. package/dist/client/assets/RepoDiffViewerLazy-C0--fPtk.js +2 -0
  104. package/dist/client/assets/ReposScreen-D39_YG4H.js +6 -0
  105. package/dist/client/assets/ScoutDeckSurface-CKT3qdqY.js +1 -0
  106. package/dist/client/assets/{ScoutSurface-CkgT7A-c.js → ScoutSurface-UsRy0t-I.js} +1 -1
  107. package/dist/client/assets/{ScoutbotFxLab-D-kV5j4T.js → ScoutbotFxLab-Fmdfboxs.js} +1 -1
  108. package/dist/client/assets/{SecondaryNav-_wyKjwNf.js → SecondaryNav-o2RL9H8H.js} +1 -1
  109. package/dist/client/assets/{SessionEmbedScreen-CJZmIBV7.js → SessionEmbedScreen-RD5XOx7R.js} +1 -1
  110. package/dist/client/assets/{SessionObserve-yYA8Gy5s.js → SessionObserve-Dsd0j05N.js} +9 -9
  111. package/dist/client/assets/{SessionObserveEvidence-cHdjYOJe.js → SessionObserveEvidence-DopQYDkD.js} +1 -1
  112. package/dist/client/assets/SessionRefScreen-B_cTv47v.js +1 -0
  113. package/dist/client/assets/SessionsScreen-Bq0Z77On.js +1 -0
  114. package/dist/client/assets/SettingsDrawer-R8a0TlJD.css +1 -0
  115. package/dist/client/assets/SettingsDrawer-_AwuopMS.js +3 -0
  116. package/dist/client/assets/SettingsScreen-Cw4DDfJP.js +1 -0
  117. package/dist/client/assets/{ShikiPane-dBS9hD-z.js → ShikiPane-BfHc_3pM.js} +1 -1
  118. package/dist/client/assets/{SlidePanel-CH-3-8_2.js → SlidePanel-C-q7XwTa.js} +1 -1
  119. package/dist/client/assets/SpriteAvatar-Bs68ZENy.js +1 -0
  120. package/dist/client/assets/{StatusPill-C8m9ZymF.js → StatusPill-ZZQwxB1a.js} +1 -1
  121. package/dist/client/assets/{TailView-B0BSopPs.js → TailView-Q4FVMsUH.js} +2 -2
  122. package/dist/client/assets/Terminal-D7zqHwHV.js +1 -0
  123. package/dist/client/assets/TerminalEmbedScreen-CXIJ7qv6.js +1 -0
  124. package/dist/client/assets/TerminalHeaderMount-BnBLOPbb.js +1 -0
  125. package/dist/client/assets/{TextDocumentSurface-BWJCGBZf.js → TextDocumentSurface-CKQP-cBT.js} +1 -1
  126. package/dist/client/assets/{TmuxPeek-B4QdHbGm.js → TmuxPeek-V9dGESfO.js} +1 -1
  127. package/dist/client/assets/{VoicePermissionsPanel-Dd4ITJy_.js → VoicePermissionsPanel-k7sbLXx2.js} +1 -1
  128. package/dist/client/assets/WorkDetailScreen-60p9litn.js +5 -0
  129. package/dist/client/assets/WorkFilesViewer-BjJS7GyM.js +1 -0
  130. package/dist/client/assets/{activity-CC8JzJNH.js → activity-Bj3Hnbj3.js} +1 -1
  131. package/dist/client/assets/{addon-fit-CaZ-uLrg.js → addon-fit-BL-NTWRU.js} +1 -1
  132. package/dist/client/assets/{addon-webgl-B8utL3bM.js → addon-webgl-CIMgmNjg.js} +1 -1
  133. package/dist/client/assets/{ScoutbotBroadcastChip-CxtYZWPZ.css → agent-autocomplete-C7xwIcwd.css} +1 -1
  134. package/dist/client/assets/agent-autocomplete-DXlvdc4b.js +10 -0
  135. package/dist/client/assets/{agent-essentials-B3wcxg_v.js → agent-essentials-BOMHR0_U.js} +1 -1
  136. package/dist/client/assets/{agent-lane-card-model-q4cwzLX4.js → agent-lane-card-model-CTLxf3R4.js} +1 -1
  137. package/dist/client/assets/agent-lane-detail-ppJId6Jc.js +2 -0
  138. package/dist/client/assets/{agent-lane-preview-C33Dwpn7.js → agent-lane-preview-BhplDYGf.js} +1 -1
  139. package/dist/client/assets/{agent-lanes-BDNktFBZ.css → agent-lanes-DlqcEf0l.css} +1 -1
  140. package/dist/client/assets/{agent-lanes-model-VYQ5a68i.js → agent-lanes-model-AfrjRNK5.js} +2 -2
  141. package/dist/client/assets/agent-specialization-BIPIBW8u.js +1 -0
  142. package/dist/client/assets/api-Co9aQ2Jw.js +1 -0
  143. package/dist/client/assets/{api-BkjHJfgJ.js → api-HFH8wFyb.js} +1 -1
  144. package/dist/client/assets/{arc.es-uFv9UrHn.js → arc.es-IR5r6sj_.js} +1 -1
  145. package/dist/client/assets/archive-BjcGiAy8.js +1 -0
  146. package/dist/client/assets/{arrow-down-w1HPzDSE.js → arrow-down-BydciYFZ.js} +1 -1
  147. package/dist/client/assets/{arrow-left-B-3GJ7ct.js → arrow-left-CghA0kTw.js} +1 -1
  148. package/dist/client/assets/arrow-right-iJFv3jNh.js +1 -0
  149. package/dist/client/assets/{arrow-up-right-G6bJXxhK.js → arrow-up-right-CCfZXPqD.js} +1 -1
  150. package/dist/client/assets/{bot-DzCOGKi6.js → bot-B5sub1-i.js} +1 -1
  151. package/dist/client/assets/broker-display-Q75fupqG.js +2 -0
  152. package/dist/client/assets/{cache-Dr0why2k.js → cache-CeWH_KzJ.js} +1 -1
  153. package/dist/client/assets/{check-BX8nRgop.js → check-C18YQC90.js} +1 -1
  154. package/dist/client/assets/{chevron-down-B3VVRJcV.js → chevron-down-Mp9mu_yd.js} +1 -1
  155. package/dist/client/assets/{chevron-right-BYMV1511.js → chevron-right-CzH-TaSF.js} +1 -1
  156. package/dist/client/assets/{chunk-HRAB3GC3-dRd2eQMJ.js → chunk-HRAB3GC3-swV8PA2k.js} +1 -1
  157. package/dist/client/assets/{chunk-JTPDIGGW-BjX67kHU.js → chunk-JTPDIGGW-BKXqcLKw.js} +3 -3
  158. package/dist/client/assets/{chunk-T65CQEWV-kP6nJjkU.js → chunk-T65CQEWV-vYbNJ8E6.js} +1 -1
  159. package/dist/client/assets/{chunk-YOZR3KYS-C13bZPVd.js → chunk-YOZR3KYS-U65yUmqt.js} +1 -1
  160. package/dist/client/assets/{clock-B9ukVaVn.js → clock-B4PTFi5m.js} +1 -1
  161. package/dist/client/assets/{code-xml-BFc3TMSm.js → code-xml-Jtxsp5d1.js} +1 -1
  162. package/dist/client/assets/collapsed-strip-raJWthAH.css +1 -0
  163. package/dist/client/assets/compass-0_54-vz3.js +1 -0
  164. package/dist/client/assets/content-6RvWTrtk.js +1 -0
  165. package/dist/client/assets/content-BCgwMUqz.js +1 -0
  166. package/dist/client/assets/content-Bf2VLhx0.js +1 -0
  167. package/dist/client/assets/content-BrU_38-m.js +1 -0
  168. package/dist/client/assets/content-BvvJN8rN.js +1 -0
  169. package/dist/client/assets/content-CAeEqYPw.js +1 -0
  170. package/dist/client/assets/content-CHghn-rT.js +1 -0
  171. package/dist/client/assets/{content-Uqt8AG-s.css → content-CINHz-rZ.css} +1 -1
  172. package/dist/client/assets/content-CI_Z9DXk.js +1 -0
  173. package/dist/client/assets/content-CbyKONhW.js +1 -0
  174. package/dist/client/assets/content-Czogvp43.js +1 -0
  175. package/dist/client/assets/content-DFk0zNzX.js +1 -0
  176. package/dist/client/assets/content-DHe4DgkA.js +1 -0
  177. package/dist/client/assets/content-DMbawvqU.js +1 -0
  178. package/dist/client/assets/content-DTz7cKjo.js +1 -0
  179. package/dist/client/assets/content-E3kudY-W.js +1 -0
  180. package/dist/client/assets/content-LpO0aO_U.js +1 -0
  181. package/dist/client/assets/{conversation-icons-gpsv650H.js → conversation-icons-BV10B2Me.js} +1 -1
  182. package/dist/client/assets/conversation-model-CwF6Y9gx.js +1 -0
  183. package/dist/client/assets/conversation-motion-features-BKkCRaWR.js +1 -0
  184. package/dist/client/assets/{copy-BFmOcWof.js → copy-Dtpx4FOE.js} +1 -1
  185. package/dist/client/assets/cpu-BjVis9mc.js +1 -0
  186. package/dist/client/assets/{createLucideIcon-CFBn0Sdk.js → createLucideIcon-DXpqZP7I.js} +1 -1
  187. package/dist/client/assets/credentials-BTce3VP1.js +1 -0
  188. package/dist/client/assets/ctx-panel-D_HJ3nhb.css +1 -0
  189. package/dist/client/assets/discover-CHbrEItO.js +2 -0
  190. package/dist/client/assets/embed-entry-vil28MyU.js +2 -0
  191. package/dist/client/assets/{external-link-B1TI5yIt.js → external-link-Ckiyzjwo.js} +1 -1
  192. package/dist/client/assets/{eye-1J4yOUoG.js → eye-CpfyvdLq.js} +1 -1
  193. package/dist/client/assets/file-code-corner-7mo7EviR.js +1 -0
  194. package/dist/client/assets/{file-text-DcYSrI4v.js → file-text-KijGBnME.js} +1 -1
  195. package/dist/client/assets/gauge-y-Xg8Mrv.js +1 -0
  196. package/dist/client/assets/gestures-Bq9XnSqY.js +1 -0
  197. package/dist/client/assets/git-branch-BQ_x8KZL.js +1 -0
  198. package/dist/client/assets/harnesses-screen-2z36fJKE.css +1 -0
  199. package/dist/client/assets/home-moving-signal-DMguaRWR.css +1 -0
  200. package/dist/client/assets/home-moving-signal-DtRpiNa0.js +1 -0
  201. package/dist/client/assets/home-now-card-DFb4GOgM.js +1 -0
  202. package/dist/client/assets/{home-now-card-nano-y1EhBvVL.js → home-now-card-nano-D--m9jpq.js} +1 -1
  203. package/dist/client/assets/hooks-9d1SoaQA.js +2 -0
  204. package/dist/client/assets/host-advisor-B2Fqs5Dd.css +1 -0
  205. package/dist/client/assets/index-BVlMw8x_.js +1 -0
  206. package/dist/client/assets/index-CZ-05hKz.js +10 -0
  207. package/dist/client/assets/index-Cn0GR-q1.js +1 -0
  208. package/dist/client/assets/index-DosI4AG9.js +1 -0
  209. package/dist/client/assets/index-i7TMxlwW.css +1 -0
  210. package/dist/client/assets/index-wLwc74Pu.css +1 -0
  211. package/dist/client/assets/inspector-panel-C-EhEDYy.js +2 -0
  212. package/dist/client/assets/{keyboard-nav-h1IdakpD.js → keyboard-nav-DFhAJkW3.js} +1 -1
  213. package/dist/client/assets/{lane-observe-BA3g9aVd.js → lane-observe-vfyACHi0.js} +1 -1
  214. package/dist/client/assets/{lane-roster-store-71vFgAem.js → lane-roster-store-gUBsydNf.js} +1 -1
  215. package/dist/client/assets/layers-CGou-LwV.js +1 -0
  216. package/dist/client/assets/layout-grid-BrZt31QH.js +1 -0
  217. package/dist/client/assets/left-B_o51JV6.js +1 -0
  218. package/dist/client/assets/left-BpgWnaah.js +1 -0
  219. package/dist/client/assets/left-CwHZCGO3.js +2 -0
  220. package/dist/client/assets/left-CwLs0okF.js +1 -0
  221. package/dist/client/assets/left-Cx0kv6pe.js +1 -0
  222. package/dist/client/assets/left-DA0amyfu.js +1 -0
  223. package/dist/client/assets/left-DH44V4I_.css +1 -0
  224. package/dist/client/assets/left-R2OOE7VG.css +1 -0
  225. package/dist/client/assets/left-advisor-DU3s01gk.js +1 -0
  226. package/dist/client/assets/left-agents-qL5PpUY-.js +1 -0
  227. package/dist/client/assets/left-default-uvuvDmt0.js +1 -0
  228. package/dist/client/assets/left-lanes-DnNLgec8.js +1 -0
  229. package/dist/client/assets/left-mission-DN3-NLPC.js +1 -0
  230. package/dist/client/assets/left-z-6CkuBe.js +2 -0
  231. package/dist/client/assets/library-DIo5NiGP.js +1 -0
  232. package/dist/client/assets/{loader-circle-d6PKL_KD.js → loader-circle-BiohlpM3.js} +1 -1
  233. package/dist/client/assets/{local-agents-B5pq17tZ.js → local-agents-wUIaBcEr.js} +1 -1
  234. package/dist/client/assets/{mentions-agCGDgyA.js → mentions-CcPFMbmZ.js} +1 -1
  235. package/dist/client/assets/mesh-buckets-ByyFXdKT.js +1 -0
  236. package/dist/client/assets/{mesh-ops-5pZCYptW.js → mesh-ops-CvGyjK84.js} +1 -1
  237. package/dist/client/assets/mesh-roster-n2nDpEmA.js +1 -0
  238. package/dist/client/assets/{mesh-screen-BSDUjrnV.css → mesh-screen-D1Yvo8fU.css} +1 -1
  239. package/dist/client/assets/{mesh-view-store-KJzABIkN.js → mesh-view-store-BpxGm71b.js} +1 -1
  240. package/dist/client/assets/{message-circle-CJO-pi7b.js → message-circle-B2ddzBrX.js} +1 -1
  241. package/dist/client/assets/{message-markup-CyRDLdOn.js → message-markup-RkfmDfME.js} +1 -1
  242. package/dist/client/assets/{message-square-D1hMsMj_.js → message-square-D9YYWE0x.js} +1 -1
  243. package/dist/client/assets/message-visibility-DwxgcgYK.js +1 -0
  244. package/dist/client/assets/mission-control-CnU7dNt1.css +1 -0
  245. package/dist/client/assets/{mission-control-store-Ce6dOvnZ.js → mission-control-store-Bf4b54MV.js} +1 -1
  246. package/dist/client/assets/{observe-BSWVM8YA.js → observe-CJRIvOCn.js} +1 -1
  247. package/dist/client/assets/{operator-attention-BwSPeheT.js → operator-attention-RqieiSY8.js} +1 -1
  248. package/dist/client/assets/{page-status-D2FQLJOX.js → page-status-BptpTdQ-.js} +1 -1
  249. package/dist/client/assets/{paperclip-iZmDMOS5.js → paperclip-B1UNGl5d.js} +1 -1
  250. package/dist/client/assets/perf-PX8Rx0EP.js +1 -0
  251. package/dist/client/assets/persistent-state-YI-WHSCF.js +1 -0
  252. package/dist/client/assets/{plus-gZ0T0eBI.js → plus-CuU_X0-8.js} +1 -1
  253. package/dist/client/assets/profile-rY8jO38P.js +1 -0
  254. package/dist/client/assets/projects-inbox-BBs1hG13.css +1 -0
  255. package/dist/client/assets/projects-inbox-D-zAb9Gp.js +1 -0
  256. package/dist/client/assets/proxy-DnLpZIi9.js +1 -0
  257. package/dist/client/assets/{radio-RMLfV4EO.js → radio-Dm1ItnA4.js} +1 -1
  258. package/dist/client/assets/{refresh-cw-C4x1x6b_.js → refresh-cw-BRn9Oxxl.js} +1 -1
  259. package/dist/client/assets/resolve-panes-DO6LkwhQ.js +1 -0
  260. package/dist/client/assets/resolve-sidebar-context-CIF288wY.js +1 -0
  261. package/dist/client/assets/right-BJltPRnd.js +1 -0
  262. package/dist/client/assets/right-BbyYdzHn.js +1 -0
  263. package/dist/client/assets/right-Beh3nCUB.js +1 -0
  264. package/dist/client/assets/right-C1yumXNx.js +1 -0
  265. package/dist/client/assets/{right-D-k9Z1Fe.js → right-CJnB_Bg7.js} +2 -2
  266. package/dist/client/assets/right-CPP7GyOm.js +1 -0
  267. package/dist/client/assets/right-D3aTKf1F.js +1 -0
  268. package/dist/client/assets/right-DI1B79nR.js +1 -0
  269. package/dist/client/assets/right-DtsRNX5b.js +1 -0
  270. package/dist/client/assets/right-Shpw_xDy.js +1 -0
  271. package/dist/client/assets/{rocket-CMM-IdLy.js → rocket-DOwXHKWA.js} +1 -1
  272. package/dist/client/assets/router-DJj2WbDg.js +1 -0
  273. package/dist/client/assets/{scope-views-BIfMTXU4.js → scope-views-A4_vP97W.js} +1 -1
  274. package/dist/client/assets/scout-voice-BhPzrc6P.js +1 -0
  275. package/dist/client/assets/{scoutbot-BTIErYHo.js → scoutbot-BJIamJOH.js} +2 -2
  276. package/dist/client/assets/scoutbot-markdown-jh7tzFB1.js +6 -0
  277. package/dist/client/assets/{scroll-text-DPPYrqB9.js → scroll-text-DO0GQzvN.js} +1 -1
  278. package/dist/client/assets/{search-DAyagUtF.js → search-D1tJSAWe.js} +1 -1
  279. package/dist/client/assets/secondaryNavConfig-B9IF8wXl.js +1 -0
  280. package/dist/client/assets/{selection-bridge-BXw09aRF.js → selection-bridge-i2S9zpf8.js} +1 -1
  281. package/dist/client/assets/{send-horizontal-IcG46D2M.js → send-horizontal-CgLppsIC.js} +1 -1
  282. package/dist/client/assets/{server-BySujhDV.js → server-Dymv5Emh.js} +1 -1
  283. package/dist/client/assets/{session-catalog-ClS9xf6i.js → session-catalog-DNaOEzoQ.js} +1 -1
  284. package/dist/client/assets/{session-table-BdpHs1GN.js → session-table-PTQVoTyc.js} +1 -1
  285. package/dist/client/assets/settings-2fC_G9nX.js +1 -0
  286. package/dist/client/assets/{sliders-horizontal-R5pWUUcH.js → sliders-horizontal-BPSMHhbm.js} +1 -1
  287. package/dist/client/assets/{sparkles-DJOBD_8l.js → sparkles-Dy8p5xN8.js} +1 -1
  288. package/dist/client/assets/sse-CiOSzE5n.js +1 -0
  289. package/dist/client/assets/system-surfaces-redesign-QVXNeGYw.css +1 -0
  290. package/dist/client/assets/{tail-display-BRcJltQa.js → tail-display-DcliDVkW.js} +1 -1
  291. package/dist/client/assets/{tail-events-BdvqZHLr.js → tail-events-BMQmSx1n.js} +1 -1
  292. package/dist/client/assets/{terminal-relay-TffuSPGs.js → terminal-relay-9lhzEp2V.js} +1 -1
  293. package/dist/client/assets/terminal-screen-BLk4PAYt.css +1 -0
  294. package/dist/client/assets/terminal-sessions-BQ6t92tJ.js +1 -0
  295. package/dist/client/assets/{terminal-takeover-BOFPRPjR.js → terminal-takeover-DANQfTcy.js} +1 -1
  296. package/dist/client/assets/{terminal-DJPUp_Qn.js → terminal-yN9xN-h9.js} +1 -1
  297. package/dist/client/assets/{runtime-picker--IW3cRry.js → text-CnZ0e1-V.js} +1 -1
  298. package/dist/client/assets/text-rLpBg4_z.css +1 -0
  299. package/dist/client/assets/use-conversation-list-D9BNLfnW.js +1 -0
  300. package/dist/client/assets/{use-fleet-active-asks-BHzeBZSW.js → use-fleet-active-asks-BeAdcl09.js} +1 -1
  301. package/dist/client/assets/{use-mesh-ops-items-KmaauBr_.js → use-mesh-ops-items-BIvIHlqe.js} +1 -1
  302. package/dist/client/assets/use-reduced-motion-CKkhq9c5.js +1 -0
  303. package/dist/client/assets/{use-scout-dev-flags-BJbw87PK.js → use-scout-dev-flags-B2KCzPxn.js} +1 -1
  304. package/dist/client/assets/{useAgentHoverCard-C6o0tlat.js → useAgentHoverCard-CHBsxcbp.js} +1 -1
  305. package/dist/client/assets/useContentSecondaryNav-D0mUhxTF.js +1 -0
  306. package/dist/client/assets/{usePierreRuntime-Cm7-qdm0.js → usePierreRuntime-DUuXH5yp.js} +1 -1
  307. package/dist/client/assets/{wrench-CvRjjByE.js → wrench-YcXMlsh2.js} +1 -1
  308. package/dist/client/assets/{x-C8ayPBtj.js → x-e3h2hDsp.js} +1 -1
  309. package/dist/client/assets/{xterm-B0ci4Q9a.js → xterm-Byp1Hep_.js} +1 -1
  310. package/dist/client/assets/zap-nMcjPoWB.js +1 -0
  311. package/dist/client/favicon-16.png +0 -0
  312. package/dist/client/favicon-32.png +0 -0
  313. package/dist/client/favicon.ico +0 -0
  314. package/dist/client/favicon.svg +20 -47
  315. package/dist/client/index.html +5 -5
  316. package/dist/client/openscout-icon.png +0 -0
  317. package/dist/client/site.webmanifest +2 -2
  318. package/dist/client/web-app-icon-192.png +0 -0
  319. package/dist/client/web-app-icon-512.png +0 -0
  320. package/dist/main.mjs +20093 -78203
  321. package/dist/node/main.mjs +322 -252
  322. package/dist/pairing-runtime-controller.mjs +1032 -804
  323. package/dist/runtime/base-daemon.mjs +49 -121
  324. package/dist/runtime/broker-daemon.mjs +1105 -281
  325. package/dist/runtime/broker-process-manager.mjs +6 -0
  326. package/dist/runtime/mesh-discover.mjs +6 -0
  327. package/dist/scout-control-plane-web.mjs +3326 -1912
  328. package/package.json +7 -4
  329. package/dist/client/assets/ActivityScreen-DkUP7V7M.js +0 -1
  330. package/dist/client/assets/AgentAvatar-D8ZtMluU.js +0 -1
  331. package/dist/client/assets/AgentConfigurationScreen-BlGI6fuM.js +0 -1
  332. package/dist/client/assets/AgentDefinitionsWorkspace-CfaDVCVt.js +0 -1
  333. package/dist/client/assets/AgentFloorView-DjNLILLt.js +0 -1
  334. package/dist/client/assets/AgentInfoScreen-DG5dlHb_.js +0 -1
  335. package/dist/client/assets/AgentLaneDetailSheet-BzYzBfcW.js +0 -4
  336. package/dist/client/assets/AgentLanesEmbedScreen-Crxx1srt.js +0 -1
  337. package/dist/client/assets/AgentLanesView-ChNlmY-F.js +0 -2
  338. package/dist/client/assets/AgentSessions-DpY0htZV.js +0 -6
  339. package/dist/client/assets/AgentsConsole-CHyXrjhm.js +0 -1
  340. package/dist/client/assets/AgentsScreen-BhCjX2lD.js +0 -1
  341. package/dist/client/assets/AgentsSubnav-az_VDkri.js +0 -1
  342. package/dist/client/assets/AtopView-BjjPM8OX.js +0 -1
  343. package/dist/client/assets/BriefingDetailScreen-B7qJ90Np.js +0 -6
  344. package/dist/client/assets/BriefingsScreen-CW6N829d.js +0 -1
  345. package/dist/client/assets/BrokerScreen-X3z50712.js +0 -5
  346. package/dist/client/assets/ChatCollapsedStrip-DNR9osDy.js +0 -1
  347. package/dist/client/assets/CodeScreen-CIKK1LcZ.js +0 -1
  348. package/dist/client/assets/ContextMenu-CHIuVKz7.js +0 -1
  349. package/dist/client/assets/ConversationComposer-Bf7Ga_49.js +0 -1
  350. package/dist/client/assets/ConversationFeedRows-Cm1Lgo43.js +0 -1
  351. package/dist/client/assets/ConversationHeader-B_GXrKR0.js +0 -1
  352. package/dist/client/assets/ConversationPanels-BTBbEvrP.js +0 -2
  353. package/dist/client/assets/ConversationScreen-B3l2m3JI.js +0 -1
  354. package/dist/client/assets/ConversationScreen-yIKEsm-8.css +0 -1
  355. package/dist/client/assets/ConversationStatus-BqhUHD85.js +0 -1
  356. package/dist/client/assets/DispatchAftermath-BDA9CrOd.js +0 -1
  357. package/dist/client/assets/DocumentFocusViewer-B9vodVmG.js +0 -1
  358. package/dist/client/assets/FleetSearch-Bj9SCl2f.js +0 -1
  359. package/dist/client/assets/FleetSearch-EXOe8ulE.css +0 -1
  360. package/dist/client/assets/FlightObserveScreen-BVMdsiCC.js +0 -1
  361. package/dist/client/assets/FollowScreen-BifwHWOV.js +0 -1
  362. package/dist/client/assets/HarnessesScreen-fMnbnrD4.js +0 -1
  363. package/dist/client/assets/HomeHero-BgM6S39l.js +0 -1
  364. package/dist/client/assets/HomeHero-DEl-WBsT.css +0 -1
  365. package/dist/client/assets/KnowledgeSearchScreen-Ch_WENUC.js +0 -1
  366. package/dist/client/assets/LaneTraceDetailSheet-H3AnN-vN.js +0 -1
  367. package/dist/client/assets/MeshScreen-48QkJSDI.js +0 -1
  368. package/dist/client/assets/MessageComposerSuggestions-FdVHnT_q.js +0 -1
  369. package/dist/client/assets/MessagesScreen-BMOOfbWX.js +0 -1
  370. package/dist/client/assets/MissionControlView-BpsHKu1F.js +0 -1
  371. package/dist/client/assets/MissionFocusOverlay-BPnAEA3F.js +0 -1
  372. package/dist/client/assets/MissionLeftAgentRow-iOZ6ds9L.js +0 -1
  373. package/dist/client/assets/MissionLogPane-B0csI89E.js +0 -1
  374. package/dist/client/assets/NewAgentModal-DBHJR9Qm.js +0 -1
  375. package/dist/client/assets/NewChatComposer-Hd7pI5Ac.js +0 -19
  376. package/dist/client/assets/ObserveEmbedScreen-DyArn7Id.js +0 -2
  377. package/dist/client/assets/ObserveTextFlow-CkMrtT8s.js +0 -2
  378. package/dist/client/assets/ObservedTopologyPanel-CaSZZP05.js +0 -2
  379. package/dist/client/assets/OpenScoutAppShell-BtlKkiuF.js +0 -87
  380. package/dist/client/assets/OpsAgentsView-CnqrwbC2.js +0 -1
  381. package/dist/client/assets/OpsScreen-DOlmlVkP.js +0 -1
  382. package/dist/client/assets/OpsSubnav-Dj3ShAKv.js +0 -1
  383. package/dist/client/assets/PlanView-BLGdWDx6.js +0 -1
  384. package/dist/client/assets/ProjectAgentProfile-Dv1sVnQl.js +0 -1
  385. package/dist/client/assets/ProjectAgentProfileHero-0-GDhsPT.js +0 -1
  386. package/dist/client/assets/ProjectsInbox-B3DpAI5b.js +0 -2
  387. package/dist/client/assets/ProjectsRail-BDl7U9Jq.js +0 -1
  388. package/dist/client/assets/ProjectsScreen-Dl2FcGrR.js +0 -1
  389. package/dist/client/assets/ProjectsThreadAside-BcGC5mHE.js +0 -1
  390. package/dist/client/assets/Provider-cJCdHAxu.js +0 -1
  391. package/dist/client/assets/RailRow-CLcVmywd.js +0 -1
  392. package/dist/client/assets/RailRow-Cf9LOiEj.css +0 -1
  393. package/dist/client/assets/RawSessionsTable-DBto4Ts-.js +0 -1
  394. package/dist/client/assets/RealtimeVoiceScreen-DXEU5v3g.js +0 -1
  395. package/dist/client/assets/RepoDiffViewer-PaNeZMhJ.js +0 -7
  396. package/dist/client/assets/RepoDiffViewerLazy-CWE5GxMP.js +0 -2
  397. package/dist/client/assets/ReposScreen-Cksv1cAD.js +0 -6
  398. package/dist/client/assets/ScoutDeckSurface-BCjPl7C4.js +0 -1
  399. package/dist/client/assets/ScoutbotBroadcastChip-DkiRCHuK.js +0 -2
  400. package/dist/client/assets/ScoutbotRealtimeVoiceCall-1ixiEn1L.js +0 -1
  401. package/dist/client/assets/SessionRefScreen-OkTY7Szg.js +0 -1
  402. package/dist/client/assets/SessionsScreen-B-GFjxIA.js +0 -1
  403. package/dist/client/assets/SettingsDrawer-Co11RFX0.js +0 -3
  404. package/dist/client/assets/SettingsDrawer-UX7pFJU_.css +0 -1
  405. package/dist/client/assets/SettingsScreen-Cn09nq5_.js +0 -1
  406. package/dist/client/assets/SpriteAvatar-DS6Tmyua.js +0 -1
  407. package/dist/client/assets/Terminal-U8gjIdm3.js +0 -1
  408. package/dist/client/assets/TerminalEmbedScreen-CTmdE7us.js +0 -1
  409. package/dist/client/assets/WorkDetailScreen-mJs0mb99.js +0 -5
  410. package/dist/client/assets/WorkFilesViewer-ODzLXKxj.js +0 -1
  411. package/dist/client/assets/agent-identity-BxCsXnDp.js +0 -1
  412. package/dist/client/assets/agent-lane-detail-BNNm6FNu.js +0 -2
  413. package/dist/client/assets/api-h5zurxmi.js +0 -1
  414. package/dist/client/assets/broker-display-pp33bLsu.js +0 -2
  415. package/dist/client/assets/collapsed-strip-Dz-of2SM.css +0 -1
  416. package/dist/client/assets/content-B8gahuBy.js +0 -1
  417. package/dist/client/assets/content-BIqX06OQ.js +0 -1
  418. package/dist/client/assets/content-BKDZ6Fxe.js +0 -1
  419. package/dist/client/assets/content-C15Ya-iu.js +0 -1
  420. package/dist/client/assets/content-CDE9tJDF.js +0 -1
  421. package/dist/client/assets/content-CSAfI-PX.js +0 -1
  422. package/dist/client/assets/content-CTF9D60D.js +0 -1
  423. package/dist/client/assets/content-CbAGkYQO.js +0 -1
  424. package/dist/client/assets/content-CtqLJOVp.js +0 -1
  425. package/dist/client/assets/content-Dvs1KRfo.js +0 -1
  426. package/dist/client/assets/content-DyJdVZjI.js +0 -1
  427. package/dist/client/assets/content-Ji7ATaf7.js +0 -1
  428. package/dist/client/assets/content-eqZXKWcP.js +0 -1
  429. package/dist/client/assets/content-iyyQKwvA.js +0 -1
  430. package/dist/client/assets/content-pDE7Fpb9.js +0 -1
  431. package/dist/client/assets/content-pPSd2dua.js +0 -1
  432. package/dist/client/assets/conversation-model-CHwHZNw-.js +0 -1
  433. package/dist/client/assets/conversation-motion-features-DXtKlmuM.js +0 -1
  434. package/dist/client/assets/ctx-panel-B4s49N9e.css +0 -1
  435. package/dist/client/assets/discover-DKf0aTr_.js +0 -2
  436. package/dist/client/assets/embed-entry-RlQUTtc4.js +0 -2
  437. package/dist/client/assets/gestures-CcEOV6Sr.js +0 -1
  438. package/dist/client/assets/harnesses-screen-DBZoTZz8.css +0 -1
  439. package/dist/client/assets/home-moving-signal-Bh2FugbH.js +0 -1
  440. package/dist/client/assets/home-moving-signal-CAa0V91u.css +0 -1
  441. package/dist/client/assets/home-now-card-ByRH5fFx.js +0 -1
  442. package/dist/client/assets/hooks-DUZwL3Aq.js +0 -2
  443. package/dist/client/assets/index-BBznYVWk.css +0 -1
  444. package/dist/client/assets/index-BTuq-8Iv.js +0 -1
  445. package/dist/client/assets/index-CmwGCxUk.js +0 -1
  446. package/dist/client/assets/index-CvF09yvf.css +0 -1
  447. package/dist/client/assets/index-DmFAhGPj.js +0 -10
  448. package/dist/client/assets/index-Dtaswdsh.js +0 -1
  449. package/dist/client/assets/inspector-panel-DzgS5_Mv.js +0 -2
  450. package/dist/client/assets/left-8NITBvFX.js +0 -1
  451. package/dist/client/assets/left-B2HEqrTM.js +0 -2
  452. package/dist/client/assets/left-Bk3XnxPD.css +0 -1
  453. package/dist/client/assets/left-CCoobxPS.css +0 -1
  454. package/dist/client/assets/left-CTYUvXbe.js +0 -1
  455. package/dist/client/assets/left-CwDRT50z.js +0 -2
  456. package/dist/client/assets/left-CxlDLJlw.js +0 -1
  457. package/dist/client/assets/left-XFXxNd4g.js +0 -1
  458. package/dist/client/assets/left-agents-Ck4Xn-R8.js +0 -1
  459. package/dist/client/assets/left-default-BeOyS0bR.js +0 -1
  460. package/dist/client/assets/left-lanes-DZp3jJMo.js +0 -1
  461. package/dist/client/assets/left-mission-CuKFQ5xL.js +0 -1
  462. package/dist/client/assets/left-p1hkO6P0.js +0 -1
  463. package/dist/client/assets/left-plan-3rrFENhp.js +0 -2
  464. package/dist/client/assets/library-E--gKzEZ.js +0 -1
  465. package/dist/client/assets/mesh-buckets-CfAukILK.js +0 -1
  466. package/dist/client/assets/message-visibility-kJM8XcSG.js +0 -1
  467. package/dist/client/assets/mission-control-m3BTDQ9l.css +0 -1
  468. package/dist/client/assets/model-Co0zkMIc.js +0 -1
  469. package/dist/client/assets/plan-view-D56fneVF.css +0 -1
  470. package/dist/client/assets/profile-Dxj3VVOM.js +0 -1
  471. package/dist/client/assets/projects-inbox-COZ23dLR.css +0 -1
  472. package/dist/client/assets/projects-inbox-Dzt_GQDv.js +0 -1
  473. package/dist/client/assets/resolve-panes-C9gF0w4e.js +0 -1
  474. package/dist/client/assets/resolve-sidebar-context-DxbY5RCH.js +0 -1
  475. package/dist/client/assets/right-5L7Tn0zG.js +0 -1
  476. package/dist/client/assets/right-CYtkMmRu.js +0 -1
  477. package/dist/client/assets/right-CreoQzPP.js +0 -1
  478. package/dist/client/assets/right-D9xFfy2b.js +0 -1
  479. package/dist/client/assets/right-DI7zHADe.js +0 -1
  480. package/dist/client/assets/right-DUbJ3WVc.js +0 -1
  481. package/dist/client/assets/right-DiybhsiK.js +0 -1
  482. package/dist/client/assets/right-Jh_1Q88s.js +0 -1
  483. package/dist/client/assets/right-udr1qTJG.js +0 -1
  484. package/dist/client/assets/router-Cn_s9IGH.js +0 -1
  485. package/dist/client/assets/runtime-picker-vhm0gtLs.css +0 -1
  486. package/dist/client/assets/scout-voice-CwbOz6EN.js +0 -1
  487. package/dist/client/assets/secondaryNavConfig-Dw3gS1jR.js +0 -1
  488. package/dist/client/assets/sse-CxXt4tqI.js +0 -1
  489. package/dist/client/assets/system-surfaces-redesign-B7GQhfpw.css +0 -1
  490. package/dist/client/assets/terminal-screen-BqVnCwl0.css +0 -1
  491. package/dist/client/assets/terminal-sessions-AmSgHklm.js +0 -1
  492. package/dist/client/assets/text-DsBWV_4k.js +0 -1
  493. package/dist/client/assets/use-conversation-list-C-dPcjQe.js +0 -1
  494. package/dist/client/assets/use-reduced-motion-CYqhYqHO.js +0 -1
  495. package/dist/client/assets/useContentSecondaryNav-DjHBrgnS.js +0 -1
  496. package/dist/highlights-eq9cgrbb.scm +0 -604
  497. package/dist/highlights-ghv9g403.scm +0 -205
  498. package/dist/highlights-hk7bwhj4.scm +0 -284
  499. package/dist/highlights-r812a2qc.scm +0 -150
  500. package/dist/highlights-x6tmsnaa.scm +0 -115
  501. package/dist/injections-73j83es3.scm +0 -27
  502. package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
  503. package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
  504. package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
  505. package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
  506. package/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
  507. /package/dist/client/assets/{document-focus-viewer-BSC_JwVE.css → DocumentFocusViewer-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 existsSync6, mkdirSync as mkdirSync3, readFileSync as readFileSync4, renameSync as renameSync2, writeFileSync as writeFileSync3 } from "node:fs";
14400
+ import { existsSync as existsSync7, mkdirSync as mkdirSync4, readFileSync as readFileSync5, renameSync as renameSync3, writeFileSync as writeFileSync4 } from "node:fs";
14401
14401
  import { homedir as homedir5, networkInterfaces } from "node:os";
14402
- import { dirname as dirname3, join as join5, resolve as resolve2 } from "node:path";
14402
+ import { dirname as dirname4, join as join6, resolve as resolve2 } from "node:path";
14403
14403
  import { fileURLToPath } from "node:url";
14404
14404
 
14405
14405
  // ../runtime/dist/broker-api.js
@@ -16224,9 +16224,202 @@ function readTailscaleSelfWebHostsSync(env = process.env) {
16224
16224
  }
16225
16225
 
16226
16226
  // ../runtime/dist/local-config.js
16227
- import { existsSync as existsSync4, mkdirSync as mkdirSync2, readFileSync as readFileSync3, renameSync, writeFileSync as writeFileSync2 } from "node:fs";
16227
+ import { existsSync as existsSync5, mkdirSync as mkdirSync3, readFileSync as readFileSync4, renameSync as renameSync2, writeFileSync as writeFileSync3 } from "node:fs";
16228
16228
  import { homedir as homedir3, hostname as osHostname } from "node:os";
16229
+ import { dirname as dirname2, join as join4 } from "node:path";
16230
+
16231
+ // ../runtime/dist/node-identity.js
16232
+ import { createHash, createPrivateKey, createPublicKey, generateKeyPairSync, randomBytes, sign, verify } from "node:crypto";
16233
+ import { chmodSync, existsSync as existsSync4, mkdirSync as mkdirSync2, readFileSync as readFileSync3, renameSync, rmSync as rmSync2, writeFileSync as writeFileSync2 } from "node:fs";
16229
16234
  import { dirname, join as join3 } from "node:path";
16235
+ var NODE_IDENTITY_FILE = "node-identity.json";
16236
+ var NODE_FINGERPRINT_PREFIX = "osc1";
16237
+ var NODE_CARD_TTL_MS = 24 * 60 * 60 * 1000;
16238
+ var stableNodeQualifierCache = new Map;
16239
+ function stripBonjourCollisionSuffix(value) {
16240
+ if (!value || typeof value !== "string")
16241
+ return "";
16242
+ let trimmed = value.trim();
16243
+ const isDotLocal = /\.local\.?$/i.test(trimmed);
16244
+ if (isDotLocal) {
16245
+ trimmed = trimmed.replace(/\.local\.?$/i, "");
16246
+ }
16247
+ const isHyphenLocalOpenscout = /-local-openscout$/i.test(trimmed);
16248
+ const isHyphenLocal = !isHyphenLocalOpenscout && /-local$/i.test(trimmed);
16249
+ if (isHyphenLocalOpenscout) {
16250
+ trimmed = trimmed.replace(/-local-openscout$/i, "");
16251
+ } else if (isHyphenLocal) {
16252
+ trimmed = trimmed.replace(/-local$/i, "");
16253
+ }
16254
+ if (!isDotLocal && !isHyphenLocalOpenscout && !isHyphenLocal) {
16255
+ return trimmed;
16256
+ }
16257
+ trimmed = trimmed.replace(/(?<=[a-zA-Z].*?)(?:-\d+)+$/, "");
16258
+ if (isDotLocal)
16259
+ return `${trimmed}.local`;
16260
+ if (isHyphenLocalOpenscout)
16261
+ return `${trimmed}-local-openscout`;
16262
+ if (isHyphenLocal)
16263
+ return `${trimmed}-local`;
16264
+ return trimmed;
16265
+ }
16266
+ function nodeIdentityPath(supportDirectory) {
16267
+ const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
16268
+ return join3(dir, NODE_IDENTITY_FILE);
16269
+ }
16270
+ function loadOrCreateNodeIdentity(supportDirectory) {
16271
+ const path = nodeIdentityPath(supportDirectory);
16272
+ if (existsSync4(path)) {
16273
+ return readAndValidateNodeIdentity(path);
16274
+ }
16275
+ return createNodeIdentity(supportDirectory);
16276
+ }
16277
+ function readStableNodeQualifier(supportDirectory) {
16278
+ const path = nodeIdentityPath(supportDirectory);
16279
+ const cached = stableNodeQualifierCache.get(path);
16280
+ if (cached) {
16281
+ return cached;
16282
+ }
16283
+ if (!existsSync4(path)) {
16284
+ return null;
16285
+ }
16286
+ const nodeQualifier = normalizeNodeQualifier(readAndValidateNodeIdentity(path).nodeQualifier);
16287
+ if (nodeQualifier) {
16288
+ stableNodeQualifierCache.set(path, nodeQualifier);
16289
+ }
16290
+ return nodeQualifier || null;
16291
+ }
16292
+ function readAndValidateNodeIdentity(path) {
16293
+ let parsed;
16294
+ try {
16295
+ parsed = JSON.parse(readFileSync3(path, "utf8"));
16296
+ } catch {
16297
+ throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
16298
+ }
16299
+ if (parsed.version !== 1 || !parsed.publicKey || !parsed.privateKey) {
16300
+ throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
16301
+ }
16302
+ if (parsed.nodeQualifier !== undefined && normalizePersistedNodeQualifier(parsed.nodeQualifier) !== parsed.nodeQualifier) {
16303
+ throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
16304
+ }
16305
+ try {
16306
+ const derived = createPublicKey(importPrivateKey(parsed.privateKey)).export({ type: "spki", format: "der" }).toString("base64");
16307
+ if (derived !== parsed.publicKey) {
16308
+ throw new Error("mismatch");
16309
+ }
16310
+ } catch {
16311
+ throw new Error(`Node identity at ${path} has mismatched or invalid keys; remove it to generate a fresh one.`);
16312
+ }
16313
+ return parsed;
16314
+ }
16315
+ function normalizePersistedNodeQualifier(value) {
16316
+ return typeof value === "string" ? value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "") : "";
16317
+ }
16318
+ function normalizeNodeQualifier(value) {
16319
+ return stripBonjourCollisionSuffix(normalizePersistedNodeQualifier(value));
16320
+ }
16321
+ function createNodeIdentity(supportDirectory) {
16322
+ if (!supportDirectory) {
16323
+ assertTestIsolatedUserData("write the node identity", "OPENSCOUT_SUPPORT_DIRECTORY");
16324
+ }
16325
+ const path = nodeIdentityPath(supportDirectory);
16326
+ const { publicKey, privateKey } = generateKeyPairSync("ed25519");
16327
+ const identity = {
16328
+ version: 1,
16329
+ publicKey: publicKey.export({ type: "spki", format: "der" }).toString("base64"),
16330
+ privateKey: privateKey.export({ type: "pkcs8", format: "der" }).toString("base64"),
16331
+ createdAt: Date.now()
16332
+ };
16333
+ mkdirSync2(dirname(path), { recursive: true });
16334
+ try {
16335
+ writeFileSync2(path, `${JSON.stringify(identity, null, 2)}
16336
+ `, { encoding: "utf8", mode: 384, flag: "wx" });
16337
+ } catch (error) {
16338
+ if (error.code === "EEXIST") {
16339
+ return readAndValidateNodeIdentity(path);
16340
+ }
16341
+ throw error;
16342
+ }
16343
+ try {
16344
+ chmodSync(path, 384);
16345
+ } catch {}
16346
+ return identity;
16347
+ }
16348
+ function nodeKeyId(publicKeyBase64) {
16349
+ return createHash("sha256").update(Buffer.from(publicKeyBase64, "base64")).digest("hex");
16350
+ }
16351
+ function nodeFingerprint(publicKeyBase64) {
16352
+ const digest = createHash("sha256").update(Buffer.from(publicKeyBase64, "base64")).digest();
16353
+ const encoded = base32Encode(digest.subarray(0, 10)).toLowerCase();
16354
+ return `${NODE_FINGERPRINT_PREFIX}:${encoded.slice(0, 4)}-${encoded.slice(4, 8)}`;
16355
+ }
16356
+ function signNodePayload(identity, payload) {
16357
+ const key = importPrivateKey(identity.privateKey);
16358
+ return sign(null, typeof payload === "string" ? Buffer.from(payload, "utf8") : payload, key).toString("base64");
16359
+ }
16360
+ function verifyNodeSignature(publicKeyBase64, payload, signatureBase64) {
16361
+ try {
16362
+ const key = importPublicKey(publicKeyBase64);
16363
+ return verify(null, typeof payload === "string" ? Buffer.from(payload, "utf8") : payload, key, Buffer.from(signatureBase64, "base64"));
16364
+ } catch {
16365
+ return false;
16366
+ }
16367
+ }
16368
+ function canonicalJson(value) {
16369
+ if (value === null || typeof value !== "object") {
16370
+ return JSON.stringify(value);
16371
+ }
16372
+ if (Array.isArray(value)) {
16373
+ return `[${value.map(canonicalJson).join(",")}]`;
16374
+ }
16375
+ const record = value;
16376
+ const keys = Object.keys(record).sort();
16377
+ return `{${keys.map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`).join(",")}}`;
16378
+ }
16379
+ function verifySignedNodeCard(card, now = Date.now()) {
16380
+ if (nodeKeyId(card.publicKey) !== card.keyId) {
16381
+ return false;
16382
+ }
16383
+ if (nodeFingerprint(card.publicKey) !== card.fingerprint) {
16384
+ return false;
16385
+ }
16386
+ if (!Number.isFinite(card.expiresAt) || card.expiresAt <= now) {
16387
+ return false;
16388
+ }
16389
+ if (card.tls !== undefined) {
16390
+ if (typeof card.tls !== "object" || card.tls === null || typeof card.tls.spkiFingerprint !== "string" || !/^[0-9a-f]{64}$/.test(card.tls.spkiFingerprint)) {
16391
+ return false;
16392
+ }
16393
+ }
16394
+ const { signature, ...unsigned } = card;
16395
+ return verifyNodeSignature(card.publicKey, canonicalJson(unsigned), signature);
16396
+ }
16397
+ var BASE32_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
16398
+ function base32Encode(input) {
16399
+ let bits = 0;
16400
+ let value = 0;
16401
+ let output = "";
16402
+ for (const byte of input) {
16403
+ value = value << 8 | byte;
16404
+ bits += 8;
16405
+ while (bits >= 5) {
16406
+ output += BASE32_ALPHABET[value >>> bits - 5 & 31];
16407
+ bits -= 5;
16408
+ }
16409
+ }
16410
+ if (bits > 0) {
16411
+ output += BASE32_ALPHABET[value << 5 - bits & 31];
16412
+ }
16413
+ return output;
16414
+ }
16415
+ function importPrivateKey(privateKeyBase64) {
16416
+ return createPrivateKey({ key: Buffer.from(privateKeyBase64, "base64"), format: "der", type: "pkcs8" });
16417
+ }
16418
+ function importPublicKey(publicKeyBase64) {
16419
+ return createPublicKey({ key: Buffer.from(publicKeyBase64, "base64"), format: "der", type: "spki" });
16420
+ }
16421
+
16422
+ // ../runtime/dist/local-config.js
16230
16423
  var LOCAL_CONFIG_VERSION = 1;
16231
16424
  var DEFAULT_SCOUT_WEB_PORTAL_HOST = "scout.local";
16232
16425
  var DEFAULT_SCOUT_WEB_DEV_HOST = `dev.${DEFAULT_SCOUT_WEB_PORTAL_HOST}`;
@@ -16251,17 +16444,17 @@ var DEFAULT_LOCAL_CONFIG = {
16251
16444
  }
16252
16445
  };
16253
16446
  function localConfigHome() {
16254
- return process.env.OPENSCOUT_HOME ?? join3(homedir3(), ".openscout");
16447
+ return process.env.OPENSCOUT_HOME ?? join4(homedir3(), ".openscout");
16255
16448
  }
16256
16449
  function localConfigPath() {
16257
- return join3(localConfigHome(), "config.json");
16450
+ return join4(localConfigHome(), "config.json");
16258
16451
  }
16259
16452
  function loadLocalConfig() {
16260
16453
  const configPath = localConfigPath();
16261
- if (!existsSync4(configPath))
16454
+ if (!existsSync5(configPath))
16262
16455
  return { version: LOCAL_CONFIG_VERSION };
16263
16456
  try {
16264
- return validateLocalConfig(JSON.parse(readFileSync3(configPath, "utf8")));
16457
+ return validateLocalConfig(JSON.parse(readFileSync4(configPath, "utf8")));
16265
16458
  } catch {
16266
16459
  return { version: LOCAL_CONFIG_VERSION };
16267
16460
  }
@@ -16339,34 +16532,34 @@ function resolveBrokerPort() {
16339
16532
  function writeLocalConfig(config) {
16340
16533
  assertTestIsolatedUserData("write the OpenScout local config", "OPENSCOUT_HOME");
16341
16534
  const configPath = localConfigPath();
16342
- mkdirSync2(dirname(configPath), { recursive: true });
16535
+ mkdirSync3(dirname2(configPath), { recursive: true });
16343
16536
  const body = JSON.stringify({ ...config, version: LOCAL_CONFIG_VERSION }, null, 2) + `
16344
16537
  `;
16345
16538
  const tmp = `${configPath}.tmp`;
16346
- writeFileSync2(tmp, body, "utf8");
16347
- renameSync(tmp, configPath);
16539
+ writeFileSync3(tmp, body, "utf8");
16540
+ renameSync2(tmp, configPath);
16348
16541
  }
16349
16542
  function localConfigExists() {
16350
- return existsSync4(localConfigPath());
16543
+ return existsSync5(localConfigPath());
16351
16544
  }
16352
16545
 
16353
16546
  // ../runtime/dist/tool-resolution.js
16354
- import { accessSync, constants, existsSync as existsSync5 } from "node:fs";
16547
+ import { accessSync, constants, existsSync as existsSync6 } from "node:fs";
16355
16548
  import { homedir as homedir4 } from "node:os";
16356
- import { basename, dirname as dirname2, join as join4, resolve } from "node:path";
16549
+ import { basename, dirname as dirname3, join as join5, resolve } from "node:path";
16357
16550
  var DEFAULT_COMMON_EXECUTABLE_DIRECTORIES = [
16358
- join4(homedir4(), ".bun", "bin"),
16551
+ join5(homedir4(), ".bun", "bin"),
16359
16552
  "/opt/homebrew/bin",
16360
16553
  "/usr/local/bin"
16361
16554
  ];
16362
16555
  function commonClaudeExecutableDirectories(env) {
16363
16556
  const home = env.HOME ?? homedir4();
16364
16557
  return [
16365
- join4(home, ".local", "bin"),
16366
- join4(home, ".claude", "local"),
16558
+ join5(home, ".local", "bin"),
16559
+ join5(home, ".claude", "local"),
16367
16560
  "/opt/homebrew/bin",
16368
16561
  "/usr/local/bin",
16369
- join4(home, ".bun", "bin")
16562
+ join5(home, ".bun", "bin")
16370
16563
  ];
16371
16564
  }
16372
16565
  function expandHomePath(value, env = process.env) {
@@ -16375,7 +16568,7 @@ function expandHomePath(value, env = process.env) {
16375
16568
  return home;
16376
16569
  }
16377
16570
  if (value.startsWith("~/")) {
16378
- return join4(home, value.slice(2));
16571
+ return join5(home, value.slice(2));
16379
16572
  }
16380
16573
  return value;
16381
16574
  }
@@ -16432,7 +16625,7 @@ function resolveExecutableFromSearch(options) {
16432
16625
  ], env);
16433
16626
  for (const directory of searchDirectories) {
16434
16627
  for (const name of options.names) {
16435
- const candidate = join4(directory, name);
16628
+ const candidate = join5(directory, name);
16436
16629
  if (isExecutablePath(candidate)) {
16437
16630
  return {
16438
16631
  path: candidate,
@@ -16446,7 +16639,7 @@ function resolveExecutableFromSearch(options) {
16446
16639
  function resolveExecutableFromDirectories(directories, names, env, source) {
16447
16640
  for (const directory of dedupeDirectories(directories, env)) {
16448
16641
  for (const name of names) {
16449
- const candidate = join4(directory, name);
16642
+ const candidate = join5(directory, name);
16450
16643
  if (isExecutablePath(candidate)) {
16451
16644
  return { path: candidate, source };
16452
16645
  }
@@ -16484,7 +16677,7 @@ function findExecutableOnSearchPath(name, env) {
16484
16677
  ...DEFAULT_COMMON_EXECUTABLE_DIRECTORIES
16485
16678
  ], env);
16486
16679
  for (const directory of searchDirectories) {
16487
- const candidate = join4(directory, name);
16680
+ const candidate = join5(directory, name);
16488
16681
  if (isExecutablePath(candidate)) {
16489
16682
  return { path: candidate, source: "path" };
16490
16683
  }
@@ -16502,14 +16695,14 @@ var DEFAULT_ADVERTISE_SCOPE = "local";
16502
16695
  var MESH_BIND_CONFIG_FILE = "mesh-bind.json";
16503
16696
  function meshBindConfigPath(supportDirectory) {
16504
16697
  const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
16505
- return join5(dir, MESH_BIND_CONFIG_FILE);
16698
+ return join6(dir, MESH_BIND_CONFIG_FILE);
16506
16699
  }
16507
16700
  function readPersistedAdvertiseScope(supportDirectory) {
16508
16701
  const path = meshBindConfigPath(supportDirectory);
16509
- if (!existsSync6(path))
16702
+ if (!existsSync7(path))
16510
16703
  return null;
16511
16704
  try {
16512
- const parsed = JSON.parse(readFileSync4(path, "utf8"));
16705
+ const parsed = JSON.parse(readFileSync5(path, "utf8"));
16513
16706
  if (parsed.version !== 1)
16514
16707
  return null;
16515
16708
  if (parsed.advertiseScope === "mesh" || parsed.advertiseScope === "local") {
@@ -16628,7 +16821,7 @@ function isWildcardHost(host) {
16628
16821
  return trimmed === "0.0.0.0" || trimmed === "::" || trimmed === "[::]";
16629
16822
  }
16630
16823
  function buildDefaultBrokerSocketPath(runtimeDirectory) {
16631
- return join5(runtimeDirectory, "broker.sock");
16824
+ return join6(runtimeDirectory, "broker.sock");
16632
16825
  }
16633
16826
  var DEFAULT_BROKER_URL = buildDefaultBrokerUrl();
16634
16827
  function resolveScoutBrokerControlUrl(_config = resolveBrokerServiceConfig()) {
@@ -16647,17 +16840,17 @@ function runtimePackageDir() {
16647
16840
  const fromGlobal = findGlobalRuntimeDir();
16648
16841
  if (fromGlobal)
16649
16842
  return fromGlobal;
16650
- const moduleDir = dirname3(fileURLToPath(import.meta.url));
16843
+ const moduleDir = dirname4(fileURLToPath(import.meta.url));
16651
16844
  return resolve2(moduleDir, "..");
16652
16845
  }
16653
16846
  function isInstalledRuntimePackageDir(candidate) {
16654
- return existsSync6(join5(candidate, "package.json")) && existsSync6(join5(candidate, "bin", "openscout-runtime.mjs"));
16847
+ return existsSync7(join6(candidate, "package.json")) && existsSync7(join6(candidate, "bin", "openscout-runtime.mjs"));
16655
16848
  }
16656
16849
  function findGlobalRuntimeDir() {
16657
16850
  const candidates = [
16658
- 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")
16851
+ join6(homedir5(), ".bun", "node_modules", "@openscout", "runtime"),
16852
+ join6(homedir5(), ".bun", "install", "global", "node_modules", "@openscout", "runtime"),
16853
+ join6(homedir5(), ".bun", "install", "global", "node_modules", "@openscout", "scout", "node_modules", "@openscout", "runtime")
16661
16854
  ];
16662
16855
  for (const c of candidates) {
16663
16856
  if (isInstalledRuntimePackageDir(c))
@@ -16670,7 +16863,7 @@ function findGlobalRuntimeDir() {
16670
16863
  const scoutPkg = resolve2(scoutBin, "..", "..");
16671
16864
  if (isInstalledRuntimePackageDir(scoutPkg))
16672
16865
  return scoutPkg;
16673
- const nested = join5(scoutPkg, "node_modules", "@openscout", "runtime");
16866
+ const nested = join6(scoutPkg, "node_modules", "@openscout", "runtime");
16674
16867
  if (isInstalledRuntimePackageDir(nested))
16675
16868
  return nested;
16676
16869
  const sibling = resolve2(scoutPkg, "..", "runtime");
@@ -16681,7 +16874,7 @@ function findGlobalRuntimeDir() {
16681
16874
  return null;
16682
16875
  }
16683
16876
  function findBundledRuntimeDir() {
16684
- const moduleDir = dirname3(fileURLToPath(import.meta.url));
16877
+ const moduleDir = dirname4(fileURLToPath(import.meta.url));
16685
16878
  return resolveBundledRuntimeDirFromModuleDir(moduleDir);
16686
16879
  }
16687
16880
  function resolveBundledRuntimeDirFromModuleDir(moduleDir) {
@@ -16698,11 +16891,11 @@ function resolveBundledRuntimeDirFromModuleDir(moduleDir) {
16698
16891
  function findWorkspaceRuntimeDir(startDir) {
16699
16892
  let current = resolve2(startDir);
16700
16893
  while (true) {
16701
- const candidate = join5(current, "packages", "runtime");
16702
- if (existsSync6(join5(candidate, "package.json")) && existsSync6(join5(candidate, "src"))) {
16894
+ const candidate = join6(current, "packages", "runtime");
16895
+ if (existsSync7(join6(candidate, "package.json")) && existsSync7(join6(candidate, "src"))) {
16703
16896
  return candidate;
16704
16897
  }
16705
- const parent = dirname3(current);
16898
+ const parent = dirname4(current);
16706
16899
  if (parent === current)
16707
16900
  return null;
16708
16901
  current = parent;
@@ -16749,17 +16942,17 @@ function resolveBrokerServiceConfig() {
16749
16942
  const serviceAdapter = resolveBrokerServiceAdapter();
16750
16943
  const uid = typeof process.getuid === "function" ? process.getuid() : Number.parseInt(process.env.UID ?? "0", 10);
16751
16944
  const supportPaths = resolveOpenScoutSupportPaths();
16752
- const defaultSupportDir = join5(homedir5(), "Library", "Application Support", "OpenScout");
16945
+ const defaultSupportDir = join6(homedir5(), "Library", "Application Support", "OpenScout");
16753
16946
  const supportDirectory = isTmpPath(supportPaths.supportDirectory) ? defaultSupportDir : supportPaths.supportDirectory;
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;
16947
+ const runtimeDirectory = join6(supportDirectory, "runtime");
16948
+ const logsDirectory = join6(supportDirectory, "logs", "broker");
16949
+ const controlHome = isTmpPath(supportPaths.controlHome) ? join6(homedir5(), ".openscout", "control-plane") : supportPaths.controlHome;
16757
16950
  const advertiseScope = resolveAdvertiseScope(process.env, () => readPersistedAdvertiseScope(supportDirectory));
16758
16951
  const brokerHost = resolveBrokerHost(advertiseScope);
16759
16952
  const brokerPort = Number.parseInt(process.env.OPENSCOUT_BROKER_PORT ?? String(resolveBrokerPort()), 10);
16760
16953
  const brokerUrl = resolveBrokerUrl(brokerHost, brokerPort, advertiseScope);
16761
16954
  const brokerSocketPath = process.env.OPENSCOUT_BROKER_SOCKET_PATH ?? buildDefaultBrokerSocketPath(runtimeDirectory);
16762
- const launchAgentPath = join5(homedir5(), "Library", "LaunchAgents", `${label}.plist`);
16955
+ const launchAgentPath = join6(homedir5(), "Library", "LaunchAgents", `${label}.plist`);
16763
16956
  return {
16764
16957
  label,
16765
16958
  mode,
@@ -16770,8 +16963,8 @@ function resolveBrokerServiceConfig() {
16770
16963
  supportDirectory,
16771
16964
  runtimeDirectory,
16772
16965
  logsDirectory,
16773
- stdoutLogPath: join5(logsDirectory, "stdout.log"),
16774
- stderrLogPath: join5(logsDirectory, "stderr.log"),
16966
+ stdoutLogPath: join6(logsDirectory, "stdout.log"),
16967
+ stderrLogPath: join6(logsDirectory, "stderr.log"),
16775
16968
  controlHome,
16776
16969
  runtimePackageDir: runtimePackageDir(),
16777
16970
  bunExecutable: serviceAdapter === "macos-scoutd" ? resolveBunExecutable2() : resolveOptionalBunExecutable(),
@@ -16805,10 +16998,10 @@ function resolveEnvExecutable(value) {
16805
16998
  function findWorkspaceRootFromRuntimeDir(runtimePackageDir2) {
16806
16999
  let current = resolve2(runtimePackageDir2);
16807
17000
  while (true) {
16808
- if (existsSync6(join5(current, "Cargo.toml")) && existsSync6(join5(current, "crates", "scoutd", "Cargo.toml"))) {
17001
+ if (existsSync7(join6(current, "Cargo.toml")) && existsSync7(join6(current, "crates", "scoutd", "Cargo.toml"))) {
16809
17002
  return current;
16810
17003
  }
16811
- const parent = dirname3(current);
17004
+ const parent = dirname4(current);
16812
17005
  if (parent === current)
16813
17006
  return null;
16814
17007
  current = parent;
@@ -16825,13 +17018,13 @@ function resolveScoutdCommand(config = resolveBrokerServiceConfig()) {
16825
17018
  }
16826
17019
  const workspaceRoot = findWorkspaceRootFromRuntimeDir(config.runtimePackageDir);
16827
17020
  const packageCandidates = [
16828
- 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")
17021
+ join6(config.runtimePackageDir, "bin", "scoutd"),
17022
+ join6(config.runtimePackageDir, "native", "scoutd"),
17023
+ join6(config.runtimePackageDir, "scoutd"),
17024
+ workspaceRoot ? join6(workspaceRoot, "packages", "cli", "bin", "scoutd") : null,
17025
+ workspaceRoot ? join6(workspaceRoot, "packages", "runtime", "bin", "scoutd") : null,
17026
+ join6(config.runtimeDirectory, "scoutd"),
17027
+ join6(dirname4(config.runtimePackageDir), "scout", "bin", "scoutd")
16835
17028
  ];
16836
17029
  for (const candidate of packageCandidates) {
16837
17030
  const resolved = executableCandidate(candidate);
@@ -16845,8 +17038,8 @@ function resolveScoutdCommand(config = resolveBrokerServiceConfig()) {
16845
17038
  }
16846
17039
  if (workspaceRoot && workspaceScoutdAllowed()) {
16847
17040
  for (const candidate of [
16848
- join5(workspaceRoot, "target", "release", "scoutd"),
16849
- join5(workspaceRoot, "target", "debug", "scoutd")
17041
+ join6(workspaceRoot, "target", "release", "scoutd"),
17042
+ join6(workspaceRoot, "target", "debug", "scoutd")
16850
17043
  ]) {
16851
17044
  const resolved = executableCandidate(candidate);
16852
17045
  if (resolved) {
@@ -16931,7 +17124,7 @@ function normalizeNativeServiceStatus(input, config) {
16931
17124
  const healthMeshId = readString2(healthRecord.meshId);
16932
17125
  const healthSocketFallbackError = readString2(healthRecord.socketFallbackError);
16933
17126
  const healthCounts = isRecord3(healthRecord.counts) ? healthRecord.counts : undefined;
16934
- const installed = readBoolean(input.installed) ?? existsSync6(config.launchAgentPath);
17127
+ const installed = readBoolean(input.installed) ?? existsSync7(config.launchAgentPath);
16935
17128
  const loaded = readBoolean(input.loaded) ?? false;
16936
17129
  const stdoutLogPath = readString2(input.stdoutLogPath) ?? config.stdoutLogPath;
16937
17130
  const stderrLogPath = readString2(input.stderrLogPath) ?? config.stderrLogPath;
@@ -17052,8 +17245,8 @@ var SCHEMA_GUARDED_SERVICE_COMMANDS = new Set([
17052
17245
  "restart"
17053
17246
  ]);
17054
17247
  function assertBrokerServiceSchemaCompatible(config) {
17055
- const databasePath = join5(config.controlHome, "control-plane.sqlite");
17056
- if (!existsSync6(databasePath))
17248
+ const databasePath = join6(config.controlHome, "control-plane.sqlite");
17249
+ if (!existsSync7(databasePath))
17057
17250
  return;
17058
17251
  const database = openControlPlaneSqliteDatabase(databasePath, { readonly: true });
17059
17252
  try {
@@ -17086,7 +17279,7 @@ async function runScoutdServiceCommand(command, config, timeoutMs = SCOUTD_DEFAU
17086
17279
  function readCoreAgentsSync() {
17087
17280
  try {
17088
17281
  const settingsPath = resolveOpenScoutSupportPaths().settingsPath;
17089
- const raw = readFileSync4(settingsPath, "utf8");
17282
+ const raw = readFileSync5(settingsPath, "utf8");
17090
17283
  const settings = JSON.parse(raw);
17091
17284
  const raw_agents = settings?.agents?.coreAgents;
17092
17285
  if (Array.isArray(raw_agents)) {
@@ -17099,10 +17292,10 @@ function bootoutCommand(config) {
17099
17292
  return `/bin/launchctl bootout ${config.serviceTarget}`;
17100
17293
  }
17101
17294
  function readLogLines(path) {
17102
- if (!existsSync6(path)) {
17295
+ if (!existsSync7(path)) {
17103
17296
  return [];
17104
17297
  }
17105
- return readFileSync4(path, "utf8").split(`
17298
+ return readFileSync5(path, "utf8").split(`
17106
17299
  `).map((line) => line.trim()).filter(Boolean);
17107
17300
  }
17108
17301
  function isPackageScriptBanner(line) {
@@ -17326,15 +17519,15 @@ if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1] && !pr
17326
17519
 
17327
17520
  // ../runtime/dist/harness-catalog.js
17328
17521
  import { execFileSync as execFileSync3 } from "node:child_process";
17329
- import { existsSync as existsSync7, statSync } from "node:fs";
17522
+ import { existsSync as existsSync8, statSync } from "node:fs";
17330
17523
  import { mkdir, readFile as readFile2, writeFile } from "node:fs/promises";
17331
17524
  import { homedir as homedir6 } from "node:os";
17332
- import { dirname as dirname4, join as join7 } from "node:path";
17525
+ import { dirname as dirname5, join as join8 } from "node:path";
17333
17526
 
17334
17527
  // ../agent-sessions/dist/codex-executable.js
17335
17528
  import { execFileSync as execFileSync2 } from "node:child_process";
17336
17529
  import { accessSync as accessSync2, constants as constants2 } from "node:fs";
17337
- import { delimiter, join as join6 } from "node:path";
17530
+ import { delimiter, join as join7 } from "node:path";
17338
17531
  function isExecutable(filePath) {
17339
17532
  if (!filePath)
17340
17533
  return false;
@@ -17378,11 +17571,11 @@ function codexAppBundleCandidates(env) {
17378
17571
  const appNames = ["Codex.app", "ChatGPT.app"];
17379
17572
  const candidates = appNames.flatMap((appName) => [
17380
17573
  {
17381
- path: join6("/Applications", appName, "Contents", "Resources", "codex"),
17574
+ path: join7("/Applications", appName, "Contents", "Resources", "codex"),
17382
17575
  source: "codex_app_bundle"
17383
17576
  },
17384
17577
  {
17385
- path: join6(env.HOME ?? "", "Applications", appName, "Contents", "Resources", "codex"),
17578
+ path: join7(env.HOME ?? "", "Applications", appName, "Contents", "Resources", "codex"),
17386
17579
  source: "codex_app_bundle"
17387
17580
  }
17388
17581
  ]);
@@ -17390,7 +17583,7 @@ function codexAppBundleCandidates(env) {
17390
17583
  }
17391
17584
  function pathCandidates(env) {
17392
17585
  return (env.PATH ?? "").split(delimiter).filter(Boolean).map((directory) => ({
17393
- path: join6(directory, "codex"),
17586
+ path: join7(directory, "codex"),
17394
17587
  source: "path"
17395
17588
  }));
17396
17589
  }
@@ -17401,7 +17594,7 @@ function commonCandidates(env) {
17401
17594
  "/opt/homebrew/bin",
17402
17595
  "/usr/local/bin"
17403
17596
  ].filter(Boolean).map((directory) => ({
17404
- path: join6(directory, "codex"),
17597
+ path: join7(directory, "codex"),
17405
17598
  source: "common"
17406
17599
  }));
17407
17600
  }
@@ -18037,7 +18230,7 @@ function expandHomePath2(value) {
18037
18230
  if (value === "~")
18038
18231
  return home;
18039
18232
  if (value.startsWith("~/"))
18040
- return join7(home, value.slice(2));
18233
+ return join8(home, value.slice(2));
18041
18234
  return value;
18042
18235
  }
18043
18236
  function defaultWhichBinary(binary, platform) {
@@ -18071,7 +18264,7 @@ function defaultRunCommand(command, platform) {
18071
18264
  }
18072
18265
  function defaultRequirementExists(requirement) {
18073
18266
  const expanded = expandHomePath2(requirement.path);
18074
- if (!existsSync7(expanded))
18267
+ if (!existsSync8(expanded))
18075
18268
  return false;
18076
18269
  if (requirement.fileType === "any" || !requirement.fileType)
18077
18270
  return true;
@@ -18300,7 +18493,7 @@ async function readHarnessCatalogOverrides(overridePath = resolveOpenScoutSuppor
18300
18493
  }
18301
18494
  }
18302
18495
  async function writeHarnessCatalogOverrides(overrides, overridePath = resolveOpenScoutSupportPaths().harnessCatalogPath) {
18303
- await mkdir(dirname4(overridePath), { recursive: true });
18496
+ await mkdir(dirname5(overridePath), { recursive: true });
18304
18497
  const payload = {
18305
18498
  version: HARNESS_CATALOG_VERSION,
18306
18499
  entries: overrides,
@@ -18310,7 +18503,7 @@ async function writeHarnessCatalogOverrides(overrides, overridePath = resolveOpe
18310
18503
  `, "utf8");
18311
18504
  }
18312
18505
  async function ensureHarnessCatalogOverrideFile(overridePath = resolveOpenScoutSupportPaths().harnessCatalogPath) {
18313
- if (existsSync7(overridePath))
18506
+ if (existsSync8(overridePath))
18314
18507
  return;
18315
18508
  await writeHarnessCatalogOverrides({}, overridePath);
18316
18509
  }
@@ -20634,22 +20827,22 @@ function validateScoutRendezvousCodename(codename) {
20634
20827
 
20635
20828
  // ../runtime/dist/claude-statusline.js
20636
20829
  import { appendFile, mkdir as mkdir2, readFile as readFile3, writeFile as writeFile2 } from "node:fs/promises";
20637
- import { basename as basename2, dirname as dirname5, join as join8 } from "node:path";
20830
+ import { basename as basename2, dirname as dirname6, join as join9 } from "node:path";
20638
20831
  function resolveClaudeStatuslineDirectory() {
20639
- return join8(resolveOpenScoutSupportPaths().runtimeDirectory, "statusline");
20832
+ return join9(resolveOpenScoutSupportPaths().runtimeDirectory, "statusline");
20640
20833
  }
20641
20834
  function resolveClaudeStatuslineDelegatePath() {
20642
- return join8(resolveClaudeStatuslineDirectory(), "claude-delegate.json");
20835
+ return join9(resolveClaudeStatuslineDirectory(), "claude-delegate.json");
20643
20836
  }
20644
20837
  function resolveClaudeStatuslineWrapperPath() {
20645
- return join8(resolveClaudeStatuslineDirectory(), "claude-statusline.sh");
20838
+ return join9(resolveClaudeStatuslineDirectory(), "claude-statusline.sh");
20646
20839
  }
20647
20840
  async function writeClaudeStatuslineDelegate(delegate, path = resolveClaudeStatuslineDelegatePath()) {
20648
20841
  const next = {
20649
20842
  version: 1,
20650
20843
  ...delegate
20651
20844
  };
20652
- await mkdir2(dirname5(path), { recursive: true });
20845
+ await mkdir2(dirname6(path), { recursive: true });
20653
20846
  await writeFile2(path, JSON.stringify(next, null, 2) + `
20654
20847
  `, "utf8");
20655
20848
  return next;
@@ -20664,9 +20857,9 @@ function isOpenScoutClaudeStatuslineCommand(command, wrapperPath = resolveClaude
20664
20857
  }
20665
20858
 
20666
20859
  // ../runtime/dist/managed-installs.js
20667
- import { createHash } from "node:crypto";
20860
+ import { createHash as createHash2 } from "node:crypto";
20668
20861
  import { mkdir as mkdir3, readFile as readFile4, writeFile as writeFile3 } from "node:fs/promises";
20669
- import { dirname as dirname6 } from "node:path";
20862
+ import { dirname as dirname7 } from "node:path";
20670
20863
  function emptyManagedInstallsFile(now = Date.now()) {
20671
20864
  return {
20672
20865
  version: 1,
@@ -20683,7 +20876,7 @@ function stableInstallId(input) {
20683
20876
  input.provider ?? "",
20684
20877
  input.targetPath ?? ""
20685
20878
  ].join("\x00");
20686
- return `install.${createHash("sha256").update(key).digest("hex").slice(0, 18)}`;
20879
+ return `install.${createHash2("sha256").update(key).digest("hex").slice(0, 18)}`;
20687
20880
  }
20688
20881
  function normalizeManagedInstallsFile(value) {
20689
20882
  if (!value || typeof value !== "object" || Array.isArray(value)) {
@@ -20706,7 +20899,7 @@ async function readManagedInstallsFile(path = resolveOpenScoutSupportPaths().man
20706
20899
  }
20707
20900
  async function writeManagedInstallsFile(file, path = resolveOpenScoutSupportPaths().managedInstallsPath) {
20708
20901
  assertTestIsolatedUserData("write the managed-installs registry", "OPENSCOUT_SUPPORT_DIRECTORY");
20709
- await mkdir3(dirname6(path), { recursive: true });
20902
+ await mkdir3(dirname7(path), { recursive: true });
20710
20903
  await writeFile3(path, JSON.stringify(file, null, 2) + `
20711
20904
  `, "utf8");
20712
20905
  }
@@ -20732,167 +20925,6 @@ async function upsertManagedInstall(input, now = Date.now()) {
20732
20925
  return next;
20733
20926
  }
20734
20927
 
20735
- // ../runtime/dist/node-identity.js
20736
- import { createHash as createHash2, createPrivateKey, createPublicKey, generateKeyPairSync, randomBytes, sign, verify } from "node:crypto";
20737
- import { chmodSync, existsSync as existsSync8, mkdirSync as mkdirSync4, readFileSync as readFileSync5, renameSync as renameSync3, rmSync as rmSync2, writeFileSync as writeFileSync4 } from "node:fs";
20738
- import { dirname as dirname7, join as join9 } from "node:path";
20739
- var NODE_IDENTITY_FILE = "node-identity.json";
20740
- var NODE_FINGERPRINT_PREFIX = "osc1";
20741
- var NODE_CARD_TTL_MS = 24 * 60 * 60 * 1000;
20742
- var stableNodeQualifierCache = new Map;
20743
- function nodeIdentityPath(supportDirectory) {
20744
- const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
20745
- return join9(dir, NODE_IDENTITY_FILE);
20746
- }
20747
- function loadOrCreateNodeIdentity(supportDirectory) {
20748
- const path = nodeIdentityPath(supportDirectory);
20749
- if (existsSync8(path)) {
20750
- return readAndValidateNodeIdentity(path);
20751
- }
20752
- return createNodeIdentity(supportDirectory);
20753
- }
20754
- function readStableNodeQualifier(supportDirectory) {
20755
- const path = nodeIdentityPath(supportDirectory);
20756
- const cached = stableNodeQualifierCache.get(path);
20757
- if (cached) {
20758
- return cached;
20759
- }
20760
- if (!existsSync8(path)) {
20761
- return null;
20762
- }
20763
- const nodeQualifier = normalizeNodeQualifier(readAndValidateNodeIdentity(path).nodeQualifier);
20764
- if (nodeQualifier) {
20765
- stableNodeQualifierCache.set(path, nodeQualifier);
20766
- }
20767
- return nodeQualifier || null;
20768
- }
20769
- function readAndValidateNodeIdentity(path) {
20770
- let parsed;
20771
- try {
20772
- parsed = JSON.parse(readFileSync5(path, "utf8"));
20773
- } catch {
20774
- throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
20775
- }
20776
- if (parsed.version !== 1 || !parsed.publicKey || !parsed.privateKey) {
20777
- throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
20778
- }
20779
- if (parsed.nodeQualifier !== undefined && normalizeNodeQualifier(parsed.nodeQualifier) !== parsed.nodeQualifier) {
20780
- throw new Error(`Corrupt node identity at ${path}; remove it to generate a fresh one.`);
20781
- }
20782
- try {
20783
- const derived = createPublicKey(importPrivateKey(parsed.privateKey)).export({ type: "spki", format: "der" }).toString("base64");
20784
- if (derived !== parsed.publicKey) {
20785
- throw new Error("mismatch");
20786
- }
20787
- } catch {
20788
- throw new Error(`Node identity at ${path} has mismatched or invalid keys; remove it to generate a fresh one.`);
20789
- }
20790
- return parsed;
20791
- }
20792
- function normalizeNodeQualifier(value) {
20793
- return typeof value === "string" ? value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "") : "";
20794
- }
20795
- function createNodeIdentity(supportDirectory) {
20796
- if (!supportDirectory) {
20797
- assertTestIsolatedUserData("write the node identity", "OPENSCOUT_SUPPORT_DIRECTORY");
20798
- }
20799
- const path = nodeIdentityPath(supportDirectory);
20800
- const { publicKey, privateKey } = generateKeyPairSync("ed25519");
20801
- const identity = {
20802
- version: 1,
20803
- publicKey: publicKey.export({ type: "spki", format: "der" }).toString("base64"),
20804
- privateKey: privateKey.export({ type: "pkcs8", format: "der" }).toString("base64"),
20805
- createdAt: Date.now()
20806
- };
20807
- mkdirSync4(dirname7(path), { recursive: true });
20808
- try {
20809
- writeFileSync4(path, `${JSON.stringify(identity, null, 2)}
20810
- `, { encoding: "utf8", mode: 384, flag: "wx" });
20811
- } catch (error) {
20812
- if (error.code === "EEXIST") {
20813
- return readAndValidateNodeIdentity(path);
20814
- }
20815
- throw error;
20816
- }
20817
- try {
20818
- chmodSync(path, 384);
20819
- } catch {}
20820
- return identity;
20821
- }
20822
- function nodeKeyId(publicKeyBase64) {
20823
- return createHash2("sha256").update(Buffer.from(publicKeyBase64, "base64")).digest("hex");
20824
- }
20825
- function nodeFingerprint(publicKeyBase64) {
20826
- const digest = createHash2("sha256").update(Buffer.from(publicKeyBase64, "base64")).digest();
20827
- const encoded = base32Encode(digest.subarray(0, 10)).toLowerCase();
20828
- return `${NODE_FINGERPRINT_PREFIX}:${encoded.slice(0, 4)}-${encoded.slice(4, 8)}`;
20829
- }
20830
- function signNodePayload(identity, payload) {
20831
- const key = importPrivateKey(identity.privateKey);
20832
- return sign(null, typeof payload === "string" ? Buffer.from(payload, "utf8") : payload, key).toString("base64");
20833
- }
20834
- function verifyNodeSignature(publicKeyBase64, payload, signatureBase64) {
20835
- try {
20836
- const key = importPublicKey(publicKeyBase64);
20837
- return verify(null, typeof payload === "string" ? Buffer.from(payload, "utf8") : payload, key, Buffer.from(signatureBase64, "base64"));
20838
- } catch {
20839
- return false;
20840
- }
20841
- }
20842
- function canonicalJson(value) {
20843
- if (value === null || typeof value !== "object") {
20844
- return JSON.stringify(value);
20845
- }
20846
- if (Array.isArray(value)) {
20847
- return `[${value.map(canonicalJson).join(",")}]`;
20848
- }
20849
- const record2 = value;
20850
- const keys = Object.keys(record2).sort();
20851
- return `{${keys.map((key) => `${JSON.stringify(key)}:${canonicalJson(record2[key])}`).join(",")}}`;
20852
- }
20853
- function verifySignedNodeCard(card, now = Date.now()) {
20854
- if (nodeKeyId(card.publicKey) !== card.keyId) {
20855
- return false;
20856
- }
20857
- if (nodeFingerprint(card.publicKey) !== card.fingerprint) {
20858
- return false;
20859
- }
20860
- if (!Number.isFinite(card.expiresAt) || card.expiresAt <= now) {
20861
- return false;
20862
- }
20863
- if (card.tls !== undefined) {
20864
- if (typeof card.tls !== "object" || card.tls === null || typeof card.tls.spkiFingerprint !== "string" || !/^[0-9a-f]{64}$/.test(card.tls.spkiFingerprint)) {
20865
- return false;
20866
- }
20867
- }
20868
- const { signature, ...unsigned } = card;
20869
- return verifyNodeSignature(card.publicKey, canonicalJson(unsigned), signature);
20870
- }
20871
- var BASE32_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
20872
- function base32Encode(input) {
20873
- let bits = 0;
20874
- let value = 0;
20875
- let output = "";
20876
- for (const byte of input) {
20877
- value = value << 8 | byte;
20878
- bits += 8;
20879
- while (bits >= 5) {
20880
- output += BASE32_ALPHABET[value >>> bits - 5 & 31];
20881
- bits -= 5;
20882
- }
20883
- }
20884
- if (bits > 0) {
20885
- output += BASE32_ALPHABET[value << 5 - bits & 31];
20886
- }
20887
- return output;
20888
- }
20889
- function importPrivateKey(privateKeyBase64) {
20890
- return createPrivateKey({ key: Buffer.from(privateKeyBase64, "base64"), format: "der", type: "pkcs8" });
20891
- }
20892
- function importPublicKey(publicKeyBase64) {
20893
- return createPublicKey({ key: Buffer.from(publicKeyBase64, "base64"), format: "der", type: "spki" });
20894
- }
20895
-
20896
20928
  // ../runtime/dist/user-project-hints.js
20897
20929
  import { readdir, readFile as readFile5, stat } from "node:fs/promises";
20898
20930
  import { homedir as homedir7 } from "node:os";
@@ -21843,6 +21875,9 @@ function defaultSettings() {
21843
21875
  quickHits: [],
21844
21876
  preparedAt: null
21845
21877
  },
21878
+ voice: {
21879
+ realtimeEnabled: false
21880
+ },
21846
21881
  ui: {
21847
21882
  scenes: [],
21848
21883
  activeSceneIdBySurface: {}
@@ -22230,6 +22265,7 @@ async function normalizeSettingsRecord(value, options = {}) {
22230
22265
  const telegram = typeof bridges.telegram === "object" && bridges.telegram ? bridges.telegram : {};
22231
22266
  const network = typeof candidate.network === "object" && candidate.network ? candidate.network : {};
22232
22267
  const phone = typeof candidate.phone === "object" && candidate.phone ? candidate.phone : {};
22268
+ const voice = typeof candidate.voice === "object" && candidate.voice ? candidate.voice : {};
22233
22269
  const ui = typeof candidate.ui === "object" && candidate.ui ? candidate.ui : {};
22234
22270
  const oldOperatorName = typeof candidate.operatorName === "string" ? candidate.operatorName : undefined;
22235
22271
  const seededWorkspaceRoots = await seedWorkspaceRoots({
@@ -22302,6 +22338,9 @@ async function normalizeSettingsRecord(value, options = {}) {
22302
22338
  quickHits: normalizeStringList(phone.quickHits),
22303
22339
  preparedAt: normalizeOptionalTimestamp(phone.preparedAt)
22304
22340
  },
22341
+ voice: {
22342
+ realtimeEnabled: typeof voice.realtimeEnabled === "boolean" ? voice.realtimeEnabled : base.voice.realtimeEnabled
22343
+ },
22305
22344
  ui: normalizeUi(ui)
22306
22345
  };
22307
22346
  }
@@ -22422,6 +22461,10 @@ async function writeOpenScoutSettings(settings, options = {}) {
22422
22461
  ...current.phone,
22423
22462
  ...settings.phone ?? {}
22424
22463
  },
22464
+ voice: {
22465
+ ...current.voice,
22466
+ ...settings.voice ?? {}
22467
+ },
22425
22468
  ui: {
22426
22469
  ...current.ui,
22427
22470
  ...settings.ui ?? {}
@@ -23390,21 +23433,47 @@ async function initializeOpenScoutSetup(options = {}) {
23390
23433
  }
23391
23434
 
23392
23435
  // ../runtime/dist/user-config.js
23393
- import { existsSync as existsSync10, readFileSync as readFileSync7, writeFileSync as writeFileSync5, mkdirSync as mkdirSync5 } from "node:fs";
23436
+ import { existsSync as existsSync10, readFileSync as readFileSync7, statSync as statSync2, writeFileSync as writeFileSync5, mkdirSync as mkdirSync5 } from "node:fs";
23394
23437
  import { homedir as homedir9 } from "node:os";
23395
23438
  import { dirname as dirname10, join as join12 } from "node:path";
23396
23439
  function userConfigPath() {
23397
23440
  return join12(process.env.OPENSCOUT_HOME ?? join12(homedir9(), ".openscout"), "user.json");
23398
23441
  }
23399
- function loadUserConfig() {
23400
- const configPath = userConfigPath();
23401
- if (!existsSync10(configPath))
23402
- return {};
23442
+ var userConfigCache = null;
23443
+ var USER_CONFIG_STAT_INTERVAL_MS = 100;
23444
+ function userConfigFileKey(configPath) {
23403
23445
  try {
23404
- return JSON.parse(readFileSync7(configPath, "utf8"));
23446
+ const stats = statSync2(configPath);
23447
+ return `${stats.ino}:${stats.mtimeMs}:${stats.size}`;
23405
23448
  } catch {
23406
- return {};
23449
+ return "missing";
23450
+ }
23451
+ }
23452
+ function readUserConfigFromDisk(configPath, now) {
23453
+ const fileKey = userConfigFileKey(configPath);
23454
+ let value = {};
23455
+ if (existsSync10(configPath)) {
23456
+ try {
23457
+ value = JSON.parse(readFileSync7(configPath, "utf8"));
23458
+ } catch {
23459
+ value = {};
23460
+ }
23461
+ }
23462
+ userConfigCache = { path: configPath, value, fileKey, statCheckedAt: now };
23463
+ return { ...value };
23464
+ }
23465
+ function loadUserConfig(now = Date.now()) {
23466
+ const configPath = userConfigPath();
23467
+ if (userConfigCache && userConfigCache.path === configPath) {
23468
+ if (now - userConfigCache.statCheckedAt < USER_CONFIG_STAT_INTERVAL_MS) {
23469
+ return { ...userConfigCache.value };
23470
+ }
23471
+ if (userConfigFileKey(configPath) === userConfigCache.fileKey) {
23472
+ userConfigCache.statCheckedAt = now;
23473
+ return { ...userConfigCache.value };
23474
+ }
23407
23475
  }
23476
+ return readUserConfigFromDisk(configPath, now);
23408
23477
  }
23409
23478
  function saveUserConfig(config) {
23410
23479
  assertTestIsolatedUserData("write the OpenScout user config", "OPENSCOUT_HOME");
@@ -23412,6 +23481,7 @@ function saveUserConfig(config) {
23412
23481
  mkdirSync5(dirname10(configPath), { recursive: true });
23413
23482
  writeFileSync5(configPath, JSON.stringify(config, null, 2) + `
23414
23483
  `, "utf8");
23484
+ userConfigCache = null;
23415
23485
  }
23416
23486
  function readSettingsOperatorName() {
23417
23487
  const settingsPath = resolveOpenScoutSupportPaths().settingsPath;
@@ -33766,7 +33836,7 @@ async function requestJsonWithBun2(connect, socketPath, payload, timeoutMs) {
33766
33836
  }
33767
33837
 
33768
33838
  // ../runtime/dist/system-probes/git-build-info.js
33769
- import { existsSync as existsSync13, realpathSync, statSync as statSync2 } from "node:fs";
33839
+ import { existsSync as existsSync13, realpathSync, statSync as statSync3 } from "node:fs";
33770
33840
  import { dirname as dirname12, resolve as resolve6 } from "node:path";
33771
33841
  var staticMetadataByRepo = new Map;
33772
33842
  function realpathOrResolved(path) {
@@ -33779,7 +33849,7 @@ function realpathOrResolved(path) {
33779
33849
  function directoryOrParent(path) {
33780
33850
  const resolved = resolve6(path);
33781
33851
  try {
33782
- const stat3 = statSync2(resolved);
33852
+ const stat3 = statSync3(resolved);
33783
33853
  return stat3.isDirectory() ? resolved : dirname12(resolved);
33784
33854
  } catch {
33785
33855
  return resolved;
@@ -35910,7 +35980,7 @@ var sessions2 = new Map;
35910
35980
  var CODEX_ROLLOUT_STALE_ACTIVE_TURN_MS = 10 * 60 * 1000;
35911
35981
 
35912
35982
  // ../runtime/dist/pi-rpc.js
35913
- import { existsSync as existsSync16, readFileSync as readFileSync9, statSync as statSync3 } from "node:fs";
35983
+ import { existsSync as existsSync16, readFileSync as readFileSync9, statSync as statSync4 } from "node:fs";
35914
35984
  import { mkdir as mkdir6, writeFile as writeFile6 } from "node:fs/promises";
35915
35985
  import { execFileSync as execFileSync5 } from "node:child_process";
35916
35986
  import { homedir as homedir14 } from "node:os";
@@ -36017,12 +36087,12 @@ function readPiRpcCredentialFile(name, options = {}) {
36017
36087
  return;
36018
36088
  }
36019
36089
  try {
36020
- const directoryStat = statSync3(directory);
36090
+ const directoryStat = statSync4(directory);
36021
36091
  if (!directoryStat.isDirectory() || (directoryStat.mode & 63) !== 0) {
36022
36092
  return;
36023
36093
  }
36024
36094
  const path = join17(directory, name);
36025
- const stat4 = statSync3(path);
36095
+ const stat4 = statSync4(path);
36026
36096
  if (!stat4.isFile() || (stat4.mode & 63) !== 0 || stat4.size > 16 * 1024) {
36027
36097
  return;
36028
36098
  }