@openscout/scout 0.2.91 → 0.2.92

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 (283) hide show
  1. package/README.md +12 -4
  2. package/bin/scoutd +0 -0
  3. package/dist/build-manifest.json +3 -3
  4. package/dist/client/assets/{ActivityScreen-BUeb4ERK.js → ActivityScreen-DkUP7V7M.js} +1 -1
  5. package/dist/client/assets/{AddProjectForm-DtTfn4Zk.js → AddProjectForm-CpyytDf2.js} +1 -1
  6. package/dist/client/assets/{AgentAvatar-CneOa70z.js → AgentAvatar-D8ZtMluU.js} +1 -1
  7. package/dist/client/assets/{AgentConfigurationScreen-CkZ7EjZh.js → AgentConfigurationScreen-BlGI6fuM.js} +1 -1
  8. package/dist/client/assets/{AgentDefinitionsWorkspace-0Y3kqMtv.js → AgentDefinitionsWorkspace-CfaDVCVt.js} +1 -1
  9. package/dist/client/assets/{AgentDetailCard-Dtc02KUO.js → AgentDetailCard-BTiOmh-a.js} +1 -1
  10. package/dist/client/assets/{AgentFloorView-B5raPB_U.js → AgentFloorView-DjNLILLt.js} +1 -1
  11. package/dist/client/assets/{AgentInfoScreen-DFG4ElZD.js → AgentInfoScreen-DG5dlHb_.js} +1 -1
  12. package/dist/client/assets/{AgentLaneCard-BRAkw8YJ.js → AgentLaneCard-lfRNb7JD.js} +1 -1
  13. package/dist/client/assets/{AgentLaneChrome-T8QE5742.js → AgentLaneChrome-Dlwrbq3g.js} +1 -1
  14. package/dist/client/assets/{AgentLaneDetailSheet-C8RYotnv.js → AgentLaneDetailSheet-BzYzBfcW.js} +1 -1
  15. package/dist/client/assets/{AgentLaneSummaryResize-FyYweLo_.js → AgentLaneSummaryResize-6SOEWUnr.js} +1 -1
  16. package/dist/client/assets/AgentLanesEmbedScreen-Crxx1srt.js +1 -0
  17. package/dist/client/assets/{AgentLanesPreflight-Cil3dNwu.js → AgentLanesPreflight-C3uOiOzd.js} +1 -1
  18. package/dist/client/assets/{AgentLanesView-DPfO8MOo.js → AgentLanesView-ChNlmY-F.js} +1 -1
  19. package/dist/client/assets/{AgentLiveActions-DwScaVRF.js → AgentLiveActions-BJ5dIfL3.js} +1 -1
  20. package/dist/client/assets/{AgentSessions-DKoWA0Lm.js → AgentSessions-DpY0htZV.js} +1 -1
  21. package/dist/client/assets/{AgentsConsole-DoBIWGoq.js → AgentsConsole-CHyXrjhm.js} +1 -1
  22. package/dist/client/assets/{AgentsScreen-JuUiSuwY.js → AgentsScreen-BhCjX2lD.js} +1 -1
  23. package/dist/client/assets/AgentsSubnav-az_VDkri.js +1 -0
  24. package/dist/client/assets/{AtopView-ycxMrRwp.js → AtopView-BjjPM8OX.js} +1 -1
  25. package/dist/client/assets/{BackToPicker-D6WgIDb-.js → BackToPicker-D1LV6Cqp.js} +1 -1
  26. package/dist/client/assets/{BriefingDetailScreen-Zw-taW1s.js → BriefingDetailScreen-B7qJ90Np.js} +1 -1
  27. package/dist/client/assets/{BriefingsScreen-BerYOoWS.js → BriefingsScreen-CW6N829d.js} +1 -1
  28. package/dist/client/assets/{BrokerMetadataPanel-Cu93j-Ga.js → BrokerMetadataPanel-BhjECqOK.js} +1 -1
  29. package/dist/client/assets/{BrokerScreen-CeN90URH.js → BrokerScreen-X3z50712.js} +1 -1
  30. package/dist/client/assets/{ChatCollapsedStrip-DdKyMSEM.js → ChatCollapsedStrip-DNR9osDy.js} +1 -1
  31. package/dist/client/assets/{CodeDiffPane-BjCOBLze.js → CodeDiffPane-Bx_2VAzv.js} +1 -1
  32. package/dist/client/assets/{CodeProjectPicker-NSGdCaK0.js → CodeProjectPicker-C1yOJKvs.js} +1 -1
  33. package/dist/client/assets/{CodeScreen-CA9Sq6Dx.js → CodeScreen-CIKK1LcZ.js} +1 -1
  34. package/dist/client/assets/{ContextMenu-DnFcmfMR.js → ContextMenu-CHIuVKz7.js} +1 -1
  35. package/dist/client/assets/{ConversationComposer-CjRXFkvY.js → ConversationComposer-Bf7Ga_49.js} +1 -1
  36. package/dist/client/assets/{ConversationFeedRows-CgRTIpAv.js → ConversationFeedRows-Cm1Lgo43.js} +1 -1
  37. package/dist/client/assets/{ConversationHeader-CRmdtuL7.js → ConversationHeader-B_GXrKR0.js} +1 -1
  38. package/dist/client/assets/{ConversationPanels-DCkcLIHk.js → ConversationPanels-BTBbEvrP.js} +2 -2
  39. package/dist/client/assets/{ConversationScreen-Br0QQ3xo.js → ConversationScreen-B3l2m3JI.js} +1 -1
  40. package/dist/client/assets/{ConversationStatus-BJ1CMbAv.js → ConversationStatus-BqhUHD85.js} +1 -1
  41. package/dist/client/assets/{DataTable-Dzqiaha4.js → DataTable-CJbbgBdA.js} +1 -1
  42. package/dist/client/assets/{DispatchAftermath-B0WMg_z3.js → DispatchAftermath-BDA9CrOd.js} +1 -1
  43. package/dist/client/assets/{DocumentFocusViewer-CZVVIAD5.js → DocumentFocusViewer-B9vodVmG.js} +1 -1
  44. package/dist/client/assets/{EmbeddableSurfacesLab-C3a7hJWO.js → EmbeddableSurfacesLab-BdsYRDky.js} +1 -1
  45. package/dist/client/assets/{EmptyState-CYNJZMrZ.js → EmptyState-BRY5jTpz.js} +1 -1
  46. package/dist/client/assets/{FileViewerPane-Fwt8_KmD.js → FileViewerPane-9Bveqm9c.js} +1 -1
  47. package/dist/client/assets/{FleetSearch-Dsi_l2KW.js → FleetSearch-Bj9SCl2f.js} +1 -1
  48. package/dist/client/assets/{FlightObserveScreen-g_tiGmvz.js → FlightObserveScreen-BVMdsiCC.js} +1 -1
  49. package/dist/client/assets/{FollowScreen-Bb_rcrzi.js → FollowScreen-BifwHWOV.js} +1 -1
  50. package/dist/client/assets/{HarnessMark-DrE57dUq.js → HarnessMark-BPAphNjx.js} +1 -1
  51. package/dist/client/assets/{HarnessesScreen-CAsCJ_tG.js → HarnessesScreen-fMnbnrD4.js} +1 -1
  52. package/dist/client/assets/{HerdrSession-1eVu9Owj.js → HerdrSession-BujfGzrP.js} +1 -1
  53. package/dist/client/assets/{HomeHero-W445QrG1.js → HomeHero-BgM6S39l.js} +1 -1
  54. package/dist/client/assets/{KnowledgeSearchInspector-CbPVg3fr.js → KnowledgeSearchInspector-B4ZY24xE.js} +1 -1
  55. package/dist/client/assets/{KnowledgeSearchScreen-C1lN1xJk.js → KnowledgeSearchScreen-Ch_WENUC.js} +1 -1
  56. package/dist/client/assets/{LaneToolHoverCard-BkBcDYm-.js → LaneToolHoverCard-B7KdvQvf.js} +1 -1
  57. package/dist/client/assets/{LaneTraceDetailSheet-CzTd44rf.js → LaneTraceDetailSheet-H3AnN-vN.js} +1 -1
  58. package/dist/client/assets/{LaneTraceEventFocus-BmMmPTyJ.js → LaneTraceEventFocus-mkMw2wJU.js} +1 -1
  59. package/dist/client/assets/{MeshCanvas-DwkjsiJ5.js → MeshCanvas-CpKcWxKy.js} +1 -1
  60. package/dist/client/assets/{MeshCanvasMinimap-vmCpU1sD.js → MeshCanvasMinimap-C9IoGHbe.js} +1 -1
  61. package/dist/client/assets/{MeshScreen-CkMepUpT.js → MeshScreen-48QkJSDI.js} +1 -1
  62. package/dist/client/assets/{MeshTopologyView-BD2xLE2C.js → MeshTopologyView-DFzr0IZM.js} +2 -2
  63. package/dist/client/assets/{MessageComposerSuggestions-qbalTne_.js → MessageComposerSuggestions-FdVHnT_q.js} +1 -1
  64. package/dist/client/assets/{MessagesScreen-C8UynyLC.js → MessagesScreen-BMOOfbWX.js} +1 -1
  65. package/dist/client/assets/{MissionContextRail-D5MEP2f4.js → MissionContextRail-Y8QxUZGE.js} +1 -1
  66. package/dist/client/assets/{MissionControlView-K_I7eftL.js → MissionControlView-BpsHKu1F.js} +1 -1
  67. package/dist/client/assets/{MissionFocusOverlay-CWKLdUKG.js → MissionFocusOverlay-BPnAEA3F.js} +1 -1
  68. package/dist/client/assets/{MissionLeftAgentRow-ByGrNAcs.js → MissionLeftAgentRow-iOZ6ds9L.js} +1 -1
  69. package/dist/client/assets/{MissionLogPane-ZwHJ137T.js → MissionLogPane-B0csI89E.js} +1 -1
  70. package/dist/client/assets/{NewAgentModal-Do9aVvan.js → NewAgentModal-DBHJR9Qm.js} +1 -1
  71. package/dist/client/assets/{NewChatComposer-DKlNX1UA.js → NewChatComposer-Hd7pI5Ac.js} +1 -1
  72. package/dist/client/assets/{NewChatOrigin-DXPvX-hh.js → NewChatOrigin-DmuJ32wa.js} +1 -1
  73. package/dist/client/assets/{ObserveEmbedScreen-Dghsq2on.js → ObserveEmbedScreen-DyArn7Id.js} +1 -1
  74. package/dist/client/assets/{ObserveTextFlow-DWNlmTVm.js → ObserveTextFlow-CkMrtT8s.js} +2 -2
  75. package/dist/client/assets/{ObservedTopologyPanel-BlmGoxCE.js → ObservedTopologyPanel-CaSZZP05.js} +1 -1
  76. package/dist/client/assets/{OpenScoutAppShell-DDqQi-oe.js → OpenScoutAppShell-BtlKkiuF.js} +1 -1
  77. package/dist/client/assets/{OpsAgentsView-Bn_fGBdo.js → OpsAgentsView-CnqrwbC2.js} +1 -1
  78. package/dist/client/assets/OpsScreen-DOlmlVkP.js +1 -0
  79. package/dist/client/assets/OpsSubnav-Dj3ShAKv.js +1 -0
  80. package/dist/client/assets/{PlanView-B6gKo543.js → PlanView-BLGdWDx6.js} +1 -1
  81. package/dist/client/assets/ProjectAgentProfile-Dv1sVnQl.js +1 -0
  82. package/dist/client/assets/{ProjectAgentProfileBar-C5QWwZCn.js → ProjectAgentProfileBar-BLVg5EeA.js} +1 -1
  83. package/dist/client/assets/{ProjectAgentProfileHero-DC7Dd8VL.js → ProjectAgentProfileHero-0-GDhsPT.js} +1 -1
  84. package/dist/client/assets/{ProjectsInbox-DCLrDmj1.js → ProjectsInbox-B3DpAI5b.js} +1 -1
  85. package/dist/client/assets/{ProjectsRail-C4hiXYSb.js → ProjectsRail-BDl7U9Jq.js} +1 -1
  86. package/dist/client/assets/ProjectsScreen-Dl2FcGrR.js +1 -0
  87. package/dist/client/assets/{ProjectsThreadAside-DYmL2dCY.js → ProjectsThreadAside-BcGC5mHE.js} +1 -1
  88. package/dist/client/assets/{Provider-p-xuaAoE.js → Provider-cJCdHAxu.js} +1 -1
  89. package/dist/client/assets/{RailRow-bRkkXIpR.js → RailRow-CLcVmywd.js} +1 -1
  90. package/dist/client/assets/{RawSessionsTable-B7WKmXrk.js → RawSessionsTable-DBto4Ts-.js} +1 -1
  91. package/dist/client/assets/{RealtimeVoiceScreen-BzP3BQq9.js → RealtimeVoiceScreen-DXEU5v3g.js} +1 -1
  92. package/dist/client/assets/{RepoDiffEmbedScreen-xjzjcJ_c.js → RepoDiffEmbedScreen-BCDXFE3D.js} +1 -1
  93. package/dist/client/assets/{RepoDiffPageScreen-DRzIY-dk.js → RepoDiffPageScreen-m62FiWXC.js} +1 -1
  94. package/dist/client/assets/{RepoDiffViewer-CNDp01KM.js → RepoDiffViewer-PaNeZMhJ.js} +1 -1
  95. package/dist/client/assets/RepoDiffViewerLazy-CWE5GxMP.js +2 -0
  96. package/dist/client/assets/{ReposScreen-CpaLC_NU.js → ReposScreen-Cksv1cAD.js} +1 -1
  97. package/dist/client/assets/{ScoutDeckSurface-DkpZ-0DH.js → ScoutDeckSurface-BCjPl7C4.js} +1 -1
  98. package/dist/client/assets/{ScoutSurface-BENBUt5-.js → ScoutSurface-CkgT7A-c.js} +1 -1
  99. package/dist/client/assets/{ScoutbotBroadcastChip-CGZyxS5H.js → ScoutbotBroadcastChip-DkiRCHuK.js} +1 -1
  100. package/dist/client/assets/{ScoutbotFxLab-Bk2ZsfPp.js → ScoutbotFxLab-D-kV5j4T.js} +1 -1
  101. package/dist/client/assets/{ScoutbotRealtimeVoiceCall-n63LdBZs.js → ScoutbotRealtimeVoiceCall-1ixiEn1L.js} +1 -1
  102. package/dist/client/assets/{SecondaryNav-B4IsujYh.js → SecondaryNav-_wyKjwNf.js} +1 -1
  103. package/dist/client/assets/{SessionEmbedScreen-CPfH-jqN.js → SessionEmbedScreen-CJZmIBV7.js} +1 -1
  104. package/dist/client/assets/{SessionObserve-B-SkP3tu.js → SessionObserve-yYA8Gy5s.js} +1 -1
  105. package/dist/client/assets/{SessionObserveEvidence-CF5jnH3-.js → SessionObserveEvidence-cHdjYOJe.js} +1 -1
  106. package/dist/client/assets/{SessionRefScreen-C-4jjmVG.js → SessionRefScreen-OkTY7Szg.js} +1 -1
  107. package/dist/client/assets/SessionsScreen-B-GFjxIA.js +1 -0
  108. package/dist/client/assets/{SettingsDrawer-DATxwZrn.js → SettingsDrawer-Co11RFX0.js} +1 -1
  109. package/dist/client/assets/{SettingsScreen-Bu53X7J_.js → SettingsScreen-Cn09nq5_.js} +1 -1
  110. package/dist/client/assets/{ShikiPane-DH8yYDks.js → ShikiPane-dBS9hD-z.js} +1 -1
  111. package/dist/client/assets/{SlidePanel-RFXJpfUa.js → SlidePanel-CH-3-8_2.js} +1 -1
  112. package/dist/client/assets/{SpriteAvatar-CEYdCzem.js → SpriteAvatar-DS6Tmyua.js} +1 -1
  113. package/dist/client/assets/{StatusPill-9uy70ttd.js → StatusPill-C8m9ZymF.js} +1 -1
  114. package/dist/client/assets/{TailView-6bIrgdxN.js → TailView-B0BSopPs.js} +1 -1
  115. package/dist/client/assets/{Terminal-BI6km7H4.js → Terminal-U8gjIdm3.js} +1 -1
  116. package/dist/client/assets/{TerminalEmbedScreen-D4JOWwtm.js → TerminalEmbedScreen-CTmdE7us.js} +1 -1
  117. package/dist/client/assets/{TextDocumentSurface-BcP9vvji.js → TextDocumentSurface-BWJCGBZf.js} +1 -1
  118. package/dist/client/assets/{TmuxPeek-IaWqCgyJ.js → TmuxPeek-B4QdHbGm.js} +1 -1
  119. package/dist/client/assets/{VoicePermissionsPanel-C80iZxgy.js → VoicePermissionsPanel-Dd4ITJy_.js} +1 -1
  120. package/dist/client/assets/{WorkDetailScreen-CweZ6fEd.js → WorkDetailScreen-mJs0mb99.js} +1 -1
  121. package/dist/client/assets/{WorkFilesViewer-Dy_-06iI.js → WorkFilesViewer-ODzLXKxj.js} +1 -1
  122. package/dist/client/assets/{activity-DS0u0Itf.js → activity-CC8JzJNH.js} +1 -1
  123. package/dist/client/assets/{addon-fit-CN888B3D.js → addon-fit-CaZ-uLrg.js} +1 -1
  124. package/dist/client/assets/{addon-webgl-CoAnanQS.js → addon-webgl-B8utL3bM.js} +1 -1
  125. package/dist/client/assets/{agent-essentials-CuK4G_zS.js → agent-essentials-B3wcxg_v.js} +1 -1
  126. package/dist/client/assets/{arc.es-BET9ev6q.js → arc.es-uFv9UrHn.js} +1 -1
  127. package/dist/client/assets/{arrow-down-DxxPnPwh.js → arrow-down-w1HPzDSE.js} +1 -1
  128. package/dist/client/assets/{arrow-left-CXDkJuCg.js → arrow-left-B-3GJ7ct.js} +1 -1
  129. package/dist/client/assets/{arrow-up-right-Bj8RjSqW.js → arrow-up-right-G6bJXxhK.js} +1 -1
  130. package/dist/client/assets/{bot-BSGSicKC.js → bot-DzCOGKi6.js} +1 -1
  131. package/dist/client/assets/{check-BfA0T8UD.js → check-BX8nRgop.js} +1 -1
  132. package/dist/client/assets/{chevron-down-BVg09D6U.js → chevron-down-B3VVRJcV.js} +1 -1
  133. package/dist/client/assets/{chevron-right-CaEwYkxE.js → chevron-right-BYMV1511.js} +1 -1
  134. package/dist/client/assets/{chunk-HRAB3GC3-HhKwnZCi.js → chunk-HRAB3GC3-dRd2eQMJ.js} +1 -1
  135. package/dist/client/assets/{chunk-JTPDIGGW-DX2eTIQ_.js → chunk-JTPDIGGW-BjX67kHU.js} +3 -3
  136. package/dist/client/assets/{chunk-T65CQEWV-D-bOfuCH.js → chunk-T65CQEWV-kP6nJjkU.js} +1 -1
  137. package/dist/client/assets/{chunk-YOZR3KYS-oS9dlQCI.js → chunk-YOZR3KYS-C13bZPVd.js} +1 -1
  138. package/dist/client/assets/{clock-C3TUL7D7.js → clock-B9ukVaVn.js} +1 -1
  139. package/dist/client/assets/{code-xml-Dbvjk9Kw.js → code-xml-BFc3TMSm.js} +1 -1
  140. package/dist/client/assets/{content-CiOMtgQc.js → content-B8gahuBy.js} +1 -1
  141. package/dist/client/assets/content-BIqX06OQ.js +1 -0
  142. package/dist/client/assets/content-BKDZ6Fxe.js +1 -0
  143. package/dist/client/assets/content-C15Ya-iu.js +1 -0
  144. package/dist/client/assets/content-CDE9tJDF.js +1 -0
  145. package/dist/client/assets/content-CSAfI-PX.js +1 -0
  146. package/dist/client/assets/content-CTF9D60D.js +1 -0
  147. package/dist/client/assets/{content-CJuH5cDP.js → content-CbAGkYQO.js} +1 -1
  148. package/dist/client/assets/content-CtqLJOVp.js +1 -0
  149. package/dist/client/assets/content-Dvs1KRfo.js +1 -0
  150. package/dist/client/assets/content-DyJdVZjI.js +1 -0
  151. package/dist/client/assets/{content-C2TZOKSE.js → content-Ji7ATaf7.js} +1 -1
  152. package/dist/client/assets/content-eqZXKWcP.js +1 -0
  153. package/dist/client/assets/content-iyyQKwvA.js +1 -0
  154. package/dist/client/assets/content-pDE7Fpb9.js +1 -0
  155. package/dist/client/assets/content-pPSd2dua.js +1 -0
  156. package/dist/client/assets/{conversation-icons-DmC_Ak3z.js → conversation-icons-gpsv650H.js} +1 -1
  157. package/dist/client/assets/conversation-motion-features-DXtKlmuM.js +1 -0
  158. package/dist/client/assets/{copy-C79v_7D-.js → copy-BFmOcWof.js} +1 -1
  159. package/dist/client/assets/{createLucideIcon-DCq_3fQn.js → createLucideIcon-CFBn0Sdk.js} +1 -1
  160. package/dist/client/assets/{discover-IEnbrH8_.js → discover-DKf0aTr_.js} +2 -2
  161. package/dist/client/assets/embed-entry-RlQUTtc4.js +2 -0
  162. package/dist/client/assets/{external-link-Dd8xaveL.js → external-link-B1TI5yIt.js} +1 -1
  163. package/dist/client/assets/{eye-DkU59kfl.js → eye-1J4yOUoG.js} +1 -1
  164. package/dist/client/assets/{file-text-BITQqGtF.js → file-text-DcYSrI4v.js} +1 -1
  165. package/dist/client/assets/{gestures-B5rLNRpi.js → gestures-CcEOV6Sr.js} +1 -1
  166. package/dist/client/assets/{home-moving-signal-Bs635mVw.js → home-moving-signal-Bh2FugbH.js} +1 -1
  167. package/dist/client/assets/{home-now-card-VxlLjg1A.js → home-now-card-ByRH5fFx.js} +1 -1
  168. package/dist/client/assets/{home-now-card-nano-C06GMiwD.js → home-now-card-nano-y1EhBvVL.js} +1 -1
  169. package/dist/client/assets/{hooks-BWiLxTw1.js → hooks-DUZwL3Aq.js} +1 -1
  170. package/dist/client/assets/index-BBznYVWk.css +1 -0
  171. package/dist/client/assets/{index-BTj2MguM.js → index-BTuq-8Iv.js} +1 -1
  172. package/dist/client/assets/index-CmwGCxUk.js +1 -0
  173. package/dist/client/assets/{index-BZovGpDk.js → index-DmFAhGPj.js} +2 -2
  174. package/dist/client/assets/{index-vbaJ8sin.js → index-Dtaswdsh.js} +1 -1
  175. package/dist/client/assets/{inspector-panel-C96HcyK5.js → inspector-panel-DzgS5_Mv.js} +1 -1
  176. package/dist/client/assets/{keyboard-nav-CHo_xmjw.js → keyboard-nav-h1IdakpD.js} +1 -1
  177. package/dist/client/assets/{lane-roster-store-B6ybJlHJ.js → lane-roster-store-71vFgAem.js} +1 -1
  178. package/dist/client/assets/{left-DMJkmJOF.js → left-8NITBvFX.js} +1 -1
  179. package/dist/client/assets/{left-COMAiMfB.js → left-B2HEqrTM.js} +1 -1
  180. package/dist/client/assets/{left-C6Zj3cR4.js → left-CTYUvXbe.js} +1 -1
  181. package/dist/client/assets/{left-BuJ0wJW1.js → left-CwDRT50z.js} +1 -1
  182. package/dist/client/assets/{left-l92tw5Kc.js → left-CxlDLJlw.js} +1 -1
  183. package/dist/client/assets/{left-Ce4WKYPK.js → left-XFXxNd4g.js} +1 -1
  184. package/dist/client/assets/{left-agents-BuSyVNGE.js → left-agents-Ck4Xn-R8.js} +1 -1
  185. package/dist/client/assets/{left-default-DRHywOKX.js → left-default-BeOyS0bR.js} +1 -1
  186. package/dist/client/assets/{left-lanes-4-aUyyrV.js → left-lanes-DZp3jJMo.js} +1 -1
  187. package/dist/client/assets/{left-mission-e849d_Td.js → left-mission-CuKFQ5xL.js} +1 -1
  188. package/dist/client/assets/left-p1hkO6P0.js +1 -0
  189. package/dist/client/assets/{left-plan-MchYwAB_.js → left-plan-3rrFENhp.js} +1 -1
  190. package/dist/client/assets/{library-DygjpA6u.js → library-E--gKzEZ.js} +1 -1
  191. package/dist/client/assets/{loader-circle-B-l2Wj3-.js → loader-circle-d6PKL_KD.js} +1 -1
  192. package/dist/client/assets/{local-agents-Wof5knTJ.js → local-agents-B5pq17tZ.js} +1 -1
  193. package/dist/client/assets/{mentions-BjXfeF7t.js → mentions-agCGDgyA.js} +1 -1
  194. package/dist/client/assets/{mesh-ops-C1gq8zKf.js → mesh-ops-5pZCYptW.js} +1 -1
  195. package/dist/client/assets/{mesh-view-store-B56D3f77.js → mesh-view-store-KJzABIkN.js} +1 -1
  196. package/dist/client/assets/{message-circle-BwVx5X0q.js → message-circle-CJO-pi7b.js} +1 -1
  197. package/dist/client/assets/{message-markup-DlVX-iuc.js → message-markup-CyRDLdOn.js} +1 -1
  198. package/dist/client/assets/{message-square-BnkG6tae.js → message-square-D1hMsMj_.js} +1 -1
  199. package/dist/client/assets/{mission-control-store-CMgIVjLJ.js → mission-control-store-Ce6dOvnZ.js} +1 -1
  200. package/dist/client/assets/{observe-DVHAcIrv.js → observe-BSWVM8YA.js} +1 -1
  201. package/dist/client/assets/{page-status-Bg2hd27j.js → page-status-D2FQLJOX.js} +1 -1
  202. package/dist/client/assets/{paperclip-DblaLD_N.js → paperclip-iZmDMOS5.js} +1 -1
  203. package/dist/client/assets/{plus-BAI0t5g9.js → plus-gZ0T0eBI.js} +1 -1
  204. package/dist/client/assets/{profile-3Q4sUtvJ.js → profile-Dxj3VVOM.js} +1 -1
  205. package/dist/client/assets/{projects-inbox-Da2hYEn6.js → projects-inbox-Dzt_GQDv.js} +1 -1
  206. package/dist/client/assets/{radio-BGtkyCG9.js → radio-RMLfV4EO.js} +1 -1
  207. package/dist/client/assets/{refresh-cw-DtF8xPqX.js → refresh-cw-C4x1x6b_.js} +1 -1
  208. package/dist/client/assets/resolve-panes-C9gF0w4e.js +1 -0
  209. package/dist/client/assets/resolve-sidebar-context-DxbY5RCH.js +1 -0
  210. package/dist/client/assets/{right-Dd2DscRz.js → right-5L7Tn0zG.js} +1 -1
  211. package/dist/client/assets/{right-BU_W1kSH.js → right-CYtkMmRu.js} +1 -1
  212. package/dist/client/assets/{right-CUP-NIDG.js → right-CreoQzPP.js} +1 -1
  213. package/dist/client/assets/{right-c4PAdFYZ.js → right-D-k9Z1Fe.js} +1 -1
  214. package/dist/client/assets/{right-ByptvkVX.js → right-D9xFfy2b.js} +1 -1
  215. package/dist/client/assets/{right-BlR7h0US.js → right-DI7zHADe.js} +1 -1
  216. package/dist/client/assets/{right-BwgwTGGd.js → right-DUbJ3WVc.js} +1 -1
  217. package/dist/client/assets/{right-DmVHd8Xj.js → right-DiybhsiK.js} +1 -1
  218. package/dist/client/assets/{right-Ch_jrNe2.js → right-Jh_1Q88s.js} +1 -1
  219. package/dist/client/assets/{right-B8qg3JdB.js → right-udr1qTJG.js} +1 -1
  220. package/dist/client/assets/{rocket-BWh18pt_.js → rocket-CMM-IdLy.js} +1 -1
  221. package/dist/client/assets/{router-63XV_E7f.js → router-Cn_s9IGH.js} +1 -1
  222. package/dist/client/assets/{runtime-picker-BXKJbLot.js → runtime-picker--IW3cRry.js} +1 -1
  223. package/dist/client/assets/{scope-views-Dm2_-NPi.js → scope-views-BIfMTXU4.js} +1 -1
  224. package/dist/client/assets/{scout-voice-D8Q5sZOL.js → scout-voice-CwbOz6EN.js} +1 -1
  225. package/dist/client/assets/{scroll-text-DZb3mmYo.js → scroll-text-DPPYrqB9.js} +1 -1
  226. package/dist/client/assets/{search-1QMVOxF3.js → search-DAyagUtF.js} +1 -1
  227. package/dist/client/assets/{secondaryNavConfig-c0cz3MkJ.js → secondaryNavConfig-Dw3gS1jR.js} +1 -1
  228. package/dist/client/assets/{selection-bridge-O9C4kGfF.js → selection-bridge-BXw09aRF.js} +1 -1
  229. package/dist/client/assets/{send-horizontal-DbyEkGql.js → send-horizontal-IcG46D2M.js} +1 -1
  230. package/dist/client/assets/{server-Bncn9S7r.js → server-BySujhDV.js} +1 -1
  231. package/dist/client/assets/{session-catalog-DC6BlBBC.js → session-catalog-ClS9xf6i.js} +1 -1
  232. package/dist/client/assets/{session-table-BUPq9Viy.js → session-table-BdpHs1GN.js} +1 -1
  233. package/dist/client/assets/{sliders-horizontal-CMe8Bay1.js → sliders-horizontal-R5pWUUcH.js} +1 -1
  234. package/dist/client/assets/{sparkles-_7cTZsIH.js → sparkles-DJOBD_8l.js} +1 -1
  235. package/dist/client/assets/{sse-Bb0EOcU9.js → sse-CxXt4tqI.js} +1 -1
  236. package/dist/client/assets/{tail-events-C12pfUax.js → tail-events-BdvqZHLr.js} +1 -1
  237. package/dist/client/assets/{terminal-xGf_F3y7.js → terminal-DJPUp_Qn.js} +1 -1
  238. package/dist/client/assets/{terminal-relay-BgfVJXIL.js → terminal-relay-TffuSPGs.js} +1 -1
  239. package/dist/client/assets/{terminal-takeover--05EYhJm.js → terminal-takeover-BOFPRPjR.js} +1 -1
  240. package/dist/client/assets/{use-conversation-list-DWX02INv.js → use-conversation-list-C-dPcjQe.js} +1 -1
  241. package/dist/client/assets/{use-fleet-active-asks-Cnwa4hTK.js → use-fleet-active-asks-BHzeBZSW.js} +1 -1
  242. package/dist/client/assets/{use-mesh-ops-items-BRFm37oY.js → use-mesh-ops-items-KmaauBr_.js} +1 -1
  243. package/dist/client/assets/{use-reduced-motion-C8cWvIZ3.js → use-reduced-motion-CYqhYqHO.js} +1 -1
  244. package/dist/client/assets/{use-scout-dev-flags-FkMreOOb.js → use-scout-dev-flags-BJbw87PK.js} +1 -1
  245. package/dist/client/assets/{useAgentHoverCard-DvPZSJK3.js → useAgentHoverCard-C6o0tlat.js} +1 -1
  246. package/dist/client/assets/useContentSecondaryNav-DjHBrgnS.js +1 -0
  247. package/dist/client/assets/{usePierreRuntime-C8WJ0X3F.js → usePierreRuntime-Cm7-qdm0.js} +1 -1
  248. package/dist/client/assets/{wrench-_tHBGTop.js → wrench-CvRjjByE.js} +1 -1
  249. package/dist/client/assets/{x-CrGUKNRv.js → x-C8ayPBtj.js} +1 -1
  250. package/dist/client/assets/{xterm-Ks-VlLTq.js → xterm-B0ci4Q9a.js} +1 -1
  251. package/dist/client/index.html +2 -2
  252. package/dist/main.mjs +348 -254
  253. package/dist/scout-web-server.mjs +2 -96660
  254. package/package.json +3 -3
  255. package/dist/client/assets/AgentLanesEmbedScreen-Br7cmZVO.js +0 -1
  256. package/dist/client/assets/AgentsSubnav-BV0WAgzf.js +0 -1
  257. package/dist/client/assets/OpsScreen-DHnT-Q9R.js +0 -1
  258. package/dist/client/assets/OpsSubnav-CJRD7MjM.js +0 -1
  259. package/dist/client/assets/ProjectAgentProfile-Be1VOkI4.js +0 -1
  260. package/dist/client/assets/ProjectsScreen-jruZRjgD.js +0 -1
  261. package/dist/client/assets/RepoDiffViewerLazy-b6vjYxez.js +0 -2
  262. package/dist/client/assets/SessionsScreen-HAjFvmIq.js +0 -1
  263. package/dist/client/assets/content-BQuEedeL.js +0 -1
  264. package/dist/client/assets/content-BUae-L_N.js +0 -1
  265. package/dist/client/assets/content-BfG98J1k.js +0 -1
  266. package/dist/client/assets/content-BkVTfkAC.js +0 -1
  267. package/dist/client/assets/content-BsNMos_d.js +0 -1
  268. package/dist/client/assets/content-CCn98eSk.js +0 -1
  269. package/dist/client/assets/content-CYnPp9yo.js +0 -1
  270. package/dist/client/assets/content-CcrUhm4P.js +0 -1
  271. package/dist/client/assets/content-CxuVONeQ.js +0 -1
  272. package/dist/client/assets/content-Dmq9n1_L.js +0 -1
  273. package/dist/client/assets/content-DskHP2NI.js +0 -1
  274. package/dist/client/assets/content-DvvzL2HK.js +0 -1
  275. package/dist/client/assets/content-snCAUbwv.js +0 -1
  276. package/dist/client/assets/conversation-motion-features-DPiGTO21.js +0 -1
  277. package/dist/client/assets/embed-entry-XUPb-AzL.js +0 -2
  278. package/dist/client/assets/index-9as_JTUs.css +0 -1
  279. package/dist/client/assets/index-DiiEQwdc.js +0 -1
  280. package/dist/client/assets/left-DrCbY6ja.js +0 -1
  281. package/dist/client/assets/resolve-panes-D4tlKNCT.js +0 -1
  282. package/dist/client/assets/resolve-sidebar-context-B27lj3Ci.js +0 -1
  283. package/dist/client/assets/useContentSecondaryNav-CNlrhvvx.js +0 -1
