@openscout/scout 0.2.75 → 0.2.78

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 (372) hide show
  1. package/README.md +41 -2
  2. package/bin/openscout-runtime.mjs +48 -30
  3. package/bin/scout.mjs +2 -2
  4. package/bin/scoutd +0 -0
  5. package/dist/build-manifest.json +3 -3
  6. package/dist/client/assets/ActivityScreen-Cu_1V4bq.js +1 -0
  7. package/dist/client/assets/AddProjectForm-DMnobKch.js +1 -0
  8. package/dist/client/assets/AgentAvatar-D90c1Rzk.js +1 -0
  9. package/dist/client/assets/AgentConfigurationScreen-BqfOz90D.js +1 -0
  10. package/dist/client/assets/AgentDefinitionsWorkspace-CUpUrY57.js +1 -0
  11. package/dist/client/assets/AgentDetailCard-BcRBRp88.js +1 -0
  12. package/dist/client/assets/AgentDetailCard-C4WVeJvJ.css +1 -0
  13. package/dist/client/assets/AgentFloorView-8LoAEBwS.js +1 -0
  14. package/dist/client/assets/AgentInfoScreen-DZs2_ibL.js +1 -0
  15. package/dist/client/assets/AgentLaneCard-RrNnDZu8.js +1 -0
  16. package/dist/client/assets/AgentLaneChrome-D9ZwUKrl.js +1 -0
  17. package/dist/client/assets/AgentLaneDetailSheet-BXbPls9N.js +5 -0
  18. package/dist/client/assets/AgentLaneSummaryResize-BhFmGNzT.js +1 -0
  19. package/dist/client/assets/AgentLanesEmbedScreen-W3qs022h.js +1 -0
  20. package/dist/client/assets/AgentLanesPreflight-eSAoDsPi.js +1 -0
  21. package/dist/client/assets/AgentLanesView-B9vuEEmZ.js +2 -0
  22. package/dist/client/assets/AgentLiveActions-CGS-Bxb7.css +1 -0
  23. package/dist/client/assets/AgentLiveActions-DBtnD0qE.js +1 -0
  24. package/dist/client/assets/AgentSessions-DyqOf4nG.js +6 -0
  25. package/dist/client/assets/AgentsConsole-BgiYP2wR.js +1 -0
  26. package/dist/client/assets/AgentsConsole-BjSTs-TV.css +1 -0
  27. package/dist/client/assets/AgentsScreen-DBi8x4MB.js +1 -0
  28. package/dist/client/assets/AgentsSubnav-DIEO4NPx.js +1 -0
  29. package/dist/client/assets/AtopView-BCkae3e1.js +1 -0
  30. package/dist/client/assets/BackToPicker-BRvfostO.js +1 -0
  31. package/dist/client/assets/BackToPicker-CdgVu-to.css +1 -0
  32. package/dist/client/assets/BriefingDetailScreen-BwFyysT8.js +6 -0
  33. package/dist/client/assets/BriefingsScreen-BQEevztH.js +1 -0
  34. package/dist/client/assets/BrokerMetadataPanel-7UjcuNjd.js +1 -0
  35. package/dist/client/assets/BrokerScreen-7ekklu88.js +5 -0
  36. package/dist/client/assets/ChatCollapsedStrip-CQSYSd8s.js +1 -0
  37. package/dist/client/assets/CodeDiffPane-DDPt6KPh.js +1 -0
  38. package/dist/client/assets/CodeProjectPicker-DqKFCpLU.js +2 -0
  39. package/dist/client/assets/CodeScreen-BxCrpRHd.js +1 -0
  40. package/dist/client/assets/ContextMenu-bARZqTzD.js +1 -0
  41. package/dist/client/assets/ConversationComposer-Bla3DDvM.js +1 -0
  42. package/dist/client/assets/ConversationFeedRows-B_gPxcqA.js +1 -0
  43. package/dist/client/assets/ConversationHeader-DE3FC0m-.js +1 -0
  44. package/dist/client/assets/ConversationPanels-DLek4H6A.js +2 -0
  45. package/dist/client/assets/ConversationScreen-BDRhx-RU.js +1 -0
  46. package/dist/client/assets/ConversationScreen-C9yMAMYF.css +1 -0
  47. package/dist/client/assets/ConversationStatus-BwVLiiO4.js +1 -0
  48. package/dist/client/assets/DataTable-E8s_MmoA.js +1 -0
  49. package/dist/client/assets/DispatchAftermath-Dpe88DFX.js +1 -0
  50. package/dist/client/assets/DocumentFocusViewer-BeVwwl26.js +1 -0
  51. package/dist/client/assets/EmbeddableSurfacesLab-BQqFQVnI.js +1 -0
  52. package/dist/client/assets/EmptyState-4F9XDFQm.js +1 -0
  53. package/dist/client/assets/FileViewerPane-CLgUhSm4.js +3 -0
  54. package/dist/client/assets/FleetSearch-Dz5euQJe.js +1 -0
  55. package/dist/client/assets/FleetSearch-EXOe8ulE.css +1 -0
  56. package/dist/client/assets/FlightObserveScreen-6RpZYwVz.js +1 -0
  57. package/dist/client/assets/FollowScreen-DZ4qfYOY.js +1 -0
  58. package/dist/client/assets/HarnessMark-Cbv3Ib0c.js +1 -0
  59. package/dist/client/assets/HarnessesScreen-CznAImej.js +1 -0
  60. package/dist/client/assets/HomeHero-B3uYd-pP.js +1 -0
  61. package/dist/client/assets/HomeHero-DEl-WBsT.css +1 -0
  62. package/dist/client/assets/KnowledgeSearchInspector-Dgdkfvvz.js +1 -0
  63. package/dist/client/assets/KnowledgeSearchScreen-DJDGGaqC.js +1 -0
  64. package/dist/client/assets/LaneToolHoverCard-Bla0gBdm.js +1 -0
  65. package/dist/client/assets/LaneTraceDetailSheet-D1CspRbl.js +1 -0
  66. package/dist/client/assets/LaneTraceEventFocus-BF9ERP5O.js +1 -0
  67. package/dist/client/assets/MeshCanvas-DFEPkpqY.js +3 -0
  68. package/dist/client/assets/MeshCanvasMinimap-CyVFYixr.js +1 -0
  69. package/dist/client/assets/MeshCanvasMinimap-Dv7nMbl5.css +1 -0
  70. package/dist/client/assets/MeshScreen-DFgevn8N.js +1 -0
  71. package/dist/client/assets/MeshTopologyView-CalkZghg.js +2 -0
  72. package/dist/client/assets/MessageComposerSuggestions-DpxN9WiB.js +1 -0
  73. package/dist/client/assets/MessagesScreen-C8YKW10Y.js +1 -0
  74. package/dist/client/assets/MissionControlView-lUeAiSVg.js +1 -0
  75. package/dist/client/assets/MissionFocusOverlay-wlCmWDCT.js +1 -0
  76. package/dist/client/assets/MissionLeftAgentRow-BpZWntfl.js +1 -0
  77. package/dist/client/assets/MissionLogPane-__MVtEl9.js +1 -0
  78. package/dist/client/assets/NewAgentModal-Bg-eWHpY.js +1 -0
  79. package/dist/client/assets/NewAgentModal-ru8u5YdJ.css +1 -0
  80. package/dist/client/assets/NewChatComposer-Cs6OsxK6.js +19 -0
  81. package/dist/client/assets/NewChatComposer-W-t-L4oV.css +1 -0
  82. package/dist/client/assets/NewChatOrigin-Bk2OyVjI.js +1 -0
  83. package/dist/client/assets/ObserveEmbedScreen-y2EpuqRZ.js +2 -0
  84. package/dist/client/assets/ObserveTextFlow-rsFj_rVo.js +2 -0
  85. package/dist/client/assets/ObservedTopologyPanel-BsBsvVPL.css +1 -0
  86. package/dist/client/assets/ObservedTopologyPanel-DyUeV98H.js +2 -0
  87. package/dist/client/assets/OpenScoutAppShell-Bh6FnEJO.css +1 -0
  88. package/dist/client/assets/OpenScoutAppShell-C_URc8sV.js +87 -0
  89. package/dist/client/assets/OpsAgentsView-UN7iOscs.js +1 -0
  90. package/dist/client/assets/OpsScreen-Buf3LKjb.js +1 -0
  91. package/dist/client/assets/OpsSubnav-DsuXzHah.js +1 -0
  92. package/dist/client/assets/PlanView-C1CjH3PG.js +1 -0
  93. package/dist/client/assets/ProjectAgentProfile-DJusrAV-.js +1 -0
  94. package/dist/client/assets/ProjectAgentProfileBar-CtTpj6fU.js +1 -0
  95. package/dist/client/assets/ProjectAgentProfileHero-BFwNJo_N.js +1 -0
  96. package/dist/client/assets/ProjectsInbox-GhVMxOhw.js +2 -0
  97. package/dist/client/assets/ProjectsRail-BgiuV4LR.js +1 -0
  98. package/dist/client/assets/ProjectsScreen-eNUBy4YU.js +1 -0
  99. package/dist/client/assets/ProjectsThreadAside-CoBgnHmr.js +1 -0
  100. package/dist/client/assets/Provider-C7UKGHQy.js +1 -0
  101. package/dist/client/assets/Provider-CCzjtkda.css +1 -0
  102. package/dist/client/assets/RailRow-BoGxAHNF.js +1 -0
  103. package/dist/client/assets/RailRow-Cf9LOiEj.css +1 -0
  104. package/dist/client/assets/RawSessionsTable-DL8y_eEy.js +1 -0
  105. package/dist/client/assets/RealtimeVoiceScreen-ffS-39zy.js +1 -0
  106. package/dist/client/assets/RepoDiffEmbedScreen-C0rumUME.js +1 -0
  107. package/dist/client/assets/RepoDiffPageScreen-DMv6DioL.js +1 -0
  108. package/dist/client/assets/RepoDiffViewer-D_exm6xK.js +7 -0
  109. package/dist/client/assets/RepoDiffViewerLazy-BPgF92Bg.js +2 -0
  110. package/dist/client/assets/ReposScreen-CB_YBWYf.js +6 -0
  111. package/dist/client/assets/ScoutDeckSurface-CxIYFyWx.js +1 -0
  112. package/dist/client/assets/ScoutDeckSurface-uhmuZRzC.css +1 -0
  113. package/dist/client/assets/ScoutSurface-CYz_TcWC.js +1 -0
  114. package/dist/client/assets/ScoutbotBroadcastChip-CxtYZWPZ.css +1 -0
  115. package/dist/client/assets/ScoutbotBroadcastChip-L_R9atj0.js +2 -0
  116. package/dist/client/assets/ScoutbotFxLab-CgiZMDMW.js +4 -0
  117. package/dist/client/assets/ScoutbotRealtimeVoiceCall-FMQOr1Np.js +1 -0
  118. package/dist/client/assets/SecondaryNav-B3-nh5dM.js +1 -0
  119. package/dist/client/assets/SessionEmbedScreen-BVC7yvWF.js +1 -0
  120. package/dist/client/assets/SessionObserve-BpggNO_M.css +1 -0
  121. package/dist/client/assets/SessionObserve-yfXFafp8.js +12 -0
  122. package/dist/client/assets/SessionRefScreen-DRgJu7Jo.js +1 -0
  123. package/dist/client/assets/SessionsScreen-D6XUsZfA.js +1 -0
  124. package/dist/client/assets/SettingsDrawer-CmJt72ww.css +1 -0
  125. package/dist/client/assets/SettingsDrawer-XfdAa_nD.js +3 -0
  126. package/dist/client/assets/SettingsScreen-Cy8z-EuR.js +1 -0
  127. package/dist/client/assets/ShikiPane-Ap1iPxYb.js +15 -0
  128. package/dist/client/assets/SlidePanel-Bg5dVaIa.css +1 -0
  129. package/dist/client/assets/SlidePanel-COwtoJqR.js +1 -0
  130. package/dist/client/assets/SpriteAvatar-DyaGuhik.js +1 -0
  131. package/dist/client/assets/StatusPill-DhBL__p8.js +1 -0
  132. package/dist/client/assets/TailView-DGj_5HA9.js +2 -0
  133. package/dist/client/assets/TailView-Mj3AU2u0.css +1 -0
  134. package/dist/client/assets/Terminal-CqvGbjXU.js +1 -0
  135. package/dist/client/assets/TerminalEmbedScreen-DuZZFFzW.js +1 -0
  136. package/dist/client/assets/TextDocumentSurface-BpAw4eQS.js +4 -0
  137. package/dist/client/assets/TmuxPeek-m1osv33Q.js +1 -0
  138. package/dist/client/assets/VoicePermissionsPanel-DsK53ar4.js +1 -0
  139. package/dist/client/assets/VoicePermissionsPanel-RijAZ1gP.css +1 -0
  140. package/dist/client/assets/WorkDetailScreen-Bx0JimPC.js +5 -0
  141. package/dist/client/assets/WorkFilesViewer-Btl6C2Q1.js +1 -0
  142. package/dist/client/assets/activity-CA8qS6PI.js +1 -0
  143. package/dist/client/assets/{addon-fit-3IrvLm2n.js → addon-fit-BZ-kXjeN.js} +1 -1
  144. package/dist/client/assets/{addon-webgl-BgxIDUI-.js → addon-webgl-D9-EQVEK.js} +1 -1
  145. package/dist/client/assets/agent-chat-Bfjd9y6c.js +1 -0
  146. package/dist/client/assets/agent-definitions-CymTYqvo.css +1 -0
  147. package/dist/client/assets/agent-directory-studio-injection-Bc8590z5.css +1 -0
  148. package/dist/client/assets/agent-essentials-BSY1o46q.js +1 -0
  149. package/dist/client/assets/agent-floor-CuJr1iK1.css +1 -0
  150. package/dist/client/assets/agent-lane-card-Dm7YWoew.css +1 -0
  151. package/dist/client/assets/agent-lane-card-model-r2frk57c.js +1 -0
  152. package/dist/client/assets/agent-lane-detail-Djm3YJEa.js +1 -0
  153. package/dist/client/assets/agent-lane-preview-CmHVe3dU.js +4 -0
  154. package/dist/client/assets/agent-lanes-BDNktFBZ.css +1 -0
  155. package/dist/client/assets/agent-lanes-model-B4YTt4OF.js +2 -0
  156. package/dist/client/assets/agents-detail-redesign-h34ROjOW.css +1 -0
  157. package/dist/client/assets/agents-project-COzHxZAF.css +1 -0
  158. package/dist/client/assets/agents-project-model-UYiamtrU.js +1 -0
  159. package/dist/client/assets/agents-screen-BMu6PpRY.css +1 -0
  160. package/dist/client/assets/api-BkjHJfgJ.js +1 -0
  161. package/dist/client/assets/api-h5zurxmi.js +1 -0
  162. package/dist/client/assets/{arc.es-Bh8P_xre.js → arc.es-CQBb-dVu.js} +1 -1
  163. package/dist/client/assets/arrow-down-BPLe0am9.js +1 -0
  164. package/dist/client/assets/arrow-left-DEZzHiPS.js +1 -0
  165. package/dist/client/assets/arrow-up-right-ClxBnsi7.js +1 -0
  166. package/dist/client/assets/bash-format-BRV5C6Gv.js +1 -0
  167. package/dist/client/assets/bot-eu8pBNvI.js +1 -0
  168. package/dist/client/assets/briefings-BwuAFQK6.css +1 -0
  169. package/dist/client/assets/broker-display-pp33bLsu.js +2 -0
  170. package/dist/client/assets/cache-Dr0why2k.js +2 -0
  171. package/dist/client/assets/check-DjgFiBxb.js +1 -0
  172. package/dist/client/assets/chevron-down-BGk5qoEw.js +1 -0
  173. package/dist/client/assets/chevron-right-XiIHsk4m.js +1 -0
  174. package/dist/client/assets/chunk-T65CQEWV-CrzwSeEt.js +1 -0
  175. package/dist/client/assets/chunk-YOZR3KYS-Bet8khjg.js +47 -0
  176. package/dist/client/assets/clipboard-e3fSpeo7.js +1 -0
  177. package/dist/client/assets/code-screen-DrKinCyh.css +1 -0
  178. package/dist/client/assets/code-xml-B6jOCM4V.js +1 -0
  179. package/dist/client/assets/collapsed-strip-Dz-of2SM.css +1 -0
  180. package/dist/client/assets/colors-BtO5_zlx.js +1 -0
  181. package/dist/client/assets/console-B1IBqLI_.css +1 -0
  182. package/dist/client/assets/content-BDt9VBPk.js +1 -0
  183. package/dist/client/assets/content-BIXf4cKR.js +1 -0
  184. package/dist/client/assets/content-BLm0NBJM.js +1 -0
  185. package/dist/client/assets/content-C2EwTb2y.js +1 -0
  186. package/dist/client/assets/content-C5UbLsDF.js +1 -0
  187. package/dist/client/assets/content-CHU0wwA3.css +1 -0
  188. package/dist/client/assets/content-CR3vdrYY.js +1 -0
  189. package/dist/client/assets/content-CSPVmo2s.js +1 -0
  190. package/dist/client/assets/content-C_FGqx1X.js +1 -0
  191. package/dist/client/assets/content-CvlVUOG8.js +1 -0
  192. package/dist/client/assets/content-D5kJmfgl.js +1 -0
  193. package/dist/client/assets/content-DTpQsomG.js +1 -0
  194. package/dist/client/assets/content-DikVsqLf.js +1 -0
  195. package/dist/client/assets/content-DlUe5Ono.js +1 -0
  196. package/dist/client/assets/content-GIBv_55n.js +1 -0
  197. package/dist/client/assets/content-Q2oclDzi.js +1 -0
  198. package/dist/client/assets/context-budget-CbB4BDcO.js +1 -0
  199. package/dist/client/assets/conversation-icons-IIG5ha6D.js +1 -0
  200. package/dist/client/assets/conversation-model-B47vYmWN.js +1 -0
  201. package/dist/client/assets/conversation-motion-features-BdAONVls.js +1 -0
  202. package/dist/client/assets/conversation-prefs-DNre-Lcx.js +1 -0
  203. package/dist/client/assets/copy-CQGYbxdu.js +1 -0
  204. package/dist/client/assets/createLucideIcon-OpA4Amw5.js +1 -0
  205. package/dist/client/assets/ctx-panel-B4s49N9e.css +1 -0
  206. package/dist/client/assets/discover-C1YwpBDE.js +2 -0
  207. package/dist/client/assets/document-focus-viewer-BSC_JwVE.css +1 -0
  208. package/dist/client/assets/embed-entry-BAcGL3g9.js +2 -0
  209. package/dist/client/assets/external-link-CXBytO9o.js +1 -0
  210. package/dist/client/assets/eye-0PvebX_a.js +1 -0
  211. package/dist/client/assets/file-text-BODxCjcz.js +1 -0
  212. package/dist/client/assets/flight-observe-GFg9L8ft.css +1 -0
  213. package/dist/client/assets/follow-route-BvcGtBIL.js +1 -0
  214. package/dist/client/assets/fx-z37u1o2z.js +1 -0
  215. package/dist/client/assets/gestures-CcwOTu8C.js +1 -0
  216. package/dist/client/assets/harnesses-screen-DBZoTZz8.css +1 -0
  217. package/dist/client/assets/home-live-action-B22u89j7.js +1 -0
  218. package/dist/client/assets/home-moving-signal-CAa0V91u.css +1 -0
  219. package/dist/client/assets/home-moving-signal-CK147hxn.js +1 -0
  220. package/dist/client/assets/home-now-card-BgvNWuea.js +1 -0
  221. package/dist/client/assets/home-now-card-nano-BcjnOU9H.js +1 -0
  222. package/dist/client/assets/hooks-B6y_O2FB.js +2 -0
  223. package/dist/client/assets/hooks-D6NI15f6.css +1 -0
  224. package/dist/client/assets/inbox-thread-redesign-Bz4FjWzr.css +1 -0
  225. package/dist/client/assets/index-BWHgHrtv.js +1 -0
  226. package/dist/client/assets/index-BcuhqXLe.js +1 -0
  227. package/dist/client/assets/index-CJXzfjo9.js +1 -0
  228. package/dist/client/assets/index-CvF09yvf.css +1 -0
  229. package/dist/client/assets/index-DMiGbrBt.js +10 -0
  230. package/dist/client/assets/index-DQPvraRS.js +1 -0
  231. package/dist/client/assets/index-DxGoC5l5.css +1 -0
  232. package/dist/client/assets/inspector-panel-DPoCWxKs.js +2 -0
  233. package/dist/client/assets/keyboard-nav-2kv_tGUS.js +1 -0
  234. package/dist/client/assets/knowledge-search-CVxQwxPn.js +1 -0
  235. package/dist/client/assets/knowledge-search-DjrQdiiW.css +1 -0
  236. package/dist/client/assets/lane-ask-display-B6iCAVcd.js +18 -0
  237. package/dist/client/assets/lane-edit-display-C_Aujldz.js +9 -0
  238. package/dist/client/assets/lane-observe-D0rfKDnU.js +7 -0
  239. package/dist/client/assets/lane-roster-store-D8x1jac2.js +1 -0
  240. package/dist/client/assets/lane-tool-detail-0WhMf4Vj.js +9 -0
  241. package/dist/client/assets/left-Bk3XnxPD.css +1 -0
  242. package/dist/client/assets/left-C--GiIh8.js +2 -0
  243. package/dist/client/assets/left-CAaRBK9S.css +1 -0
  244. package/dist/client/assets/left-CCoobxPS.css +1 -0
  245. package/dist/client/assets/left-Cj7Rt89X.js +1 -0
  246. package/dist/client/assets/left-CpNEtFEg.js +1 -0
  247. package/dist/client/assets/left-CzXAuK_t.js +2 -0
  248. package/dist/client/assets/left-agents-Bo9sO1by.js +1 -0
  249. package/dist/client/assets/left-bN4PCAXa.js +1 -0
  250. package/dist/client/assets/left-default-DV9GdvYi.js +1 -0
  251. package/dist/client/assets/left-jYYGAOYD.js +1 -0
  252. package/dist/client/assets/left-lanes-D0l_Co7V.js +1 -0
  253. package/dist/client/assets/left-mission-Ci7zREkQ.js +1 -0
  254. package/dist/client/assets/left-mission-DSenPIyb.css +1 -0
  255. package/dist/client/assets/left-plan-D4U1uflW.js +2 -0
  256. package/dist/client/assets/library-D-RxGiCw.js +1 -0
  257. package/dist/client/assets/loader-circle-CbHjZsz1.js +1 -0
  258. package/dist/client/assets/local-agents--00gLMqr.js +1 -0
  259. package/dist/client/assets/mentions-jSuTGeet.js +1 -0
  260. package/dist/client/assets/mesh-buckets-CfAukILK.js +1 -0
  261. package/dist/client/assets/mesh-screen-BSDUjrnV.css +1 -0
  262. package/dist/client/assets/mesh-view-store-CWidRbTE.js +1 -0
  263. package/dist/client/assets/message-circle-CG-96zts.js +1 -0
  264. package/dist/client/assets/message-markup-3J9pi3nx.js +15 -0
  265. package/dist/client/assets/message-square-DSaGpjFU.js +1 -0
  266. package/dist/client/assets/message-visibility-kJM8XcSG.js +1 -0
  267. package/dist/client/assets/mission-control-D3ikEPND.css +1 -0
  268. package/dist/client/assets/mission-control-model-C0fByIjm.js +1 -0
  269. package/dist/client/assets/mission-control-store-BlnEhiCq.js +1 -0
  270. package/dist/client/assets/model-Co0zkMIc.js +1 -0
  271. package/dist/client/assets/model-CpAxGuis.js +1 -0
  272. package/dist/client/assets/observe-CuLGD9Zp.js +1 -0
  273. package/dist/client/assets/openAgent-Bjt57GdM.js +1 -0
  274. package/dist/client/assets/openContent-C6XO6kr5.js +1 -0
  275. package/dist/client/assets/operator-attention-BwSPeheT.js +1 -0
  276. package/dist/client/assets/ops-agents-BOYxzPTm.css +1 -0
  277. package/dist/client/assets/ops-atop-BB4B4JdE.css +1 -0
  278. package/dist/client/assets/ops-screen-giu3If_N.css +1 -0
  279. package/dist/client/assets/page-status-DpkedE1F.js +1 -0
  280. package/dist/client/assets/page-status-bar-ByUD7VPM.css +1 -0
  281. package/dist/client/assets/plan-view-D56fneVF.css +1 -0
  282. package/dist/client/assets/plus--b1raV_O.js +1 -0
  283. package/dist/client/assets/profile-CVRziEDA.js +1 -0
  284. package/dist/client/assets/project-overview-helpers-BQTc_Ous.js +1 -0
  285. package/dist/client/assets/projects-inbox-CHyUFQ6w.js +1 -0
  286. package/dist/client/assets/projects-inbox-COZ23dLR.css +1 -0
  287. package/dist/client/assets/radio-Bz8ZePxj.js +1 -0
  288. package/dist/client/assets/refresh-cw-BBmAnCB7.js +1 -0
  289. package/dist/client/assets/repo-diff-C9Qs-bEn.css +1 -0
  290. package/dist/client/assets/resizable-columns-C7ygvLt8.css +1 -0
  291. package/dist/client/assets/resolve-panes-r9B3mpW7.js +1 -0
  292. package/dist/client/assets/resolve-sidebar-context-DcG8xGaB.js +1 -0
  293. package/dist/client/assets/right-BHeiIaty.js +1 -0
  294. package/dist/client/assets/right-BkgKo9VT.js +1 -0
  295. package/dist/client/assets/right-BpEU5jWE.js +1 -0
  296. package/dist/client/assets/right-CRZXoy-X.js +1 -0
  297. package/dist/client/assets/right-ChF_pbPy.js +1 -0
  298. package/dist/client/assets/right-DMoUT3KN.js +1 -0
  299. package/dist/client/assets/right-DjRXbnRP.js +2 -0
  300. package/dist/client/assets/right-T4Ue6EqM.js +1 -0
  301. package/dist/client/assets/right-wzrLXKur.js +1 -0
  302. package/dist/client/assets/rocket-BSNS_rLs.js +1 -0
  303. package/dist/client/assets/router-Bq5dwf78.js +1 -0
  304. package/dist/client/assets/runtime-picker-Bcl5iIX5.js +1 -0
  305. package/dist/client/assets/runtime-picker-vhm0gtLs.css +1 -0
  306. package/dist/client/assets/scope-views-4khCg2_z.css +1 -0
  307. package/dist/client/assets/scope-views-U-ucT9m0.js +1 -0
  308. package/dist/client/assets/scout-voice-CU5c0LGi.js +1 -0
  309. package/dist/client/assets/scoutbot-BTIErYHo.js +3 -0
  310. package/dist/client/assets/scroll-text-D6Pdnar7.js +1 -0
  311. package/dist/client/assets/search-CWfZtOt2.js +1 -0
  312. package/dist/client/assets/secondaryNavConfig-DqUIp0Es.js +1 -0
  313. package/dist/client/assets/secondaryNavConfig-xssF_ubT.css +1 -0
  314. package/dist/client/assets/selection-bridge-16pk1qyG.js +1 -0
  315. package/dist/client/assets/send-horizontal-Bg5-QggH.js +1 -0
  316. package/dist/client/assets/server-CPp4ZJhZ.js +1 -0
  317. package/dist/client/assets/session-catalog-BmoyVTJ_.js +1 -0
  318. package/dist/client/assets/session-table-DZcrKoIH.js +1 -0
  319. package/dist/client/assets/sessionRead-CvFz2RHv.js +1 -0
  320. package/dist/client/assets/sliders-horizontal-1oW76Xc9.js +1 -0
  321. package/dist/client/assets/sparkles-ClfRJQ6w.js +1 -0
  322. package/dist/client/assets/sse-CjIkKo46.js +1 -0
  323. package/dist/client/assets/status-tone-BM_zuRy1.js +1 -0
  324. package/dist/client/assets/surface-activity-B1rgWB1i.js +1 -0
  325. package/dist/client/assets/system-surfaces-redesign-CD26LFc0.css +1 -0
  326. package/dist/client/assets/tail-display-BdyoLvzY.js +2 -0
  327. package/dist/client/assets/tail-events-D19uAGe3.js +1 -0
  328. package/dist/client/assets/terminal-B9AOZQKR.js +1 -0
  329. package/dist/client/assets/terminal-relay-CWbJ1RCW.js +1 -0
  330. package/dist/client/assets/terminal-screen-19jAI0Cw.css +1 -0
  331. package/dist/client/assets/terminal-sessions-D5CIR2OL.js +1 -0
  332. package/dist/client/assets/terminal-takeover-B8UeD9OX.js +1 -0
  333. package/dist/client/assets/text-DsBWV_4k.js +1 -0
  334. package/dist/client/assets/time-DltNTpLl.js +1 -0
  335. package/dist/client/assets/types-B0PlfpKc.js +1 -0
  336. package/dist/client/assets/ui-LM8pS8qE.js +1 -0
  337. package/dist/client/assets/use-conversation-list-Byab41G6.js +1 -0
  338. package/dist/client/assets/use-fleet-active-asks-BIbQx5AS.js +1 -0
  339. package/dist/client/assets/use-reduced-motion-RRBkmVkk.js +1 -0
  340. package/dist/client/assets/useAgentHoverCard-DMrbBif0.js +1 -0
  341. package/dist/client/assets/useContentSecondaryNav-DMl1WNm7.js +1 -0
  342. package/dist/client/assets/usePierreRuntime-wC-yMtBb.js +50 -0
  343. package/dist/client/assets/voice-levels-Dcr3jglk.js +1 -0
  344. package/dist/client/assets/wrench-Bkc_0lKF.js +1 -0
  345. package/dist/client/assets/x-D3GElQbe.js +1 -0
  346. package/dist/client/assets/{xterm-CoGJTxj9.js → xterm-BKR8oAkR.js} +1 -1
  347. package/dist/client/index.html +6 -3
  348. package/dist/drizzle/0003_harsh_meltdown.sql +45 -0
  349. package/dist/drizzle/0004_medical_aaron_stack.sql +40 -0
  350. package/dist/drizzle/0005_wet_shriek.sql +57 -0
  351. package/dist/drizzle/0006_woozy_dark_beast.sql +1 -0
  352. package/dist/drizzle/README.md +7 -0
  353. package/dist/drizzle/meta/0003_snapshot.json +4952 -0
  354. package/dist/drizzle/meta/0004_snapshot.json +5235 -0
  355. package/dist/drizzle/meta/0005_snapshot.json +5599 -0
  356. package/dist/drizzle/meta/0006_snapshot.json +5606 -0
  357. package/dist/drizzle/meta/_journal.json +28 -0
  358. package/dist/main.mjs +24964 -12946
  359. package/dist/node/main.mjs +10212 -195
  360. package/dist/openscout-terminal-relay.mjs +507 -64
  361. package/dist/pairing-runtime-controller.mjs +10909 -5177
  362. package/dist/runtime/base-daemon.mjs +627 -159
  363. package/dist/runtime/broker-daemon.mjs +65060 -30990
  364. package/dist/runtime/broker-process-manager.mjs +247 -54
  365. package/dist/runtime/mesh-discover.mjs +246 -54
  366. package/dist/scout-control-plane-web.mjs +54699 -45309
  367. package/dist/scout-web-server.mjs +54699 -45309
  368. package/package.json +3 -3
  369. package/dist/client/assets/RepoDiffViewer-CTXJvjIL.js +0 -56
  370. package/dist/client/assets/embed-entry-wAEtYUEM.js +0 -1
  371. package/dist/client/assets/index-BK3mRYyN.js +0 -272
  372. package/dist/client/assets/index-Dm1ZQS9G.css +0 -1
