@openscout/scout 0.2.105 → 0.2.107

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (575) hide show
  1. package/README.md +26 -0
  2. package/bin/scoutd +0 -0
  3. package/dist/build-manifest.json +3 -3
  4. package/dist/chat.mjs +23 -1
  5. package/dist/client/assets/ActivityScreen-CZmGwQ2U.js +1 -0
  6. package/dist/client/assets/{AddProjectForm-CHNJ4NnS.js → AddProjectForm-CusDRiVO.js} +1 -1
  7. package/dist/client/assets/{AdventureEvidence-B4mEvXeD.js → AdventureEvidence-CyegKk1V.js} +1 -1
  8. package/dist/client/assets/{AdventureReader-ZsBDQITY.js → AdventureReader-X-hbTOi0.js} +1 -1
  9. package/dist/client/assets/{AdventureScenery-DSxDlqG1.js → AdventureScenery-LPXSVP67.js} +1 -1
  10. package/dist/client/assets/AgentAdventures-BAgxdOF8.js +1 -0
  11. package/dist/client/assets/AgentAvatar-CrP1eXxk.js +1 -0
  12. package/dist/client/assets/AgentConfigurationScreen-1L0IQm2w.js +1 -0
  13. package/dist/client/assets/AgentDefinitionsWorkspace-DguGs7jZ.js +1 -0
  14. package/dist/client/assets/{AgentDetailCard-MIEBKw_S.js → AgentDetailCard-DtHT3sCo.js} +1 -1
  15. package/dist/client/assets/AgentFloorView-DH4jiDgw.js +1 -0
  16. package/dist/client/assets/{AgentFloorWorld-BTqwmK5G.js → AgentFloorWorld-CjoIa6jA.js} +1 -1
  17. package/dist/client/assets/AgentInfoScreen-DYtmKkeE.js +1 -0
  18. package/dist/client/assets/{AgentLaneCard-C4rKLLdT.js → AgentLaneCard-BaZ2g-f8.js} +1 -1
  19. package/dist/client/assets/{AgentLaneChrome-fGC-ZrJS.js → AgentLaneChrome-TF1SlJSc.js} +1 -1
  20. package/dist/client/assets/{AgentLaneDetailSheet-BTF4_th9.js → AgentLaneDetailSheet-EzEPsn3g.js} +1 -1
  21. package/dist/client/assets/{AgentLaneSummaryResize-DgSeA_vS.js → AgentLaneSummaryResize-dpp7YvrX.js} +1 -1
  22. package/dist/client/assets/AgentLanesEmbedScreen-BlSof_6S.js +1 -0
  23. package/dist/client/assets/{AgentLanesPreflight-CcS23wij.js → AgentLanesPreflight-Ry-aqDTr.js} +1 -1
  24. package/dist/client/assets/AgentLanesView-BJi9xXz6.js +2 -0
  25. package/dist/client/assets/{AgentLiveActions-6Kfr1uOT.js → AgentLiveActions-CfTupTEl.js} +1 -1
  26. package/dist/client/assets/AgentMasterScreen-EJhmuKgl.js +1 -0
  27. package/dist/client/assets/AgentSessions-B1gOhDBf.js +6 -0
  28. package/dist/client/assets/AgentsConsole-RXGqRvcb.js +1 -0
  29. package/dist/client/assets/AgentsScreen-ChwMBs11.js +1 -0
  30. package/dist/client/assets/AgentsSubnav-DwNX4yy0.js +1 -0
  31. package/dist/client/assets/{AstronautSuit-D67fIBdR.js → AstronautSuit-Cchnc4Ug.js} +1 -1
  32. package/dist/client/assets/{AtopView-Ck30FbzG.js → AtopView-gkEp4y__.js} +1 -1
  33. package/dist/client/assets/{BackToPicker-CkBhGRlD.js → BackToPicker-CUkjnoVk.js} +1 -1
  34. package/dist/client/assets/BriefingDetailScreen-DrlC3qkm.js +1 -0
  35. package/dist/client/assets/{BriefingsScreen-DTxYMr3a.js → BriefingsScreen-B1HlBMGZ.js} +1 -1
  36. package/dist/client/assets/{BrokerMetadataPanel-crirZCdo.js → BrokerMetadataPanel-Dk242Yh_.js} +1 -1
  37. package/dist/client/assets/BrokerScreen-DwOF6bMA.js +8 -0
  38. package/dist/client/assets/{Canvas-CRP0KjKb.js → Canvas-X9pVSkw3.js} +1 -1
  39. package/dist/client/assets/{CastPicker-ZPomvOf-.js → CastPicker-BXUtPAGC.js} +1 -1
  40. package/dist/client/assets/ChannelComposer-DoK7IDGa.js +1 -0
  41. package/dist/client/assets/ChannelSidebar-e9DOPulb.js +1 -0
  42. package/dist/client/assets/{CharacterFamilyPreview-ckVkecDO.js → CharacterFamilyPreview-DMfw7UM_.js} +1 -1
  43. package/dist/client/assets/{ChatAvatar-DKBsbOqk.js → ChatAvatar-C3a_o5Hj.js} +1 -1
  44. package/dist/client/assets/ChatBits-CsvxbToF.js +1 -0
  45. package/dist/client/assets/{ChatCollapsedStrip-Co0NmqOO.js → ChatCollapsedStrip-FEmQ_G9J.js} +1 -1
  46. package/dist/client/assets/ChatRichInput-DhtwFxQE.js +31 -0
  47. package/dist/client/assets/ChatRightPanel-C1h_aIkn.js +1 -0
  48. package/dist/client/assets/ChatSpaceSurface-BXyLYKHn.js +1 -0
  49. package/dist/client/assets/ChatSpaceTheme-3wLZGsvT.css +1 -0
  50. package/dist/client/assets/ChatSpaceTheme-CUH8bTZc.js +1 -0
  51. package/dist/client/assets/{CodeDiffPane-D-iv28LJ.js → CodeDiffPane-DuQRwpgK.js} +1 -1
  52. package/dist/client/assets/{CodeProjectPicker-CZ3gDdiT.js → CodeProjectPicker-ZQ6gSBpg.js} +1 -1
  53. package/dist/client/assets/{CodeScreen-CSC-zbP9.js → CodeScreen-BXyKeL5T.js} +1 -1
  54. package/dist/client/assets/{CommsCanvas-DdNAwjGW.js → CommsCanvas-THp0r_U8.js} +1 -1
  55. package/dist/client/assets/{CommsDeck-mGWY7Ivi.js → CommsDeck-BVmSMV2V.js} +1 -1
  56. package/dist/client/assets/{CommsFlowGraph-voDD9M5R.js → CommsFlowGraph-DxoOaLF_.js} +1 -1
  57. package/dist/client/assets/{CommsFlowMap-C33sgD48.js → CommsFlowMap-Vi8ziCPg.js} +1 -1
  58. package/dist/client/assets/{CommsSelection-BL8aYD7z.js → CommsSelection-BUoRbu9o.js} +1 -1
  59. package/dist/client/assets/ComposerAttachments-DW0AIb8k.js +1 -0
  60. package/dist/client/assets/ConversationComposer-CUQyArlk.js +1 -0
  61. package/dist/client/assets/ConversationFeedRows-DWiOfT-y.js +1 -0
  62. package/dist/client/assets/ConversationHeader-C-ZWscKj.js +1 -0
  63. package/dist/client/assets/{ConversationPanels-6pprBpmq.js → ConversationPanels-D9oC0xG5.js} +2 -2
  64. package/dist/client/assets/ConversationScreen-9MlMnEo4.css +1 -0
  65. package/dist/client/assets/ConversationScreen-CUfsQ4MR.js +2 -0
  66. package/dist/client/assets/ConversationStatus--IPm2nGh.js +1 -0
  67. package/dist/client/assets/{CrewAvatar-D0c9z5Qr.css → CrewAvatar-BnIPIn_Z.css} +1 -1
  68. package/dist/client/assets/CrewAvatar-kTznzqcO.js +1 -0
  69. package/dist/client/assets/{CrewSprite-Dp9KBBGY.js → CrewSprite-Dhryjx2c.js} +1 -1
  70. package/dist/client/assets/CrewStage-vdO0qm3D.js +1 -0
  71. package/dist/client/assets/CrewWorkspaces-DCBzAAS4.js +1 -0
  72. package/dist/client/assets/{DataTable-av71ehJV.js → DataTable-aH-jCyDq.js} +1 -1
  73. package/dist/client/assets/{DispatchAftermath-CcYGUB10.js → DispatchAftermath-66uQAorV.js} +1 -1
  74. package/dist/client/assets/{DocumentFocusViewer-DlMiEALb.js → DocumentFocusViewer-DJr0v0D_.js} +1 -1
  75. package/dist/client/assets/{EmbeddableSurfacesLab-CTkO_tQR.js → EmbeddableSurfacesLab-BBa70EhJ.js} +1 -1
  76. package/dist/client/assets/{EmptyState-CYUwYyAW.js → EmptyState-CZlrHXy-.js} +1 -1
  77. package/dist/client/assets/{FileViewerPane-Cxhixtks.js → FileViewerPane-BAO6mtjD.js} +1 -1
  78. package/dist/client/assets/FleetRollCallHud-C5q2567n.js +1 -0
  79. package/dist/client/assets/FlightObserveScreen-DZ2mrw91.js +1 -0
  80. package/dist/client/assets/{FloorContextSheet-Vj_wVZq1.js → FloorContextSheet-2_NVPQor.js} +1 -1
  81. package/dist/client/assets/{FloorExchangePanel-CjHSDXad.js → FloorExchangePanel-BU1pPu8K.js} +1 -1
  82. package/dist/client/assets/{FloorMessagePasses-BG4ebnX5.js → FloorMessagePasses-cLW2UGNP.js} +1 -1
  83. package/dist/client/assets/{FloorReplay-BoYaGY9t.js → FloorReplay-VFzA6Kxc.js} +1 -1
  84. package/dist/client/assets/FloorResourcesSheet-C-kQ6Ren.js +1 -0
  85. package/dist/client/assets/{FloorSavedWork-jbtRs-YE.js → FloorSavedWork-BeHDejWz.js} +1 -1
  86. package/dist/client/assets/FloorTacticalHUD-CO-iiFpb.js +1 -0
  87. package/dist/client/assets/{FollowScreen-CupyOgt4.js → FollowScreen-CFfkIbc6.js} +1 -1
  88. package/dist/client/assets/HarnessMark-C4naWc16.js +1 -0
  89. package/dist/client/assets/HarnessesScreen-DX3NLcDG.js +1 -0
  90. package/dist/client/assets/{HerdrSession-Dcm3vf9U.js → HerdrSession-_t7yM8vX.js} +2 -2
  91. package/dist/client/assets/{HomeHero-pIZtE1cC.js → HomeHero-DouPyNmz.js} +1 -1
  92. package/dist/client/assets/{HostAdvisorView-Dv5meXo2.js → HostAdvisorView-CnM1i8hW.js} +1 -1
  93. package/dist/client/assets/InviteLandingScreen-CEjG2E34.js +1 -0
  94. package/dist/client/assets/InviteSheet-CwxZtWCl.js +1 -0
  95. package/dist/client/assets/{JumpPalette-BmiSOEmp.js → JumpPalette-O1aJE9gR.js} +1 -1
  96. package/dist/client/assets/{KnowledgeSearchInspector-B8yiM524.js → KnowledgeSearchInspector-32n9baT-.js} +1 -1
  97. package/dist/client/assets/KnowledgeSearchScreen-Dd6jrQ0A.js +1 -0
  98. package/dist/client/assets/{LaneToolHoverCard-D2cnTeUd.js → LaneToolHoverCard-CJa110yk.js} +1 -1
  99. package/dist/client/assets/LaneTraceDetailSheet-DYrd0BIf.js +1 -0
  100. package/dist/client/assets/{LaneTraceEventFocus-BLhVHwff.js → LaneTraceEventFocus-TbrNHRj_.js} +1 -1
  101. package/dist/client/assets/{MeshCanvas-BR25OBTJ.js → MeshCanvas-DWZHYh1A.js} +2 -2
  102. package/dist/client/assets/{MeshCanvasMinimap-ClVolr4-.js → MeshCanvasMinimap-iswYFpIb.js} +1 -1
  103. package/dist/client/assets/MeshScreen-8nAzQVbm.js +1 -0
  104. package/dist/client/assets/{MeshTopologyView-BT3ke2D1.js → MeshTopologyView-BVvtqI8q.js} +2 -2
  105. package/dist/client/assets/MessageEmbeds-ksPazAKH.js +1 -0
  106. package/dist/client/assets/MessagesScreen-C3WB4T21.js +1 -0
  107. package/dist/client/assets/{MissionContextRail-CafjuseK.js → MissionContextRail-D62-Wis8.js} +1 -1
  108. package/dist/client/assets/MissionControlView-B9cNPXvl.js +1 -0
  109. package/dist/client/assets/{MissionFocusOverlay-nhy3hkxQ.js → MissionFocusOverlay-C1zys3Jv.js} +1 -1
  110. package/dist/client/assets/MissionLeftAgentRow-vycMV77n.js +1 -0
  111. package/dist/client/assets/{MissionLogPane-DiUf3vWW.js → MissionLogPane-B19lYSY9.js} +1 -1
  112. package/dist/client/assets/NativeAreaScreen-B1RLa85C.js +1 -0
  113. package/dist/client/assets/NativeAreaScreen-CV0OhGra.js +1 -0
  114. package/dist/client/assets/NativeAreaScreen-CzuZt6o1.js +1 -0
  115. package/dist/client/assets/{NewAgentModal-BQ2wQ5gp.js → NewAgentModal-Bh-L-emz.js} +1 -1
  116. package/dist/client/assets/NewChatComposer-C97-iTMK.js +19 -0
  117. package/dist/client/assets/{NewChatOrigin-C8ROO4ps.js → NewChatOrigin-DFbF_XvR.js} +1 -1
  118. package/dist/client/assets/{NodeDetailPanel-BNTqYC7m.js → NodeDetailPanel-CElOEpCh.js} +1 -1
  119. package/dist/client/assets/{NodeMenu-CcOeFRCB.js → NodeMenu-B-jjHf1c.js} +1 -1
  120. package/dist/client/assets/ObserveEmbedScreen-B7Qt69Ms.js +2 -0
  121. package/dist/client/assets/{ObserveTextFlow-CC5mnngm.js → ObserveTextFlow-PFnG_10h.js} +2 -2
  122. package/dist/client/assets/{ObservedTopologyPanel-DF6tRZL_.js → ObservedTopologyPanel-CUTIoLZJ.js} +1 -1
  123. package/dist/client/assets/OpenScoutAppShell-37PDFfA4.js +31 -0
  124. package/dist/client/assets/OpsAgentsView-DajlX8LO.js +1 -0
  125. package/dist/client/assets/OpsScreen-jVcaBKGi.js +1 -0
  126. package/dist/client/assets/OpsSubnav-BOOYShHE.js +1 -0
  127. package/dist/client/assets/ProjectAgentProfile-D_wlW4sQ.js +1 -0
  128. package/dist/client/assets/{ProjectAgentProfileBar-C8z22pJ2.js → ProjectAgentProfileBar-DHuMKJj-.js} +1 -1
  129. package/dist/client/assets/ProjectAgentProfileHero-Dbebtug1.js +1 -0
  130. package/dist/client/assets/ProjectsInbox-B8zYE4vP.css +1 -0
  131. package/dist/client/assets/ProjectsInbox-Cgu7B4--.js +2 -0
  132. package/dist/client/assets/ProjectsRail-CDWocin_.js +1 -0
  133. package/dist/client/assets/ProjectsScreen-B_CJycqW.js +1 -0
  134. package/dist/client/assets/ProjectsThreadAside-1MMl_qUD.js +1 -0
  135. package/dist/client/assets/Provider-C35yu29I.js +5 -0
  136. package/dist/client/assets/{RailRow-DUPqXMZh.js → RailRow-BjmWK420.js} +1 -1
  137. package/dist/client/assets/RawSessionsTable-DzT90hWu.js +1 -0
  138. package/dist/client/assets/RealtimeVoiceScreen-B6ylX3WQ.js +16 -0
  139. package/dist/client/assets/{RenderedWorkerSprite-C8fxndAh.js → RenderedWorkerSprite-Dhlyg89J.js} +1 -1
  140. package/dist/client/assets/{ReplayClock-DUVJjrIu.js → ReplayClock-348f17bW.js} +1 -1
  141. package/dist/client/assets/{ReplayLog-Bek1Vc4W.js → ReplayLog-CBnAM3ui.js} +1 -1
  142. package/dist/client/assets/{ReplayOutpost-DlRg3172.js → ReplayOutpost-DyRPfNFx.js} +1 -1
  143. package/dist/client/assets/{RepoDiffEmbedScreen-CVUMnt6A.js → RepoDiffEmbedScreen-BWxvRDrS.js} +1 -1
  144. package/dist/client/assets/{RepoDiffPageScreen-D9-s5PyB.js → RepoDiffPageScreen-DN94irmY.js} +1 -1
  145. package/dist/client/assets/{RepoDiffViewer-D7FN-oyY.js → RepoDiffViewer-_4JVXBIW.js} +1 -1
  146. package/dist/client/assets/RepoDiffViewerLazy-XGVC3WXv.js +2 -0
  147. package/dist/client/assets/{ReposScreen-BQ7HO1om.js → ReposScreen-uMCpt0e9.js} +2 -2
  148. package/dist/client/assets/{RiggedWorkerCharacter-CJMWlvV-.js → RiggedWorkerCharacter-q6QRc7_o.js} +1 -1
  149. package/dist/client/assets/{SageModelStudio-B526NSnw.js → SageModelStudio-CNDhZhgD.js} +1 -1
  150. package/dist/client/assets/{ScoutDeckSurface-ChkvGyEW.js → ScoutDeckSurface-CUaU4R6T.js} +1 -1
  151. package/dist/client/assets/{ScoutSurface-6g1f5chk.js → ScoutSurface-3_25USO_.js} +1 -1
  152. package/dist/client/assets/{ScoutbotFxLab-BuwBdnPf.js → ScoutbotFxLab-CRqhYe0a.js} +1 -1
  153. package/dist/client/assets/{SecondaryNav-Bs-_VwTC.js → SecondaryNav-D7dbV2qo.js} +1 -1
  154. package/dist/client/assets/SessionContextStrip-CXfs9hUD.js +1 -0
  155. package/dist/client/assets/SessionContextStrip-DAIXwtHd.css +1 -0
  156. package/dist/client/assets/{SessionEmbedScreen-C2wf35-P.js → SessionEmbedScreen-D0zFmou-.js} +1 -1
  157. package/dist/client/assets/SessionHopMenu-E6VJZrE0.js +1 -0
  158. package/dist/client/assets/{SessionObserve-B64YsYhy.js → SessionObserve-DXxBvejJ.js} +9 -9
  159. package/dist/client/assets/SessionObserveEvidence-Cuj_KHxR.js +1 -0
  160. package/dist/client/assets/SessionRefScreen-DqLSUlCE.js +1 -0
  161. package/dist/client/assets/SessionsScreen-BLIRkohT.js +1 -0
  162. package/dist/client/assets/SettingsDrawer-juCpnbH6.js +3 -0
  163. package/dist/client/assets/SettingsScreen-BtGzE2-O.js +1 -0
  164. package/dist/client/assets/{SharedFloorCharacter-V04kD5T9.js → SharedFloorCharacter-DNEiaOUh.js} +1 -1
  165. package/dist/client/assets/SharedWorkFloor-0rqtdF-n.css +1 -0
  166. package/dist/client/assets/SharedWorkFloor-D9mf9KSg.js +2 -0
  167. package/dist/client/assets/{ShikiPane-XwFI-pCp.js → ShikiPane-CRtTYkMj.js} +1 -1
  168. package/dist/client/assets/{SlidePanel-BMpkXai_.js → SlidePanel-_CHAQdOa.js} +1 -1
  169. package/dist/client/assets/SpaceSwitcher-BLgSCf_T.js +1 -0
  170. package/dist/client/assets/{SpriteAvatar-aHeF4ZQZ.js → SpriteAvatar-CpZWf54-.js} +1 -1
  171. package/dist/client/assets/{SproutActionSprite-DI5N3gOj.js → SproutActionSprite-BSiTS4en.js} +1 -1
  172. package/dist/client/assets/{StatusPill-Dw4LP7wu.js → StatusPill-2gCP6H7A.js} +1 -1
  173. package/dist/client/assets/{TailView-BofjmUMJ.js → TailView-CYSijNTy.js} +2 -2
  174. package/dist/client/assets/Terminal-Bi97yb5s.js +4 -0
  175. package/dist/client/assets/TerminalEmbedScreen-Bqop67Bq.js +1 -0
  176. package/dist/client/assets/{TerminalHeaderMount-CwbQhXcI.js → TerminalHeaderMount-Cq4OD_xN.js} +1 -1
  177. package/dist/client/assets/{TerminalRelay--qOBwnbR.js → TerminalRelay-DrikpUSJ.js} +3 -3
  178. package/dist/client/assets/{TextDocumentSurface-BK6Qy41F.js → TextDocumentSurface-D52m7Vd8.js} +1 -1
  179. package/dist/client/assets/{TmuxPeek-DpUT9Tpc.js → TmuxPeek-CXFeweMg.js} +1 -1
  180. package/dist/client/assets/VoiceControlWell-DF3bjcYA.js +1 -0
  181. package/dist/client/assets/VoicePathDiagram-CmpHWfO-.js +1 -0
  182. package/dist/client/assets/{VoicePermissionsPanel-D35fOnQj.js → VoicePermissionsPanel-Ok2nfxHw.js} +1 -1
  183. package/dist/client/assets/VoiceTurnDetails-wAByRaNB.js +8 -0
  184. package/dist/client/assets/VoiceTurnStage-edoJalLV.js +1 -0
  185. package/dist/client/assets/VoiceTurnView-D-8g5E4r.js +1 -0
  186. package/dist/client/assets/WorkDetailScreen-zQkNVy2F.js +5 -0
  187. package/dist/client/assets/{WorkFilesViewer-t8AEyx3Q.js → WorkFilesViewer-vNt01sDd.js} +1 -1
  188. package/dist/client/assets/{WorkRunView-_mhG_FR2.js → WorkRunView-BDkR7Edq.js} +1 -1
  189. package/dist/client/assets/WorldActorTalk-BvSg_b1y.js +1 -0
  190. package/dist/client/assets/{WorldCharacter-BRrj3MQN.js → WorldCharacter-CIIlutQq.js} +1 -1
  191. package/dist/client/assets/WorldMinimap-B6HNgcDe.js +1 -0
  192. package/dist/client/assets/{WorldSky-D-RJzSa6.js → WorldSky-Jm2Z6dfW.js} +1 -1
  193. package/dist/client/assets/{activity-BJqFrZyB.js → activity-CIlFrfPJ.js} +1 -1
  194. package/dist/client/assets/{addon-fit-CHohcvS3.js → addon-fit-dFpj9Kfq.js} +1 -1
  195. package/dist/client/assets/{addon-webgl-CaRy2x2b.js → addon-webgl-BFCGRtGh.js} +1 -1
  196. package/dist/client/assets/{agent-essentials-bKWYOZaH.js → agent-essentials-BGGvT5G6.js} +1 -1
  197. package/dist/client/assets/{agent-master-model-C-KdOFDK.js → agent-master-model-Bk_yuUXJ.js} +1 -1
  198. package/dist/client/assets/{agent-specialization-BplZUa_0.js → agent-specialization-DDc7mLCW.js} +1 -1
  199. package/dist/client/assets/agents-screen-BYakbO50.css +1 -0
  200. package/dist/client/assets/{arc.es-CubLvQ4W.js → arc.es-C1SQHJ3k.js} +1 -1
  201. package/dist/client/assets/{arrow-left-DFfKAq0d.js → arrow-left-MVUKauwQ.js} +1 -1
  202. package/dist/client/assets/{arrow-right-DmAWnyAH.js → arrow-right-Bp-FpE5V.js} +1 -1
  203. package/dist/client/assets/{arrow-up-right-B0aLKiyF.js → arrow-up-right-BPedAgxO.js} +1 -1
  204. package/dist/client/assets/{book-open-BL9qvhEI.js → book-open-CV98WMSp.js} +1 -1
  205. package/dist/client/assets/{bot-BhAVbcCA.js → bot-B4zLQ4IN.js} +1 -1
  206. package/dist/client/assets/chat-api-DSJMBYoT.js +2 -0
  207. package/dist/client/assets/chat-message-markup-91DIry6R.js +1 -0
  208. package/dist/client/assets/chat-space-model-aW3Fd8_U.js +4 -0
  209. package/dist/client/assets/chat-transport-DNS5CB2I.js +1 -0
  210. package/dist/client/assets/{check-g7D7-c1J.js → check-lrJ3a73a.js} +1 -1
  211. package/dist/client/assets/{chevron-down-CDzRQQGl.js → chevron-down-l1mrh5S9.js} +1 -1
  212. package/dist/client/assets/{chevron-right-DKGTLiqc.js → chevron-right-DrfqcerI.js} +1 -1
  213. package/dist/client/assets/{chevron-up-DX7R6KY2.js → chevron-up-CETZJzjV.js} +1 -1
  214. package/dist/client/assets/{chunk-HRAB3GC3-Dvk_QpRq.js → chunk-HRAB3GC3-DbVLgbWX.js} +1 -1
  215. package/dist/client/assets/{clock-CQb4FeMf.js → clock-BV1aqPkK.js} +1 -1
  216. package/dist/client/assets/{code-xml-Cmadr3pQ.js → code-xml-BhcNbLWU.js} +1 -1
  217. package/dist/client/assets/{coffee-ljG1_krY.js → coffee-D7EAOdCk.js} +1 -1
  218. package/dist/client/assets/{compass-CvzkzkIh.js → compass-63TUaz5_.js} +1 -1
  219. package/dist/client/assets/content-B1lgE8qr.js +1 -0
  220. package/dist/client/assets/content-B5l11YyQ.js +1 -0
  221. package/dist/client/assets/content-BNZOZEpX.js +1 -0
  222. package/dist/client/assets/content-BRIxP155.js +1 -0
  223. package/dist/client/assets/content-BWd8gt8L.js +1 -0
  224. package/dist/client/assets/content-BfwS2jAK.js +1 -0
  225. package/dist/client/assets/content-C4p43_eT.js +1 -0
  226. package/dist/client/assets/content-CdYfaoDV.js +1 -0
  227. package/dist/client/assets/content-CzldLxw0.js +1 -0
  228. package/dist/client/assets/content-D-olnc4U.js +1 -0
  229. package/dist/client/assets/content-DTioimq4.js +1 -0
  230. package/dist/client/assets/content-LOebm3_d.js +1 -0
  231. package/dist/client/assets/{content-CKJ9zb7Z.js → content-nGlEZhUI.js} +1 -1
  232. package/dist/client/assets/{content-D1Ze_FG9.js → content-oyzDM-LK.js} +1 -1
  233. package/dist/client/assets/content-x1PHxED7.js +1 -0
  234. package/dist/client/assets/content-zX3ZY3T9.js +1 -0
  235. package/dist/client/assets/{conversation-icons-CIRaxmid.js → conversation-icons-Tqba2d56.js} +1 -1
  236. package/dist/client/assets/conversation-model-FxDeWlle.js +1 -0
  237. package/dist/client/assets/conversation-motion-features-C5zjuNwE.js +1 -0
  238. package/dist/client/assets/conversations-DoAAO6kA.js +1 -0
  239. package/dist/client/assets/{copy-BGOC1tJB.js → copy-xKeM5ZtU.js} +1 -1
  240. package/dist/client/assets/{cpu-Q6nrHFTN.js → cpu-BOTa_WLr.js} +1 -1
  241. package/dist/client/assets/{createLucideIcon-ChvMq-zl.js → createLucideIcon-zZ8Hx7er.js} +1 -1
  242. package/dist/client/assets/ctx-panel-BC8fpcWJ.css +1 -0
  243. package/dist/client/assets/direct-voice-BbLPuJ04.js +2 -0
  244. package/dist/client/assets/direct-voice-DbO7CSv_.css +1 -0
  245. package/dist/client/assets/discover-DJFxyV1k.js +2 -0
  246. package/dist/client/assets/embed-entry-Lyvu0Kfc.js +2 -0
  247. package/dist/client/assets/{external-link-BVccgH0n.js → external-link-CUObqmgX.js} +1 -1
  248. package/dist/client/assets/{eye-CsGfEVR6.js → eye-LrO-cXQt.js} +1 -1
  249. package/dist/client/assets/{file-code-corner-Be6da5l3.js → file-code-corner-CsU7jJpu.js} +1 -1
  250. package/dist/client/assets/{file-text-DP6txVW-.js → file-text-CnISiiw6.js} +1 -1
  251. package/dist/client/assets/{flag-DAFE2wZ5.js → flag-C4wl8z2-.js} +1 -1
  252. package/dist/client/assets/fleet-roll-call-BUgf7w-V.css +1 -0
  253. package/dist/client/assets/{folder-B_S7gBVr.js → folder-D5prSkzz.js} +1 -1
  254. package/dist/client/assets/{gauge-DQCGlE3o.js → gauge-D9_5iJEm.js} +1 -1
  255. package/dist/client/assets/{gestures-CofqY4Km.js → gestures-QZub3Ot9.js} +1 -1
  256. package/dist/client/assets/{git-branch-DcUCsWdJ.js → git-branch-B0_fPLO7.js} +1 -1
  257. package/dist/client/assets/{go-shortcuts-KQy-ZOpV.js → go-shortcuts-DicR7sUf.js} +1 -1
  258. package/dist/client/assets/home-moving-signal-rpMhsOJB.js +1 -0
  259. package/dist/client/assets/home-now-card-ByE6Umcx.js +1 -0
  260. package/dist/client/assets/{home-now-card-nano-CvU8B61b.js → home-now-card-nano-B5Dv3-pb.js} +1 -1
  261. package/dist/client/assets/hooks-_eCZZPsR.js +2 -0
  262. package/dist/client/assets/index-724SdE6r.js +1 -0
  263. package/dist/client/assets/{index-kkXUq-zf.js → index-CHD0qcfL.js} +1 -1
  264. package/dist/client/assets/index-CN4rBB_s.css +1 -0
  265. package/dist/client/assets/index-D1d98iYf.js +1 -0
  266. package/dist/client/assets/{index-DReVb7jZ.js → index-EsrkGBcv.js} +8 -8
  267. package/dist/client/assets/index-gGHPA-By.js +1 -0
  268. package/dist/client/assets/{inspector-panel-CLU7wjnT.js → inspector-panel-BkgUDn6G.js} +2 -2
  269. package/dist/client/assets/{keyboard-nav-CJXPaHXj.js → keyboard-nav-DDHegDbx.js} +1 -1
  270. package/dist/client/assets/{lane-roster-store-Ch9t6lb0.js → lane-roster-store-D-RSWjb-.js} +1 -1
  271. package/dist/client/assets/{layers-BOwyWodP.js → layers-C8PDiMul.js} +1 -1
  272. package/dist/client/assets/{layout-grid-B36Qsh0y.js → layout-grid-Cor2frzj.js} +1 -1
  273. package/dist/client/assets/left-Bn5X7x2o.js +2 -0
  274. package/dist/client/assets/left-BqS0fYX1.js +1 -0
  275. package/dist/client/assets/left-CTCeeeD3.js +1 -0
  276. package/dist/client/assets/left-DhtVPVux.js +1 -0
  277. package/dist/client/assets/left-K39b-Wvx.js +2 -0
  278. package/dist/client/assets/left-KGmueNPt.js +1 -0
  279. package/dist/client/assets/left-P_GOYB-s.js +1 -0
  280. package/dist/client/assets/left-advisor-B0N47De2.js +1 -0
  281. package/dist/client/assets/left-agents-CsSNc51Y.js +1 -0
  282. package/dist/client/assets/left-default-BlO5LP2T.js +1 -0
  283. package/dist/client/assets/left-lanes-C4PhaJE6.js +1 -0
  284. package/dist/client/assets/left-mission-BjTE5vPa.js +1 -0
  285. package/dist/client/assets/library-CkWNPHRp.js +1 -0
  286. package/dist/client/assets/{loader-circle-DNUsuPWz.js → loader-circle-OvccU82H.js} +1 -1
  287. package/dist/client/assets/{local-agents-I40PawYA.js → local-agents-BqnoxJrq.js} +1 -1
  288. package/dist/client/assets/log-in-7SnYqW5w.js +1 -0
  289. package/dist/client/assets/{machine-children-CdhNzDF0.js → machine-children-DxcqCLmd.js} +1 -1
  290. package/dist/client/assets/media-blobs-Bi8pxr1u.js +1 -0
  291. package/dist/client/assets/{mentions-Ck_Vjnyp.js → mentions-ByUvhS-v.js} +1 -1
  292. package/dist/client/assets/{mesh-ops-DSlvHp-D.js → mesh-ops-CiZ8xSAx.js} +1 -1
  293. package/dist/client/assets/{mesh-view-store-C1-mdP3P.js → mesh-view-store-DZvJC4KU.js} +1 -1
  294. package/dist/client/assets/{message-circle-cI5_A5mj.js → message-circle-CxRVKNE-.js} +1 -1
  295. package/dist/client/assets/message-markup-BQW5jdJw.js +15 -0
  296. package/dist/client/assets/message-markup-Zwo3t4cI.js +1 -0
  297. package/dist/client/assets/{message-square-CJW4WRlo.js → message-square-BxesYglW.js} +1 -1
  298. package/dist/client/assets/mission-control-model-BpJHDV5D.js +1 -0
  299. package/dist/client/assets/{mission-control-store-p_cboAm4.js → mission-control-store-elEEsIvb.js} +1 -1
  300. package/dist/client/assets/{mission-wall-DOuGOxQy.js → mission-wall-CAo4BKfa.js} +1 -1
  301. package/dist/client/assets/{monitor-C7_cHlkC.js → monitor-DTTYEb73.js} +1 -1
  302. package/dist/client/assets/{nav-destinations-CU_euC-Q.js → nav-destinations-uorRqFxf.js} +1 -1
  303. package/dist/client/assets/{observe-CtS0l3zu.js → observe-BJqERJVj.js} +1 -1
  304. package/dist/client/assets/{page-status-DwFR4wSw.js → page-status-BswZLqvA.js} +1 -1
  305. package/dist/client/assets/{panel-right-qP17MwMl.js → panel-right-Bv7sP_fc.js} +1 -1
  306. package/dist/client/assets/paperclip-BjcuP_Hx.js +1 -0
  307. package/dist/client/assets/{pause-B_hliKuR.js → pause-C2XTlkjs.js} +1 -1
  308. package/dist/client/assets/{persistent-state-BUsTTZFE.js → persistent-state-KRk_yb0q.js} +1 -1
  309. package/dist/client/assets/{pin-Oi4qHR6M.js → pin-C2mFOV1l.js} +1 -1
  310. package/dist/client/assets/{play-CVeRmqLH.js → play-FT6K3It1.js} +1 -1
  311. package/dist/client/assets/{plus-D5NLH_fM.js → plus-DFDDeGKu.js} +1 -1
  312. package/dist/client/assets/profile-DTmzN16I.js +1 -0
  313. package/dist/client/assets/{projects-inbox-CfwxCTdN.js → projects-inbox-C0FUCv_p.js} +1 -1
  314. package/dist/client/assets/projects-inbox-ColX6lpx.css +1 -0
  315. package/dist/client/assets/{provider-DwmCoSlc.js → provider-Dojd8quC.js} +1 -1
  316. package/dist/client/assets/{proxy-DgzP27W8.js → proxy-AJsmwA6h.js} +1 -1
  317. package/dist/client/assets/{radio-Cas2qg1D.js → radio-DRoOZsws.js} +1 -1
  318. package/dist/client/assets/{refresh-cw-IcD2lPoT.js → refresh-cw-BmVr7sCD.js} +1 -1
  319. package/dist/client/assets/resolve-panes-pbY1fCWi.js +1 -0
  320. package/dist/client/assets/resolve-sidebar-context-YWkZTq1t.js +1 -0
  321. package/dist/client/assets/right-49kO-6nD.js +1 -0
  322. package/dist/client/assets/right-APtItA8A.js +1 -0
  323. package/dist/client/assets/right-BJwhPqtn.js +1 -0
  324. package/dist/client/assets/right-BPqrf4ek.js +1 -0
  325. package/dist/client/assets/right-D7djOy6K.js +1 -0
  326. package/dist/client/assets/right-DKOUCRob.js +1 -0
  327. package/dist/client/assets/right-DMNrVzg7.js +1 -0
  328. package/dist/client/assets/{right-cjPTwPXS.js → right-DWPVB-nK.js} +1 -1
  329. package/dist/client/assets/right-DppeMCy4.js +1 -0
  330. package/dist/client/assets/right-GAL5Mw1v.js +1 -0
  331. package/dist/client/assets/{rocket-DAqYvu8I.js → rocket-CGl4RTV7.js} +1 -1
  332. package/dist/client/assets/router-DCtl8wqb.js +1 -0
  333. package/dist/client/assets/runtime-picker-DXu2bOTh.js +1 -0
  334. package/dist/client/assets/{scope-views-Dl3ml9OZ.js → scope-views-RUWwCVAr.js} +1 -1
  335. package/dist/client/assets/scout-voice-CZx60X6E.js +1 -0
  336. package/dist/client/assets/{scoutbot-markdown-DwvGQOWo.js → scoutbot-markdown-BKEBSbG0.js} +1 -1
  337. package/dist/client/assets/{scroll-text-B0tKI9Sg.js → scroll-text-DNjxhyO2.js} +1 -1
  338. package/dist/client/assets/{search-UsM-9-_W.js → search-DT42oyRW.js} +1 -1
  339. package/dist/client/assets/secondaryNavConfig-CS1svh6n.js +1 -0
  340. package/dist/client/assets/{selection-bridge-OTS2iFkt.js → selection-bridge-x3wFUjxj.js} +1 -1
  341. package/dist/client/assets/{send-horizontal-BlQsRK6C.js → send-horizontal-CH0-fbZE.js} +1 -1
  342. package/dist/client/assets/{send-to-agent-session-C1mgqdow.js → send-to-agent-session-DoKCDBJ4.js} +1 -1
  343. package/dist/client/assets/{server-DBlPW0Mp.js → server-QfsgMLk1.js} +1 -1
  344. package/dist/client/assets/{session-catalog-CnpZMB7C.js → session-catalog-CvSdPHPe.js} +1 -1
  345. package/dist/client/assets/session-recap-lanes-D-eVJnpY.js +1 -0
  346. package/dist/client/assets/session-recap-queue-41l2XVkI.js +1 -0
  347. package/dist/client/assets/{session-table-CGkfG5Yd.js → session-table-L-pns6Zl.js} +1 -1
  348. package/dist/client/assets/{sessions-view-Bge4XZ4I.js → sessions-view-Dc-QAa7O.js} +1 -1
  349. package/dist/client/assets/{settings-C69Zjrpq.js → settings-BVh7kldq.js} +1 -1
  350. package/dist/client/assets/{sliders-horizontal-6bzeod7c.js → sliders-horizontal-782VC_yy.js} +1 -1
  351. package/dist/client/assets/{sparkles-Cc5lPZRv.js → sparkles-BjHq_DNK.js} +1 -1
  352. package/dist/client/assets/{sse-A8AyLH0g.js → sse-BCPRocpq.js} +1 -1
  353. package/dist/client/assets/system-surfaces-redesign-q2BmCB7e.css +1 -0
  354. package/dist/client/assets/{tail-events-C4WdhVeK.js → tail-events-d0yAYxR0.js} +1 -1
  355. package/dist/client/assets/{terminal-DMZjX1es.js → terminal-hQKQygcf.js} +1 -1
  356. package/dist/client/assets/{terminal-relay-mO89dX-Y.js → terminal-relay-Bxs1hp-j.js} +1 -1
  357. package/dist/client/assets/{terminal-takeover-CZZsnPzj.js → terminal-takeover-Ay5C2c-M.js} +1 -1
  358. package/dist/client/assets/theme-vars-DNK0nn3k.js +1 -0
  359. package/dist/client/assets/triangle-alert-CHoRGdVO.js +1 -0
  360. package/dist/client/assets/{use-beside-D3cJpA5p.js → use-beside-DoRC1nt0.js} +1 -1
  361. package/dist/client/assets/{use-conversation-list-D5EnpVba.js → use-conversation-list-CY4JciOV.js} +1 -1
  362. package/dist/client/assets/{use-fleet-active-asks-D_QOmjg5.js → use-fleet-active-asks-CymmXWH4.js} +1 -1
  363. package/dist/client/assets/{use-mesh-node-state-3V3ADQ-G.js → use-mesh-node-state-BvaqtODo.js} +1 -1
  364. package/dist/client/assets/{use-mesh-ops-items-DI9GKWlF.js → use-mesh-ops-items-BSYaqH_0.js} +1 -1
  365. package/dist/client/assets/{use-reduced-motion-CiaZHMnk.js → use-reduced-motion-3gMYZNIp.js} +1 -1
  366. package/dist/client/assets/{use-scout-dev-flags-CkdAHlDR.js → use-scout-dev-flags-DS_pYYQd.js} +1 -1
  367. package/dist/client/assets/{useAgentHoverCard-A3QGXqIy.js → useAgentHoverCard-BANmpjMh.js} +1 -1
  368. package/dist/client/assets/useContentSecondaryNav-C6OBu-3_.js +1 -0
  369. package/dist/client/assets/{useEmbedHeadline-atkQVfGw.js → useEmbedHeadline-D6pJRxUg.js} +1 -1
  370. package/dist/client/assets/usePersistentState-B8lP7TRb.js +1 -0
  371. package/dist/client/assets/{usePierreRuntime-DTvcwISe.js → usePierreRuntime-BAQdiN0L.js} +1 -1
  372. package/dist/client/assets/useSidebarCollapse-OL_8J5cL.js +1 -0
  373. package/dist/client/assets/{users-RLK3P5U4.js → users-BUjx36gx.js} +1 -1
  374. package/dist/client/assets/voice-paths-CJUuBPh3.css +1 -0
  375. package/dist/client/assets/voice-turn-DftA0iIb.css +1 -0
  376. package/dist/client/assets/voice-turn-ledger-BMZxlSjg.js +1 -0
  377. package/dist/client/assets/{wrench-B4maQJai.js → wrench-DR0i5BU7.js} +1 -1
  378. package/dist/client/assets/{x-rlMdRqJF.js → x-DAehov0E.js} +1 -1
  379. package/dist/client/assets/{xterm-B1zHHOLQ.js → xterm-BXQiLVnI.js} +1 -1
  380. package/dist/client/assets/{zap-B4X0OrEw.js → zap-CEjZNZbI.js} +1 -1
  381. package/dist/client/crew/sheets/eye-plate-v1/look-down-left.webp +0 -0
  382. package/dist/client/crew/sheets/eye-plate-v1/look-down-right.webp +0 -0
  383. package/dist/client/crew/sheets/eye-plate-v1/look-down.webp +0 -0
  384. package/dist/client/crew/sheets/eye-plate-v1/look-up-left.webp +0 -0
  385. package/dist/client/crew/sheets/eye-plate-v1/look-up-right.webp +0 -0
  386. package/dist/client/crew/sheets/eye-plate-v1/look-up.webp +0 -0
  387. package/dist/client/crew/sheets/sprout/blink-half.webp +0 -0
  388. package/dist/client/crew/sheets/sprout/blink-shut.webp +0 -0
  389. package/dist/client/crew/sheets/sprout/look-down-left.webp +0 -0
  390. package/dist/client/crew/sheets/sprout/look-down-right.webp +0 -0
  391. package/dist/client/crew/sheets/sprout/look-down.webp +0 -0
  392. package/dist/client/crew/sheets/sprout/look-left.webp +0 -0
  393. package/dist/client/crew/sheets/sprout/look-right.webp +0 -0
  394. package/dist/client/crew/sheets/sprout/look-up-left.webp +0 -0
  395. package/dist/client/crew/sheets/sprout/look-up-right.webp +0 -0
  396. package/dist/client/crew/sheets/sprout/look-up.webp +0 -0
  397. package/dist/client/index.html +2 -2
  398. package/dist/drizzle/0020_message_reactions.sql +11 -0
  399. package/dist/drizzle/meta/_journal.json +7 -0
  400. package/dist/main.mjs +542 -150
  401. package/dist/node/main.mjs +131 -17
  402. package/dist/pairing-runtime-controller.mjs +375 -78
  403. package/dist/runtime/base-daemon.mjs +98 -5
  404. package/dist/runtime/broker-daemon.mjs +1879 -1198
  405. package/dist/runtime/broker-process-manager.mjs +96 -3
  406. package/dist/runtime/mesh-discover.mjs +96 -3
  407. package/dist/scout-control-plane-web.mjs +4817 -1616
  408. package/dist/update-helper.mjs +211 -39
  409. package/package.json +5 -3
  410. package/server.json +31 -0
  411. package/dist/client/assets/ActivityScreen-CcDdQTBK.js +0 -1
  412. package/dist/client/assets/AgentAdventures-BxrYq_2v.js +0 -1
  413. package/dist/client/assets/AgentAvatar-NZOqcsB2.js +0 -1
  414. package/dist/client/assets/AgentConfigurationScreen-BhD1PEAM.js +0 -1
  415. package/dist/client/assets/AgentDefinitionsWorkspace-BqS6MXqF.js +0 -1
  416. package/dist/client/assets/AgentFloorView-A0dDRlRV.js +0 -1
  417. package/dist/client/assets/AgentInfoScreen-DuaN0sgE.js +0 -1
  418. package/dist/client/assets/AgentLanesEmbedScreen-CeNiaZ9_.js +0 -1
  419. package/dist/client/assets/AgentLanesView-WZhEDBFE.js +0 -2
  420. package/dist/client/assets/AgentMasterScreen-DUDUTAnU.js +0 -1
  421. package/dist/client/assets/AgentSessions-CO1WGa8Z.js +0 -6
  422. package/dist/client/assets/AgentsConsole-BQOWkj35.js +0 -1
  423. package/dist/client/assets/AgentsScreen-BMNAj1PH.js +0 -1
  424. package/dist/client/assets/AgentsSubnav-CeHhuzyM.js +0 -1
  425. package/dist/client/assets/BriefingDetailScreen-yZG8_m4h.js +0 -1
  426. package/dist/client/assets/BrokerScreen-CT37VQiL.js +0 -8
  427. package/dist/client/assets/ChannelComposer-BVItWlEz.js +0 -1
  428. package/dist/client/assets/ChannelSidebar-B-2spawY.js +0 -1
  429. package/dist/client/assets/ChatBits-CLJ71hTY.js +0 -1
  430. package/dist/client/assets/ChatRightPanel-pKQtkAgl.js +0 -1
  431. package/dist/client/assets/ChatSpaceSurface-NrLwdPkE.js +0 -1
  432. package/dist/client/assets/ChatSpaceTheme-BPMgPdVK.css +0 -1
  433. package/dist/client/assets/ChatSpaceTheme-D37Jk7bl.js +0 -1
  434. package/dist/client/assets/ConversationComposer-DNcn5U6D.js +0 -1
  435. package/dist/client/assets/ConversationFeedRows-RnYSa7Io.js +0 -1
  436. package/dist/client/assets/ConversationHeader-Y9TEJxP_.js +0 -1
  437. package/dist/client/assets/ConversationScreen-Brfas2y0.css +0 -1
  438. package/dist/client/assets/ConversationScreen-tpj4cqWs.js +0 -2
  439. package/dist/client/assets/ConversationStatus-Cv-7hErW.js +0 -1
  440. package/dist/client/assets/CrewAvatar-zgzC3cbU.js +0 -1
  441. package/dist/client/assets/CrewWorkspaces-K2jcyLec.js +0 -1
  442. package/dist/client/assets/FlightObserveScreen-CvzhzuWc.js +0 -1
  443. package/dist/client/assets/FloorResourcesSheet-_Iy5UqgY.js +0 -1
  444. package/dist/client/assets/FloorTacticalHUD-BhyOqlL5.js +0 -1
  445. package/dist/client/assets/HarnessMark-DSvM_H7H.js +0 -1
  446. package/dist/client/assets/HarnessesScreen-DyjqbZ4k.js +0 -1
  447. package/dist/client/assets/InviteLandingScreen-xZQ2na1z.js +0 -1
  448. package/dist/client/assets/InviteSheet--5Zjct25.js +0 -1
  449. package/dist/client/assets/KnowledgeSearchScreen-BPqAjHnH.js +0 -1
  450. package/dist/client/assets/LaneTraceDetailSheet-jl4XQmEx.js +0 -1
  451. package/dist/client/assets/MeshScreen-BW1dMFWF.js +0 -1
  452. package/dist/client/assets/MessagesScreen-CtNMfIvC.js +0 -1
  453. package/dist/client/assets/MissionControlView-BjPOViGY.js +0 -1
  454. package/dist/client/assets/MissionLeftAgentRow-Dms0DBjO.js +0 -1
  455. package/dist/client/assets/NativeAreaScreen-BQSTo8As.js +0 -1
  456. package/dist/client/assets/NativeAreaScreen-Brix6xDB.js +0 -1
  457. package/dist/client/assets/NativeAreaScreen-D7HyQNlM.js +0 -1
  458. package/dist/client/assets/NewChatComposer-BEXS8vV6.js +0 -19
  459. package/dist/client/assets/ObserveEmbedScreen-Dh30EjAQ.js +0 -2
  460. package/dist/client/assets/OpenScoutAppShell-D9pgw36i.js +0 -31
  461. package/dist/client/assets/OpsAgentsView-D3rM0udq.js +0 -1
  462. package/dist/client/assets/OpsScreen-DySeNQ1V.js +0 -1
  463. package/dist/client/assets/OpsSubnav-C9E0r3GZ.js +0 -1
  464. package/dist/client/assets/ProjectAgentProfile-FUav75j2.js +0 -1
  465. package/dist/client/assets/ProjectAgentProfileHero-BLK0EwMg.js +0 -1
  466. package/dist/client/assets/ProjectsInbox-DfCXReZK.js +0 -2
  467. package/dist/client/assets/ProjectsRail-CELVubfJ.js +0 -1
  468. package/dist/client/assets/ProjectsScreen-DMw4TLKy.js +0 -1
  469. package/dist/client/assets/ProjectsThreadAside-D1Sh4fnX.js +0 -1
  470. package/dist/client/assets/Provider-CNZluAZb.js +0 -5
  471. package/dist/client/assets/RailToggle-BwmY70B8.js +0 -1
  472. package/dist/client/assets/RawSessionsTable-6OVJq0JZ.js +0 -1
  473. package/dist/client/assets/RealtimeVoiceScreen-D41TYY0x.js +0 -9
  474. package/dist/client/assets/RepoDiffViewerLazy-BpMR7tlx.js +0 -2
  475. package/dist/client/assets/SessionObserveEvidence-CS1aQBpQ.js +0 -1
  476. package/dist/client/assets/SessionRefScreen-DURV0MpF.js +0 -1
  477. package/dist/client/assets/SessionsScreen-D71ZR-8t.js +0 -1
  478. package/dist/client/assets/SettingsDrawer-Nz98oBVl.js +0 -3
  479. package/dist/client/assets/SettingsScreen-CYBHal6y.js +0 -1
  480. package/dist/client/assets/SharedWorkFloor-BCmdeb3Q.css +0 -1
  481. package/dist/client/assets/SharedWorkFloor-C0xxW4SN.js +0 -2
  482. package/dist/client/assets/SpaceSwitcher-BfeIf-ad.js +0 -1
  483. package/dist/client/assets/Terminal-jIqnIZZ6.js +0 -4
  484. package/dist/client/assets/TerminalEmbedScreen-3XsjuySR.js +0 -1
  485. package/dist/client/assets/WorkDetailScreen-Bcf_yHhU.js +0 -5
  486. package/dist/client/assets/WorldActorTalk-CKerDikx.js +0 -1
  487. package/dist/client/assets/WorldMinimap-DOptgrc4.js +0 -1
  488. package/dist/client/assets/agent-autocomplete-C7xwIcwd.css +0 -1
  489. package/dist/client/assets/agent-autocomplete-_u9o5EZu.js +0 -2
  490. package/dist/client/assets/agents-screen-BMu6PpRY.css +0 -1
  491. package/dist/client/assets/at-sign-DM7xeppo.js +0 -1
  492. package/dist/client/assets/chat-api-BPVC0asu.js +0 -1
  493. package/dist/client/assets/chat-space-model-B6Jg2CY4.js +0 -4
  494. package/dist/client/assets/content-0AXa0klu.js +0 -1
  495. package/dist/client/assets/content-BEyJ19Lx.js +0 -1
  496. package/dist/client/assets/content-BN5weWKW.js +0 -1
  497. package/dist/client/assets/content-BNokkm7C.js +0 -1
  498. package/dist/client/assets/content-BV4PUM9q.js +0 -1
  499. package/dist/client/assets/content-BxUPlcx5.js +0 -1
  500. package/dist/client/assets/content-CIC5sku8.js +0 -1
  501. package/dist/client/assets/content-CdkTyxqk.js +0 -1
  502. package/dist/client/assets/content-CnhhSCZq.js +0 -1
  503. package/dist/client/assets/content-DY3F9Vfr.js +0 -1
  504. package/dist/client/assets/content-DrKBYpcb.js +0 -1
  505. package/dist/client/assets/content-LSStQYj5.js +0 -1
  506. package/dist/client/assets/content-YvU-D0hF.js +0 -1
  507. package/dist/client/assets/content-oKQMyVnH.js +0 -1
  508. package/dist/client/assets/conversation-model-m8HhzroS.js +0 -1
  509. package/dist/client/assets/conversation-motion-features-D9PxLoDt.js +0 -1
  510. package/dist/client/assets/conversations-Cbg9h_Af.js +0 -1
  511. package/dist/client/assets/ctx-panel-F05jXK4Q.css +0 -1
  512. package/dist/client/assets/discover-DlwbftpC.js +0 -2
  513. package/dist/client/assets/embed-entry-c0lwtjBG.js +0 -2
  514. package/dist/client/assets/home-moving-signal-BIHUGNfI.js +0 -1
  515. package/dist/client/assets/home-now-card-CaLgZze2.js +0 -1
  516. package/dist/client/assets/hooks-DaUOREpP.js +0 -2
  517. package/dist/client/assets/index-CGbs0SBm.css +0 -1
  518. package/dist/client/assets/index-CbqBwfIW.js +0 -1
  519. package/dist/client/assets/index-CyPMl7Up.js +0 -1
  520. package/dist/client/assets/index-PQpJveGO.js +0 -1
  521. package/dist/client/assets/left-0vBrvrBG.js +0 -2
  522. package/dist/client/assets/left-C6SyaqlJ.js +0 -1
  523. package/dist/client/assets/left-CTuXysZR.js +0 -2
  524. package/dist/client/assets/left-Cc6s4DT2.js +0 -1
  525. package/dist/client/assets/left-DF5caiyh.js +0 -1
  526. package/dist/client/assets/left-DgT4tWCx.js +0 -1
  527. package/dist/client/assets/left-R0wppTTr.js +0 -1
  528. package/dist/client/assets/left-advisor-C-kt8V28.js +0 -1
  529. package/dist/client/assets/left-agents-thnBO156.js +0 -1
  530. package/dist/client/assets/left-default-CT42fnpF.js +0 -1
  531. package/dist/client/assets/left-lanes-CSmZgciK.js +0 -1
  532. package/dist/client/assets/left-mission-C86x6i9h.js +0 -1
  533. package/dist/client/assets/library-DdhYL_9v.js +0 -1
  534. package/dist/client/assets/message-markup-6Tgo4qFJ.js +0 -15
  535. package/dist/client/assets/mission-control-model-C30vU1Fe.js +0 -1
  536. package/dist/client/assets/profile-BegEUmB7.js +0 -1
  537. package/dist/client/assets/projects-inbox-CKPLZN8s.css +0 -1
  538. package/dist/client/assets/resolve-panes-pfZTezKo.js +0 -1
  539. package/dist/client/assets/resolve-sidebar-context-D5ksvrb_.js +0 -1
  540. package/dist/client/assets/right-BDaCJ0CF.js +0 -1
  541. package/dist/client/assets/right-BP6lXRFS.js +0 -1
  542. package/dist/client/assets/right-Cb1VCrdj.js +0 -1
  543. package/dist/client/assets/right-CeFaxfBo.js +0 -1
  544. package/dist/client/assets/right-Ck2SrYCj.js +0 -1
  545. package/dist/client/assets/right-D-uv5YfF.js +0 -1
  546. package/dist/client/assets/right-DJMSICky.js +0 -1
  547. package/dist/client/assets/right-Dnljs8ah.js +0 -1
  548. package/dist/client/assets/right-SdCSF8PP.js +0 -1
  549. package/dist/client/assets/router-C-MF5-mb.js +0 -1
  550. package/dist/client/assets/runtime-picker-C_AVYF63.js +0 -1
  551. package/dist/client/assets/scout-voice-CqAyfblr.js +0 -1
  552. package/dist/client/assets/secondaryNavConfig-DzNHk6IH.js +0 -1
  553. package/dist/client/assets/system-surfaces-redesign-DKFg4GB5.css +0 -1
  554. package/dist/client/assets/useContentSecondaryNav-DrL_nkCZ.js +0 -1
  555. package/dist/client/assets/usePersistentState-Y8XwSTg-.js +0 -1
  556. package/dist/drizzle/meta/0000_snapshot.json +0 -4575
  557. package/dist/drizzle/meta/0001_snapshot.json +0 -4624
  558. package/dist/drizzle/meta/0002_snapshot.json +0 -4631
  559. package/dist/drizzle/meta/0003_snapshot.json +0 -4952
  560. package/dist/drizzle/meta/0004_snapshot.json +0 -5235
  561. package/dist/drizzle/meta/0005_snapshot.json +0 -5599
  562. package/dist/drizzle/meta/0006_snapshot.json +0 -5606
  563. package/dist/drizzle/meta/0007_snapshot.json +0 -5767
  564. package/dist/drizzle/meta/0008_snapshot.json +0 -5774
  565. package/dist/drizzle/meta/0009_snapshot.json +0 -6262
  566. package/dist/drizzle/meta/0010_snapshot.json +0 -6286
  567. package/dist/drizzle/meta/0011_snapshot.json +0 -6337
  568. package/dist/drizzle/meta/0012_snapshot.json +0 -6458
  569. package/dist/drizzle/meta/0013_snapshot.json +0 -6465
  570. package/dist/drizzle/meta/0014_snapshot.json +0 -6503
  571. package/dist/drizzle/meta/0015_snapshot.json +0 -6596
  572. package/dist/drizzle/meta/0016_snapshot.json +0 -6611
  573. package/dist/drizzle/meta/0017_snapshot.json +0 -6785
  574. package/dist/drizzle/meta/0018_snapshot.json +0 -6804
  575. package/dist/drizzle/meta/0019_snapshot.json +0 -6804