package/dist/main.mjs CHANGED
@@ -69325,6 +69325,9 @@ function classifyProcesses(records, expected, now = Date.now()) {
69325
69325
  }
69326
69326
  return { layers, foreign, expected };
69327
69327
  }
69328
+ function readLifecycleTree(expected) {
69329
+ return classifyProcesses(readProcessTable(), expected);
69330
+ }
69328
69331
  function layerProcesses(tree, layers) {
69329
69332
  return layers.flatMap((layer) => tree.layers[layer]);
69330
69333
  }
@@ -99818,7 +99821,7 @@ var init_stdio2 = __esm(() => {
99818
99821
  // ../../apps/desktop/src/shared/product.ts
99819
99822
  var SCOUT_APP_VERSION;
99820
99823
  var init_product = __esm(() => {
99821
- SCOUT_APP_VERSION = process.env.SCOUT_APP_VERSION?.trim() || "0.2.91";
99824
+ SCOUT_APP_VERSION = process.env.SCOUT_APP_VERSION?.trim() || "0.2.92";
99822
99825
  });
99823
99826
 
99824
99827
  // ../../apps/desktop/src/core/mcp/stdio-server-lifecycle.ts
@@ -103879,10 +103882,13 @@ var init_inbox2 = __esm(() => {
103879
103882
  // ../../apps/desktop/src/cli/commands/install.ts
103880
103883
  var exports_install = {};
103881
103884
  __export(exports_install, {
103885
+ selectLatestAppRelease: () => selectLatestAppRelease,
103882
103886
  runInstallCommand: () => runInstallCommand,
103883
103887
  renderInstallCommandHelp: () => renderInstallCommandHelp,
103884
103888
  parseInstallArgs: () => parseInstallArgs,
103885
- findAppDmgAsset: () => findAppDmgAsset
103889
+ findAppDmgAsset: () => findAppDmgAsset,
103890
+ assertPublishedAppRelease: () => assertPublishedAppRelease,
103891
+ appVersionFromReleaseTag: () => appVersionFromReleaseTag
103886
103892
  });
103887
103893
  import { spawnSync as spawnSync8 } from "child_process";
103888
103894
  import { existsSync as existsSync39, mkdtempSync, rmSync as rmSync5, writeFileSync as writeFileSync9 } from "fs";
@@ -103895,11 +103901,12 @@ function renderInstallCommandHelp() {
103895
103901
  "Usage:",
103896
103902
  " scout install # install or update to the latest signed release",
103897
103903
  " scout install --check # report installed vs latest, install nothing",
103898
- " scout install --version <tag> # install a specific release (e.g. v0.2.70)",
103904
+ " scout install --version <tag> # install a specific app release (e.g. app-v0.2.92)",
103899
103905
  " scout install --force # reinstall even if already up to date",
103900
103906
  " scout install --no-restart # do not relaunch OpenScout after installing",
103901
103907
  "",
103902
103908
  "Behavior:",
103909
+ " Requires macOS 26 or later on Apple silicon.",
103903
103910
  " Downloads the signed + notarized OpenScout.dmg from the GitHub release,",
103904
103911
  " installs OpenScout.app (which embeds the menu bar helper) to /Applications,",
103905
103912
  " and clears the Gatekeeper quarantine flag so it opens cleanly.",
@@ -103936,7 +103943,7 @@ function parseInstallArgs(args) {
103936
103943
  if (arg === "--version" || arg === "--tag") {
103937
103944
  const value = args[index2 + 1];
103938
103945
  if (!value || value.startsWith("-")) {
103939
- throw new ScoutCliError(`${arg} requires a release tag (e.g. ${arg} v0.2.70)`);
103946
+ throw new ScoutCliError(`${arg} requires an app release tag (e.g. ${arg} app-v0.2.92)`);
103940
103947
  }
103941
103948
  options.version = value;
103942
103949
  index2 += 1;
@@ -103954,9 +103961,20 @@ function parseInstallArgs(args) {
103954
103961
  }
103955
103962
  return options;
103956
103963
  }
103957
- function stripLeadingV(tag) {
103958
- const trimmed = tag.trim();
103959
- return trimmed.startsWith("v") ? trimmed.slice(1) : trimmed;
103964
+ function appVersionFromReleaseTag(tag) {
103965
+ const match = tag.trim().match(/^app-v(\d+\.\d+\.\d+)$/);
103966
+ if (!match) {
103967
+ throw new ScoutCliError(`invalid OpenScout app release tag: ${tag}`);
103968
+ }
103969
+ return match[1];
103970
+ }
103971
+ function normalizeRequestedAppTag(value) {
103972
+ const trimmed = value.trim();
103973
+ if (/^app-v\d+\.\d+\.\d+$/.test(trimmed))
103974
+ return trimmed;
103975
+ if (/^v?\d+\.\d+\.\d+$/.test(trimmed))
103976
+ return `app-v${trimmed.replace(/^v/, "")}`;
103977
+ throw new ScoutCliError(`invalid OpenScout app version: ${value}`);
103960
103978
  }
103961
103979
  function formatBytes(bytes) {
103962
103980
  if (bytes <= 0)
@@ -103976,38 +103994,78 @@ function getInstalledVersion() {
103976
103994
  }
103977
103995
  async function fetchRelease(version3) {
103978
103996
  const base = `https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases`;
103979
- const apiUrl = version3 ? `${base}/tags/${version3}` : `${base}/latest`;
103997
+ const requestedTag = version3 ? normalizeRequestedAppTag(version3) : null;
103998
+ const apiUrl = requestedTag ? `${base}/tags/${requestedTag}` : `${base}?per_page=100`;
103980
103999
  try {
103981
104000
  const response = await fetch(apiUrl, {
103982
104001
  headers: { Accept: "application/vnd.github+json", "User-Agent": USER_AGENT }
103983
104002
  });
103984
104003
  if (response.ok) {
103985
- return await response.json();
104004
+ const payload = await response.json();
104005
+ return requestedTag ? assertPublishedAppRelease(payload, requestedTag) : selectLatestAppRelease(payload);
103986
104006
  }
103987
104007
  } catch {}
103988
- const apiPath = version3 ? `repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases/tags/${version3}` : `repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases/latest`;
104008
+ const apiPath = requestedTag ? `repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases/tags/${requestedTag}` : `repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases?per_page=100`;
103989
104009
  const gh = spawnSync8("gh", ["api", apiPath], { encoding: "utf8" });
103990
104010
  if ((gh.status ?? 1) === 0 && gh.stdout.trim()) {
103991
- return JSON.parse(gh.stdout);
104011
+ const payload = JSON.parse(gh.stdout);
104012
+ return requestedTag ? assertPublishedAppRelease(payload, requestedTag) : selectLatestAppRelease(payload);
104013
+ }
104014
+ throw new ScoutCliError(version3 ? `app release "${requestedTag}" not found on GitHub (${GITHUB_OWNER}/${GITHUB_REPO})` : `could not fetch the latest OpenScout release from GitHub (${GITHUB_OWNER}/${GITHUB_REPO})`);
104015
+ }
104016
+ function compareAppReleaseVersions(left, right) {
104017
+ const leftParts = appVersionFromReleaseTag(left.tag_name).split(".").map(Number);
104018
+ const rightParts = appVersionFromReleaseTag(right.tag_name).split(".").map(Number);
104019
+ for (let index2 = 0;index2 < 3; index2 += 1) {
104020
+ const difference = (rightParts[index2] ?? 0) - (leftParts[index2] ?? 0);
104021
+ if (difference !== 0)
104022
+ return difference;
104023
+ }
104024
+ return 0;
104025
+ }
104026
+ function assertPublishedAppRelease(release, expectedTag) {
104027
+ if (expectedTag && release.tag_name !== expectedTag) {
104028
+ throw new ScoutCliError(`GitHub returned app release ${release.tag_name || "<missing>"}; expected ${expectedTag}`);
104029
+ }
104030
+ if (release.draft || release.prerelease) {
104031
+ throw new ScoutCliError(`app release ${release.tag_name} is not a published stable release`);
103992
104032
  }
103993
- throw new ScoutCliError(version3 ? `release "${version3}" not found on GitHub (${GITHUB_OWNER}/${GITHUB_REPO})` : `could not fetch the latest OpenScout release from GitHub (${GITHUB_OWNER}/${GITHUB_REPO})`);
104033
+ findAppDmgAsset(release);
104034
+ return release;
103994
104035
  }
103995
104036
  function findAppDmgAsset(release) {
103996
104037
  const assets = release.assets ?? [];
103997
- const isMenuOnly = (name2) => name2.toLowerCase().startsWith("openscoutmenu");
103998
- const isDmg = (name2) => name2.toLowerCase().endsWith(".dmg");
103999
- const versioned = assets.find((asset) => /^openscout-\d/i.test(asset.name) && isDmg(asset.name) && !isMenuOnly(asset.name));
104000
- if (versioned)
104001
- return versioned;
104002
- const latestAlias = assets.find((asset) => asset.name.toLowerCase() === "openscout.dmg");
104003
- if (latestAlias)
104004
- return latestAlias;
104005
- const anyProductDmg = assets.find((asset) => isDmg(asset.name) && !isMenuOnly(asset.name));
104006
- if (anyProductDmg)
104007
- return anyProductDmg;
104008
- throw new ScoutCliError(`no OpenScout.app DMG found in release ${release.tag_name}. Assets: ${assets.map((asset) => asset.name).join(", ") || "(none)"}`);
104038
+ const version3 = appVersionFromReleaseTag(release.tag_name);
104039
+ const expectedName = `OpenScout-${version3}.dmg`;
104040
+ const exact = assets.find((asset) => asset.name === expectedName);
104041
+ if (exact)
104042
+ return exact;
104043
+ throw new ScoutCliError(`immutable ${expectedName} not found in app release ${release.tag_name}. Assets: ${assets.map((asset) => asset.name).join(", ") || "(none)"}`);
104044
+ }
104045
+ function selectLatestAppRelease(releases) {
104046
+ const candidates = releases.filter((candidate) => {
104047
+ if (candidate.draft || candidate.prerelease)
104048
+ return false;
104049
+ if (!/^app-v\d+\.\d+\.\d+$/.test(candidate.tag_name))
104050
+ return false;
104051
+ try {
104052
+ findAppDmgAsset(candidate);
104053
+ return true;
104054
+ } catch {
104055
+ return false;
104056
+ }
104057
+ });
104058
+ candidates.sort(compareAppReleaseVersions);
104059
+ const release = candidates[0];
104060
+ if (!release) {
104061
+ throw new ScoutCliError(`no published app-v* release with an immutable OpenScout DMG found on GitHub (${GITHUB_OWNER}/${GITHUB_REPO})`);
104062
+ }
104063
+ return release;
104009
104064
  }
104010
104065
  async function downloadDmg(asset, destination, context) {
104066
+ if (!Number.isSafeInteger(asset.size) || asset.size <= 0) {
104067
+ throw new ScoutCliError(`release asset ${asset.name} has an invalid reported size: ${asset.size}`);
104068
+ }
104011
104069
  context.stderr(`Downloading ${asset.name} (${formatBytes(asset.size)})\u2026`);
104012
104070
  const response = await fetch(asset.browser_download_url, {
104013
104071
  redirect: "follow",
@@ -104020,10 +104078,66 @@ async function downloadDmg(asset, destination, context) {
104020
104078
  if (buffer.length === 0) {
104021
104079
  throw new ScoutCliError("download failed: empty response body");
104022
104080
  }
104081
+ if (buffer.length !== asset.size) {
104082
+ throw new ScoutCliError(`download failed: ${asset.name} is ${buffer.length} bytes; GitHub reported ${asset.size}`);
104083
+ }
104023
104084
  writeFileSync9(destination, buffer);
104024
104085
  }
104086
+ function commandOutput(command, args, label) {
104087
+ const result = spawnSync8(command, args, { encoding: "utf8" });
104088
+ const output = `${result.stdout ?? ""}${result.stderr ?? ""}`;
104089
+ if ((result.status ?? 1) !== 0) {
104090
+ throw new ScoutCliError(`${label} failed: ${output.trim() || `${command} exited ${result.status}`}`);
104091
+ }
104092
+ return output;
104093
+ }
104094
+ function verifyDeveloperIdSignature(codePath, label) {
104095
+ commandOutput("codesign", ["--verify", "--deep", "--strict", "--verbose=2", codePath], `${label} signature`);
104096
+ const details = commandOutput("codesign", ["-dvvv", codePath], `${label} signature details`);
104097
+ const team = details.match(/^TeamIdentifier=(.+)$/m)?.[1]?.trim();
104098
+ const authority = details.match(/^Authority=(Developer ID Application:.+)$/m)?.[1]?.trim();
104099
+ if (team !== EXPECTED_TEAM_ID || !authority?.endsWith(`(${EXPECTED_TEAM_ID})`)) {
104100
+ throw new ScoutCliError(`${label} is not signed by OpenScout's Developer ID Application team ${EXPECTED_TEAM_ID}`);
104101
+ }
104102
+ }
104103
+ function plistValue(plistPath, key) {
104104
+ return commandOutput("/usr/libexec/PlistBuddy", ["-c", `Print :${key}`, plistPath], `read ${key}`).trim();
104105
+ }
104106
+ function verifyDmg(dmgPath) {
104107
+ verifyDeveloperIdSignature(dmgPath, "OpenScout DMG");
104108
+ commandOutput("spctl", ["--assess", "--type", "open", "--context", "context:primary-signature", "--verbose=2", dmgPath], "DMG Gatekeeper assessment");
104109
+ }
104110
+ function verifyAppBundle(appPath, expectedVersion) {
104111
+ const infoPlist = join48(appPath, "Contents", "Info.plist");
104112
+ if (plistValue(infoPlist, "CFBundleIdentifier") !== APP_BUNDLE_ID) {
104113
+ throw new ScoutCliError(`mounted app bundle identifier is not ${APP_BUNDLE_ID}`);
104114
+ }
104115
+ if (plistValue(infoPlist, "CFBundleShortVersionString") !== expectedVersion) {
104116
+ throw new ScoutCliError(`mounted app version is not ${expectedVersion}`);
104117
+ }
104118
+ if (plistValue(infoPlist, "LSMinimumSystemVersion") !== MINIMUM_MACOS_VERSION) {
104119
+ throw new ScoutCliError(`mounted app does not require macOS ${MINIMUM_MACOS_VERSION}`);
104120
+ }
104121
+ verifyDeveloperIdSignature(appPath, "OpenScout.app");
104122
+ const helperPath = join48(appPath, "Contents", "Library", "LoginItems", "ScoutMenu.app");
104123
+ if (!existsSync39(helperPath)) {
104124
+ throw new ScoutCliError("mounted app is missing ScoutMenu.app");
104125
+ }
104126
+ const helperInfoPlist = join48(helperPath, "Contents", "Info.plist");
104127
+ if (plistValue(helperInfoPlist, "CFBundleIdentifier") !== HELPER_BUNDLE_ID) {
104128
+ throw new ScoutCliError(`mounted helper bundle identifier is not ${HELPER_BUNDLE_ID}`);
104129
+ }
104130
+ if (plistValue(helperInfoPlist, "CFBundleShortVersionString") !== expectedVersion) {
104131
+ throw new ScoutCliError(`mounted helper version is not ${expectedVersion}`);
104132
+ }
104133
+ if (plistValue(helperInfoPlist, "LSMinimumSystemVersion") !== MINIMUM_MACOS_VERSION) {
104134
+ throw new ScoutCliError(`mounted helper does not require macOS ${MINIMUM_MACOS_VERSION}`);
104135
+ }
104136
+ verifyDeveloperIdSignature(helperPath, "ScoutMenu.app");
104137
+ commandOutput("spctl", ["--assess", "--type", "execute", "--verbose=2", appPath], "app Gatekeeper assessment");
104138
+ }
104025
104139
  function mountDmg(dmgPath) {
104026
- const result = spawnSync8("hdiutil", ["attach", dmgPath, "-nobrowse", "-noverify", "-noautoopen", "-plist"], { encoding: "utf8" });
104140
+ const result = spawnSync8("hdiutil", ["attach", dmgPath, "-readonly", "-nobrowse", "-noautoopen", "-plist"], { encoding: "utf8" });
104027
104141
  if ((result.status ?? 1) !== 0) {
104028
104142
  throw new ScoutCliError(`could not mount ${dmgPath}: ${result.stderr.trim() || "hdiutil attach failed"}`);
104029
104143
  }
@@ -104036,42 +104150,71 @@ function mountDmg(dmgPath) {
104036
104150
  function unmountDmg(mountPoint) {
104037
104151
  spawnSync8("hdiutil", ["detach", mountPoint, "-quiet"], { encoding: "utf8" });
104038
104152
  }
104039
- function copyAppFromMount(mountPoint) {
104040
- const listing = spawnSync8("ls", [mountPoint], { encoding: "utf8" });
104041
- const appEntry = listing.stdout.split(`
104042
- `).map((line) => line.trim()).find((line) => line === APP_NAME) ?? listing.stdout.split(`
104043
- `).map((line) => line.trim()).find((line) => line.endsWith(".app") && !line.toLowerCase().startsWith("openscoutmenu"));
104044
- if (!appEntry) {
104153
+ function copyAppFromMount(mountPoint, expectedVersion) {
104154
+ const source = join48(mountPoint, APP_NAME);
104155
+ if (!existsSync39(source)) {
104045
104156
  throw new ScoutCliError(`no ${APP_NAME} found in the mounted DMG at ${mountPoint}`);
104046
104157
  }
104047
- const source = join48(mountPoint, appEntry);
104048
- if (existsSync39(APP_PATH)) {
104049
- const removed = spawnSync8("rm", ["-rf", APP_PATH], { encoding: "utf8" });
104050
- if ((removed.status ?? 1) !== 0) {
104051
- throw new ScoutCliError(`could not replace ${APP_PATH} (permission denied?). Try: sudo scout install`);
104052
- }
104053
- }
104054
- const copied = spawnSync8("cp", ["-R", source, APP_PATH], { encoding: "utf8" });
104158
+ verifyAppBundle(source, expectedVersion);
104159
+ const stagingPath = `/Applications/.OpenScout.scout-install-${process.pid}.app`;
104160
+ const backupPath = `/Applications/.OpenScout.scout-backup-${process.pid}.app`;
104161
+ const hadExistingApp = existsSync39(APP_PATH);
104162
+ spawnSync8("rm", ["-rf", stagingPath, backupPath], { encoding: "utf8" });
104163
+ const copied = spawnSync8("ditto", [source, stagingPath], { encoding: "utf8" });
104055
104164
  if ((copied.status ?? 1) !== 0) {
104056
- throw new ScoutCliError(`could not copy the app to ${APP_PATH}: ${copied.stderr.trim() || "permission denied?"}. Try: sudo scout install`);
104165
+ throw new ScoutCliError(`could not stage ${APP_PATH}: ${copied.stderr.trim() || "permission denied?"}. Try: sudo scout install`);
104166
+ }
104167
+ verifyAppBundle(stagingPath, expectedVersion);
104168
+ let backupCreated = false;
104169
+ try {
104170
+ if (hadExistingApp) {
104171
+ const movedOld = spawnSync8("mv", [APP_PATH, backupPath], { encoding: "utf8" });
104172
+ if ((movedOld.status ?? 1) !== 0) {
104173
+ throw new ScoutCliError(`could not preserve the existing ${APP_PATH}: ${movedOld.stderr.trim() || "permission denied?"}. Try: sudo scout install`);
104174
+ }
104175
+ backupCreated = true;
104176
+ }
104177
+ const installed = spawnSync8("mv", [stagingPath, APP_PATH], { encoding: "utf8" });
104178
+ if ((installed.status ?? 1) !== 0) {
104179
+ if (backupCreated)
104180
+ spawnSync8("mv", [backupPath, APP_PATH], { encoding: "utf8" });
104181
+ throw new ScoutCliError(`could not install ${APP_PATH}; the previous app was preserved`);
104182
+ }
104183
+ verifyAppBundle(APP_PATH, expectedVersion);
104184
+ if (backupCreated)
104185
+ spawnSync8("rm", ["-rf", backupPath], { encoding: "utf8" });
104186
+ } catch (error48) {
104187
+ spawnSync8("rm", ["-rf", stagingPath], { encoding: "utf8" });
104188
+ if (backupCreated && existsSync39(backupPath)) {
104189
+ if (existsSync39(APP_PATH))
104190
+ spawnSync8("rm", ["-rf", APP_PATH], { encoding: "utf8" });
104191
+ spawnSync8("mv", [backupPath, APP_PATH], { encoding: "utf8" });
104192
+ } else if (!hadExistingApp && existsSync39(APP_PATH)) {
104193
+ spawnSync8("rm", ["-rf", APP_PATH], { encoding: "utf8" });
104194
+ }
104195
+ throw error48;
104057
104196
  }
104058
104197
  }
104059
104198
  function removeQuarantine() {
104060
104199
  spawnSync8("xattr", ["-rd", "com.apple.quarantine", APP_PATH], { encoding: "utf8" });
104061
104200
  }
104062
- function isAppRunning() {
104063
- return (spawnSync8("pgrep", ["-x", APP_PROCESS_NAME], { encoding: "utf8" }).status ?? 1) === 0;
104064
- }
104065
- function quitApp() {
104066
- spawnSync8("osascript", ["-e", `tell application id "${APP_BUNDLE_ID}" to quit`], {
104067
- encoding: "utf8"
104068
- });
104201
+ async function stopInstalledAppProcesses() {
104202
+ const tree = readLifecycleTree(resolveAppBundlePaths(APP_PATH));
104203
+ const processes = layerProcesses(tree, ["menu", "app"]);
104204
+ if (processes.length === 0)
104205
+ return false;
104206
+ const pids = [...new Set(processes.map((entry) => entry.pid))];
104207
+ const { survivors } = await terminateProcesses(pids);
104208
+ if (survivors.length > 0) {
104209
+ throw new ScoutCliError(`could not stop the installed OpenScout processes (${survivors.join(", ")}); the app was not replaced`);
104210
+ }
104211
+ return true;
104069
104212
  }
104070
104213
  function launchApp() {
104071
- const byId = spawnSync8("open", ["-b", APP_BUNDLE_ID], { encoding: "utf8" });
104072
- if ((byId.status ?? 1) !== 0) {
104073
- spawnSync8("open", [APP_PATH], { encoding: "utf8" });
104074
- }
104214
+ const byPath = spawnSync8("open", [APP_PATH], { encoding: "utf8" });
104215
+ if ((byPath.status ?? 1) === 0)
104216
+ return true;
104217
+ return (spawnSync8("open", ["-b", APP_BUNDLE_ID], { encoding: "utf8" }).status ?? 1) === 0;
104075
104218
  }
104076
104219
  function renderInstallResult(result) {
104077
104220
  if (result.action === "check") {
@@ -104088,7 +104231,7 @@ function renderInstallResult(result) {
104088
104231
  async function runCheck(context, options) {
104089
104232
  const installed = getInstalledVersion();
104090
104233
  const release = await fetchRelease(options.version);
104091
- const target2 = stripLeadingV(release.tag_name);
104234
+ const target2 = appVersionFromReleaseTag(release.tag_name);
104092
104235
  let status;
104093
104236
  let message;
104094
104237
  if (!installed) {
@@ -104111,6 +104254,14 @@ async function runInstallCommand(context, args) {
104111
104254
  if (process.platform !== "darwin") {
104112
104255
  throw new ScoutCliError("scout install is only supported on macOS.");
104113
104256
  }
104257
+ if (process.arch !== "arm64") {
104258
+ throw new ScoutCliError("Scout for macOS currently requires Apple silicon (arm64).");
104259
+ }
104260
+ const macosVersion = commandOutput("sw_vers", ["-productVersion"], "macOS version").trim();
104261
+ const macosMajor = Number.parseInt(macosVersion.split(".")[0] ?? "", 10);
104262
+ if (!Number.isInteger(macosMajor) || macosMajor < MINIMUM_MACOS_MAJOR) {
104263
+ throw new ScoutCliError(`Scout requires macOS ${MINIMUM_MACOS_MAJOR} or later (found ${macosVersion}).`);
104264
+ }
104114
104265
  const options = parseInstallArgs(args);
104115
104266
  if (options.check) {
104116
104267
  await runCheck(context, options);
@@ -104119,7 +104270,7 @@ async function runInstallCommand(context, args) {
104119
104270
  const installedBefore = getInstalledVersion();
104120
104271
  context.stderr(options.version ? `Fetching release ${options.version}\u2026` : "Fetching the latest OpenScout release\u2026");
104121
104272
  const release = await fetchRelease(options.version);
104122
- const target2 = stripLeadingV(release.tag_name);
104273
+ const target2 = appVersionFromReleaseTag(release.tag_name);
104123
104274
  if (!options.force && installedBefore && installedBefore === target2) {
104124
104275
  context.output.writeValue({
104125
104276
  action: "install",
@@ -104132,15 +104283,21 @@ async function runInstallCommand(context, args) {
104132
104283
  return;
104133
104284
  }
104134
104285
  const asset = findAppDmgAsset(release);
104135
- const wasRunning = isAppRunning();
104136
104286
  const workDir = mkdtempSync(join48(tmpdir(), "scout-install-"));
104137
104287
  const dmgPath = join48(workDir, asset.name);
104138
104288
  let mountPoint = null;
104289
+ let wasRunning = false;
104139
104290
  try {
104140
104291
  await downloadDmg(asset, dmgPath, context);
104292
+ verifyDmg(dmgPath);
104141
104293
  context.stderr(`Installing OpenScout ${target2} to ${APP_PATH}\u2026`);
104142
104294
  mountPoint = mountDmg(dmgPath);
104143
- copyAppFromMount(mountPoint);
104295
+ wasRunning = await stopInstalledAppProcesses();
104296
+ copyAppFromMount(mountPoint, target2);
104297
+ } catch (error48) {
104298
+ if (wasRunning)
104299
+ launchApp();
104300
+ throw error48;
104144
104301
  } finally {
104145
104302
  if (mountPoint)
104146
104303
  unmountDmg(mountPoint);
@@ -104148,8 +104305,9 @@ async function runInstallCommand(context, args) {
104148
104305
  }
104149
104306
  removeQuarantine();
104150
104307
  if (wasRunning && options.restart) {
104151
- quitApp();
104152
- launchApp();
104308
+ if (!launchApp()) {
104309
+ throw new ScoutCliError(`OpenScout ${target2} was installed, but macOS could not relaunch it. Open ${APP_PATH} manually.`);
104310
+ }
104153
104311
  }
104154
104312
  const installedAfter = getInstalledVersion() ?? target2;
104155
104313
  const status = installedBefore ? "updated" : "installed";
@@ -104164,9 +104322,10 @@ async function runInstallCommand(context, args) {
104164
104322
  message: `${verb} OpenScout ${installedAfter} \u2192 ${APP_PATH}${relaunchNote}`
104165
104323
  }, renderInstallResult);
104166
104324
  }
104167
- var GITHUB_OWNER = "oscout", GITHUB_REPO = "scout", APP_NAME = "OpenScout.app", APP_PATH, INFO_PLIST_PATH, APP_BUNDLE_ID = "app.openscout.scout", APP_PROCESS_NAME = "Scout", USER_AGENT = "scout-cli", HELP_FLAGS9;
104325
+ var GITHUB_OWNER = "oscout", GITHUB_REPO = "scout", APP_NAME = "OpenScout.app", APP_PATH, INFO_PLIST_PATH, APP_BUNDLE_ID = "app.openscout.scout", HELPER_BUNDLE_ID = "app.openscout.scout.menu", USER_AGENT = "scout-cli", EXPECTED_TEAM_ID = "2U83JFPW66", MINIMUM_MACOS_MAJOR = 26, MINIMUM_MACOS_VERSION = "26.0", HELP_FLAGS9;
104168
104326
  var init_install = __esm(() => {
104169
104327
  init_errors();
104328
+ init_app_lifecycle();
104170
104329
  APP_PATH = `/Applications/${APP_NAME}`;
104171
104330
  INFO_PLIST_PATH = `${APP_PATH}/Contents/Info.plist`;
104172
104331
  HELP_FLAGS9 = new Set(["help", "--help", "-h"]);
@@ -112590,8 +112749,7 @@ __export(exports_menu, {
112590
112749
  import { spawnSync as spawnSync10 } from "child_process";
112591
112750
  import { existsSync as existsSync41 } from "fs";
112592
112751
  import { homedir as homedir32 } from "os";
112593
- import { dirname as dirname28, join as join50, resolve as resolve30 } from "path";
112594
- import { fileURLToPath as fileURLToPath11 } from "url";
112752
+ import { join as join50 } from "path";
112595
112753
  function renderMenuCommandHelp() {
112596
112754
  return [
112597
112755
  "scout menu \u2014 macOS menu bar app",
@@ -112602,8 +112760,6 @@ function renderMenuCommandHelp() {
112602
112760
  " scout menu status",
112603
112761
  " scout menu restart",
112604
112762
  " scout menu quit",
112605
- " scout menu build",
112606
- " scout menu dmg",
112607
112763
  "",
112608
112764
  "Aliases:",
112609
112765
  " launch = open = start",
@@ -112612,14 +112768,13 @@ function renderMenuCommandHelp() {
112612
112768
  "Behavior:",
112613
112769
  " On macOS, `scout menu` loads the menu bar app from the installed OpenScout.app",
112614
112770
  " (the menu ships as an embedded helper). If OpenScout.app is not installed, it",
112615
- " points you to `scout install`. Inside an OpenScout repo checkout it prefers",
112616
- " `apps/macos/bin/openscout-menu.ts` so launch/build/restart reuse the repo helper.",
112771
+ " points you to `scout install`. Native app build and DMG tooling lives in the",
112772
+ " private OpenScout product repository and is not exposed by the public CLI.",
112617
112773
  "",
112618
112774
  "Examples:",
112619
112775
  " scout menu",
112620
112776
  " scout menu status",
112621
- " scout menu restart",
112622
- " scout menu build --version 0.2.16"
112777
+ " scout menu restart"
112623
112778
  ].join(`
112624
112779
  `);
112625
112780
  }
@@ -112643,10 +112798,6 @@ function parseMenuCommand(args) {
112643
112798
  return { action: "quit", passthroughArgs: rest };
112644
112799
  case "status":
112645
112800
  return { action: "status", passthroughArgs: rest };
112646
- case "build":
112647
- return { action: "build", passthroughArgs: rest };
112648
- case "dmg":
112649
- return { action: "dmg", passthroughArgs: rest };
112650
112801
  default:
112651
112802
  throw new ScoutCliError(`unknown subcommand: ${first} (try: scout menu)`);
112652
112803
  }
@@ -112674,25 +112825,6 @@ function runProcess(command, args, options) {
112674
112825
  status: result.status
112675
112826
  };
112676
112827
  }
112677
- function findRepoMenuHelper(startDirectory) {
112678
- let current = resolve30(startDirectory);
112679
- while (true) {
112680
- const candidate = join50(current, "apps", "macos", "bin", "openscout-menu.ts");
112681
- if (existsSync41(candidate)) {
112682
- return candidate;
112683
- }
112684
- const parent = dirname28(current);
112685
- if (parent === current) {
112686
- break;
112687
- }
112688
- current = parent;
112689
- }
112690
- const sourceRelativeCandidate = fileURLToPath11(new URL("../../../../macos/bin/openscout-menu.ts", import.meta.url).toString());
112691
- return existsSync41(sourceRelativeCandidate) ? sourceRelativeCandidate : null;
112692
- }
112693
- function resolveRepoBundlePath(helperPath) {
112694
- return resolve30(dirname28(helperPath), "..", "dist", "Scout.app", EMBEDDED_MENU_RELATIVE_PATH);
112695
- }
112696
112828
  function menuProcesses(helperBundlePath) {
112697
112829
  const expected = helperBundlePath ? join50(helperBundlePath, "Contents", "MacOS", MENU_PROCESS_NAME) : null;
112698
112830
  const ours = [];
@@ -112708,24 +112840,20 @@ function menuProcesses(helperBundlePath) {
112708
112840
  return { ours, others };
112709
112841
  }
112710
112842
  function isMenuRunning(helperBundlePath) {
112711
- const { ours, others } = menuProcesses(helperBundlePath);
112712
- return helperBundlePath ? ours.length > 0 : others.length > 0;
112843
+ if (!helperBundlePath)
112844
+ return false;
112845
+ return menuProcesses(helperBundlePath).ours.length > 0;
112713
112846
  }
112714
112847
  async function stopRunningMenu(helperBundlePath) {
112715
- const { ours, others } = menuProcesses(helperBundlePath);
112716
- const targets = helperBundlePath ? ours : others;
112848
+ if (!helperBundlePath)
112849
+ return true;
112850
+ const targets = menuProcesses(helperBundlePath).ours;
112717
112851
  if (targets.length === 0)
112718
112852
  return true;
112719
112853
  const { survivors } = await terminateProcesses(targets);
112720
112854
  return survivors.length === 0;
112721
112855
  }
112722
- function resolveInstalledAppBundlePath(env) {
112723
- const spotlight = runProcess("mdfind", [`kMDItemCFBundleIdentifier == '${APP_BUNDLE_ID2}'`], { env, allowFailure: true });
112724
- const indexedPath = spotlight.stdout.split(`
112725
- `).map((line) => line.trim()).find(Boolean);
112726
- if (indexedPath) {
112727
- return indexedPath;
112728
- }
112856
+ function resolveInstalledAppBundlePath() {
112729
112857
  for (const candidate of COMMON_APP_BUNDLE_PATHS) {
112730
112858
  if (existsSync41(candidate)) {
112731
112859
  return candidate;
@@ -112737,12 +112865,11 @@ function resolveEmbeddedMenuBundlePath(appBundlePath) {
112737
112865
  return join50(appBundlePath, EMBEDDED_MENU_RELATIVE_PATH);
112738
112866
  }
112739
112867
  function openInstalledMenuApp(helperPath, env) {
112740
- const bundleAttempts = [
112741
- { command: "open", args: ["-b", MENU_BUNDLE_ID] }
112742
- ];
112868
+ const bundleAttempts = [];
112743
112869
  if (helperPath) {
112744
112870
  bundleAttempts.push({ command: "open", args: [helperPath] });
112745
112871
  }
112872
+ bundleAttempts.push({ command: "open", args: ["-b", MENU_BUNDLE_ID] });
112746
112873
  let lastFailure = "OpenScout is not installed.";
112747
112874
  for (const attempt of bundleAttempts) {
112748
112875
  const result = runProcess(attempt.command, attempt.args, { env, allowFailure: true });
@@ -112751,7 +112878,7 @@ function openInstalledMenuApp(helperPath, env) {
112751
112878
  }
112752
112879
  lastFailure = result.stderr || result.stdout || lastFailure;
112753
112880
  }
112754
- throw new ScoutCliError(`${lastFailure} Run \`scout install\` to download the OpenScout app, or run from the repo to build it.`);
112881
+ throw new ScoutCliError(`${lastFailure} Run \`scout install\` to download the OpenScout app.`);
112755
112882
  }
112756
112883
  function renderMenuResult(result) {
112757
112884
  if (result.action === "status") {
@@ -112780,10 +112907,6 @@ function renderMenuResult(result) {
112780
112907
  }
112781
112908
  function renderActionMessage(action) {
112782
112909
  switch (action) {
112783
- case "build":
112784
- return "Built the OpenScout menu app bundle.";
112785
- case "dmg":
112786
- return "Built the OpenScout menu app DMG.";
112787
112910
  case "restart":
112788
112911
  return "Restarted the OpenScout menu app.";
112789
112912
  case "quit":
@@ -112796,42 +112919,15 @@ function renderActionMessage(action) {
112796
112919
  }
112797
112920
  }
112798
112921
  async function ensureMenuProviderTelemetry(context, action) {
112799
- if (action === "build" || action === "dmg" || action === "quit") {
112922
+ if (action === "quit") {
112800
112923
  return;
112801
112924
  }
112802
112925
  try {
112803
112926
  await ensureProviderTelemetryBootstrap({ env: context.env });
112804
112927
  } catch {}
112805
112928
  }
112806
- async function runWithRepoHelper(context, helperPath, command) {
112807
- const bundlePath = resolveRepoBundlePath(helperPath);
112808
- if (command.action === "quit" || command.action === "restart") {
112809
- await stopRunningMenu(bundlePath);
112810
- }
112811
- if (command.action !== "quit") {
112812
- runProcess(process.execPath, [helperPath, command.action, ...command.passthroughArgs], {
112813
- cwd: defaultScoutContextDirectory(context),
112814
- env: context.env
112815
- });
112816
- }
112817
- const running = command.action === "quit" ? false : isMenuRunning(bundlePath);
112818
- const installed = existsSync41(bundlePath) || running;
112819
- return {
112820
- action: command.action,
112821
- mode: "repo-helper",
112822
- bundleId: MENU_BUNDLE_ID,
112823
- bundlePath,
112824
- helperPath,
112825
- installed,
112826
- running,
112827
- message: renderActionMessage(command.action)
112828
- };
112829
- }
112830
112929
  async function runWithInstalledApp(context, command) {
112831
- if (command.action === "build" || command.action === "dmg") {
112832
- throw new ScoutCliError(`scout menu ${command.action} requires an OpenScout repo checkout. Run from the repo root or use bun run macos:${command.action}.`);
112833
- }
112834
- const appBundlePath = resolveInstalledAppBundlePath(context.env);
112930
+ const appBundlePath = resolveInstalledAppBundlePath();
112835
112931
  const helperPath = appBundlePath ? resolveEmbeddedMenuBundlePath(appBundlePath) : null;
112836
112932
  if (!appBundlePath && command.action !== "status") {
112837
112933
  throw new ScoutCliError("OpenScout is not installed. Run `scout install` to download the macOS app.");
@@ -112877,15 +112973,13 @@ async function runMenuCommand(context, args) {
112877
112973
  }
112878
112974
  const command = parseMenuCommand(args);
112879
112975
  await ensureMenuProviderTelemetry(context, command.action);
112880
- const helperPath = findRepoMenuHelper(defaultScoutContextDirectory(context));
112881
- const result = helperPath ? await runWithRepoHelper(context, helperPath, command) : await runWithInstalledApp(context, command);
112976
+ const result = await runWithInstalledApp(context, command);
112882
112977
  context.output.writeValue(result, renderMenuResult);
112883
112978
  }
112884
- var MENU_BUNDLE_ID = "app.openscout.scout.menu", MENU_PROCESS_NAME = "ScoutMenu", APP_BUNDLE_ID2 = "app.openscout.scout", APP_BUNDLE_NAME = "OpenScout.app", EMBEDDED_MENU_RELATIVE_PATH, HELP_FLAGS14, COMMON_APP_BUNDLE_PATHS;
112979
+ var MENU_BUNDLE_ID = "app.openscout.scout.menu", MENU_PROCESS_NAME = "ScoutMenu", APP_BUNDLE_NAME = "OpenScout.app", EMBEDDED_MENU_RELATIVE_PATH, HELP_FLAGS14, COMMON_APP_BUNDLE_PATHS;
112885
112980
  var init_menu = __esm(() => {
112886
112981
  init_src3();
112887
112982
  init_app_lifecycle();
112888
- init_context();
112889
112983
  init_errors();
112890
112984
  EMBEDDED_MENU_RELATIVE_PATH = join50("Contents", "Library", "LoginItems", "ScoutMenu.app");
112891
112985
  HELP_FLAGS14 = new Set(["help", "--help", "-h"]);
@@ -113599,7 +113693,7 @@ var init_mesh = () => {};
113599
113693
 
113600
113694
  // ../../apps/desktop/src/core/mesh/enroll-pending.ts
113601
113695
  import { existsSync as existsSync42, mkdirSync as mkdirSync12, readFileSync as readFileSync19, rmSync as rmSync6, writeFileSync as writeFileSync10 } from "fs";
113602
- import { dirname as dirname29, join as join51 } from "path";
113696
+ import { dirname as dirname28, join as join51 } from "path";
113603
113697
  function pendingMeshEnrollmentPath(supportDirectory) {
113604
113698
  const dir = supportDirectory ?? resolveOpenScoutSupportPaths().supportDirectory;
113605
113699
  return join51(dir, PENDING_FILE);
@@ -113609,7 +113703,7 @@ function savePendingMeshEnrollment(handshake, supportDirectory) {
113609
113703
  assertTestIsolatedUserData("write the pending mesh enrollment", "OPENSCOUT_SUPPORT_DIRECTORY");
113610
113704
  }
113611
113705
  const path = pendingMeshEnrollmentPath(supportDirectory);
113612
- mkdirSync12(dirname29(path), { recursive: true });
113706
+ mkdirSync12(dirname28(path), { recursive: true });
113613
113707
  writeFileSync10(path, `${JSON.stringify(handshake, null, 2)}
113614
113708
  `, { encoding: "utf8", mode: 384 });
113615
113709
  }
@@ -113838,7 +113932,7 @@ async function runMeshRevokeCommand(context, args) {
113838
113932
  async function promptSasApproval(question) {
113839
113933
  const rl = createInterface3({ input: process.stdin, output: process.stderr });
113840
113934
  try {
113841
- const answer = await new Promise((resolve31) => rl.question(question, resolve31));
113935
+ const answer = await new Promise((resolve30) => rl.question(question, resolve30));
113842
113936
  return ["y", "yes"].includes(answer.trim().toLowerCase());
113843
113937
  } finally {
113844
113938
  rl.close();
@@ -114470,12 +114564,12 @@ async function runBridge(context, args) {
114470
114564
  });
114471
114565
  context.stderr(`bridge: node=${config2.node} relay=${config2.relayUrl}`);
114472
114566
  context.stderr("bridge: running \u2014 Ctrl-C to stop");
114473
- await new Promise((resolve31) => {
114567
+ await new Promise((resolve30) => {
114474
114568
  const stop2 = () => {
114475
114569
  const force = setTimeout(() => process.exit(0), 5000);
114476
114570
  handle.close().finally(() => {
114477
114571
  clearTimeout(force);
114478
- resolve31();
114572
+ resolve30();
114479
114573
  });
114480
114574
  };
114481
114575
  process.once("SIGINT", stop2);
@@ -117394,7 +117488,7 @@ var init_web_handoff = __esm(() => {
117394
117488
  // ../../apps/desktop/src/core/pairing/runtime/bridge/artifact-presentation.ts
117395
117489
  import { randomBytes as randomBytes8 } from "crypto";
117396
117490
  import { realpathSync as realpathSync3, statSync as statSync10 } from "fs";
117397
- import { basename as basename18, dirname as dirname30, isAbsolute as isAbsolute5, relative as relative5, resolve as resolve31, sep as sep3 } from "path";
117491
+ import { basename as basename18, dirname as dirname29, isAbsolute as isAbsolute5, relative as relative5, resolve as resolve30, sep as sep3 } from "path";
117398
117492
  function createArtifactPresentation(input, options) {
117399
117493
  const now = options.now ?? Date.now();
117400
117494
  purgeExpiredArtifactPresentations(now);
@@ -117407,9 +117501,9 @@ function createArtifactPresentation(input, options) {
117407
117501
  throw new Error("sourcePath is outside the session workspace");
117408
117502
  }
117409
117503
  const source = statSync10(sourcePath);
117410
- const rootPath = source.isDirectory() ? sourcePath : dirname30(sourcePath);
117504
+ const rootPath = source.isDirectory() ? sourcePath : dirname29(sourcePath);
117411
117505
  const entryPath = normalizeRelativeEntry(source.isDirectory() ? input.entryPath?.trim() || "index.html" : basename18(sourcePath));
117412
- const entryTarget = requiredRealPath(resolve31(rootPath, entryPath), "entryPath");
117506
+ const entryTarget = requiredRealPath(resolve30(rootPath, entryPath), "entryPath");
117413
117507
  if (!isPathInside2(rootPath, entryTarget)) {
117414
117508
  throw new Error("entryPath leaves the presentation root");
117415
117509
  }
@@ -117450,7 +117544,7 @@ function serveArtifactPresentation(req, url2, now = Date.now()) {
117450
117544
  }
117451
117545
  let target2;
117452
117546
  try {
117453
- target2 = requiredRealPath(resolve31(grant.rootPath, parsed.relativePath), "artifact path");
117547
+ target2 = requiredRealPath(resolve30(grant.rootPath, parsed.relativePath), "artifact path");
117454
117548
  } catch {
117455
117549
  return presentationResponse("Not found", 404);
117456
117550
  }
@@ -117460,7 +117554,7 @@ function serveArtifactPresentation(req, url2, now = Date.now()) {
117460
117554
  const targetStat = statSync10(target2);
117461
117555
  if (targetStat.isDirectory()) {
117462
117556
  try {
117463
- target2 = requiredRealPath(resolve31(target2, "index.html"), "artifact index");
117557
+ target2 = requiredRealPath(resolve30(target2, "index.html"), "artifact index");
117464
117558
  } catch {
117465
117559
  return presentationResponse("Not found", 404);
117466
117560
  }
@@ -118966,10 +119060,10 @@ var init_db_queries = __esm(() => {
118966
119060
  });
118967
119061
 
118968
119062
  // ../../apps/desktop/src/core/mobile/service.ts
118969
- import { basename as basename19, resolve as resolve32 } from "path";
119063
+ import { basename as basename19, resolve as resolve31 } from "path";
118970
119064
  import { statSync as statSync12 } from "fs";
118971
119065
  async function getScoutMobileRuntimeCapabilities(projectRoot) {
118972
- const normalizedProjectRoot = projectRoot?.trim() ? resolve32(projectRoot) : null;
119066
+ const normalizedProjectRoot = projectRoot?.trim() ? resolve31(projectRoot) : null;
118973
119067
  const liveCatalog = await readScoutRuntimeCatalog();
118974
119068
  const runtimeCatalog = liveCatalog?.catalog ?? SCOUT_RUNTIME_CATALOG;
118975
119069
  const defaultHarness = scoutRuntimeDefaultHarness(runtimeCatalog);
@@ -119130,16 +119224,16 @@ function isDirectory2(path2) {
119130
119224
  }
119131
119225
  }
119132
119226
  function rehomeScoutMobileWorkspacePath(requestedPath, currentHome) {
119133
- const requested = resolve32(requestedPath);
119134
- const home = resolve32(currentHome);
119227
+ const requested = resolve31(requestedPath);
119228
+ const home = resolve31(currentHome);
119135
119229
  const requestedMatch = requested.match(/^\/Users\/[^/]+(\/.*)?$/);
119136
119230
  if (!requestedMatch || !/^\/Users\/[^/]+$/.test(home))
119137
119231
  return null;
119138
119232
  const suffix = requestedMatch[1] ?? "";
119139
- return resolve32(home, `.${suffix || "/"}`);
119233
+ return resolve31(home, `.${suffix || "/"}`);
119140
119234
  }
119141
119235
  async function resolveMobileWorkspaceRoot(rawWorkspaceId, currentDirectory) {
119142
- const requested = resolve32(rawWorkspaceId);
119236
+ const requested = resolve31(rawWorkspaceId);
119143
119237
  if (isDirectory2(requested))
119144
119238
  return requested;
119145
119239
  const currentHome = process.env.HOME?.trim();
@@ -119150,7 +119244,7 @@ async function resolveMobileWorkspaceRoot(rawWorkspaceId, currentDirectory) {
119150
119244
  const inventory = await loadMobileWorkspaceInventory(currentDirectory);
119151
119245
  const matches = inventory.filter((workspace) => isDirectory2(workspace.root) && [basename19(workspace.root), workspace.projectName, workspace.title].some((value) => value.toLowerCase() === requestedName));
119152
119246
  if (matches.length === 1)
119153
- return resolve32(matches[0].root);
119247
+ return resolve31(matches[0].root);
119154
119248
  throw new Error(`Workspace is not available on this Mac: ${rawWorkspaceId}. Choose a project from the current workspace list.`);
119155
119249
  }
119156
119250
  function latestMessageByConversation(snapshot) {
@@ -120500,7 +120594,7 @@ var init_mobile_terminal_provision = __esm(() => {
120500
120594
 
120501
120595
  // ../../apps/desktop/src/core/pairing/runtime/bridge/server.ts
120502
120596
  import { readdirSync as readdirSync6, readFileSync as readFileSync28, realpathSync as realpathSync5, statSync as statSync13 } from "fs";
120503
- import { basename as basename20, isAbsolute as isAbsolute7, join as join60, relative as relative7, resolve as resolve33 } from "path";
120597
+ import { basename as basename20, isAbsolute as isAbsolute7, join as join60, relative as relative7, resolve as resolve32 } from "path";
120504
120598
  import { homedir as homedir41 } from "os";
120505
120599
  function replaySyncEvents(bridge, sessionId, lastSeq) {
120506
120600
  return bridge.replay(sessionId, lastSeq);
@@ -120825,7 +120919,7 @@ async function handleRPCInner(bridge, req, rpcContext = {}) {
120825
120919
  }
120826
120920
  try {
120827
120921
  const grant = createArtifactPresentation({
120828
- sourcePath: isAbsolute7(p.sourcePath) ? p.sourcePath : resolve33(workspaceRoot, p.sourcePath),
120922
+ sourcePath: isAbsolute7(p.sourcePath) ? p.sourcePath : resolve32(workspaceRoot, p.sourcePath),
120829
120923
  entryPath: p.entryPath,
120830
120924
  title: p.title,
120831
120925
  ttlMs: p.ttlMs
@@ -121315,7 +121409,7 @@ var init_tail_fanout = __esm(() => {
121315
121409
 
121316
121410
  // ../../apps/desktop/src/core/pairing/runtime/bridge/router.ts
121317
121411
  import { readFileSync as readFileSync29, readdirSync as readdirSync7, realpathSync as realpathSync6, statSync as statSync14 } from "fs";
121318
- import { basename as basename21, isAbsolute as isAbsolute8, join as join61, relative as relative8, resolve as resolve34 } from "path";
121412
+ import { basename as basename21, isAbsolute as isAbsolute8, join as join61, relative as relative8, resolve as resolve33 } from "path";
121319
121413
  import { homedir as homedir42 } from "os";
121320
121414
  function resolveMobileCurrentDirectory2() {
121321
121415
  const config2 = resolveConfig();
@@ -121397,23 +121491,23 @@ function bridgeEventIterable(bridge, signal3) {
121397
121491
  return {
121398
121492
  [Symbol.asyncIterator]() {
121399
121493
  const buffer = [];
121400
- let resolve35 = null;
121494
+ let resolve34 = null;
121401
121495
  let done = false;
121402
121496
  const unsub = bridge.onEvent((event) => {
121403
121497
  if (done)
121404
121498
  return;
121405
121499
  buffer.push(event);
121406
- if (resolve35) {
121407
- resolve35();
121408
- resolve35 = null;
121500
+ if (resolve34) {
121501
+ resolve34();
121502
+ resolve34 = null;
121409
121503
  }
121410
121504
  });
121411
121505
  const cleanup = () => {
121412
121506
  done = true;
121413
121507
  unsub();
121414
- if (resolve35) {
121415
- resolve35();
121416
- resolve35 = null;
121508
+ if (resolve34) {
121509
+ resolve34();
121510
+ resolve34 = null;
121417
121511
  }
121418
121512
  };
121419
121513
  signal3?.addEventListener("abort", cleanup, { once: true });
@@ -121426,7 +121520,7 @@ function bridgeEventIterable(bridge, signal3) {
121426
121520
  return { done: false, value: buffer.shift() };
121427
121521
  }
121428
121522
  await new Promise((r) => {
121429
- resolve35 = r;
121523
+ resolve34 = r;
121430
121524
  });
121431
121525
  }
121432
121526
  },
@@ -121449,23 +121543,23 @@ function tailEventIterable(signal3) {
121449
121543
  return {
121450
121544
  [Symbol.asyncIterator]() {
121451
121545
  const buffer = [];
121452
- let resolve35 = null;
121546
+ let resolve34 = null;
121453
121547
  let done = false;
121454
121548
  const unsub = getTailFanout().subscribe((event) => {
121455
121549
  if (done)
121456
121550
  return;
121457
121551
  buffer.push(event);
121458
- if (resolve35) {
121459
- resolve35();
121460
- resolve35 = null;
121552
+ if (resolve34) {
121553
+ resolve34();
121554
+ resolve34 = null;
121461
121555
  }
121462
121556
  });
121463
121557
  const cleanup = () => {
121464
121558
  done = true;
121465
121559
  unsub();
121466
- if (resolve35) {
121467
- resolve35();
121468
- resolve35 = null;
121560
+ if (resolve34) {
121561
+ resolve34();
121562
+ resolve34 = null;
121469
121563
  }
121470
121564
  };
121471
121565
  signal3?.addEventListener("abort", cleanup, { once: true });
@@ -121478,7 +121572,7 @@ function tailEventIterable(signal3) {
121478
121572
  return { done: false, value: buffer.shift() };
121479
121573
  }
121480
121574
  await new Promise((r) => {
121481
- resolve35 = r;
121575
+ resolve34 = r;
121482
121576
  });
121483
121577
  }
121484
121578
  },
@@ -121956,7 +122050,7 @@ var init_router = __esm(() => {
121956
122050
  }
121957
122051
  try {
121958
122052
  const grant = createArtifactPresentation({
121959
- sourcePath: isAbsolute8(input.sourcePath) ? input.sourcePath : resolve34(workspaceRoot, input.sourcePath),
122053
+ sourcePath: isAbsolute8(input.sourcePath) ? input.sourcePath : resolve33(workspaceRoot, input.sourcePath),
121960
122054
  entryPath: input.entryPath,
121961
122055
  title: input.title,
121962
122056
  ttlMs: input.ttlMs
@@ -124656,8 +124750,8 @@ function startBridgeServerTRPC(options) {
124656
124750
  }
124657
124751
  const iterable = isObservable(result) ? observableToAsyncIterable(result, abortController.signal) : result;
124658
124752
  const iterator = iterable[Symbol.asyncIterator]();
124659
- const abortPromise = new Promise((resolve35) => {
124660
- abortController.signal.addEventListener("abort", () => resolve35("abort"), {
124753
+ const abortPromise = new Promise((resolve34) => {
124754
+ abortController.signal.addEventListener("abort", () => resolve34("abort"), {
124661
124755
  once: true
124662
124756
  });
124663
124757
  });
@@ -126555,8 +126649,8 @@ async function runPairCommand(context, args) {
126555
126649
  process.on("SIGINT", handleSignal);
126556
126650
  process.on("SIGTERM", handleSignal);
126557
126651
  try {
126558
- await new Promise((resolve35) => {
126559
- controller.signal.addEventListener("abort", () => resolve35(), { once: true });
126652
+ await new Promise((resolve34) => {
126653
+ controller.signal.addEventListener("abort", () => resolve34(), { once: true });
126560
126654
  });
126561
126655
  } finally {
126562
126656
  process.off("SIGINT", handleSignal);
@@ -127787,7 +127881,7 @@ import { spawnSync as spawnSync11 } from "child_process";
127787
127881
  import { createHash as createHash14 } from "crypto";
127788
127882
  import { mkdirSync as mkdirSync22 } from "fs";
127789
127883
  import { homedir as homedir46 } from "os";
127790
- import { basename as basename22, join as join63, resolve as resolve35 } from "path";
127884
+ import { basename as basename22, join as join63, resolve as resolve34 } from "path";
127791
127885
  async function runSessionCommand(context, args) {
127792
127886
  const action = args[0];
127793
127887
  if (!action || action === "help" || action === "--help" || action === "-h") {
@@ -128079,8 +128173,8 @@ function readOptionValue(args, index2, flag) {
128079
128173
  }
128080
128174
  function resolveProjectPath2(context, projectPath) {
128081
128175
  const rawPath = projectPath?.trim() || context.cwd;
128082
- const expanded = rawPath === "~" ? context.env.HOME?.trim() || homedir46() : rawPath.startsWith("~/") ? resolve35(context.env.HOME?.trim() || homedir46(), rawPath.slice(2)) : rawPath;
128083
- return resolve35(context.cwd, expanded);
128176
+ const expanded = rawPath === "~" ? context.env.HOME?.trim() || homedir46() : rawPath.startsWith("~/") ? resolve34(context.env.HOME?.trim() || homedir46(), rawPath.slice(2)) : rawPath;
128177
+ return resolve34(context.cwd, expanded);
128084
128178
  }
128085
128179
  function resolveControlPlaneDbPath2(context) {
128086
128180
  const explicitPath = context.env.OPENSCOUT_CONTROL_PLANE_DB?.trim();
@@ -128520,8 +128614,8 @@ __export(exports_server, {
128520
128614
  import { spawn as spawn10 } from "child_process";
128521
128615
  import { existsSync as existsSync52, mkdirSync as mkdirSync23, openSync as openSync2, writeFileSync as writeFileSync17 } from "fs";
128522
128616
  import { homedir as homedir47 } from "os";
128523
- import { dirname as dirname31, join as join64, resolve as resolve36 } from "path";
128524
- import { fileURLToPath as fileURLToPath12 } from "url";
128617
+ import { dirname as dirname30, join as join64, resolve as resolve35 } from "path";
128618
+ import { fileURLToPath as fileURLToPath11 } from "url";
128525
128619
  function renderServerCommandHelp() {
128526
128620
  return [
128527
128621
  "scout server \u2014 Scout web UI (Bun runtime)",
@@ -128580,7 +128674,7 @@ function resolveScoutControlPlaneWebServerEntry() {
128580
128674
  startDirectories: [
128581
128675
  process.env.OPENSCOUT_SETUP_CWD,
128582
128676
  process.cwd(),
128583
- dirname31(fileURLToPath12(import.meta.url))
128677
+ dirname30(fileURLToPath11(import.meta.url))
128584
128678
  ]
128585
128679
  });
128586
128680
  const source = resolveRepoEntrypoint(repoRoot, "packages/web/server/index.ts");
@@ -129102,14 +129196,14 @@ __export(exports_setup, {
129102
129196
  });
129103
129197
  import { existsSync as existsSync53 } from "fs";
129104
129198
  import { homedir as homedir48 } from "os";
129105
- import { dirname as dirname32, join as join65, resolve as resolve37 } from "path";
129199
+ import { dirname as dirname31, join as join65, resolve as resolve36 } from "path";
129106
129200
  import { createInterface as createInterface4 } from "readline/promises";
129107
129201
  function findGitRoot2(startDirectory) {
129108
- let current = resolve37(startDirectory);
129202
+ let current = resolve36(startDirectory);
129109
129203
  while (true) {
129110
129204
  if (existsSync53(join65(current, ".git")))
129111
129205
  return current;
129112
- const parent = dirname32(current);
129206
+ const parent = dirname31(current);
129113
129207
  if (parent === current)
129114
129208
  return null;
129115
129209
  current = parent;
@@ -129117,8 +129211,8 @@ function findGitRoot2(startDirectory) {
129117
129211
  }
129118
129212
  function suggestProjectSourceRoot(currentDirectory, homeDirectory = homedir48()) {
129119
129213
  const gitRoot = findGitRoot2(currentDirectory);
129120
- if (gitRoot && resolve37(gitRoot) !== resolve37(homeDirectory))
129121
- return dirname32(gitRoot);
129214
+ if (gitRoot && resolve36(gitRoot) !== resolve36(homeDirectory))
129215
+ return dirname31(gitRoot);
129122
129216
  for (const candidate of [
129123
129217
  join65(homeDirectory, "dev"),
129124
129218
  join65(homeDirectory, "Developer"),
@@ -129127,7 +129221,7 @@ function suggestProjectSourceRoot(currentDirectory, homeDirectory = homedir48())
129127
129221
  if (existsSync53(candidate))
129128
129222
  return candidate;
129129
129223
  }
129130
- return resolve37(currentDirectory);
129224
+ return resolve36(currentDirectory);
129131
129225
  }
129132
129226
  function expandHome(value, homeDirectory = homedir48()) {
129133
129227
  if (value === "~")
@@ -129156,7 +129250,7 @@ async function resolveSetupSourceRoots(context, currentDirectory, sourceRoots, e
129156
129250
  const selectedRoot = (await ask(suggestedRoot, Math.max(0, existing.roots.length - 1))).trim();
129157
129251
  if (!selectedRoot && existing.roots.length > 0)
129158
129252
  return existing.roots;
129159
- return [resolve37(currentDirectory, expandHome(selectedRoot || suggestedRoot))];
129253
+ return [resolve36(currentDirectory, expandHome(selectedRoot || suggestedRoot))];
129160
129254
  }
129161
129255
  async function runSetupCommand(context, args) {
129162
129256
  const options = parseSetupCommandOptions(args, defaultScoutContextDirectory(context));
@@ -129276,7 +129370,7 @@ function writeStatusline(value) {
129276
129370
  `);
129277
129371
  }
129278
129372
  function runDelegateStatusline(command, input, env) {
129279
- return new Promise((resolve38) => {
129373
+ return new Promise((resolve37) => {
129280
129374
  const child = spawn11("sh", ["-lc", command], {
129281
129375
  env: {
129282
129376
  ...env,
@@ -129291,7 +129385,7 @@ function runDelegateStatusline(command, input, env) {
129291
129385
  return;
129292
129386
  settled = true;
129293
129387
  clearTimeout(timer);
129294
- resolve38(value?.trimEnd() || null);
129388
+ resolve37(value?.trimEnd() || null);
129295
129389
  };
129296
129390
  const timer = setTimeout(() => {
129297
129391
  child.kill("SIGTERM");
@@ -130036,8 +130130,8 @@ import { EventEmitter } from "events";
130036
130130
  import { Buffer as Buffer2 } from "buffer";
130037
130131
  import { Buffer as Buffer3 } from "buffer";
130038
130132
  import { EventEmitter as EventEmitter2 } from "events";
130039
- import { resolve as resolve38, dirname as dirname33 } from "path";
130040
- import { fileURLToPath as fileURLToPath13 } from "url";
130133
+ import { resolve as resolve37, dirname as dirname32 } from "path";
130134
+ import { fileURLToPath as fileURLToPath12 } from "url";
130041
130135
  import { resolve as resolve210, isAbsolute as isAbsolute9, parse as parse8 } from "path";
130042
130136
  import { existsSync as existsSync54 } from "fs";
130043
130137
  import { basename as basename23, join as join66 } from "path";
@@ -133172,13 +133266,13 @@ class DebounceController {
133172
133266
  }
133173
133267
  debounce(id, ms, fn) {
133174
133268
  const scopeMap = TIMERS_MAP.get(this.scopeId);
133175
- return new Promise((resolve40, reject) => {
133269
+ return new Promise((resolve39, reject) => {
133176
133270
  if (scopeMap.has(id)) {
133177
133271
  clearTimeout(scopeMap.get(id));
133178
133272
  }
133179
133273
  const timerId = setTimeout(() => {
133180
133274
  try {
133181
- resolve40(fn());
133275
+ resolve39(fn());
133182
133276
  } catch (error48) {
133183
133277
  reject(error48);
133184
133278
  }
@@ -133268,25 +133362,25 @@ function getParsers() {
133268
133362
  filetype: "javascript",
133269
133363
  aliases: ["javascriptreact"],
133270
133364
  queries: {
133271
- highlights: [resolve38(dirname33(fileURLToPath13(import.meta.url)), highlights_default)]
133365
+ highlights: [resolve37(dirname32(fileURLToPath12(import.meta.url)), highlights_default)]
133272
133366
  },
133273
- wasm: resolve38(dirname33(fileURLToPath13(import.meta.url)), tree_sitter_javascript_default)
133367
+ wasm: resolve37(dirname32(fileURLToPath12(import.meta.url)), tree_sitter_javascript_default)
133274
133368
  },
133275
133369
  {
133276
133370
  filetype: "typescript",
133277
133371
  aliases: ["typescriptreact"],
133278
133372
  queries: {
133279
- highlights: [resolve38(dirname33(fileURLToPath13(import.meta.url)), highlights_default2)]
133373
+ highlights: [resolve37(dirname32(fileURLToPath12(import.meta.url)), highlights_default2)]
133280
133374
  },
133281
- wasm: resolve38(dirname33(fileURLToPath13(import.meta.url)), tree_sitter_typescript_default)
133375
+ wasm: resolve37(dirname32(fileURLToPath12(import.meta.url)), tree_sitter_typescript_default)
133282
133376
  },
133283
133377
  {
133284
133378
  filetype: "markdown",
133285
133379
  queries: {
133286
- highlights: [resolve38(dirname33(fileURLToPath13(import.meta.url)), highlights_default3)],
133287
- injections: [resolve38(dirname33(fileURLToPath13(import.meta.url)), injections_default)]
133380
+ highlights: [resolve37(dirname32(fileURLToPath12(import.meta.url)), highlights_default3)],
133381
+ injections: [resolve37(dirname32(fileURLToPath12(import.meta.url)), injections_default)]
133288
133382
  },
133289
- wasm: resolve38(dirname33(fileURLToPath13(import.meta.url)), tree_sitter_markdown_default),
133383
+ wasm: resolve37(dirname32(fileURLToPath12(import.meta.url)), tree_sitter_markdown_default),
133290
133384
  injectionMapping: {
133291
133385
  nodeTypes: {
133292
133386
  inline: "markdown_inline",
@@ -133309,16 +133403,16 @@ function getParsers() {
133309
133403
  {
133310
133404
  filetype: "markdown_inline",
133311
133405
  queries: {
133312
- highlights: [resolve38(dirname33(fileURLToPath13(import.meta.url)), highlights_default4)]
133406
+ highlights: [resolve37(dirname32(fileURLToPath12(import.meta.url)), highlights_default4)]
133313
133407
  },
133314
- wasm: resolve38(dirname33(fileURLToPath13(import.meta.url)), tree_sitter_markdown_inline_default)
133408
+ wasm: resolve37(dirname32(fileURLToPath12(import.meta.url)), tree_sitter_markdown_inline_default)
133315
133409
  },
133316
133410
  {
133317
133411
  filetype: "zig",
133318
133412
  queries: {
133319
- highlights: [resolve38(dirname33(fileURLToPath13(import.meta.url)), highlights_default5)]
133413
+ highlights: [resolve37(dirname32(fileURLToPath12(import.meta.url)), highlights_default5)]
133320
133414
  },
133321
- wasm: resolve38(dirname33(fileURLToPath13(import.meta.url)), tree_sitter_zig_default)
133415
+ wasm: resolve37(dirname32(fileURLToPath12(import.meta.url)), tree_sitter_zig_default)
133322
133416
  }
133323
133417
  ];
133324
133418
  }
@@ -144288,7 +144382,7 @@ var init_index_vy1rm1x3 = __esm(async () => {
144288
144382
  if (this.initializePromise) {
144289
144383
  return this.initializePromise;
144290
144384
  }
144291
- this.initializePromise = new Promise((resolve310, reject) => {
144385
+ this.initializePromise = new Promise((resolve39, reject) => {
144292
144386
  const timeoutMs = this.options.initTimeout ?? 1e4;
144293
144387
  const timeoutId = setTimeout(() => {
144294
144388
  const error48 = new Error("Worker initialization timed out");
@@ -144296,7 +144390,7 @@ var init_index_vy1rm1x3 = __esm(async () => {
144296
144390
  this.initializeResolvers = undefined;
144297
144391
  reject(error48);
144298
144392
  }, timeoutMs);
144299
- this.initializeResolvers = { resolve: resolve310, reject, timeoutId };
144393
+ this.initializeResolvers = { resolve: resolve39, reject, timeoutId };
144300
144394
  this.worker?.postMessage({
144301
144395
  type: "INIT",
144302
144396
  dataPath: this.options.dataPath
@@ -144337,8 +144431,8 @@ var init_index_vy1rm1x3 = __esm(async () => {
144337
144431
  }
144338
144432
  async getPerformance() {
144339
144433
  const messageId = `performance_${this.messageIdCounter++}`;
144340
- return new Promise((resolve310) => {
144341
- this.messageCallbacks.set(messageId, resolve310);
144434
+ return new Promise((resolve39) => {
144435
+ this.messageCallbacks.set(messageId, resolve39);
144342
144436
  this.worker?.postMessage({ type: "GET_PERFORMANCE", messageId });
144343
144437
  });
144344
144438
  }
@@ -144351,8 +144445,8 @@ var init_index_vy1rm1x3 = __esm(async () => {
144351
144445
  }
144352
144446
  }
144353
144447
  const messageId = `oneshot_${this.messageIdCounter++}`;
144354
- return new Promise((resolve310) => {
144355
- this.messageCallbacks.set(messageId, resolve310);
144448
+ return new Promise((resolve39) => {
144449
+ this.messageCallbacks.set(messageId, resolve39);
144356
144450
  this.worker?.postMessage({
144357
144451
  type: "ONESHOT_HIGHLIGHT",
144358
144452
  content,
@@ -144468,8 +144562,8 @@ var init_index_vy1rm1x3 = __esm(async () => {
144468
144562
  }
144469
144563
  async preloadParser(filetype) {
144470
144564
  const messageId = `has_parser_${this.messageIdCounter++}`;
144471
- const response = await new Promise((resolve310) => {
144472
- this.messageCallbacks.set(messageId, resolve310);
144565
+ const response = await new Promise((resolve39) => {
144566
+ this.messageCallbacks.set(messageId, resolve39);
144473
144567
  this.worker?.postMessage({
144474
144568
  type: "PRELOAD_PARSER",
144475
144569
  filetype,
@@ -144496,8 +144590,8 @@ var init_index_vy1rm1x3 = __esm(async () => {
144496
144590
  }
144497
144591
  this.buffers.set(id, { id, content, filetype, version: version3, hasParser: false });
144498
144592
  const messageId = `init_${this.messageIdCounter++}`;
144499
- const response = await new Promise((resolve310) => {
144500
- this.messageCallbacks.set(messageId, resolve310);
144593
+ const response = await new Promise((resolve39) => {
144594
+ this.messageCallbacks.set(messageId, resolve39);
144501
144595
  this.worker?.postMessage({
144502
144596
  type: "INITIALIZE_PARSER",
144503
144597
  bufferId: id,
@@ -144553,9 +144647,9 @@ var init_index_vy1rm1x3 = __esm(async () => {
144553
144647
  this.editQueues.delete(bufferId);
144554
144648
  }
144555
144649
  if (this.worker) {
144556
- await new Promise((resolve310) => {
144650
+ await new Promise((resolve39) => {
144557
144651
  const messageId = `dispose_${bufferId}`;
144558
- this.messageCallbacks.set(messageId, resolve310);
144652
+ this.messageCallbacks.set(messageId, resolve39);
144559
144653
  try {
144560
144654
  this.worker.postMessage({
144561
144655
  type: "DISPOSE_BUFFER",
@@ -144563,13 +144657,13 @@ var init_index_vy1rm1x3 = __esm(async () => {
144563
144657
  });
144564
144658
  } catch (error48) {
144565
144659
  console.error("Error disposing buffer", error48);
144566
- resolve310(false);
144660
+ resolve39(false);
144567
144661
  }
144568
144662
  setTimeout(() => {
144569
144663
  if (this.messageCallbacks.has(messageId)) {
144570
144664
  this.messageCallbacks.delete(messageId);
144571
144665
  console.warn({ bufferId }, "Timed out waiting for buffer to be disposed");
144572
- resolve310(false);
144666
+ resolve39(false);
144573
144667
  }
144574
144668
  }, 3000);
144575
144669
  });
@@ -144626,12 +144720,12 @@ var init_index_vy1rm1x3 = __esm(async () => {
144626
144720
  this.options.dataPath = dataPath;
144627
144721
  if (this.initialized && this.worker) {
144628
144722
  const messageId = `update_datapath_${this.messageIdCounter++}`;
144629
- return new Promise((resolve310, reject) => {
144723
+ return new Promise((resolve39, reject) => {
144630
144724
  this.messageCallbacks.set(messageId, (response) => {
144631
144725
  if (response.error) {
144632
144726
  reject(new Error(response.error));
144633
144727
  } else {
144634
- resolve310();
144728
+ resolve39();
144635
144729
  }
144636
144730
  });
144637
144731
  this.worker.postMessage({
@@ -144647,12 +144741,12 @@ var init_index_vy1rm1x3 = __esm(async () => {
144647
144741
  throw new Error("Cannot clear cache: client is not initialized");
144648
144742
  }
144649
144743
  const messageId = `clear_cache_${this.messageIdCounter++}`;
144650
- return new Promise((resolve310, reject) => {
144744
+ return new Promise((resolve39, reject) => {
144651
144745
  this.messageCallbacks.set(messageId, (response) => {
144652
144746
  if (response.error) {
144653
144747
  reject(new Error(response.error));
144654
144748
  } else {
144655
- resolve310();
144749
+ resolve39();
144656
144750
  }
144657
144751
  });
144658
144752
  this.worker.postMessage({
@@ -162554,14 +162648,14 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
162554
162648
  prevActScopeDepth !== actScopeDepth - 1 && console.error("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. ");
162555
162649
  actScopeDepth = prevActScopeDepth;
162556
162650
  }
162557
- function recursivelyFlushAsyncActWork(returnValue, resolve40, reject) {
162651
+ function recursivelyFlushAsyncActWork(returnValue, resolve39, reject) {
162558
162652
  var queue = ReactSharedInternals.actQueue;
162559
162653
  if (queue !== null)
162560
162654
  if (queue.length !== 0)
162561
162655
  try {
162562
162656
  flushActQueue(queue);
162563
162657
  enqueueTask(function() {
162564
- return recursivelyFlushAsyncActWork(returnValue, resolve40, reject);
162658
+ return recursivelyFlushAsyncActWork(returnValue, resolve39, reject);
162565
162659
  });
162566
162660
  return;
162567
162661
  } catch (error48) {
@@ -162569,7 +162663,7 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
162569
162663
  }
162570
162664
  else
162571
162665
  ReactSharedInternals.actQueue = null;
162572
- 0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) : resolve40(returnValue);
162666
+ 0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) : resolve39(returnValue);
162573
162667
  }
162574
162668
  function flushActQueue(queue) {
162575
162669
  if (!isFlushing) {
@@ -162745,14 +162839,14 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
162745
162839
  didAwaitActCall || didWarnNoAwaitAct || (didWarnNoAwaitAct = true, console.error("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"));
162746
162840
  });
162747
162841
  return {
162748
- then: function(resolve40, reject) {
162842
+ then: function(resolve39, reject) {
162749
162843
  didAwaitActCall = true;
162750
162844
  thenable.then(function(returnValue) {
162751
162845
  popActScope(prevActQueue, prevActScopeDepth);
162752
162846
  if (prevActScopeDepth === 0) {
162753
162847
  try {
162754
162848
  flushActQueue(queue), enqueueTask(function() {
162755
- return recursivelyFlushAsyncActWork(returnValue, resolve40, reject);
162849
+ return recursivelyFlushAsyncActWork(returnValue, resolve39, reject);
162756
162850
  });
162757
162851
  } catch (error$0) {
162758
162852
  ReactSharedInternals.thrownErrors.push(error$0);
@@ -162763,7 +162857,7 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
162763
162857
  reject(_thrownError);
162764
162858
  }
162765
162859
  } else
162766
- resolve40(returnValue);
162860
+ resolve39(returnValue);
162767
162861
  }, function(error48) {
162768
162862
  popActScope(prevActQueue, prevActScopeDepth);
162769
162863
  0 < ReactSharedInternals.thrownErrors.length ? (error48 = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(error48)) : reject(error48);
@@ -162779,11 +162873,11 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
162779
162873
  if (0 < ReactSharedInternals.thrownErrors.length)
162780
162874
  throw callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback;
162781
162875
  return {
162782
- then: function(resolve40, reject) {
162876
+ then: function(resolve39, reject) {
162783
162877
  didAwaitActCall = true;
162784
162878
  prevActScopeDepth === 0 ? (ReactSharedInternals.actQueue = queue, enqueueTask(function() {
162785
- return recursivelyFlushAsyncActWork(returnValue$jscomp$0, resolve40, reject);
162786
- })) : resolve40(returnValue$jscomp$0);
162879
+ return recursivelyFlushAsyncActWork(returnValue$jscomp$0, resolve39, reject);
162880
+ })) : resolve39(returnValue$jscomp$0);
162787
162881
  }
162788
162882
  };
162789
162883
  };
@@ -165264,8 +165358,8 @@ It can also happen if the client has a browser extension installed which messes
165264
165358
  currentEntangledActionThenable = {
165265
165359
  status: "pending",
165266
165360
  value: undefined,
165267
- then: function(resolve40) {
165268
- entangledListeners.push(resolve40);
165361
+ then: function(resolve39) {
165362
+ entangledListeners.push(resolve39);
165269
165363
  }
165270
165364
  };
165271
165365
  }
@@ -165289,8 +165383,8 @@ It can also happen if the client has a browser extension installed which messes
165289
165383
  status: "pending",
165290
165384
  value: null,
165291
165385
  reason: null,
165292
- then: function(resolve40) {
165293
- listeners.push(resolve40);
165386
+ then: function(resolve39) {
165387
+ listeners.push(resolve39);
165294
165388
  }
165295
165389
  };
165296
165390
  thenable.then(function() {
@@ -193552,7 +193646,7 @@ async function runScoutMonitorApp(options) {
193552
193646
  const renderer = await createCliRenderer();
193553
193647
  const root = createRoot(renderer);
193554
193648
  let closed = false;
193555
- await new Promise((resolve40) => {
193649
+ await new Promise((resolve39) => {
193556
193650
  const close = () => {
193557
193651
  if (closed) {
193558
193652
  return;
@@ -193567,7 +193661,7 @@ async function runScoutMonitorApp(options) {
193567
193661
  process.stdin.setRawMode?.(false);
193568
193662
  process.stdin.pause();
193569
193663
  }
193570
- resolve40();
193664
+ resolve39();
193571
193665
  };
193572
193666
  process.once("SIGINT", close);
193573
193667
  process.once("SIGTERM", close);
@@ -193618,7 +193712,7 @@ __export(exports_up, {
193618
193712
  runUpCommand: () => runUpCommand
193619
193713
  });
193620
193714
  import { existsSync as existsSync55 } from "fs";
193621
- import { resolve as resolve40 } from "path";
193715
+ import { resolve as resolve39 } from "path";
193622
193716
  function looksLikePath(value) {
193623
193717
  return value.includes("/") || value.startsWith(".") || value.startsWith("~");
193624
193718
  }
@@ -193726,8 +193820,8 @@ async function runUpCommand(context, args) {
193726
193820
  throw new ScoutCliError(`usage: scout up <name|path> [--name <alias>] [--harness <${SUPPORTED_LOCAL_AGENT_HARNESSES.join("|")}>] [--provider <provider>] [--model <model>] [--reasoning-effort <effort>] [--permission-profile <${formatScoutPermissionProfiles()}>]`);
193727
193821
  }
193728
193822
  let projectPath;
193729
- if (looksLikePath(target2) || existsSync55(resolve40(target2))) {
193730
- projectPath = resolve40(target2);
193823
+ if (looksLikePath(target2) || existsSync55(resolve39(target2))) {
193824
+ projectPath = resolve39(target2);
193731
193825
  } else {
193732
193826
  const resolved = await resolveLocalAgentByName(target2);
193733
193827
  if (!resolved) {
@@ -194481,7 +194575,7 @@ init_options();
194481
194575
  // ../../apps/desktop/src/cli/broker-update.ts
194482
194576
  import { randomUUID as randomUUID7 } from "crypto";
194483
194577
  import { mkdir as mkdir15, readFile as readFile18, rename, rm as rm6, stat as stat6, writeFile as writeFile12 } from "fs/promises";
194484
- import { basename as basename26, dirname as dirname36, join as join70 } from "path";
194578
+ import { basename as basename26, dirname as dirname35, join as join70 } from "path";
194485
194579
 
194486
194580
  // ../../apps/desktop/src/cli/runtime-freshness.ts
194487
194581
  function isRecord16(value) {
@@ -194523,7 +194617,7 @@ var BROKER_UPDATE_LOCK_WAIT_GRACE_MS = 15000;
194523
194617
  var BROKER_UPDATE_LOCK_WAIT_MS = SCOUTD_RESTART_TIMEOUT_MS + BROKER_UPDATE_LOCK_WAIT_GRACE_MS;
194524
194618
  var BROKER_UPDATE_LOCK_POLL_MS = 50;
194525
194619
  function sleep2(ms) {
194526
- return new Promise((resolve41) => setTimeout(resolve41, ms));
194620
+ return new Promise((resolve40) => setTimeout(resolve40, ms));
194527
194621
  }
194528
194622
  function errorCode2(error48) {
194529
194623
  return error48 && typeof error48 === "object" && "code" in error48 ? String(error48.code ?? "") : "";
@@ -194621,7 +194715,7 @@ async function tryCreateOwnedLock(lockPath) {
194621
194715
  };
194622
194716
  }
194623
194717
  async function tryReclaimDeadLock(lockPath, observedOwner) {
194624
- const reclaimPath = join70(dirname36(lockPath), BROKER_UPDATE_RECLAIM_DIRECTORY);
194718
+ const reclaimPath = join70(dirname35(lockPath), BROKER_UPDATE_RECLAIM_DIRECTORY);
194625
194719
  const reclaimGuard = await tryCreateOwnedLock(reclaimPath);
194626
194720
  if (!reclaimGuard.acquired) {
194627
194721
  return false;
@@ -194663,7 +194757,7 @@ async function waitForBrokerUpdateLockRelease(lockPath, deadline) {
194663
194757
  return false;
194664
194758
  }
194665
194759
  async function acquireBrokerUpdateLock(lockPath, waitTimeoutMs) {
194666
- await mkdir15(dirname36(lockPath), { recursive: true });
194760
+ await mkdir15(dirname35(lockPath), { recursive: true });
194667
194761
  const waitDeadline = Date.now() + waitTimeoutMs;
194668
194762
  for (;; ) {
194669
194763
  const created = await tryCreateOwnedLock(lockPath);
@@ -194690,7 +194784,7 @@ async function acquireBrokerUpdateLock(lockPath, waitTimeoutMs) {
194690
194784
  }
194691
194785
  }
194692
194786
  async function writeCliMtimeCheckpointAtomically(checkpointPath, mtime) {
194693
- const checkpointDirectory = dirname36(checkpointPath);
194787
+ const checkpointDirectory = dirname35(checkpointPath);
194694
194788
  await mkdir15(checkpointDirectory, { recursive: true });
194695
194789
  const temporaryPath = join70(checkpointDirectory, `.${basename26(checkpointPath)}.${process.pid}.${randomUUID7()}.tmp`);
194696
194790
  try {
@@ -194727,7 +194821,7 @@ async function ensureBrokerUptodate(options) {
194727
194821
  const report = options.report ?? (() => {
194728
194822
  return;
194729
194823
  });
194730
- const lockPath = join70(dirname36(options.checkpointPath), BROKER_UPDATE_LOCK_DIRECTORY);
194824
+ const lockPath = join70(dirname35(options.checkpointPath), BROKER_UPDATE_LOCK_DIRECTORY);
194731
194825
  let lock;
194732
194826
  try {
194733
194827
  lock = await acquireBrokerUpdateLock(lockPath, options.lockWaitTimeoutMs ?? BROKER_UPDATE_LOCK_WAIT_MS);