@@ -74,33 +74,49 @@ function requestBrokerOverUnixSocket(socketPath, baseUrl, path, options) {
74
74
  if (body !== undefined) {
75
75
  headers["content-length"] = Buffer.byteLength(body).toString();
76
76
  }
77
+ let settled = false;
78
+ const cleanupAbortListener = () => {
79
+ options.signal?.removeEventListener("abort", handleAbort);
80
+ };
81
+ const rejectOnce = (error) => {
82
+ if (settled)
83
+ return;
84
+ settled = true;
85
+ cleanupAbortListener();
86
+ reject(error);
87
+ };
77
88
  const request = httpRequest({
78
89
  socketPath,
79
90
  path: `${url.pathname}${url.search}`,
80
91
  method: options.method ?? (body === undefined ? "GET" : "POST"),
81
92
  headers
82
93
  }, (response) => {
83
- let text = "";
84
- response.setEncoding("utf8");
94
+ const chunks = [];
85
95
  response.on("data", (chunk) => {
86
- text += String(chunk);
96
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
97
+ });
98
+ response.on("aborted", () => {
99
+ rejectOnce(new Error("Scout broker response aborted"));
87
100
  });
101
+ response.on("error", rejectOnce);
88
102
  response.on("end", () => {
89
- options.signal?.removeEventListener("abort", handleAbort);
103
+ if (settled)
104
+ return;
105
+ settled = true;
106
+ cleanupAbortListener();
90
107
  resolve({
91
108
  ok: Boolean(response.statusCode && response.statusCode >= 200 && response.statusCode < 300),
92
109
  status: response.statusCode ?? 0,
93
- text
110
+ text: Buffer.concat(chunks).toString("utf8")
94
111
  });
95
112
  });
96
113
  });
97
114
  const handleAbort = () => {
98
- request.destroy(options.signal?.reason instanceof Error ? options.signal.reason : new Error("Scout broker request aborted"));
115
+ const error = options.signal?.reason instanceof Error ? options.signal.reason : new Error("Scout broker request aborted");
116
+ rejectOnce(error);
117
+ request.destroy(error);
99
118
  };
100
- request.on("error", (error) => {
101
- options.signal?.removeEventListener("abort", handleAbort);
102
- reject(error);
103
- });
119
+ request.on("error", rejectOnce);
104
120
  if (options.signal) {
105
121
  if (options.signal.aborted) {
106
122
  handleAbort();
@@ -177,6 +193,175 @@ async function requestScoutBrokerJsonWithTrace(baseUrl, path, options = {}) {
177
193
  return { value: undefined, trace };
178
194
  }
179
195
 
196
+ // packages/runtime/src/schema-version.ts
197
+ var CONTROL_PLANE_SCHEMA_VERSION = 17;
198
+
199
+ // packages/runtime/src/sqlite-adapter.ts
200
+ import { createRequire } from "module";
201
+
202
+ // packages/runtime/src/runtime-adapters.ts
203
+ function detectRuntimeHost(globalScope = globalThis) {
204
+ return typeof globalScope.Bun === "undefined" ? "node" : "bun";
205
+ }
206
+ function normalizeRuntimeHost(value) {
207
+ const normalized = value?.trim().toLowerCase();
208
+ if (normalized === "bun")
209
+ return "bun";
210
+ if (normalized === "node")
211
+ return "node";
212
+ return null;
213
+ }
214
+ function normalizeRuntimeServiceAdapter(value) {
215
+ const normalized = value?.trim().toLowerCase().replaceAll("_", "-");
216
+ if (normalized === "macos-scoutd" || normalized === "macos-launchd")
217
+ return "macos-scoutd";
218
+ if (normalized === "linux-systemd-user" || normalized === "systemd-user")
219
+ return "linux-systemd-user";
220
+ if (normalized === "headless-foreground" || normalized === "foreground" || normalized === "headless") {
221
+ return "headless-foreground";
222
+ }
223
+ if (normalized === "windows-service")
224
+ return "windows-service";
225
+ return null;
226
+ }
227
+ function defaultServiceAdapterForPlatform(platform = process.platform, env = process.env) {
228
+ const explicit = normalizeRuntimeServiceAdapter(env.OPENSCOUT_SERVICE_ADAPTER);
229
+ if (explicit)
230
+ return explicit;
231
+ if (normalizeRuntimeHost(env.OPENSCOUT_RUNTIME_HOST) === "node") {
232
+ return "headless-foreground";
233
+ }
234
+ if (platform === "darwin")
235
+ return "macos-scoutd";
236
+ if (platform === "linux")
237
+ return "headless-foreground";
238
+ if (platform === "win32")
239
+ return "windows-service";
240
+ return "headless-foreground";
241
+ }
242
+ function planRuntimeAdapters(options = {}) {
243
+ const env = options.env ?? process.env;
244
+ const host = options.host ?? normalizeRuntimeHost(env.OPENSCOUT_RUNTIME_HOST) ?? detectRuntimeHost();
245
+ return {
246
+ host,
247
+ database: host === "bun" ? "bun-sqlite" : "node-sqlite",
248
+ httpServer: host === "bun" ? "bun-serve" : "node-http-ws",
249
+ files: host === "bun" ? "bun-file" : "node-fs",
250
+ process: host === "bun" ? "bun-spawn" : "node-child-process",
251
+ service: defaultServiceAdapterForPlatform(options.platform, env)
252
+ };
253
+ }
254
+
255
+ // packages/runtime/src/sqlite-adapter.ts
256
+ var require2 = createRequire(import.meta.url);
257
+ function controlPlaneSqliteAdapterKind() {
258
+ return planRuntimeAdapters().database;
259
+ }
260
+ function openControlPlaneSqliteDatabase(path, options) {
261
+ return openRuntimeSqliteDatabase(path, options);
262
+ }
263
+ function openRuntimeSqliteDatabase(path, options) {
264
+ const adapter = controlPlaneSqliteAdapterKind();
265
+ if (adapter === "bun-sqlite") {
266
+ const { Database } = require2("bun:sqlite");
267
+ return new Database(path, options);
268
+ }
269
+ const { DatabaseSync } = require2("node:sqlite");
270
+ return new NodeSqliteDatabaseAdapter(new DatabaseSync(path, {
271
+ open: true,
272
+ readOnly: options?.readonly === true
273
+ }));
274
+ }
275
+ function prepareNodeSqliteSql(sql) {
276
+ const numberedParamIndexes = [];
277
+ const normalizedSql = sql.replace(/\?(\d+)/g, (_match, rawIndex) => {
278
+ numberedParamIndexes.push(Number.parseInt(rawIndex, 10) - 1);
279
+ return "?";
280
+ });
281
+ return {
282
+ sql: normalizedSql,
283
+ numberedParamIndexes: numberedParamIndexes.length > 0 ? numberedParamIndexes : null
284
+ };
285
+ }
286
+ function bindNodeSqliteParams(numberedParamIndexes, params) {
287
+ if (!numberedParamIndexes) {
288
+ return params;
289
+ }
290
+ return numberedParamIndexes.map((index) => params[index]);
291
+ }
292
+
293
+ class NodeSqliteStatementAdapter {
294
+ statement;
295
+ numberedParamIndexes;
296
+ constructor(statement, numberedParamIndexes) {
297
+ this.statement = statement;
298
+ this.numberedParamIndexes = numberedParamIndexes;
299
+ }
300
+ all(...params) {
301
+ return this.statement.all(...bindNodeSqliteParams(this.numberedParamIndexes, params));
302
+ }
303
+ get(...params) {
304
+ return this.statement.get(...bindNodeSqliteParams(this.numberedParamIndexes, params)) ?? null;
305
+ }
306
+ run(...params) {
307
+ return this.statement.run(...bindNodeSqliteParams(this.numberedParamIndexes, params));
308
+ }
309
+ }
310
+
311
+ class NodeSqliteDatabaseAdapter {
312
+ database;
313
+ transactionDepth = 0;
314
+ savepointId = 0;
315
+ constructor(database) {
316
+ this.database = database;
317
+ }
318
+ exec(sql) {
319
+ return this.database.exec(sql);
320
+ }
321
+ query(sql) {
322
+ const prepared = prepareNodeSqliteSql(sql);
323
+ return new NodeSqliteStatementAdapter(this.database.prepare(prepared.sql), prepared.numberedParamIndexes);
324
+ }
325
+ close() {
326
+ this.database.close();
327
+ }
328
+ transaction(callback) {
329
+ return (...args) => {
330
+ if (this.transactionDepth > 0) {
331
+ return this.runSavepoint(callback, args);
332
+ }
333
+ this.database.exec("BEGIN IMMEDIATE;");
334
+ this.transactionDepth += 1;
335
+ try {
336
+ const result = callback(...args);
337
+ this.database.exec("COMMIT;");
338
+ return result;
339
+ } catch (error) {
340
+ this.database.exec("ROLLBACK;");
341
+ throw error;
342
+ } finally {
343
+ this.transactionDepth -= 1;
344
+ }
345
+ };
346
+ }
347
+ runSavepoint(callback, args) {
348
+ const savepointName = `openscout_nested_${this.savepointId++}`;
349
+ this.database.exec(`SAVEPOINT ${savepointName};`);
350
+ this.transactionDepth += 1;
351
+ try {
352
+ const result = callback(...args);
353
+ this.database.exec(`RELEASE SAVEPOINT ${savepointName};`);
354
+ return result;
355
+ } catch (error) {
356
+ this.database.exec(`ROLLBACK TO SAVEPOINT ${savepointName};`);
357
+ this.database.exec(`RELEASE SAVEPOINT ${savepointName};`);
358
+ throw error;
359
+ } finally {
360
+ this.transactionDepth -= 1;
361
+ }
362
+ }
363
+ }
364
+
180
365
  // packages/runtime/src/support-paths.ts
181
366
  import { homedir } from "os";
182
367
  import { join } from "path";
@@ -787,7 +972,7 @@ var SCOUT_HOST_PROBE_SCHEMA_VERSIONS = {
787
972
  "git.mergeBase": 1,
788
973
  "git.logLastCommitUnix": 1,
789
974
  "git.worktreeListPorcelain": 1,
790
- "tmux.sessions": 1,
975
+ "tmux.sessions": 2,
791
976
  "tmux.panes": 1,
792
977
  "zellij.sessions": 1,
793
978
  "ps.runtime": 1,
@@ -1546,6 +1731,8 @@ var tailscaleStatusProbe = defineProbe({
1546
1731
 
1547
1732
  // packages/runtime/src/tailscale.ts
1548
1733
  var DEFAULT_TAILSCALE_STATUS_TIMEOUT_MS2 = 1500;
1734
+ var SYNC_TAILSCALE_STATUS_CACHE_MS = 30000;
1735
+ var syncStatusCache = null;
1549
1736
  function readStatusJsonFromFileSync(filePath) {
1550
1737
  const raw = readFileSync2(filePath, "utf8");
1551
1738
  return parseTailscaleStatusJson(raw);
@@ -1570,6 +1757,15 @@ function readStatusJsonSync(env = process.env) {
1570
1757
  if (!tailscaleBin) {
1571
1758
  return null;
1572
1759
  }
1760
+ const cacheKey = [
1761
+ tailscaleBin,
1762
+ env.OPENSCOUT_TAILSCALE_AUTO_HOSTS ?? "",
1763
+ env.OPENSCOUT_TAILSCALE_STATUS_TIMEOUT_MS ?? ""
1764
+ ].join("\x00");
1765
+ const cached = syncStatusCache;
1766
+ if (env === process.env && cached?.key === cacheKey && Date.now() - cached.at < SYNC_TAILSCALE_STATUS_CACHE_MS) {
1767
+ return cached.value;
1768
+ }
1573
1769
  try {
1574
1770
  const stdout = execFileSync(tailscaleBin, ["status", "--json"], {
1575
1771
  encoding: "utf8",
@@ -1577,8 +1773,13 @@ function readStatusJsonSync(env = process.env) {
1577
1773
  timeout: statusTimeoutMs2(env),
1578
1774
  windowsHide: true
1579
1775
  });
1580
- return parseTailscaleStatusJson(stdout);
1776
+ const value = parseTailscaleStatusJson(stdout);
1777
+ if (env === process.env)
1778
+ syncStatusCache = { key: cacheKey, at: Date.now(), value };
1779
+ return value;
1581
1780
  } catch {
1781
+ if (env === process.env)
1782
+ syncStatusCache = { key: cacheKey, at: Date.now(), value: null };
1582
1783
  return null;
1583
1784
  }
1584
1785
  }
@@ -1798,44 +1999,6 @@ function findExecutableOnSearchPath(name, env) {
1798
1999
  return null;
1799
2000
  }
1800
2001
 
1801
- // packages/runtime/src/runtime-adapters.ts
1802
- function normalizeRuntimeHost(value) {
1803
- const normalized = value?.trim().toLowerCase();
1804
- if (normalized === "bun")
1805
- return "bun";
1806
- if (normalized === "node")
1807
- return "node";
1808
- return null;
1809
- }
1810
- function normalizeRuntimeServiceAdapter(value) {
1811
- const normalized = value?.trim().toLowerCase().replaceAll("_", "-");
1812
- if (normalized === "macos-scoutd" || normalized === "macos-launchd")
1813
- return "macos-scoutd";
1814
- if (normalized === "linux-systemd-user" || normalized === "systemd-user")
1815
- return "linux-systemd-user";
1816
- if (normalized === "headless-foreground" || normalized === "foreground" || normalized === "headless") {
1817
- return "headless-foreground";
1818
- }
1819
- if (normalized === "windows-service")
1820
- return "windows-service";
1821
- return null;
1822
- }
1823
- function defaultServiceAdapterForPlatform(platform = process.platform, env = process.env) {
1824
- const explicit = normalizeRuntimeServiceAdapter(env.OPENSCOUT_SERVICE_ADAPTER);
1825
- if (explicit)
1826
- return explicit;
1827
- if (normalizeRuntimeHost(env.OPENSCOUT_RUNTIME_HOST) === "node") {
1828
- return "headless-foreground";
1829
- }
1830
- if (platform === "darwin")
1831
- return "macos-scoutd";
1832
- if (platform === "linux")
1833
- return "headless-foreground";
1834
- if (platform === "win32")
1835
- return "windows-service";
1836
- return "headless-foreground";
1837
- }
1838
-
1839
2002
  // packages/runtime/src/broker-process-manager.ts
1840
2003
  function isTmpPath(p) {
1841
2004
  return /^\/(?:private\/)?tmp\//.test(p);
@@ -2001,12 +2164,12 @@ function resolveBrokerServiceLabel(mode) {
2001
2164
  }
2002
2165
  switch (mode) {
2003
2166
  case "prod":
2004
- return "com.openscout";
2167
+ return "app.openscout";
2005
2168
  case "custom":
2006
- return "com.openscout.custom";
2169
+ return "app.openscout.custom";
2007
2170
  case "dev":
2008
2171
  default:
2009
- return "dev.openscout";
2172
+ return "app.openscout";
2010
2173
  }
2011
2174
  }
2012
2175
  function resolveBrokerServiceConfig() {
@@ -2173,13 +2336,16 @@ function readRuntimeFreshness(value) {
2173
2336
  state,
2174
2337
  intentional: readBoolean(value.intentional) ?? false,
2175
2338
  basis,
2339
+ reasonCode: readString2(value.reasonCode) ?? null,
2176
2340
  artifactCommit: readString2(value.artifactCommit) ?? null,
2177
2341
  expectedCommit: readString2(value.expectedCommit) ?? null,
2178
2342
  pin: readString2(value.pin) ?? null,
2179
2343
  pinReason: readString2(value.pinReason) ?? null,
2180
2344
  manifestPath: readString2(value.manifestPath) ?? null,
2181
2345
  version: readString2(value.version) ?? null,
2182
- builtAt: readString2(value.builtAt) ?? null,
2346
+ actualBuiltAt: readString2(value.actualBuiltAt) ?? readString2(value.builtAt) ?? null,
2347
+ expectedBuiltAt: readString2(value.expectedBuiltAt) ?? null,
2348
+ builtAt: readString2(value.builtAt) ?? readString2(value.actualBuiltAt) ?? null,
2183
2349
  sourceDirty: readBoolean(value.sourceDirty) ?? null,
2184
2350
  detail
2185
2351
  };
@@ -2309,7 +2475,30 @@ function spawnScoutdJson(scoutdPath, command, env, timeoutMs) {
2309
2475
  });
2310
2476
  });
2311
2477
  }
2478
+ var SCHEMA_GUARDED_SERVICE_COMMANDS = new Set([
2479
+ "install",
2480
+ "start",
2481
+ "restart"
2482
+ ]);
2483
+ function assertBrokerServiceSchemaCompatible(config) {
2484
+ const databasePath = join5(config.controlHome, "control-plane.sqlite");
2485
+ if (!existsSync5(databasePath))
2486
+ return;
2487
+ const database = openControlPlaneSqliteDatabase(databasePath, { readonly: true });
2488
+ try {
2489
+ const row = database.query("PRAGMA user_version").get();
2490
+ const databaseVersion = row?.user_version ?? 0;
2491
+ if (databaseVersion > CONTROL_PLANE_SCHEMA_VERSION) {
2492
+ throw new Error(`Refusing to change the Scout service: candidate runtime schema v${CONTROL_PLANE_SCHEMA_VERSION} ` + `is older than control-plane database schema v${databaseVersion}. ` + "The existing service was left untouched. Update or rebase this checkout before restarting Scout.");
2493
+ }
2494
+ } finally {
2495
+ database.close?.();
2496
+ }
2497
+ }
2312
2498
  async function runScoutdServiceCommand(command, config, timeoutMs = SCOUTD_DEFAULT_TIMEOUT_MS, runScoutdJson = spawnScoutdJson) {
2499
+ if (SCHEMA_GUARDED_SERVICE_COMMANDS.has(command)) {
2500
+ assertBrokerServiceSchemaCompatible(config);
2501
+ }
2313
2502
  const scoutd = resolveScoutdCommand(config);
2314
2503
  if (!scoutd) {
2315
2504
  throw new Error("Unable to locate scoutd for broker service management. Build scoutd with `npm run scoutd:build`, install a package that includes scoutd, or set OPENSCOUT_SCOUTD_BIN.");
@@ -2544,6 +2733,9 @@ function formatBrokerServiceStatus(status) {
2544
2733
  ];
2545
2734
  if (status.runtimeFreshness) {
2546
2735
  lines.push(`runtime freshness detail: ${status.runtimeFreshness.detail}`);
2736
+ if (status.runtimeFreshness.reasonCode) {
2737
+ lines.push(`runtime freshness reason: ${status.runtimeFreshness.reasonCode}`);
2738
+ }
2547
2739
  }
2548
2740
  if (status.health.socketFallbackError) {
2549
2741
  lines.push(`socket fallback: ${status.health.socketFallbackError}`);