@@ -2734,6 +2734,31 @@ var init_orchestration_provider_map = __esm(() => {
2734
2734
  };
2735
2735
  });
2736
2736
 
2737
+ // ../protocol/src/message-reactions.ts
2738
+ var REACTION_EMOJI_QUICK, REACTION_EMOJI_MORE, REACTION_EMOJI_ALLOWLIST, REACTION_EMOJI_ALLOWLIST_SET;
2739
+ var init_message_reactions = __esm(() => {
2740
+ REACTION_EMOJI_QUICK = ["\uD83D\uDC4D", "\u2764\uFE0F", "\uD83D\uDE02", "\uD83D\uDC40", "\uD83C\uDF89"];
2741
+ REACTION_EMOJI_MORE = [
2742
+ "\uD83D\uDD25",
2743
+ "\uD83D\uDE4F",
2744
+ "\uD83D\uDC4F",
2745
+ "\uD83D\uDE22",
2746
+ "\uD83D\uDE2E",
2747
+ "\uD83D\uDE80",
2748
+ "\u2705",
2749
+ "\uD83D\uDCAF",
2750
+ "\uD83E\uDD14",
2751
+ "\uD83D\uDCA1",
2752
+ "\uD83D\uDE4C",
2753
+ "\u2728"
2754
+ ];
2755
+ REACTION_EMOJI_ALLOWLIST = [
2756
+ ...REACTION_EMOJI_QUICK,
2757
+ ...REACTION_EMOJI_MORE
2758
+ ];
2759
+ REACTION_EMOJI_ALLOWLIST_SET = new Set(REACTION_EMOJI_ALLOWLIST);
2760
+ });
2761
+
2737
2762
  // ../protocol/src/permission-policy.ts
2738
2763
  function normalizeScoutPermissionProfile(value) {
2739
2764
  const normalized = value?.trim().replaceAll("-", "_");
@@ -3553,6 +3578,9 @@ var init_terminal_surface_id = () => {};
3553
3578
  // ../protocol/src/terminal-sessions.ts
3554
3579
  var init_terminal_sessions = () => {};
3555
3580
 
3581
+ // ../protocol/src/terminal-session-resolve.ts
3582
+ var init_terminal_session_resolve = () => {};
3583
+
3556
3584
  // ../protocol/src/terminal-workspaces.ts
3557
3585
  var init_terminal_workspaces = () => {};
3558
3586
 
@@ -3580,6 +3608,8 @@ var init_broker_routes = __esm(() => {
3580
3608
  machines: "/v1/machines",
3581
3609
  machinesScan: "/v1/machines/scan",
3582
3610
  messages: "/v1/messages",
3611
+ messageReactions: "/v1/message-reactions",
3612
+ messageReactionsRemove: "/v1/message-reactions/remove",
3583
3613
  brokerMessages: "/v1/broker/messages",
3584
3614
  eventsStream: "/v1/events/stream",
3585
3615
  commands: "/v1/commands",
@@ -3640,6 +3670,7 @@ var init_src = __esm(() => {
3640
3670
  init_assigned_roles();
3641
3671
  init_orchestrator_prompt();
3642
3672
  init_orchestration_provider_map();
3673
+ init_message_reactions();
3643
3674
  init_agent_runs();
3644
3675
  init_budget();
3645
3676
  init_host_integrations();
@@ -3658,12 +3689,108 @@ var init_src = __esm(() => {
3658
3689
  init_cursor_transport();
3659
3690
  init_terminal_surface_id();
3660
3691
  init_terminal_sessions();
3692
+ init_terminal_session_resolve();
3661
3693
  init_terminal_workspaces();
3662
3694
  init_herdr_workspace_digest();
3663
3695
  init_broker_routes();
3664
3696
  init_rendezvous();
3665
3697
  });
3666
3698
 
3699
+ // ../runtime/src/sqlite-observation.ts
3700
+ import { createHash as createHash3 } from "crypto";
3701
+ function observeSqliteDatabase(database, options) {
3702
+ const configured = options.thresholdMs ?? Number(process.env.OPENSCOUT_SLOW_DB_MS ?? 100);
3703
+ const threshold = Number.isFinite(configured) && configured >= 0 ? configured : 100;
3704
+ if (threshold === 0)
3705
+ return database;
3706
+ const now = options.now ?? (() => performance.now());
3707
+ const emit = options.emit ?? ((event) => console.warn("[scout-db]", JSON.stringify(event)));
3708
+ const statements = new WeakMap;
3709
+ let windowStart = -Infinity;
3710
+ let emitted = 0;
3711
+ let suppressed = 0;
3712
+ function timed(operation, sql2, call) {
3713
+ const start = now();
3714
+ let outcome = "error";
3715
+ try {
3716
+ const result = call();
3717
+ outcome = "ok";
3718
+ return result;
3719
+ } finally {
3720
+ try {
3721
+ const end = now();
3722
+ const duration = end - start;
3723
+ if (duration >= threshold) {
3724
+ if (end - windowStart >= 60000) {
3725
+ windowStart = end;
3726
+ emitted = 0;
3727
+ }
3728
+ if (emitted >= 10) {
3729
+ suppressed += 1;
3730
+ } else {
3731
+ emitted += 1;
3732
+ const caller = (new Error().stack ?? "").split(`
3733
+ `).filter((line) => !/sqlite-observation\.(?:ts|js):/.test(line)).map((line) => line.match(/(?:packages|apps)\/[\w./-]+:\d+:\d+/)?.[0]).filter((line) => Boolean(line)).slice(0, 4);
3734
+ emit({
3735
+ event: "slow_sqlite",
3736
+ database: options.database,
3737
+ pid: process.pid,
3738
+ operation,
3739
+ queryId: createHash3("sha256").update(sql2).digest("hex").slice(0, 16),
3740
+ durationMs: Math.round(duration * 100) / 100,
3741
+ outcome,
3742
+ suppressed,
3743
+ caller
3744
+ });
3745
+ suppressed = 0;
3746
+ }
3747
+ }
3748
+ } catch {}
3749
+ }
3750
+ }
3751
+ function statementProxy(statement, sql2) {
3752
+ const existing = statements.get(statement);
3753
+ if (existing)
3754
+ return existing;
3755
+ const proxy = bindProxy(statement, (key, method, args) => {
3756
+ if (["all", "get", "run", "values"].includes(key)) {
3757
+ return timed(key, sql2, () => Reflect.apply(method, statement, args));
3758
+ }
3759
+ return Reflect.apply(method, statement, args);
3760
+ });
3761
+ statements.set(statement, proxy);
3762
+ return proxy;
3763
+ }
3764
+ return bindProxy(database, (key, method, args) => {
3765
+ if (["query", "prepare"].includes(key) && typeof args[0] === "string") {
3766
+ const sql2 = args[0];
3767
+ const statement = timed(`${key}.prepare`, sql2, () => Reflect.apply(method, database, args));
3768
+ return statementProxy(statement, sql2);
3769
+ }
3770
+ if (["exec", "run"].includes(key) && typeof args[0] === "string") {
3771
+ return timed(key, args[0], () => Reflect.apply(method, database, args));
3772
+ }
3773
+ return Reflect.apply(method, database, args);
3774
+ });
3775
+ }
3776
+ function bindProxy(target, invoke) {
3777
+ const methods = new Map;
3778
+ return new Proxy(target, {
3779
+ get(object, key) {
3780
+ const value = Reflect.get(object, key, object);
3781
+ if (typeof value !== "function" || key === "constructor")
3782
+ return value;
3783
+ const cached = methods.get(key);
3784
+ if (cached?.original === value)
3785
+ return cached.wrapped;
3786
+ const wrapped = (...args) => invoke(String(key), value, args);
3787
+ methods.set(key, { original: value, wrapped });
3788
+ return wrapped;
3789
+ }
3790
+ });
3791
+ }
3792
+ var init_sqlite_observation = () => {};
3793
+
3667
3794
  // ../runtime/src/runtime-adapters.ts
3668
3795
  function detectRuntimeHost(globalScope = globalThis) {
3669
3796
  return typeof globalScope.Bun === "undefined" ? "node" : "bun";
@@ -3729,13 +3856,13 @@ function openRuntimeSqliteDatabase(path2, options) {
3729
3856
  const adapter = controlPlaneSqliteAdapterKind();
3730
3857
  if (adapter === "bun-sqlite") {
3731
3858
  const { Database } = require2("bun:sqlite");
3732
- return new Database(path2, options);
3859
+ return observeSqliteDatabase(new Database(path2, options), { database: "runtime" });
3733
3860
  }
3734
3861
  const { DatabaseSync } = require2("node:sqlite");
3735
- return new NodeSqliteDatabaseAdapter(new DatabaseSync(path2, {
3862
+ return observeSqliteDatabase(new NodeSqliteDatabaseAdapter(new DatabaseSync(path2, {
3736
3863
  open: true,
3737
3864
  readOnly: options?.readonly === true
3738
- }));
3865
+ })), { database: "runtime" });
3739
3866
  }
3740
3867
  function prepareNodeSqliteSql(sql2) {
3741
3868
  const numberedParamIndexes = [];
@@ -3828,6 +3955,8 @@ class NodeSqliteDatabaseAdapter {
3828
3955
  }
3829
3956
  var require2;
3830
3957
  var init_sqlite_adapter = __esm(() => {
3958
+ init_sqlite_observation();
3959
+ init_sqlite_observation();
3831
3960
  require2 = createRequire(import.meta.url);
3832
3961
  });
3833
3962
 
@@ -15274,6 +15403,7 @@ class CodexAppServerTransport {
15274
15403
  });
15275
15404
  }
15276
15405
  async ensureStarted() {
15406
+ this.options.signal?.throwIfAborted();
15277
15407
  if (this.isAlive() && this.threadId) {
15278
15408
  return;
15279
15409
  }
@@ -15305,6 +15435,7 @@ class CodexAppServerTransport {
15305
15435
  });
15306
15436
  throw failure;
15307
15437
  }
15438
+ this.options.signal?.throwIfAborted();
15308
15439
  const codexExecutable = resolveCodexExecutable();
15309
15440
  const launchArgs = normalizeCodexAppServerLaunchArgs(this.options.launchArgs);
15310
15441
  const env = this.options.processEnv ?? mergeEnvironmentOverrides(process.env, this.options.env);
@@ -15688,13 +15819,17 @@ class CodexAppServerClient {
15688
15819
  return this.transport.ensureOnline();
15689
15820
  }
15690
15821
  async invoke(prompt, timeoutMs) {
15822
+ const onDelta = this.options.onDelta;
15823
+ const signal = this.options.signal;
15691
15824
  return this.enqueue(async () => {
15825
+ signal?.throwIfAborted();
15692
15826
  await this.transport.ensureOnline();
15827
+ signal?.throwIfAborted();
15693
15828
  if (!this.transport.currentThreadId) {
15694
15829
  throw new Error(`Codex app-server session for ${this.options.agentName} has no active thread.`);
15695
15830
  }
15696
15831
  const outputPromise = new Promise(async (resolve10, reject) => {
15697
- const turn = this.createActiveTurn(resolve10, reject);
15832
+ const turn = this.createActiveTurn(resolve10, reject, onDelta);
15698
15833
  try {
15699
15834
  const response = await this.transport.startTurn(prompt);
15700
15835
  turn.turnId = response.turn.id;
@@ -15711,8 +15846,12 @@ class CodexAppServerClient {
15711
15846
  });
15712
15847
  }
15713
15848
  async start(prompt) {
15849
+ const onDelta = this.options.onDelta;
15850
+ const signal = this.options.signal;
15714
15851
  return this.enqueue(async () => {
15852
+ signal?.throwIfAborted();
15715
15853
  await this.transport.ensureOnline();
15854
+ signal?.throwIfAborted();
15716
15855
  if (!this.transport.currentThreadId) {
15717
15856
  throw new Error(`Codex app-server session for ${this.options.agentName} has no active thread.`);
15718
15857
  }
@@ -15721,7 +15860,7 @@ class CodexAppServerClient {
15721
15860
  }
15722
15861
  let turn;
15723
15862
  const completion = new Promise((resolve10, reject) => {
15724
- turn = this.createActiveTurn(resolve10, reject);
15863
+ turn = this.createActiveTurn(resolve10, reject, onDelta);
15725
15864
  });
15726
15865
  completion.catch(() => {
15727
15866
  return;
@@ -15818,11 +15957,12 @@ class CodexAppServerClient {
15818
15957
  });
15819
15958
  return next;
15820
15959
  }
15821
- createActiveTurn(resolve10, reject) {
15960
+ createActiveTurn(resolve10, reject, onDelta) {
15822
15961
  if (this.activeTurn) {
15823
15962
  throw new Error(`Codex app-server session for ${this.options.agentName} already has an active turn.`);
15824
15963
  }
15825
15964
  const turn = {
15965
+ onDelta,
15826
15966
  turnId: "",
15827
15967
  startedAt: Date.now(),
15828
15968
  messageOrder: [],
@@ -15899,6 +16039,8 @@ class CodexAppServerClient {
15899
16039
  this.activeTurn.messageByItemId.set(itemId, "");
15900
16040
  }
15901
16041
  this.activeTurn.messageByItemId.set(itemId, (this.activeTurn.messageByItemId.get(itemId) ?? "") + delta);
16042
+ if (delta)
16043
+ this.activeTurn.onDelta?.(delta);
15902
16044
  return;
15903
16045
  }
15904
16046
  if (method === "item/completed") {
@@ -27170,6 +27312,15 @@ var messageMentionsTable = sqliteTable("message_mentions", {
27170
27312
  }, (table) => [
27171
27313
  primaryKey({ columns: [table.messageId, table.actorId] })
27172
27314
  ]);
27315
+ var messageReactionsTable = sqliteTable("message_reactions", {
27316
+ messageId: text("message_id").notNull().references(() => messagesTable.id, { onDelete: "cascade" }),
27317
+ actorId: text("actor_id").notNull().references(() => actorsTable.id, { onDelete: "restrict" }),
27318
+ emoji: text("emoji").notNull(),
27319
+ createdAt: integer("created_at").notNull()
27320
+ }, (table) => [
27321
+ primaryKey({ columns: [table.messageId, table.actorId, table.emoji] }),
27322
+ index("idx_message_reactions_message").on(table.messageId)
27323
+ ]);
27173
27324
  var messageAttachmentsTable = sqliteTable("message_attachments", {
27174
27325
  id: text("id").primaryKey(),
27175
27326
  messageId: text("message_id").notNull().references(() => messagesTable.id, { onDelete: "cascade" }),
@@ -28017,6 +28168,16 @@ CREATE TABLE IF NOT EXISTS message_mentions (
28017
28168
  PRIMARY KEY (message_id, actor_id)
28018
28169
  );
28019
28170
 
28171
+ CREATE TABLE IF NOT EXISTS message_reactions (
28172
+ message_id TEXT NOT NULL REFERENCES messages(id) ON DELETE CASCADE,
28173
+ actor_id TEXT NOT NULL REFERENCES actors(id) ON DELETE RESTRICT,
28174
+ emoji TEXT NOT NULL,
28175
+ created_at INTEGER NOT NULL,
28176
+ PRIMARY KEY (message_id, actor_id, emoji)
28177
+ );
28178
+ CREATE INDEX IF NOT EXISTS idx_message_reactions_message
28179
+ ON message_reactions (message_id);
28180
+
28020
28181
  CREATE TABLE IF NOT EXISTS message_attachments (
28021
28182
  id TEXT PRIMARY KEY,
28022
28183
  message_id TEXT NOT NULL REFERENCES messages(id) ON DELETE CASCADE,
@@ -29733,7 +29894,7 @@ init_node_identity();
29733
29894
 
29734
29895
  // ../runtime/src/mesh-peer-auth.ts
29735
29896
  init_node_identity();
29736
- import { createHash as createHash3, randomBytes as randomBytes3 } from "crypto";
29897
+ import { createHash as createHash4, randomBytes as randomBytes3 } from "crypto";
29737
29898
  var PEER_AUTH_HEADERS = {
29738
29899
  peer: "x-openscout-peer",
29739
29900
  ts: "x-openscout-ts",
@@ -29768,7 +29929,7 @@ function peerRequestSigningPayload(input) {
29768
29929
  `);
29769
29930
  }
29770
29931
  function sha256Hex(body) {
29771
- return createHash3("sha256").update(body).digest("hex");
29932
+ return createHash4("sha256").update(body).digest("hex");
29772
29933
  }
29773
29934
  function signPeerRequest(identity, input) {
29774
29935
  const ts = input.ts ?? Date.now();
@@ -29833,7 +29994,7 @@ import { connect as tlsConnect } from "tls";
29833
29994
 
29834
29995
  // ../runtime/src/node-tls-identity.ts
29835
29996
  import {
29836
- createHash as createHash4,
29997
+ createHash as createHash5,
29837
29998
  createPrivateKey as createPrivateKey2,
29838
29999
  createPublicKey as createPublicKey2,
29839
30000
  generateKeyPairSync as generateKeyPairSync2,
@@ -41907,7 +42068,7 @@ init_support_paths();
41907
42068
  var TLS_CERT_VALIDITY_MS = 365 * 24 * 60 * 60 * 1000;
41908
42069
  var TLS_CERT_RENEWAL_WINDOW_MS = 30 * 24 * 60 * 60 * 1000;
41909
42070
  function tlsSpkiFingerprintFromDer(spkiDer) {
41910
- return createHash4("sha256").update(spkiDer).digest("hex");
42071
+ return createHash5("sha256").update(spkiDer).digest("hex");
41911
42072
  }
41912
42073
  function tlsSpkiFingerprintFromCertificateDer(certificateDer) {
41913
42074
  const certificate2 = new X509Certificate(asBufferSource(certificateDer));
@@ -42626,7 +42787,7 @@ var require3 = createRequire2(import.meta.url);
42626
42787
  // ../runtime/src/mesh-bind-controller.ts
42627
42788
  init_broker_process_manager();
42628
42789
  // ../runtime/src/mesh-sas.ts
42629
- import { createHash as createHash5, createHmac } from "crypto";
42790
+ import { createHash as createHash6, createHmac } from "crypto";
42630
42791
 
42631
42792
  // ../runtime/src/eff-short-wordlist.ts
42632
42793
  var EFF_SHORT_WORDLIST = [
@@ -43931,7 +44092,7 @@ var EFF_SHORT_WORDLIST = [
43931
44092
  // ../runtime/src/mesh-sas.ts
43932
44093
  var SAS_WORD_COUNT = 6;
43933
44094
  function createEnrollmentCommitment(nonce, cardSignature) {
43934
- return createHash5("sha256").update(Buffer.concat([nonce, Buffer.from(cardSignature, "utf8")])).digest("base64");
44095
+ return createHash6("sha256").update(Buffer.concat([nonce, Buffer.from(cardSignature, "utf8")])).digest("base64");
43935
44096
  }
43936
44097
  function verifyEnrollmentCommitment(commitment, nonce, cardSignature) {
43937
44098
  const expected = createEnrollmentCommitment(nonce, cardSignature);
@@ -45919,6 +46080,7 @@ function resolvePushRelayConfig() {
45919
46080
  meshId: process.env.OPENSCOUT_PUSH_RELAY_MESH_ID?.trim() || null
45920
46081
  };
45921
46082
  }
46083
+ var PUSH_RELAY_TRANSPORT_DEVICE_ID = "push-relay";
45922
46084
  function relayAuthHeader(sessionToken) {
45923
46085
  return sessionToken.startsWith("osn_session_") ? `Bearer ${sessionToken}` : `Bearer osn_session_${sessionToken}`;
45924
46086
  }
@@ -46000,7 +46162,7 @@ async function broadcastPushRelayAlert(alert) {
46000
46162
  retryAfterSeconds: retryAfter ? Number.parseInt(retryAfter, 10) || null : null,
46001
46163
  rateLimitWindow: window2,
46002
46164
  failures: [{
46003
- deviceId: "push-relay",
46165
+ deviceId: PUSH_RELAY_TRANSPORT_DEVICE_ID,
46004
46166
  tokenSuffix: "relay",
46005
46167
  status: 429,
46006
46168
  reason: detail || `HTTP 429 (window=${window2 ?? "unknown"})`
@@ -46016,7 +46178,7 @@ async function broadcastPushRelayAlert(alert) {
46016
46178
  failedCount: 1,
46017
46179
  configMissing: false,
46018
46180
  failures: [{
46019
- deviceId: "push-relay",
46181
+ deviceId: PUSH_RELAY_TRANSPORT_DEVICE_ID,
46020
46182
  tokenSuffix: "relay",
46021
46183
  status: response.status,
46022
46184
  reason: detail || `HTTP ${response.status}`
@@ -46330,15 +46492,30 @@ async function sendApnsAlertToRegistration(registration, alert) {
46330
46492
  request.end(payload);
46331
46493
  });
46332
46494
  }
46495
+ function relayRejectedOurCredential(result) {
46496
+ return result.failures.some((failure) => failure.deviceId === PUSH_RELAY_TRANSPORT_DEVICE_ID && (failure.status === 401 || failure.status === 403));
46497
+ }
46498
+ function hasDirectApnsCredentials() {
46499
+ try {
46500
+ return loadApnsCredentials() !== null;
46501
+ } catch {
46502
+ return false;
46503
+ }
46504
+ }
46333
46505
  async function broadcastApnsAlertToActiveMobileDevices(alert) {
46506
+ let relayFailures = [];
46334
46507
  if (resolvePushRelayConfig()) {
46335
- return broadcastPushRelayAlert(alert);
46508
+ const relayResult = await broadcastPushRelayAlert(alert);
46509
+ if (!relayRejectedOurCredential(relayResult) || !hasDirectApnsCredentials()) {
46510
+ return relayResult;
46511
+ }
46512
+ relayFailures = relayResult.failures;
46336
46513
  }
46337
46514
  const registrations = listActiveMobilePushRegistrations();
46338
46515
  let deliveredCount = 0;
46339
46516
  let skippedCount = 0;
46340
46517
  let configMissing = false;
46341
- const failures = [];
46518
+ const failures = [...relayFailures];
46342
46519
  for (const registration of registrations) {
46343
46520
  try {
46344
46521
  const outcome = await sendApnsAlertToRegistration(registration, alert);
@@ -60149,7 +60326,7 @@ function formatTimestamp(value) {
60149
60326
  }
60150
60327
 
60151
60328
  // ../web/server/core/broker/service.ts
60152
- import { createHash as createHash6, randomUUID as randomUUID4 } from "crypto";
60329
+ import { createHash as createHash7, randomUUID as randomUUID4 } from "crypto";
60153
60330
  init_src();
60154
60331
  init_setup();
60155
60332
  init_broker_api();
@@ -60644,7 +60821,7 @@ function deliveryRequestId(clientMessageId, createdAt) {
60644
60821
  if (!normalized) {
60645
60822
  return `deliver-${createdAt.toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
60646
60823
  }
60647
- const digest = createHash6("sha256").update(normalized).digest("hex").slice(0, 32);
60824
+ const digest = createHash7("sha256").update(normalized).digest("hex").slice(0, 32);
60648
60825
  return `deliver-client-${digest}`;
60649
60826
  }
60650
60827
  function stableBrokerRecordId(prefix, clientMessageId, createdAt, discriminator = "") {
@@ -60652,7 +60829,7 @@ function stableBrokerRecordId(prefix, clientMessageId, createdAt, discriminator
60652
60829
  if (!normalized) {
60653
60830
  return `${prefix}-${createdAt.toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
60654
60831
  }
60655
- const digest = createHash6("sha256").update(`${normalized}\x00${discriminator}`).digest("hex").slice(0, 32);
60832
+ const digest = createHash7("sha256").update(`${normalized}\x00${discriminator}`).digest("hex").slice(0, 32);
60656
60833
  return `${prefix}-client-${digest}`;
60657
60834
  }
60658
60835
  function metadataBoolean(metadata, key) {
@@ -62028,6 +62205,7 @@ var {
62028
62205
  } = scoutAgentService;
62029
62206
 
62030
62207
  // ../web/server/db/internal/db.ts
62208
+ init_sqlite_adapter();
62031
62209
  import { Database as Database2 } from "bun:sqlite";
62032
62210
  import { homedir as homedir33 } from "os";
62033
62211
  import { join as join42 } from "path";
@@ -62043,13 +62221,18 @@ function configureReadonlyDb(db) {
62043
62221
  }
62044
62222
  function db() {
62045
62223
  if (!_db) {
62046
- _db = new Database2(resolveDbPath(), { readonly: true });
62224
+ _db = observeSqliteDatabase(new Database2(resolveDbPath(), { readonly: true }), {
62225
+ database: "web-control-plane"
62226
+ });
62047
62227
  configureReadonlyDb(_db);
62048
62228
  }
62049
62229
  return _db;
62050
62230
  }
62051
62231
  // ../web/server/db/internal/parse.ts
62052
62232
  init_src();
62233
+ function jsonBoolean(value) {
62234
+ return value === 1 || value === "1" || value === "true";
62235
+ }
62053
62236
  function normalizeTimestampMs(value) {
62054
62237
  return epochMs(value);
62055
62238
  }
@@ -62113,7 +62296,9 @@ function agentFlightPhaseFromFlightState(state) {
62113
62296
  function queryAgentFlightPhases(database = db()) {
62114
62297
  const phases = new Map;
62115
62298
  const rows = database.prepare(`SELECT target_agent_id, state FROM invocations
62116
- WHERE state IN (${sqlPlaceholders(ACTIVE_FLIGHT_STATES4.length)})`).all(...ACTIVE_FLIGHT_STATES4);
62299
+ WHERE state IN (${sqlPlaceholders(ACTIVE_FLIGHT_STATES4.length)})
62300
+ AND COALESCE(json_extract(flight_metadata_json, '$.requesterTimedOut'), 0) != 1
62301
+ AND COALESCE(json_extract(flight_metadata_json, '$.timeoutScope'), '') != 'requester_wait'`).all(...ACTIVE_FLIGHT_STATES4);
62117
62302
  for (const row of rows) {
62118
62303
  const phase = agentFlightPhaseFromFlightState(row.state);
62119
62304
  if (!phase) {
@@ -62362,6 +62547,7 @@ function queryFleetActivity(opts) {
62362
62547
  }
62363
62548
  var TERMINAL_FLIGHT_STATES = new Set(["completed", "failed", "cancelled"]);
62364
62549
  var FLEET_RECENT_COMPLETED_MAX_AGE_MS = 3 * 24 * 60 * 60 * 1000;
62550
+ var ATTENTION_STALE_AFTER_MS = 7 * 24 * 60 * 60 * 1000;
62365
62551
  function fleetRequesterIds() {
62366
62552
  const operatorName = resolveOperatorName().trim() || "operator";
62367
62553
  return Array.from(new Set([operatorName, "operator"]));
@@ -62402,6 +62588,8 @@ function queryFleetAskRows(requesterIds, limit) {
62402
62588
  json_extract(inv.flight_metadata_json, '$.failureSeverity') AS failure_severity,
62403
62589
  json_extract(inv.flight_metadata_json, '$.dispatchOutcome.status') AS dispatch_outcome_status,
62404
62590
  json_extract(inv.flight_metadata_json, '$.dispatchOutcome.reason') AS dispatch_outcome_reason,
62591
+ json_extract(inv.flight_metadata_json, '$.requesterTimedOut') AS requester_timed_out,
62592
+ json_extract(inv.flight_metadata_json, '$.timeoutScope') AS timeout_scope,
62405
62593
  (
62406
62594
  SELECT MAX(COALESCE(recovery_inv.completed_at, recovery_inv.started_at, 0))
62407
62595
  FROM invocations recovery_inv
@@ -62488,7 +62676,8 @@ function projectFleetAsk(row, requesterIdSet) {
62488
62676
  const queuedFlight = row.flight_state === "queued";
62489
62677
  const queuedUntilOnline = queuedFlight && row.dispatch_outcome_status === "queued_until_online";
62490
62678
  const staleActiveFlight = hasFlight && row.flight_state !== null && !TERMINAL_FLIGHT_STATES.has(row.flight_state) && isStaleActiveFlight(row.started_at, row.created_at);
62491
- const isActiveFlight = hasFlight && row.flight_state !== null && !TERMINAL_FLIGHT_STATES.has(row.flight_state) && !failed && !staleActiveFlight;
62679
+ const requesterStoppedWaiting = hasFlight && row.flight_state !== null && !TERMINAL_FLIGHT_STATES.has(row.flight_state) && (jsonBoolean(row.requester_timed_out) || row.timeout_scope === "requester_wait");
62680
+ const isActiveFlight = hasFlight && row.flight_state !== null && !TERMINAL_FLIGHT_STATES.has(row.flight_state) && !failed && !staleActiveFlight && !requesterStoppedWaiting;
62492
62681
  const attentionEligibleState = row.record_kind === "work_item" && row.work_state !== null && ["open", "working", "waiting", "review"].includes(row.work_state) || row.record_kind === "question" && row.work_state !== null && ["open", "answered"].includes(row.work_state);
62493
62682
  const recordDismissedAt = normalizeTimestampMs(row.record_dismissed_at);
62494
62683
  const recordUpdatedAt = normalizeTimestampMs(row.work_updated_at);
@@ -62522,7 +62711,7 @@ function projectFleetAsk(row, requesterIdSet) {
62522
62711
  collaborationRecordId: row.collaboration_record_id,
62523
62712
  task: row.task,
62524
62713
  status,
62525
- statusLabel: status === "working" && replied ? "Acknowledged" : status === "failed" && queuedUntilOnline ? "Not delivered" : status === "failed" && noteworthyFailure ? stoppedFailure ? "Stopped" : "Interrupted" : fleetStatusLabel(status),
62714
+ statusLabel: requesterStoppedWaiting && status === "completed" ? "Stopped waiting" : status === "working" && replied ? "Acknowledged" : status === "failed" && queuedUntilOnline ? "Not delivered" : status === "failed" && noteworthyFailure ? stoppedFailure ? "Stopped" : "Interrupted" : fleetStatusLabel(status),
62526
62715
  acknowledgedAt: status === "working" && replied ? normalizeTimestampMs(row.status_ts) : null,
62527
62716
  attention: status === "needs_attention" ? "badge" : status === "failed" && queuedUntilOnline ? "badge" : status === "failed" && !failedDismissed && !recoveredDeliveryFailure ? noteworthyFailure ? "badge" : "interrupt" : "silent",
62528
62717
  agentState: summarizeAgentState(row.endpoint_state, agentFlightPhaseFromFlightState(row.flight_state)),
@@ -62536,34 +62725,54 @@ function projectFleetAsk(row, requesterIdSet) {
62536
62725
  }
62537
62726
  function queryFleetAttentionRows(requesterIds, limit) {
62538
62727
  const requesterClause = sqlPlaceholders(requesterIds.length);
62539
- return db().prepare(`SELECT
62540
- cr.kind AS record_kind,
62541
- cr.id AS record_id,
62728
+ const staleBefore = Date.now() - ATTENTION_STALE_AFTER_MS;
62729
+ return db().prepare(`WITH live_attention AS (
62730
+ SELECT
62731
+ cr.kind AS record_kind,
62732
+ cr.id AS record_id,
62733
+ cr.title,
62734
+ cr.summary,
62735
+ cr.conversation_id,
62736
+ cr.state,
62737
+ cr.acceptance_state,
62738
+ cr.updated_at,
62739
+ cr.owner_id AS agent_id,
62740
+ ROW_NUMBER() OVER (
62741
+ PARTITION BY cr.title, cr.owner_id
62742
+ ORDER BY cr.updated_at DESC, cr.id DESC
62743
+ ) AS duplicate_rank
62744
+ FROM collaboration_records cr
62745
+ WHERE (
62746
+ (cr.kind = 'work_item' AND cr.state IN ('open', 'working', 'waiting', 'review'))
62747
+ OR (cr.kind = 'question' AND cr.state IN ('open', 'answered'))
62748
+ )
62749
+ AND cr.next_move_owner_id IN (${requesterClause})
62750
+ AND cr.updated_at >= ?
62751
+ AND NOT EXISTS (
62752
+ SELECT 1
62753
+ FROM collaboration_events dismissed
62754
+ WHERE dismissed.record_id = cr.id
62755
+ AND dismissed.kind = 'dismissed'
62756
+ AND dismissed.actor_id IN (${requesterClause})
62757
+ AND dismissed.created_at >= cr.updated_at
62758
+ )
62759
+ )
62760
+ SELECT
62761
+ cr.record_kind,
62762
+ cr.record_id,
62542
62763
  cr.title,
62543
62764
  cr.summary,
62544
62765
  cr.conversation_id,
62545
62766
  cr.state,
62546
62767
  cr.acceptance_state,
62547
62768
  cr.updated_at,
62548
- cr.owner_id AS agent_id,
62769
+ cr.agent_id,
62549
62770
  owner.display_name AS agent_name
62550
- FROM collaboration_records cr
62551
- LEFT JOIN actors owner ON owner.id = cr.owner_id
62552
- WHERE (
62553
- (cr.kind = 'work_item' AND cr.state IN ('open', 'working', 'waiting', 'review'))
62554
- OR (cr.kind = 'question' AND cr.state IN ('open', 'answered'))
62555
- )
62556
- AND cr.next_move_owner_id IN (${requesterClause})
62557
- AND NOT EXISTS (
62558
- SELECT 1
62559
- FROM collaboration_events dismissed
62560
- WHERE dismissed.record_id = cr.id
62561
- AND dismissed.kind = 'dismissed'
62562
- AND dismissed.actor_id IN (${requesterClause})
62563
- AND dismissed.created_at >= cr.updated_at
62564
- )
62771
+ FROM live_attention cr
62772
+ LEFT JOIN actors owner ON owner.id = cr.agent_id
62773
+ WHERE cr.duplicate_rank = 1
62565
62774
  ORDER BY cr.updated_at DESC
62566
- LIMIT ?`).all(...requesterIds, ...requesterIds, limit);
62775
+ LIMIT ?`).all(...requesterIds, staleBefore, ...requesterIds, limit);
62567
62776
  }
62568
62777
  function queryOperatorAttentionRows(limit = 48) {
62569
62778
  return queryFleetAttentionRows(fleetRequesterIds(), limit).map((row) => ({
@@ -62777,7 +62986,7 @@ function isMissingTerminalSessionRegistryError(error) {
62777
62986
  return /no such table: terminal_session_registry/i.test(message);
62778
62987
  }
62779
62988
  // ../web/server/service-budgets.ts
62780
- import { createHash as createHash7 } from "crypto";
62989
+ import { createHash as createHash8 } from "crypto";
62781
62990
  import { existsSync as existsSync37, mkdirSync as mkdirSync17, readdirSync as readdirSync6, readFileSync as readFileSync22, renameSync as renameSync6, statSync as statSync11, writeFileSync as writeFileSync13 } from "fs";
62782
62991
  import { open, readdir as readdir4, stat as stat6 } from "fs/promises";
62783
62992
  import { homedir as homedir35 } from "os";
@@ -62789,7 +62998,9 @@ init_pi_rpc();
62789
62998
  init_system_probes();
62790
62999
  import { Database as Database3 } from "bun:sqlite";
62791
63000
  var CACHE_TTL_MS = 60 * 1000;
63001
+ var FIVE_HOUR_MS = 5 * 3600 * 1000;
62792
63002
  var WEEK_MS = 7 * 24 * 3600 * 1000;
63003
+ var MONTH_MS = 30 * 24 * 3600 * 1000;
62793
63004
  var CODEX_LOOKBACK_DAYS = 3;
62794
63005
  var CODEX_JSONL_TAIL_MAX_BYTES = 2 * 1024 * 1024;
62795
63006
  var CODEX_INITIAL_FILE_LIMIT = 32;
@@ -63162,25 +63373,46 @@ function readClaudeStatuslineHistory(minCapturedAt) {
63162
63373
  }
63163
63374
  return out;
63164
63375
  }
63376
+ function claudeStatuslineWindowSpec(key) {
63377
+ const raw2 = key.trim();
63378
+ if (!raw2)
63379
+ return null;
63380
+ const normalized = raw2.toLowerCase().replace(/[-_\s]/gu, "");
63381
+ if (["fivehour", "fivehours", "primary", "5h"].includes(normalized)) {
63382
+ return { label: "5h", windowKind: "primary", windowMs: FIVE_HOUR_MS };
63383
+ }
63384
+ if (["sevenday", "weekly", "secondary", "7d"].includes(normalized)) {
63385
+ return { label: "7d", windowKind: "secondary", windowMs: WEEK_MS };
63386
+ }
63387
+ if (["monthly", "month", "thirtyday", "30d"].includes(normalized)) {
63388
+ return { label: "30d", windowKind: "monthly", windowMs: MONTH_MS };
63389
+ }
63390
+ if (normalized.includes("month")) {
63391
+ return { label: "30d", windowKind: "monthly", windowMs: MONTH_MS };
63392
+ }
63393
+ if (normalized.includes("fivehour") || normalized.endsWith("5h")) {
63394
+ return { label: raw2.replace(/_/gu, " "), windowKind: raw2, windowMs: FIVE_HOUR_MS };
63395
+ }
63396
+ if (normalized.startsWith("sevenday") || normalized.includes("weekly")) {
63397
+ return { label: raw2.replace(/_/gu, " "), windowKind: raw2, windowMs: WEEK_MS };
63398
+ }
63399
+ return { label: raw2.replace(/_/gu, " "), windowKind: raw2, windowMs: WEEK_MS };
63400
+ }
63165
63401
  function claudeQuotaSnapshotsFromStatusline(record2) {
63166
63402
  const rateLimits = recordValue(record2.rate_limits);
63167
63403
  if (!rateLimits)
63168
63404
  return [];
63169
63405
  const capturedAt = claudeStatuslineCapturedAt(record2);
63170
- return [
63171
- claudeQuotaSnapshotFromStatuslineWindow(record2, rateLimits.five_hour, {
63172
- label: "5h",
63173
- windowKind: "primary",
63174
- windowMs: 5 * 3600 * 1000,
63175
- capturedAt
63176
- }),
63177
- claudeQuotaSnapshotFromStatuslineWindow(record2, rateLimits.seven_day, {
63178
- label: "7d",
63179
- windowKind: "secondary",
63180
- windowMs: WEEK_MS,
63406
+ return Object.entries(rateLimits).flatMap(([key, value]) => {
63407
+ const spec = claudeStatuslineWindowSpec(key);
63408
+ if (!spec)
63409
+ return [];
63410
+ const snapshot = claudeQuotaSnapshotFromStatuslineWindow(record2, value, {
63411
+ ...spec,
63181
63412
  capturedAt
63182
- })
63183
- ].filter((entry) => entry !== null);
63413
+ });
63414
+ return snapshot ? [snapshot] : [];
63415
+ });
63184
63416
  }
63185
63417
  function claudeQuotaSnapshotFromStatuslineWindow(record2, value, options) {
63186
63418
  const window2 = recordValue(value);
@@ -63259,15 +63491,12 @@ function loadPersistedProviderQuotaSnapshots(input) {
63259
63491
  metadata: parseMetadataJson(row.metadataJson)
63260
63492
  }));
63261
63493
  }
63262
- function quotaGaugeFromSnapshots(input, snapshots) {
63494
+ function selectLatestQuotaSnapshots(snapshots, input) {
63263
63495
  const latestByWindow = new Map;
63264
- const historyByWindow = quotaHistoryByWindow(snapshots);
63265
- const now = Date.now();
63266
- const minCurrentCapturedAt = input.maxCurrentAgeMs === undefined ? Number.NEGATIVE_INFINITY : now - input.maxCurrentAgeMs;
63267
63496
  for (const row of snapshots) {
63268
- if (row.capturedAt < minCurrentCapturedAt)
63497
+ if (row.capturedAt < input.minCurrentCapturedAt)
63269
63498
  continue;
63270
- if (!input.allowExpiredWindows && quotaSnapshotIsExpired(row, now))
63499
+ if (!input.allowExpiredWindows && quotaSnapshotIsExpired(row, input.now))
63271
63500
  continue;
63272
63501
  const key = quotaSnapshotWindowKey(row);
63273
63502
  const existing = latestByWindow.get(key);
@@ -63293,7 +63522,36 @@ function quotaGaugeFromSnapshots(input, snapshots) {
63293
63522
  latestByWindow.set(key, row);
63294
63523
  }
63295
63524
  }
63296
- const windows = [...latestByWindow.values()].map((snapshot) => storedQuotaWindowGauge(snapshot, historyByWindow.get(quotaSnapshotWindowKey(snapshot)) ?? [])).filter((window2) => Boolean(window2)).sort((a, b) => quotaWindowSortRank(a.label) - quotaWindowSortRank(b.label) || a.label.localeCompare(b.label));
63525
+ return latestByWindow;
63526
+ }
63527
+ function quotaGaugeFromSnapshots(input, snapshots) {
63528
+ const historyByWindow = quotaHistoryByWindow(snapshots);
63529
+ const now = Date.now();
63530
+ const minCurrentCapturedAt = input.maxCurrentAgeMs === undefined ? Number.NEGATIVE_INFINITY : now - input.maxCurrentAgeMs;
63531
+ const latestByWindow = selectLatestQuotaSnapshots(snapshots, {
63532
+ minCurrentCapturedAt,
63533
+ now,
63534
+ allowExpiredWindows: input.allowExpiredWindows
63535
+ });
63536
+ const awaitingKeys = new Set;
63537
+ if (latestByWindow.size > 0 && !input.allowExpiredWindows) {
63538
+ const expiredSiblings = selectLatestQuotaSnapshots(snapshots, {
63539
+ minCurrentCapturedAt,
63540
+ now,
63541
+ allowExpiredWindows: true
63542
+ });
63543
+ for (const [key, row] of expiredSiblings) {
63544
+ if (latestByWindow.has(key))
63545
+ continue;
63546
+ if (!quotaSnapshotIsExpired(row, now))
63547
+ continue;
63548
+ if (!shouldRetainExpiredWindow(row, now))
63549
+ continue;
63550
+ latestByWindow.set(key, row);
63551
+ awaitingKeys.add(key);
63552
+ }
63553
+ }
63554
+ const windows = [...latestByWindow.values()].map((snapshot) => storedQuotaWindowGauge(snapshot, historyByWindow.get(quotaSnapshotWindowKey(snapshot)) ?? [], { awaitingReset: awaitingKeys.has(quotaSnapshotWindowKey(snapshot)), now })).filter((window2) => Boolean(window2)).sort((a, b) => quotaWindowSortRank(a.label) - quotaWindowSortRank(b.label) || a.label.localeCompare(b.label));
63297
63555
  if (windows.length === 0)
63298
63556
  return null;
63299
63557
  const displayWindow = windows.find((window2) => window2.label === "7d") ?? windows[windows.length - 1];
@@ -63356,6 +63614,34 @@ function quotaSnapshotIsExpired(row, now) {
63356
63614
  const resetAt = finiteNumber(row.resetAt);
63357
63615
  return resetAt !== undefined && resetAt <= now;
63358
63616
  }
63617
+ function inferredQuotaWindowMs(row) {
63618
+ const explicit = finiteNumber(row.windowMs);
63619
+ if (explicit !== undefined)
63620
+ return explicit;
63621
+ const label = row.label.trim().toLowerCase();
63622
+ if (label === "5h" || row.windowKind === "primary")
63623
+ return FIVE_HOUR_MS;
63624
+ if (label === "7d" || label === "weekly" || row.windowKind === "secondary")
63625
+ return WEEK_MS;
63626
+ if (label === "30d" || label === "monthly" || row.windowKind === "monthly")
63627
+ return MONTH_MS;
63628
+ return;
63629
+ }
63630
+ function shouldRetainExpiredWindow(row, now) {
63631
+ const windowMs = inferredQuotaWindowMs(row) ?? FIVE_HOUR_MS;
63632
+ const silenceMs = Math.min(WEEK_MS, Math.max(24 * 3600 * 1000, windowMs * 2));
63633
+ return row.capturedAt >= now - silenceMs;
63634
+ }
63635
+ function forwardedResetAt(resetAt, windowMs, now) {
63636
+ if (resetAt === undefined)
63637
+ return;
63638
+ if (resetAt > now)
63639
+ return resetAt;
63640
+ if (windowMs === undefined || windowMs <= 0)
63641
+ return resetAt;
63642
+ const cycles = Math.floor((now - resetAt) / windowMs) + 1;
63643
+ return resetAt + cycles * windowMs;
63644
+ }
63359
63645
  function quotaSnapshotUsage(row) {
63360
63646
  const remainingPercent = finiteNumber(row.percentRemaining);
63361
63647
  const usedPercent = finiteNumber(row.usedPercent) ?? (remainingPercent === undefined ? undefined : 100 - remainingPercent) ?? deriveUsedPercent(row.used, row.limitValue);
@@ -63372,20 +63658,27 @@ function quotaSnapshotUsage(row) {
63372
63658
  unitLabel: used === undefined || limit === undefined ? "quota" : "req"
63373
63659
  };
63374
63660
  }
63375
- function storedQuotaWindowGauge(row, history = []) {
63661
+ function storedQuotaWindowGauge(row, history = [], options = {}) {
63376
63662
  const usage = quotaSnapshotUsage(row);
63377
63663
  if (!usage)
63378
63664
  return null;
63379
- const windowMs = finiteNumber(row.windowMs);
63380
- const resetAt = finiteNumber(row.resetAt) ?? (windowMs === undefined ? undefined : row.capturedAt + windowMs) ?? Date.now();
63665
+ const windowMs = finiteNumber(row.windowMs) ?? inferredQuotaWindowMs(row);
63666
+ const now = options.now ?? Date.now();
63667
+ const rawResetAt = finiteNumber(row.resetAt) ?? (windowMs === undefined ? undefined : row.capturedAt + windowMs) ?? now;
63668
+ const awaitingReset = options.awaitingReset === true;
63669
+ const resetAt = awaitingReset ? forwardedResetAt(rawResetAt, windowMs, now) ?? rawResetAt : rawResetAt;
63381
63670
  return {
63382
63671
  label: formatStoredQuotaWindowLabel(row),
63383
- ...usage,
63672
+ fill: awaitingReset ? 0 : usage.fill,
63673
+ usedLabel: awaitingReset ? "\u2014" : usage.usedLabel,
63674
+ capLabel: usage.capLabel,
63675
+ unitLabel: usage.unitLabel,
63384
63676
  resetAt,
63385
63677
  ...windowMs === undefined ? {} : { windowMs },
63386
63678
  capturedAt: row.capturedAt,
63387
63679
  source: quotaSnapshotSourceLabel(row),
63388
- ...history.length === 0 ? {} : { history }
63680
+ ...history.length === 0 ? {} : { history },
63681
+ ...awaitingReset ? { awaitingReset: true } : {}
63389
63682
  };
63390
63683
  }
63391
63684
  function quotaSnapshotSourceLabel(row) {
@@ -63428,6 +63721,8 @@ function formatStoredQuotaWindowLabel(row) {
63428
63721
  if (fromDuration)
63429
63722
  return fromDuration;
63430
63723
  const label = explicitDuration.toLowerCase();
63724
+ if (label === "monthly" || label === "month" || row.windowKind === "monthly")
63725
+ return "30d";
63431
63726
  if (label === "weekly" || label === "week" || row.windowKind === "secondary")
63432
63727
  return "7d";
63433
63728
  if (label === "primary" || row.windowKind === "primary")
@@ -63445,7 +63740,9 @@ function quotaWindowSortRank(label) {
63445
63740
  return 0;
63446
63741
  if (label === "7d")
63447
63742
  return 1;
63448
- return 2;
63743
+ if (label === "30d" || label === "monthly")
63744
+ return 2;
63745
+ return 3;
63449
63746
  }
63450
63747
  async function loadKimiGauge(forceRefresh = false) {
63451
63748
  const fresh = loadPersistedProviderQuotaGauge({
@@ -64299,7 +64596,7 @@ function quotaHistoryMetadata(snapshot) {
64299
64596
  };
64300
64597
  }
64301
64598
  function stableHash(value) {
64302
- return createHash7("sha256").update(JSON.stringify(value)).digest("hex").slice(0, 24);
64599
+ return createHash8("sha256").update(JSON.stringify(value)).digest("hex").slice(0, 24);
64303
64600
  }
64304
64601
  function timestampMs(value) {
64305
64602
  const normalized = epochMs(value);
@@ -66955,7 +67252,7 @@ async function markScoutMobileConversationRead(input) {
66955
67252
 
66956
67253
  // ../web/server/core/pairing/runtime/bridge/mobile-terminal-provision.ts
66957
67254
  init_system_probes();
66958
- import { createHash as createHash10 } from "crypto";
67255
+ import { createHash as createHash11 } from "crypto";
66959
67256
  import {
66960
67257
  chmodSync as chmodSync2,
66961
67258
  closeSync as closeSync2,
@@ -66971,7 +67268,7 @@ import { homedir as homedir38, hostname as hostname3, userInfo as userInfo2 } fr
66971
67268
  import { join as join47 } from "path";
66972
67269
 
66973
67270
  // ../web/server/core/pairing/runtime/bridge/ssh-terminal-access.ts
66974
- import { createHash as createHash8 } from "crypto";
67271
+ import { createHash as createHash9 } from "crypto";
66975
67272
  var SCOUT_AUTHORIZED_KEY_MARKER = "scout:terminal-access:v0";
66976
67273
  var SCOUT_AUTHORIZED_KEY_OPTIONS = "restrict,pty";
66977
67274
  var SUPPORTED_IOS_PUBLIC_KEY_ALGORITHMS = new Set([
@@ -67143,10 +67440,10 @@ function readSshWireString(buffer, offset) {
67143
67440
  };
67144
67441
  }
67145
67442
  function fingerprintKeyData(keyData) {
67146
- return `SHA256:${createHash8("sha256").update(Buffer.from(keyData, "base64")).digest("base64").replace(/=+$/, "")}`;
67443
+ return `SHA256:${createHash9("sha256").update(Buffer.from(keyData, "base64")).digest("base64").replace(/=+$/, "")}`;
67147
67444
  }
67148
67445
  function fingerprintUtf8(value) {
67149
- return `SHA256:${createHash8("sha256").update(value, "utf8").digest("base64").replace(/=+$/, "")}`;
67446
+ return `SHA256:${createHash9("sha256").update(value, "utf8").digest("base64").replace(/=+$/, "")}`;
67150
67447
  }
67151
67448
  function encodeMarkerValue(value) {
67152
67449
  return Buffer.from(value, "utf8").toString("base64url");
@@ -67157,7 +67454,7 @@ function decodeMarkerValue(value) {
67157
67454
  }
67158
67455
 
67159
67456
  // ../web/server/core/pairing/runtime/bridge/mobile-terminal-session.ts
67160
- import { createHash as createHash9 } from "crypto";
67457
+ import { createHash as createHash10 } from "crypto";
67161
67458
 
67162
67459
  class InvalidMobileTerminalSessionError extends Error {
67163
67460
  constructor(message = "Invalid mobile terminal session name") {
@@ -67167,7 +67464,7 @@ class InvalidMobileTerminalSessionError extends Error {
67167
67464
  }
67168
67465
  function mobileTerminalSessionName(sshPublicKey, deviceClass) {
67169
67466
  const normalizedClass = normalizeMobileTerminalDeviceClass(deviceClass);
67170
- const signature = createHash9("sha256").update(sshPublicKey.trim()).digest("hex").slice(0, 8);
67467
+ const signature = createHash10("sha256").update(sshPublicKey.trim()).digest("hex").slice(0, 8);
67171
67468
  return `scout-${normalizedClass}-${signature}`;
67172
67469
  }
67173
67470
  function provisionedMobileTerminalSessionName(sshPublicKey, deviceClass) {
@@ -67330,7 +67627,7 @@ function readRequiredHostKeyFingerprint() {
67330
67627
  const keyData = pub.trim().split(/\s+/)[1];
67331
67628
  if (!keyData)
67332
67629
  throw new Error("missing key data");
67333
- const digest = createHash10("sha256").update(Buffer.from(keyData, "base64")).digest("base64").replace(/=+$/, "");
67630
+ const digest = createHash11("sha256").update(Buffer.from(keyData, "base64")).digest("base64").replace(/=+$/, "");
67334
67631
  return `SHA256:${digest}`;
67335
67632
  } catch (error) {
67336
67633
  const detail = error instanceof Error ? error.message : String(error);