@symerian/symi 3.1.0 → 3.1.2

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 (232) hide show
  1. package/dist/{acp-cli-DUfYPxyp.js → acp-cli-BfBM-bKP.js} +2 -2
  2. package/dist/{acp-cli-C9NtVXJ7.js → acp-cli-J89cntBu.js} +2 -2
  3. package/dist/{agent-DMDBKAcJ.js → agent-CEXPWtuC.js} +8 -8
  4. package/dist/{agent-DKz-M9N_.js → agent-DRRQgy58.js} +7 -7
  5. package/dist/{agents-DXs9Kjwj.js → agents-PqUWeR3A.js} +5 -5
  6. package/dist/{audit-CCWHhR0Z.js → audit-DK86QmIj.js} +5 -5
  7. package/dist/{audit-CHQE7ltJ.js → audit-hp8a-n1l.js} +5 -5
  8. package/dist/{auth-choice-6RytjsbC.js → auth-choice-DdATugur.js} +4 -4
  9. package/dist/{auth-choice-CG-QKZd6.js → auth-choice-YNYbPMs1.js} +4 -4
  10. package/dist/{banner-DQd0lIpu.js → banner-DAqLFzv_.js} +1 -1
  11. package/dist/{browser-cli-WqkpY2cc.js → browser-cli-BFWcoE7z.js} +3 -3
  12. package/dist/{browser-cli-Cldf7Y9g.js → browser-cli-xKtmzl_A.js} +3 -3
  13. package/dist/build-info.json +3 -3
  14. package/dist/bundled/boot-md/handler.js +8 -8
  15. package/dist/bundled/session-memory/handler.js +7 -7
  16. package/dist/{call-C14bzfoZ.js → call-BWteI0cy.js} +1 -1
  17. package/dist/{call-Dlm86eg6.js → call-Ddoic0fC.js} +1 -1
  18. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  19. package/dist/{channel-options-Co6PcwNY.js → channel-options-Cj-XhO9V.js} +1 -1
  20. package/dist/{channel-options-CU13eaBX.js → channel-options-D2f8AA_b.js} +1 -1
  21. package/dist/{channels-cli-BT-CS0Dv.js → channels-cli-CeA5OW3-.js} +22 -22
  22. package/dist/{channels-cli-DwLILpia.js → channels-cli-CyfuYRAC.js} +24 -24
  23. package/dist/{chrome-B7_foWil.js → chrome-B8nPYMUV.js} +1 -1
  24. package/dist/{chrome-BLHu6Hyz.js → chrome-CsuV4F-9.js} +1 -1
  25. package/dist/{chrome-O5GtGEaR.js → chrome-DFQDh6ZB.js} +8 -8
  26. package/dist/{chrome-BkXobQ6Q.js → chrome-_qwUb3dO.js} +1 -1
  27. package/dist/cli/daemon-cli.js +1 -1
  28. package/dist/{cli-C10IlksY.js → cli-B9QF1-A3.js} +18 -18
  29. package/dist/{cli-BTsGbyHe.js → cli-FC0iA9c9.js} +20 -20
  30. package/dist/{command-registry-DmjX-MJb.js → command-registry-DrPydEca.js} +11 -11
  31. package/dist/{completion-cli-DezSeZQA.js → completion-cli-B14HjsvE.js} +2 -2
  32. package/dist/{completion-cli-CKczmer5.js → completion-cli-Cbn8Wdpx.js} +1 -1
  33. package/dist/{config-BKcjFxGR.js → config-BsPVEzE3.js} +2 -2
  34. package/dist/{config-D-YxNuAZ.js → config-Cxfzso_Z.js} +0 -8
  35. package/dist/{config-cli-DbYlv3aw.js → config-cli-CZW8jojl.js} +2 -2
  36. package/dist/{config-cli-DakRgeD4.js → config-cli-YoysCWxO.js} +2 -2
  37. package/dist/{config-guard-iJNdTPmt.js → config-guard-B0j0Tq1a.js} +2 -2
  38. package/dist/{config-guard-DviVtynm.js → config-guard-BYoKKsDW.js} +3 -3
  39. package/dist/{config-CYwm_UYz.js → config-scZRRn2T.js} +0 -8
  40. package/dist/{config-validation-Cn58Yz2s.js → config-validation-D7Od5Yqx.js} +1 -1
  41. package/dist/{config-validation-Dz_Chn19.js → config-validation-DmJ-I8eH.js} +1 -1
  42. package/dist/{configure-B7CIs5tQ.js → configure-B5KQwmrU.js} +10 -10
  43. package/dist/{configure-DFMNvP2v.js → configure-DcDDW9Dx.js} +10 -10
  44. package/dist/{control-service-C6SdUJGs.js → control-service-CDWcS4TE.js} +4 -4
  45. package/dist/{control-service-Cuc3K1O-.js → control-service-CROUSYRb.js} +4 -4
  46. package/dist/control-ui/js/app.js +34 -2
  47. package/dist/{cron-cli-BWyaUoA8.js → cron-cli-CtVolwJM.js} +3 -3
  48. package/dist/{cron-cli-DSyOv8Mh.js → cron-cli-xfWPxnjt.js} +3 -3
  49. package/dist/{daemon-cli-C6LEQAIf.js → daemon-cli-Bh8S3XNY.js} +6 -6
  50. package/dist/{daemon-cli-BN0BS9To.js → daemon-cli-CLoBnTjH.js} +6 -6
  51. package/dist/daemon-cli.js +0 -8
  52. package/dist/{daemon-runtime-bdvJvhh0.js → daemon-runtime-C1vaS1KN.js} +1 -1
  53. package/dist/{daemon-runtime-Bt9_ZcwQ.js → daemon-runtime-Ciny4f0a.js} +1 -1
  54. package/dist/{deliver-BMg6XjUA.js → deliver-B3SdFgzA.js} +5 -5
  55. package/dist/{deliver-Cxzii_el.js → deliver-BrnGAti2.js} +5 -5
  56. package/dist/{deliver-CCNTT73z.js → deliver-CBLpHLj6.js} +1 -1
  57. package/dist/{deliver-SxI9drJl.js → deliver-CqJ3B363.js} +1 -1
  58. package/dist/{deps-CAJEf96g.js → deps-MXbZhSGc.js} +1 -1
  59. package/dist/{devices-cli-DATAjJ0Q.js → devices-cli-DMrDlrXV.js} +2 -2
  60. package/dist/{devices-cli-CmMoR2St.js → devices-cli-DgofB48n.js} +2 -2
  61. package/dist/{directory-cli-DyC04ktV.js → directory-cli-CSsy_RiQ.js} +1 -1
  62. package/dist/{directory-cli-DVYDMCQg.js → directory-cli-Cq_gMduw.js} +1 -1
  63. package/dist/{dns-cli-zHmXgnTc.js → dns-cli-D-XQUb_J.js} +1 -1
  64. package/dist/{dns-cli-UVvW1-bj.js → dns-cli-DqVGfq3s.js} +1 -1
  65. package/dist/{doctor-completion-BCVASe0n.js → doctor-completion-0Ciu6bXw.js} +1 -1
  66. package/dist/{doctor-completion-AGw1egU_.js → doctor-completion-bp85dPn_.js} +1 -1
  67. package/dist/{doctor-config-flow-ClsCvpwI.js → doctor-config-flow-BAjJwPwp.js} +2 -2
  68. package/dist/{doctor-config-flow-Brr2nZj7.js → doctor-config-flow-BdDRykfz.js} +2 -2
  69. package/dist/entry.js +1 -1
  70. package/dist/{exec-approvals-cli-tYolA4fT.js → exec-approvals-cli-BGMboqEF.js} +4 -4
  71. package/dist/{exec-approvals-cli-sqdNtDAS.js → exec-approvals-cli-Dq0mIyao.js} +4 -4
  72. package/dist/extensionAPI.js +6 -6
  73. package/dist/{gateway-cli-CvFiUm5D.js → gateway-cli-B87rKDcz.js} +39 -387
  74. package/dist/{gateway-cli-BZXfKM1n.js → gateway-cli-DwmmDmvN.js} +38 -386
  75. package/dist/{gateway-rpc-I4V_rlyD.js → gateway-rpc-D7xbL4xK.js} +1 -1
  76. package/dist/{gateway-rpc-CEmRl_5F.js → gateway-rpc-DQJ06sR6.js} +1 -1
  77. package/dist/{glass-ui-ws-CHyGj7GA.js → glass-ui-ws-CWWX4RFk.js} +29 -29
  78. package/dist/{glass-ui-ws-BSTHY5PU.js → glass-ui-ws-DqoK5k3P.js} +30 -30
  79. package/dist/{health-vDQ4nRJB.js → health-Bd4Kn-Uq.js} +5 -5
  80. package/dist/{health-OGl_XbRn.js → health-BtU-6tKH.js} +6 -6
  81. package/dist/{hooks-cli-VqgCW0Qc.js → hooks-cli-BL3GZVk5.js} +19 -19
  82. package/dist/{hooks-cli-CrqaQVL9.js → hooks-cli-mDZU8rDD.js} +21 -21
  83. package/dist/index.js +25 -25
  84. package/dist/{lifecycle-core-DbKdqcKY.js → lifecycle-core-3xu6LRYA.js} +2 -2
  85. package/dist/{lifecycle-core-yGgMuHuO.js → lifecycle-core-DneYEGDD.js} +2 -2
  86. package/dist/llm-slug-generator.js +7 -7
  87. package/dist/{logs-cli-CwHWy3uX.js → logs-cli-BBAd4pwH.js} +3 -3
  88. package/dist/{logs-cli-Bm2kMpGM.js → logs-cli-ccmeDLDg.js} +3 -3
  89. package/dist/{manager-DSlfEjVk.js → manager-B2DFgFTm.js} +1 -1
  90. package/dist/{manager-BKktUaAk.js → manager-C1CQhXcw.js} +1 -1
  91. package/dist/{manager-BWi2hK4Y.js → manager-C7f-dMSW.js} +1 -1
  92. package/dist/{manager-BoTf2TBM.js → manager-I-tRC_wz.js} +1 -1
  93. package/dist/{memory-cli-B7Ls3Iv1.js → memory-cli-Bj9XSnKb.js} +4 -4
  94. package/dist/{memory-cli-stuQ5Kfc.js → memory-cli-WT8ROETg.js} +4 -4
  95. package/dist/{model-catalog-BaFhU6Fx.js → model-catalog-BBMq_UVY.js} +1 -1
  96. package/dist/{model-catalog-K_qqpcC9.js → model-catalog-BRC9B0qI.js} +2 -2
  97. package/dist/{model-picker-BawF3VfC.js → model-picker-DpqkZ7e1.js} +2 -2
  98. package/dist/{model-picker-DPAI_Ae2.js → model-picker-_zh6CfZc.js} +2 -2
  99. package/dist/{models-cli-DdfXroYi.js → models-cli-D8tfyD-y.js} +24 -24
  100. package/dist/{models-cli-D5fOoioI.js → models-cli-aErLhUPp.js} +22 -22
  101. package/dist/{models-config-B0mXwbnd.js → models-config-DjrYhBZX.js} +1 -1
  102. package/dist/{models-BNuVMqEB.js → models-vodK37zz.js} +8 -8
  103. package/dist/{node-cli-2WEdC_wl.js → node-cli-BUFlN1NC.js} +9 -9
  104. package/dist/{node-cli-CnFjINUo.js → node-cli-DvjDG6DY.js} +9 -9
  105. package/dist/{nodes-cli-CVaZrBSK.js → nodes-cli-BSRfBidu.js} +3 -3
  106. package/dist/{nodes-cli-CPDPd-lG.js → nodes-cli-Cxe4GDbb.js} +3 -3
  107. package/dist/{onboard-CHrTg-R0.js → onboard-RBwcsRLX.js} +7 -7
  108. package/dist/{onboard-channels-fgjkUOFq.js → onboard-channels-DTfKco-3.js} +1 -1
  109. package/dist/{onboard-channels-Bk10gQ24.js → onboard-channels-DVwRGIr8.js} +1 -1
  110. package/dist/{onboard-custom-DZ0tCPYA.js → onboard-custom-B9JDxREb.js} +2 -2
  111. package/dist/{onboard-custom-C6Ntk4T6.js → onboard-custom-DzHUFAMR.js} +2 -2
  112. package/dist/{onboard-helpers-CilvN36L.js → onboard-helpers-B8Cx3IOC.js} +2 -2
  113. package/dist/{onboard-helpers-ClA4h5_K.js → onboard-helpers-BII4m6Bg.js} +2 -2
  114. package/dist/{onboard-BzRDv60Y.js → onboard-pZ4uh1rG.js} +7 -7
  115. package/dist/{onboard-remote-CTIJEEno.js → onboard-remote-Dlbf_X-4.js} +5 -5
  116. package/dist/{onboard-remote-BldpXiDu.js → onboard-remote-Jw3zoknX.js} +1 -1
  117. package/dist/{onboard-skills-ADTC4TUU.js → onboard-skills-BII_cah6.js} +1 -1
  118. package/dist/{onboard-skills-o3A3Swd4.js → onboard-skills-Bavc8Y6d.js} +1 -1
  119. package/dist/{onboarding-ClbxBHpB.js → onboarding-Djyshvaw.js} +10 -10
  120. package/dist/{onboarding-BGwkx8NB.js → onboarding-ZEJVYSg3.js} +10 -10
  121. package/dist/{onboarding.finalize-D6zND3C7.js → onboarding.finalize-D10xj022.js} +26 -26
  122. package/dist/{onboarding.finalize-BnIBZwze.js → onboarding.finalize-Djz7joj6.js} +28 -28
  123. package/dist/{onboarding.gateway-config-D5P3DUUI.js → onboarding.gateway-config-BPR3HkR2.js} +4 -4
  124. package/dist/{onboarding.gateway-config-CCyqcBFt.js → onboarding.gateway-config-CsIQ9sAd.js} +4 -4
  125. package/dist/{outbound-send-deps-KBVliaIJ.js → outbound-send-deps-CWt3ExwB.js} +1 -1
  126. package/dist/{pairing-cli-v87bBSWV.js → pairing-cli-BrH39gjt.js} +1 -1
  127. package/dist/{pairing-cli-CCTGZIlT.js → pairing-cli-CraUdeOv.js} +1 -1
  128. package/dist/{pi-embedded-L-sMlPsa.js → pi-embedded-DuflRZe_.js} +13 -13
  129. package/dist/{pi-embedded-helpers-B4IwWdI4.js → pi-embedded-helpers-D0D-YFKs.js} +1 -1
  130. package/dist/{pi-embedded-helpers-WbBv3O-3.js → pi-embedded-helpers-D4ztxySY.js} +1 -1
  131. package/dist/{pi-tools.policy-Cm2mPWWM.js → pi-tools.policy-BF_-fAip.js} +2 -2
  132. package/dist/{pi-tools.policy-DNgBKXTL.js → pi-tools.policy-C_GiT5Ck.js} +2 -2
  133. package/dist/{plugin-registry-CqwECVKt.js → plugin-registry-DHfoCwrG.js} +2 -2
  134. package/dist/{plugin-registry-C46oqC4P.js → plugin-registry-DKcH2JE_.js} +2 -2
  135. package/dist/plugin-sdk/gateway/server-chat.d.ts +47 -0
  136. package/dist/plugin-sdk/index.js +0 -8
  137. package/dist/{plugins-cli-B02JN03S.js → plugins-cli-CWyPtszc.js} +21 -21
  138. package/dist/{plugins-cli-DEpMh_AU.js → plugins-cli-ssYO3M4S.js} +19 -19
  139. package/dist/{program-B8S2KFzC.js → program-BWzfeG-8.js} +27 -27
  140. package/dist/{program-context-DCb3cVEC.js → program-context-xIF2kV0x.js} +38 -38
  141. package/dist/{prompt-select-styled-BJ3NsTmX.js → prompt-select-styled-8b8DmPbN.js} +15 -15
  142. package/dist/{prompt-select-styled-ZdXAuRQQ.js → prompt-select-styled-BUEb8xR1.js} +15 -15
  143. package/dist/{provider-auth-helpers-BBApWDj8.js → provider-auth-helpers-DcNngSF0.js} +2 -2
  144. package/dist/{provider-auth-helpers-BHaaf_C1.js → provider-auth-helpers-vX_S0ALE.js} +2 -2
  145. package/dist/{push-apns-DlP4T9Pl.js → push-apns-DxBDQXtP.js} +1 -1
  146. package/dist/{push-apns-CZG-Sec1.js → push-apns-pjFzQgQX.js} +1 -1
  147. package/dist/{pw-ai-CcThCit8.js → pw-ai-D5XTVAAy.js} +2 -2
  148. package/dist/{pw-ai-BT6WYVgD.js → pw-ai-DFmjn-D8.js} +2 -2
  149. package/dist/{pw-ai-CYE0188Y.js → pw-ai-DGylJ6uj.js} +2 -2
  150. package/dist/{pw-ai-B9riepO_.js → pw-ai-MxiZ-sjO.js} +2 -2
  151. package/dist/{qr-cli-FyVy5rgL.js → qr-cli-X0AMG0ES.js} +1 -1
  152. package/dist/{qr-cli-De3FYKdn.js → qr-cli-ZQCsZbxy.js} +1 -1
  153. package/dist/{register.agent-B4MClVne.js → register.agent-88zeMqb_.js} +30 -30
  154. package/dist/{register.agent-BDaFZQMb.js → register.agent-C9ynHkGB.js} +27 -27
  155. package/dist/{register.configure-vxWz3QF_.js → register.configure-DlS5n4iv.js} +31 -31
  156. package/dist/{register.configure-Bbq6Pfz4.js → register.configure-nIyIBn3w.js} +31 -31
  157. package/dist/{register.maintenance-BBxWlFhs.js → register.maintenance-CnWw_Lyo.js} +29 -29
  158. package/dist/{register.maintenance-CX4sIokB.js → register.maintenance-D7vGx_sc.js} +31 -31
  159. package/dist/{register.message-pVlrdXcl.js → register.message-CMgjp7K9.js} +20 -20
  160. package/dist/{register.message-BdYU9TBN.js → register.message-CRbIEz_z.js} +22 -22
  161. package/dist/{register.onboard-Be8PMN1Z.js → register.onboard-BUBMscso.js} +27 -27
  162. package/dist/{register.onboard-UzFm__iV.js → register.onboard-D3Xe692c.js} +28 -28
  163. package/dist/{register.setup-w0_6rARS.js → register.setup-D7g2F9Ti.js} +28 -28
  164. package/dist/{register.setup-Dq7WlLOL.js → register.setup-DaglHDjt.js} +27 -27
  165. package/dist/{register.status-health-sessions-BoUKcfbS.js → register.status-health-sessions-17TPGabp.js} +26 -26
  166. package/dist/{register.status-health-sessions-Lxz44Abz.js → register.status-health-sessions-DHh9h8xA.js} +24 -24
  167. package/dist/{register.subclis-Cb1ErrVQ.js → register.subclis-B3hydKN2.js} +28 -28
  168. package/dist/{replies-BpJPH2hc.js → replies-BK444q35.js} +1 -1
  169. package/dist/{replies-DSaEOCgv.js → replies-C6QyTmQW.js} +1 -1
  170. package/dist/{replies-RnWQ3nKx.js → replies-CBXhYQKz.js} +1 -1
  171. package/dist/{replies-Cts6obnK.js → replies-Hxxgo5oF.js} +1 -1
  172. package/dist/{routes--kmISnRJ.js → routes-DxrqrN_9.js} +3 -3
  173. package/dist/{routes-BPOSBzut.js → routes-XZvpN4jt.js} +3 -3
  174. package/dist/{rpc-D8VMyohd.js → rpc-ChsvBOac.js} +1 -1
  175. package/dist/{rpc-Bm9M4Wg1.js → rpc-lrBk7i0P.js} +1 -1
  176. package/dist/{run-main-DmC4wWlp.js → run-main-Bt-WQm1x.js} +38 -38
  177. package/dist/{run-reply-turn-CrfZuxxN.js → run-reply-turn-BFPeqYgl.js} +1 -1
  178. package/dist/{sandbox-CKUsc_dq.js → sandbox-Cy3Vg-tx.js} +5 -5
  179. package/dist/{sandbox-iRNEuFgO.js → sandbox-D0BDTW6J.js} +5 -5
  180. package/dist/{sandbox-cli-EnXxgz9y.js → sandbox-cli-D7S-canm.js} +6 -6
  181. package/dist/{sandbox-cli-DxaSKb_E.js → sandbox-cli-DZljTg7d.js} +6 -6
  182. package/dist/{security-cli-3qifLVSV.js → security-cli-Bjhh88X6.js} +9 -9
  183. package/dist/{security-cli-CzIqX7ZY.js → security-cli-BuKw0-_8.js} +9 -9
  184. package/dist/{send-DSoVd8gQ.js → send-CcZ9i_LC.js} +1 -1
  185. package/dist/{send-BOhR5xu0.js → send-CpGIU58f.js} +1 -1
  186. package/dist/{send-DRmWH4n5.js → send-Ct2sWmDQ.js} +1 -1
  187. package/dist/{server-context-bi7CcxfQ.js → server-context-B9wEJH9W.js} +5 -5
  188. package/dist/{server-context-BmxBVIv7.js → server-context-CIMejxOx.js} +5 -5
  189. package/dist/{server-methods-C97G9dYe.js → server-methods-BBZIZzXL.js} +376 -20
  190. package/dist/{server-methods-DFt60s1H.js → server-methods-DaSFpTl-.js} +375 -19
  191. package/dist/{server-node-events-DZxA-yXb.js → server-node-events-BQEpHt9X.js} +23 -23
  192. package/dist/{server-node-events-D11AUIyh.js → server-node-events-IDt8hC2u.js} +21 -21
  193. package/dist/{session-utils-CrnY8rsC.js → session-utils-Cz8JJaAg.js} +3 -3
  194. package/dist/{sessions-CrQE7gq3.js → sessions-BXbrIigY.js} +1 -1
  195. package/dist/{sessions-LI9mFmYJ.js → sessions-CkXuHlJX.js} +1 -1
  196. package/dist/{sessions-SokOLKeJ.js → sessions-D6DTsw1W.js} +3 -3
  197. package/dist/{shared-7ryC0qEG.js → shared-BOTWXPOB.js} +1 -1
  198. package/dist/{shared-BLmd-eho.js → shared-p8Maztrs.js} +1 -1
  199. package/dist/{skills-cli-Ba5dqnlJ.js → skills-cli-B-cFIUJz.js} +1 -1
  200. package/dist/{skills-cli-DjB_y1v8.js → skills-cli-CmfEiLAw.js} +1 -1
  201. package/dist/{ssrf-BgA_8lbe.js → ssrf-Bw8oiPrP.js} +0 -8
  202. package/dist/{ssrf-CY_-n5zv.js → ssrf-D_Vm7pW2.js} +0 -8
  203. package/dist/{status-BIFL3qPs.js → status-6xghwlf1.js} +2 -2
  204. package/dist/{status-VrUpaIhD.js → status-C1mhNRbD.js} +9 -9
  205. package/dist/{status-er3ceIYD.js → status-DRVnRoTo.js} +10 -10
  206. package/dist/{status-H7a1x6Bo.js → status-DfZj0OL9.js} +2 -2
  207. package/dist/{status.update-BkqkfjdZ.js → status.update-BbUgxGoZ.js} +1 -1
  208. package/dist/{status.update-pKELdmOb.js → status.update-D2JhbGJA.js} +1 -1
  209. package/dist/{subagent-registry-DNcSxvl3.js → subagent-registry-Clebo068.js} +22 -22
  210. package/dist/{synthesis-CPZoVKlB.js → synthesis-CTniyTVP.js} +7 -7
  211. package/dist/{synthesis-DA7kfAUJ.js → synthesis-DNlJetcg.js} +6 -6
  212. package/dist/{synthesis-D9CyMOsH.js → synthesis-DmO9gicE.js} +18 -18
  213. package/dist/{synthesis-dF7N0Wom.js → synthesis-slPZ4fBh.js} +20 -20
  214. package/dist/{system-cli-BlFmLLLL.js → system-cli-C-ZdVxHQ.js} +3 -3
  215. package/dist/{system-cli-DJKNNfnj.js → system-cli-C2XPvZM1.js} +3 -3
  216. package/dist/{systemd-hints-DuKMWx63.js → systemd-hints-CTf6Uif8.js} +1 -1
  217. package/dist/{systemd-hints-YEalUHIV.js → systemd-hints-DtDxA-Zu.js} +1 -1
  218. package/dist/{tui-BcNRiyl9.js → tui-DtpuuaO4.js} +4 -4
  219. package/dist/{tui-DEGjDTCT.js → tui-IQDR3lwq.js} +4 -4
  220. package/dist/{tui-cli-D7CPaWwk.js → tui-cli-ChMTt69J.js} +9 -9
  221. package/dist/{tui-cli-CvdJmxYe.js → tui-cli-D7LRzH2F.js} +9 -9
  222. package/dist/{unified-runner-BdN9pHa8.js → unified-runner-B4vj4_WA.js} +11 -11
  223. package/dist/{unified-runner-BX17do1W.js → unified-runner-sIP8uml4.js} +20 -20
  224. package/dist/{update-cli-Bg3c9ORr.js → update-cli-DG6iVa21.js} +34 -34
  225. package/dist/{update-cli-DZtbV25O.js → update-cli-DldGC3QO.js} +32 -32
  226. package/dist/{update-runner-CwPl1B2f.js → update-runner-BrTc6tK0.js} +1 -1
  227. package/dist/{update-runner-BrVkeUcH.js → update-runner-D5HXwUeR.js} +1 -1
  228. package/dist/{webhooks-cli-BhV2FyAB.js → webhooks-cli-B-pptn0k.js} +1 -1
  229. package/dist/{webhooks-cli-B9_1T4Gi.js → webhooks-cli-C2eWOEg3.js} +1 -1
  230. package/dist/{with-timeout-D1RTXHZO.js → with-timeout-Bi143Knd.js} +1 -1
  231. package/dist/{with-timeout-DNvX8V3I.js → with-timeout-DFeXJy0t.js} +1 -1
  232. package/package.json +1 -1
@@ -5,46 +5,47 @@ import { t as resolveSymiPackageRoot } from "./symi-root-CK6iELVh.js";
5
5
  import { C as ensureAgentWorkspace, S as DEFAULT_USER_FILENAME, T as isWorkspaceOnboardingCompleted, _ as DEFAULT_MEMORY_ALT_FILENAME, b as DEFAULT_SYMIPULSE_FILENAME, c as resolveAgentWorkspaceDir, d as resolveSessionAgentId, g as DEFAULT_IDENTITY_FILENAME, h as DEFAULT_BOOTSTRAP_FILENAME, i as resolveAgentDir, l as resolveDefaultAgentId, n as listAgentIds, p as DEFAULT_AGENTS_FILENAME, t as listAgentEntries, v as DEFAULT_MEMORY_FILENAME, x as DEFAULT_TOOLS_FILENAME, y as DEFAULT_SYMICORE_FILENAME } from "./agent-scope-D60vGDop.js";
6
6
  import { i as loadWorkspaceSkillEntries } from "./skills-D-FoKZ1g.js";
7
7
  import { t as buildWorkspaceSkillStatus } from "./skills-status-B9Q2CZBy.js";
8
- import { L as VERSION, O as applyMergePatch, R as resolveRuntimeServiceVersion, a as parseConfigJson5, c as resolveConfigSnapshotHash, g as sensitive, i as loadConfig, k as applyLegacyMigrations, l as writeConfigFile, m as SymiSchema, o as readConfigFileSnapshot, p as validateConfigObjectWithPlugins, s as readConfigFileSnapshotForWrite } from "./config-D-YxNuAZ.js";
8
+ import { L as VERSION, O as applyMergePatch, R as resolveRuntimeServiceVersion, a as parseConfigJson5, c as resolveConfigSnapshotHash, g as sensitive, i as loadConfig, k as applyLegacyMigrations, l as writeConfigFile, m as SymiSchema, o as readConfigFileSnapshot, p as validateConfigObjectWithPlugins, s as readConfigFileSnapshotForWrite } from "./config-Cxfzso_Z.js";
9
9
  import { $ as validateNodePairRejectParams, A as validateCronStatusParams, At as validateWebLoginWaitParams, B as validateExecApprovalsGetParams, C as validateConfigSetParams, Ct as validateSkillsUpdateParams, D as validateCronRemoveParams, Dt as validateUpdateRunParams, E as validateCronListParams, Et as validateTasksListParams, F as validateDevicePairRemoveParams, G as validateModelsListParams, Gt as rejectDevicePairing, H as validateExecApprovalsNodeSetParams, I as validateDeviceTokenRevokeParams, It as ErrorCodes, J as validateNodeInvokeParams, Jt as revokeDeviceToken, K as validateNodeDescribeParams, Kt as removePairedDevice, L as validateDeviceTokenRotateParams, Lt as errorShape, M as validateDevicePairApproveParams, Mt as validateWizardNextParams, N as validateDevicePairListParams, Nt as validateWizardStartParams, O as validateCronRunParams, Ot as validateWakeParams, P as validateDevicePairRejectParams, Pt as validateWizardStatusParams, Q as validateNodePairListParams, S as validateConfigSchemaParams, St as validateSkillsStatusParams, T as validateCronAddParams, Tt as validateTalkModeParams, U as validateExecApprovalsSetParams, V as validateExecApprovalsNodeGetParams, Vt as approveDevicePairing, W as validateLogsTailParams, Wt as listDevicePairing, X as validateNodeListParams, Xt as summarizeDeviceTokens, Y as validateNodeInvokeResultParams, Yt as rotateDeviceToken, Z as validateNodePairApproveParams, _ as validateChatInjectParams, _t as validateSessionsRestoreParams, a as validateAgentWaitParams, b as validateConfigGetParams, bt as validateSkillsBinsParams, c as validateAgentsFilesGetParams, ct as validateSessionsCompactParams, d as validateAgentsListParams, dt as validateSessionsFavoriteFileParams, et as validateNodePairRequestParams, f as validateAgentsUpdateParams, ft as validateSessionsListParams, g as validateChatHistoryParams, gt as validateSessionsResolveParams, h as validateChatAbortParams, ht as validateSessionsResetParams, i as validateAgentParams, it as validatePushTestParams, j as validateCronUpdateParams, jt as validateWizardCancelParams, k as validateCronRunsParams, kt as validateWebLoginStartParams, l as validateAgentsFilesListParams, lt as validateSessionsDeleteFileParams, m as validateChannelsStatusParams, mt as validateSessionsPreviewParams, n as formatValidationErrors, nt as validateNodeRenameParams, o as validateAgentsCreateParams, ot as validateSendParams, p as validateChannelsLogoutParams, pt as validateSessionsPatchParams, q as validateNodeEventParams, r as validateAgentIdentityParams, rt as validatePollParams, s as validateAgentsDeleteParams, st as validateSessionsAdoptFileParams, tt as validateNodePairVerifyParams, u as validateAgentsFilesSetParams, ut as validateSessionsDeleteParams, v as validateChatSendParams, vt as validateSessionsSearchParams, wt as validateTalkConfigParams, x as validateConfigPatchParams, xt as validateSkillsInstallParams, y as validateConfigApplyParams, yt as validateSessionsUsageParams, zt as parseSessionLabel } from "./client-BrmuCW-S.js";
10
- import { l as authorizeOperatorScopesForMethod, s as ADMIN_SCOPE$2, u as isNodeRoleMethod } from "./call-C14bzfoZ.js";
10
+ import { l as authorizeOperatorScopesForMethod, s as ADMIN_SCOPE$2, u as isNodeRoleMethod } from "./call-BWteI0cy.js";
11
11
  import { f as GATEWAY_CLIENT_CAPS, g as hasGatewayClientCap, i as isGatewayMessageChannel, l as normalizeMessageChannel, n as isDeliverableMessageChannel, t as INTERNAL_MESSAGE_CHANNEL } from "./message-channel-CNPAq1Tl.js";
12
12
  import { c as writeJsonAtomic, o as createAsyncLock, s as readJsonFile } from "./pairing-token-DZAnUH5B.js";
13
13
  import { s as pickPrimaryLanIPv4 } from "./net-DZ5Ayk-W.js";
14
14
  import { i as normalizeInputProvenance } from "./input-provenance-D0lNkCf6.js";
15
- import { $n as setTtsEnabled, A as waitForEmbeddedPiRunEnd, Bt as scheduleGatewaySigusr1Restart, C as buildGlassUiProfile, Cn as prepareAgentRun, E as runUnifiedTurn, Fn as isAbortTrigger, G as ensureOutboundSessionEntry, Gn as getTtsProvider, In as stopSubagentsForRequester, Jn as resolveTtsApiKey, K as resolveOutboundSessionRoute, Kn as isTtsEnabled, Mn as normalizeGroupActivation, Mt as persistBrowserProxyFiles, O as abortEmbeddedPiRun, Pn as formatZonedTimestamp, Qn as resolveTtsProviderOrder, R as buildAgentTurnParams, Sn as resolveAgentTimeoutMs, Tn as isSystemEventContextChanged, Ut as loadProviderUsageSummary, V as listTasksInWorkdir, Vn as resolveUserTimezone, Xn as resolveTtsConfig, Y as resolveOutboundTarget, Yn as resolveTtsAutoMode, Z as normalizePollInput, Zn as resolveTtsPrefsPath, a as listSubagentRunsForRequester, br as registerAgentRunContext, c as clearSessionQueues, cn as applyModelOverrideToSessionEntry, dt as writeRestartSentinel, er as setTtsProvider, i as listDescendantRunsForRequester, jn as BARE_SESSION_RESET_PROMPT, jt as applyBrowserProxyPaths, ln as applyVerboseOverride, m as loadSymiPlugins, mt as normalizeCronJobPatch, nn as normalizeSendPolicy, nr as OPENAI_TTS_MODELS, ot as formatDoctorNonInteractiveHint, pt as normalizeCronJobCreate, qn as isTtsProviderConfigured, rn as resolveSendPolicy, rr as OPENAI_TTS_VOICES, tr as textToSpeech, un as parseVerboseOverride, wn as enqueueSystemEvent, x as createReplyDispatcher, y as getChannelActivity, yr as onAgentEvent, z as prepareReplyTurn } from "./subagent-registry-DNcSxvl3.js";
16
- import { F as resolveMainSessionKey, I as resolveMainSessionKeyFromConfig, J as normalizeSessionDeliveryFields, N as resolveAgentMainSessionKey, P as resolveExplicitAgentSessionKey, R as snapshotSessionOrigin, S as stripEnvelopeFromMessages, _ as capArrayByJsonBytes, d as updateSessionStore, g as archiveSessionTranscripts, h as archiveFileOnDisk, o as loadSessionStore, t as extractDeliveryInfo, v as readSessionMessages, x as resolveSessionTranscriptCandidates, y as readSessionPreviewItemsFromTranscript } from "./sessions-CrQE7gq3.js";
15
+ import { $n as setTtsEnabled, A as waitForEmbeddedPiRunEnd, Bt as scheduleGatewaySigusr1Restart, C as buildGlassUiProfile, Cn as prepareAgentRun, E as runUnifiedTurn, F as classifyOutboundMessage, Fn as isAbortTrigger, G as ensureOutboundSessionEntry, Gn as getTtsProvider, In as stopSubagentsForRequester, Jn as resolveTtsApiKey, K as resolveOutboundSessionRoute, Kn as isTtsEnabled, Mn as normalizeGroupActivation, Mt as persistBrowserProxyFiles, O as abortEmbeddedPiRun, Pn as formatZonedTimestamp, Qn as resolveTtsProviderOrder, R as buildAgentTurnParams, Sn as resolveAgentTimeoutMs, Tn as isSystemEventContextChanged, Ut as loadProviderUsageSummary, V as listTasksInWorkdir, Vn as resolveUserTimezone, Xn as resolveTtsConfig, Y as resolveOutboundTarget, Yn as resolveTtsAutoMode, Z as normalizePollInput, Zn as resolveTtsPrefsPath, a as listSubagentRunsForRequester, br as registerAgentRunContext, c as clearSessionQueues, cn as applyModelOverrideToSessionEntry, dr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, dt as writeRestartSentinel, er as setTtsProvider, i as listDescendantRunsForRequester, jn as BARE_SESSION_RESET_PROMPT, jt as applyBrowserProxyPaths, ln as applyVerboseOverride, m as loadSymiPlugins, mt as normalizeCronJobPatch, n as countActiveRunsForSession, nn as normalizeSendPolicy, nr as OPENAI_TTS_MODELS, ot as formatDoctorNonInteractiveHint, pt as normalizeCronJobCreate, qn as isTtsProviderConfigured, rn as resolveSendPolicy, rr as OPENAI_TTS_VOICES, tr as textToSpeech, un as parseVerboseOverride, vr as getAgentRunContext, wn as enqueueSystemEvent, x as createReplyDispatcher, y as getChannelActivity, yr as onAgentEvent, z as prepareReplyTurn } from "./subagent-registry-Clebo068.js";
16
+ import { F as resolveMainSessionKey, I as resolveMainSessionKeyFromConfig, J as normalizeSessionDeliveryFields, N as resolveAgentMainSessionKey, P as resolveExplicitAgentSessionKey, R as snapshotSessionOrigin, S as stripEnvelopeFromMessages, _ as capArrayByJsonBytes, d as updateSessionStore, g as archiveSessionTranscripts, h as archiveFileOnDisk, o as loadSessionStore, t as extractDeliveryInfo, v as readSessionMessages, x as resolveSessionTranscriptCandidates, y as readSessionPreviewItemsFromTranscript } from "./sessions-BXbrIigY.js";
17
+ import { i as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-DN4W-XdV.js";
17
18
  import { n as listChannelPlugins, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-CYQsm6Gy.js";
18
- import { n as createBrowserRouteDispatcher } from "./with-timeout-DNvX8V3I.js";
19
- import { h as getGlobalHookRunner, o as normalizeReplyPayloadsForDelivery, t as deliverOutboundPayloads } from "./deliver-SxI9drJl.js";
19
+ import { n as createBrowserRouteDispatcher } from "./with-timeout-DFeXJy0t.js";
20
+ import { h as getGlobalHookRunner, o as normalizeReplyPayloadsForDelivery, t as deliverOutboundPayloads } from "./deliver-CqJ3B363.js";
20
21
  import { t as movePathToTrash } from "./trash-BEXyYJdG.js";
21
22
  import { c as resolveStorePath, n as resolveSessionFilePath, r as resolveSessionFilePathOptions, s as resolveSessionTranscriptsDirForAgent } from "./paths-BDcioH8W.js";
22
- import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels } from "./thinking-C72VJ9y9.js";
23
+ import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels } from "./thinking-C72VJ9y9.js";
23
24
  import { a as resolveAgentIdentity, t as createReplyPrefixOptions } from "./reply-prefix-B9wo4eUI.js";
24
- import { r as getMemorySearchManager } from "./memory-cli-B7Ls3Iv1.js";
25
+ import { r as getMemorySearchManager } from "./memory-cli-Bj9XSnKb.js";
25
26
  import { _ as requestNodePairing, g as renamePairedNode, h as rejectNodePairing, m as listNodePairing, o as getRemoteSkillEligibility, p as approveNodePairing, y as verifyNodeToken } from "./skill-commands-BFRS0Miy.js";
26
27
  import { t as listAgentWorkspaceDirs } from "./workspace-dirs-CTCDVlcA.js";
27
- import { a as loadCombinedSessionStoreForGateway, c as resolveGatewaySessionStoreTarget, i as listSessionsFromStore, l as resolveSessionModelRef, o as loadSessionEntry, r as listAgentsForGateway, s as pruneLegacyStoreKeys, t as canonicalizeSpawnedByForAgent } from "./session-utils-CrnY8rsC.js";
28
+ import { a as loadCombinedSessionStoreForGateway, c as resolveGatewaySessionStoreTarget, i as listSessionsFromStore, l as resolveSessionModelRef, o as loadSessionEntry, r as listAgentsForGateway, s as pruneLegacyStoreKeys, t as canonicalizeSpawnedByForAgent } from "./session-utils-Cz8JJaAg.js";
28
29
  import { a as mergeExecApprovalsSocketDefaults, c as readExecApprovalsSnapshot, p as saveExecApprovals, r as ensureExecApprovals, s as normalizeExecApprovals } from "./exec-approvals-BV3NU43w.js";
29
30
  import { i as loadSessionUsageTimeSeries, n as loadCostUsageSummary, r as loadSessionCostSummary, t as discoverAllSessions } from "./session-cost-usage-hoPpLUY3.js";
30
- import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-Cuc3K1O-.js";
31
+ import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-CROUSYRb.js";
31
32
  import { i as parseAbsoluteTimeMs } from "./stagger-C7dzX2Sp.js";
32
33
  import { t as buildChannelUiCatalog } from "./catalog--zyy0Tdj.js";
33
34
  import { t as WizardCancelledError } from "./prompts-D6s7Ev5r.js";
34
35
  import { t as resolveChannelDefaultAccountId } from "./helpers-BdX-ab0f.js";
35
36
  import { t as buildChannelAccountSnapshot } from "./status-CBkcR9vW.js";
36
- import { w as resolveAssistantAvatarUrl } from "./onboard-helpers-CilvN36L.js";
37
- import { o as isNodeCommandAllowed, s as resolveNodeCommandAllowlist } from "./audit-CHQE7ltJ.js";
38
- import { r as getStatusSummary } from "./status-er3ceIYD.js";
39
- import { c as setHeartbeatsEnabled, d as getLastHeartbeatEvent, p as abortHeartbeatRunForSession } from "./health-vDQ4nRJB.js";
40
- import { r as createOutboundSendDeps } from "./outbound-send-deps-KBVliaIJ.js";
37
+ import { w as resolveAssistantAvatarUrl } from "./onboard-helpers-B8Cx3IOC.js";
38
+ import { o as isNodeCommandAllowed, s as resolveNodeCommandAllowlist } from "./audit-hp8a-n1l.js";
39
+ import { r as getStatusSummary } from "./status-DRVnRoTo.js";
40
+ import { c as setHeartbeatsEnabled, d as getLastHeartbeatEvent, p as abortHeartbeatRunForSession, u as resolveHeartbeatVisibility } from "./health-Bd4Kn-Uq.js";
41
+ import { r as createOutboundSendDeps } from "./outbound-send-deps-CWt3ExwB.js";
41
42
  import { m as normalizeUpdateChannel } from "./update-check-CZiE16y_.js";
42
- import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-CZG-Sec1.js";
43
- import { i as resolveAgentOutboundTarget, r as resolveAgentDeliveryPlan, t as agentCommand } from "./agent-DMDBKAcJ.js";
43
+ import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-pjFzQgQX.js";
44
+ import { i as resolveAgentOutboundTarget, r as resolveAgentDeliveryPlan, t as agentCommand } from "./agent-CEXPWtuC.js";
44
45
  import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-CoFNHkcF.js";
45
46
  import { t as resolveSystemRunCommand } from "./system-run-command-XG1_P_la.js";
46
47
  import { t as installSkill } from "./skills-install-FR75WmBn.js";
47
- import { t as runGatewayUpdate } from "./update-runner-CwPl1B2f.js";
48
+ import { t as runGatewayUpdate } from "./update-runner-BrTc6tK0.js";
48
49
  import { spawnSync } from "node:child_process";
49
50
  import * as os$1 from "node:os";
50
51
  import os from "node:os";
@@ -403,6 +404,355 @@ function startGatewayConfigReloader(opts) {
403
404
  } };
404
405
  }
405
406
 
407
+ //#endregion
408
+ //#region src/gateway/server-chat.ts
409
+ function resolveHeartbeatAckMaxChars() {
410
+ try {
411
+ const cfg = loadConfig();
412
+ return Math.max(0, cfg.agents?.defaults?.heartbeat?.ackMaxChars ?? DEFAULT_HEARTBEAT_ACK_MAX_CHARS);
413
+ } catch {
414
+ return DEFAULT_HEARTBEAT_ACK_MAX_CHARS;
415
+ }
416
+ }
417
+ function resolveHeartbeatContext(runId, sourceRunId) {
418
+ const primary = getAgentRunContext(runId);
419
+ if (primary?.isHeartbeat) return primary;
420
+ if (sourceRunId && sourceRunId !== runId) {
421
+ const source = getAgentRunContext(sourceRunId);
422
+ if (source?.isHeartbeat) return source;
423
+ }
424
+ return primary;
425
+ }
426
+ /**
427
+ * Check if heartbeat ACK/noise should be hidden from interactive chat surfaces.
428
+ */
429
+ function shouldHideHeartbeatChatOutput(runId, sourceRunId) {
430
+ if (!resolveHeartbeatContext(runId, sourceRunId)?.isHeartbeat) return false;
431
+ try {
432
+ return !resolveHeartbeatVisibility({
433
+ cfg: loadConfig(),
434
+ channel: "webchat"
435
+ }).showOk;
436
+ } catch {
437
+ return true;
438
+ }
439
+ }
440
+ function createChatRunRegistry() {
441
+ const chatRunSessions = /* @__PURE__ */ new Map();
442
+ const add = (sessionId, entry) => {
443
+ const queue = chatRunSessions.get(sessionId);
444
+ if (queue) queue.push(entry);
445
+ else chatRunSessions.set(sessionId, [entry]);
446
+ };
447
+ const peek = (sessionId) => chatRunSessions.get(sessionId)?.[0];
448
+ const shift = (sessionId) => {
449
+ const queue = chatRunSessions.get(sessionId);
450
+ if (!queue || queue.length === 0) return;
451
+ const entry = queue.shift();
452
+ if (!queue.length) chatRunSessions.delete(sessionId);
453
+ return entry;
454
+ };
455
+ const remove = (sessionId, clientRunId, sessionKey) => {
456
+ const queue = chatRunSessions.get(sessionId);
457
+ if (!queue || queue.length === 0) return;
458
+ const idx = queue.findIndex((entry) => entry.clientRunId === clientRunId && (sessionKey ? entry.sessionKey === sessionKey : true));
459
+ if (idx < 0) return;
460
+ const [entry] = queue.splice(idx, 1);
461
+ if (!queue.length) chatRunSessions.delete(sessionId);
462
+ return entry;
463
+ };
464
+ const clear = () => {
465
+ chatRunSessions.clear();
466
+ };
467
+ return {
468
+ add,
469
+ peek,
470
+ shift,
471
+ remove,
472
+ clear
473
+ };
474
+ }
475
+ function createChatRunState() {
476
+ const registry = createChatRunRegistry();
477
+ const buffers = /* @__PURE__ */ new Map();
478
+ const deltaSentAt = /* @__PURE__ */ new Map();
479
+ const pendingDeltaText = /* @__PURE__ */ new Map();
480
+ const abortedRuns = /* @__PURE__ */ new Map();
481
+ const clear = () => {
482
+ registry.clear();
483
+ buffers.clear();
484
+ deltaSentAt.clear();
485
+ pendingDeltaText.clear();
486
+ abortedRuns.clear();
487
+ };
488
+ return {
489
+ registry,
490
+ buffers,
491
+ deltaSentAt,
492
+ pendingDeltaText,
493
+ abortedRuns,
494
+ clear
495
+ };
496
+ }
497
+ const TOOL_EVENT_RECIPIENT_TTL_MS = 600 * 1e3;
498
+ const TOOL_EVENT_RECIPIENT_FINAL_GRACE_MS = 30 * 1e3;
499
+ function createToolEventRecipientRegistry() {
500
+ const recipients = /* @__PURE__ */ new Map();
501
+ const prune = () => {
502
+ if (recipients.size === 0) return;
503
+ const now = Date.now();
504
+ for (const [runId, entry] of recipients) if (now >= (entry.finalizedAt ? entry.finalizedAt + TOOL_EVENT_RECIPIENT_FINAL_GRACE_MS : entry.updatedAt + TOOL_EVENT_RECIPIENT_TTL_MS)) recipients.delete(runId);
505
+ };
506
+ const add = (runId, connId) => {
507
+ if (!runId || !connId) return;
508
+ const now = Date.now();
509
+ const existing = recipients.get(runId);
510
+ if (existing) {
511
+ existing.connIds.add(connId);
512
+ existing.updatedAt = now;
513
+ } else recipients.set(runId, {
514
+ connIds: new Set([connId]),
515
+ updatedAt: now
516
+ });
517
+ prune();
518
+ };
519
+ const get = (runId) => {
520
+ const entry = recipients.get(runId);
521
+ if (!entry) return;
522
+ entry.updatedAt = Date.now();
523
+ prune();
524
+ return entry.connIds;
525
+ };
526
+ const markFinal = (runId) => {
527
+ const entry = recipients.get(runId);
528
+ if (!entry) return;
529
+ entry.finalizedAt = Date.now();
530
+ prune();
531
+ };
532
+ return {
533
+ add,
534
+ get,
535
+ markFinal
536
+ };
537
+ }
538
+ function createAgentEventHandler({ broadcast, broadcastToConnIds, nodeSendToSession, agentRunSeq, chatRunState, resolveSessionKeyForRun, clearAgentRunContext, toolEventRecipients }) {
539
+ const emitChatDelta = (sessionKey, clientRunId, sourceRunId, seq, text) => {
540
+ if (isSilentReplyText(text, SILENT_REPLY_TOKEN)) return;
541
+ const prev = chatRunState.buffers.get(clientRunId) ?? "";
542
+ chatRunState.buffers.set(clientRunId, prev + text);
543
+ if (shouldHideHeartbeatChatOutput(clientRunId, sourceRunId)) return;
544
+ const now = Date.now();
545
+ if (now - (chatRunState.deltaSentAt.get(clientRunId) ?? 0) < 150) {
546
+ chatRunState.pendingDeltaText.set(clientRunId, (chatRunState.pendingDeltaText.get(clientRunId) ?? "") + text);
547
+ return;
548
+ }
549
+ const buffered = chatRunState.pendingDeltaText.get(clientRunId) ?? "";
550
+ chatRunState.pendingDeltaText.delete(clientRunId);
551
+ const fullText = buffered + text;
552
+ chatRunState.deltaSentAt.set(clientRunId, now);
553
+ const payload = {
554
+ runId: clientRunId,
555
+ sessionKey,
556
+ seq,
557
+ state: "delta",
558
+ ...resolveHeartbeatContext(clientRunId, sourceRunId)?.isHeartbeat ? { isHeartbeat: true } : {},
559
+ message: {
560
+ role: "assistant",
561
+ content: [{
562
+ type: "text",
563
+ text: fullText
564
+ }],
565
+ timestamp: now
566
+ }
567
+ };
568
+ broadcast("chat", payload, { dropIfSlow: true });
569
+ nodeSendToSession(sessionKey, "chat", payload);
570
+ };
571
+ const emitChatFinal = (sessionKey, clientRunId, sourceRunId, seq, jobState, error) => {
572
+ const remainingDelta = chatRunState.pendingDeltaText.get(clientRunId);
573
+ if (remainingDelta && !shouldHideHeartbeatChatOutput(clientRunId, sourceRunId)) {
574
+ const flushPayload = {
575
+ runId: clientRunId,
576
+ sessionKey,
577
+ seq,
578
+ state: "delta",
579
+ ...resolveHeartbeatContext(clientRunId, sourceRunId)?.isHeartbeat ? { isHeartbeat: true } : {},
580
+ message: {
581
+ role: "assistant",
582
+ content: [{
583
+ type: "text",
584
+ text: remainingDelta
585
+ }],
586
+ timestamp: Date.now()
587
+ }
588
+ };
589
+ broadcast("chat", flushPayload);
590
+ nodeSendToSession(sessionKey, "chat", flushPayload);
591
+ }
592
+ chatRunState.pendingDeltaText.delete(clientRunId);
593
+ const bufferedText = chatRunState.buffers.get(clientRunId)?.trim() ?? "";
594
+ const heartbeatCtx = resolveHeartbeatContext(clientRunId, sourceRunId);
595
+ const isHeartbeatRun = !!heartbeatCtx?.isHeartbeat;
596
+ const heartbeatHidden = isHeartbeatRun && shouldHideHeartbeatChatOutput(clientRunId, sourceRunId);
597
+ const filterResult = isHeartbeatRun && !heartbeatHidden ? {
598
+ action: "deliver",
599
+ output: bufferedText,
600
+ reason: "deliver"
601
+ } : classifyOutboundMessage(bufferedText, {
602
+ isHeartbeat: heartbeatHidden,
603
+ heartbeatAckMaxChars: resolveHeartbeatAckMaxChars()
604
+ });
605
+ const text = filterResult.output.trim();
606
+ const shouldSuppressSilent = filterResult.action === "drop";
607
+ chatRunState.buffers.delete(clientRunId);
608
+ chatRunState.deltaSentAt.delete(clientRunId);
609
+ if (jobState === "done") {
610
+ const payload = {
611
+ runId: clientRunId,
612
+ sessionKey,
613
+ seq,
614
+ state: "final",
615
+ activeSubagentCount: countActiveRunsForSession(sessionKey),
616
+ ...heartbeatCtx?.isHeartbeat ? { isHeartbeat: true } : {},
617
+ message: text && !shouldSuppressSilent ? {
618
+ role: "assistant",
619
+ content: [{
620
+ type: "text",
621
+ text
622
+ }],
623
+ timestamp: Date.now()
624
+ } : void 0
625
+ };
626
+ broadcast("chat", payload);
627
+ nodeSendToSession(sessionKey, "chat", payload);
628
+ return;
629
+ }
630
+ const payload = {
631
+ runId: clientRunId,
632
+ sessionKey,
633
+ seq,
634
+ state: "error",
635
+ errorMessage: error ? formatForLog(error) : void 0,
636
+ ...heartbeatCtx?.isHeartbeat ? { isHeartbeat: true } : {}
637
+ };
638
+ broadcast("chat", payload);
639
+ nodeSendToSession(sessionKey, "chat", payload);
640
+ };
641
+ const resolveToolVerboseLevel = (runId, sessionKey) => {
642
+ const runVerbose = normalizeVerboseLevel(getAgentRunContext(runId)?.verboseLevel);
643
+ if (runVerbose) return runVerbose;
644
+ if (!sessionKey) return "off";
645
+ try {
646
+ const { cfg, entry } = loadSessionEntry(sessionKey);
647
+ const sessionVerbose = normalizeVerboseLevel(entry?.verboseLevel);
648
+ if (sessionVerbose) return sessionVerbose;
649
+ return normalizeVerboseLevel(cfg.agents?.defaults?.verboseDefault) ?? "off";
650
+ } catch {
651
+ return "off";
652
+ }
653
+ };
654
+ return (evt) => {
655
+ const chatLink = chatRunState.registry.peek(evt.runId);
656
+ const eventSessionKey = typeof evt.sessionKey === "string" && evt.sessionKey.trim() ? evt.sessionKey : void 0;
657
+ const sessionKey = chatLink?.sessionKey ?? eventSessionKey ?? resolveSessionKeyForRun(evt.runId);
658
+ if (sessionKey?.startsWith("temp:")) return;
659
+ const clientRunId = chatLink?.clientRunId ?? evt.runId;
660
+ const eventRunId = chatLink?.clientRunId ?? evt.runId;
661
+ const eventForClients = chatLink ? {
662
+ ...evt,
663
+ runId: eventRunId
664
+ } : evt;
665
+ const isAborted = chatRunState.abortedRuns.has(clientRunId) || chatRunState.abortedRuns.has(evt.runId);
666
+ const heartbeatAgentCtx = resolveHeartbeatContext(clientRunId, evt.runId);
667
+ const agentPayload = {
668
+ ...eventForClients,
669
+ ...sessionKey ? { sessionKey } : {},
670
+ ...heartbeatAgentCtx?.isHeartbeat ? { isHeartbeat: true } : {}
671
+ };
672
+ const last = agentRunSeq.get(evt.runId) ?? 0;
673
+ const isToolEvent = evt.stream === "tool";
674
+ const toolVerbose = isToolEvent ? resolveToolVerboseLevel(evt.runId, sessionKey) : "off";
675
+ const toolPayload = isToolEvent && toolVerbose !== "full" ? (() => {
676
+ const data = evt.data ? { ...evt.data } : {};
677
+ delete data.result;
678
+ delete data.partialResult;
679
+ return sessionKey ? {
680
+ ...eventForClients,
681
+ sessionKey,
682
+ data
683
+ } : {
684
+ ...eventForClients,
685
+ data
686
+ };
687
+ })() : agentPayload;
688
+ if (evt.seq !== last + 1) broadcast("agent", {
689
+ runId: eventRunId,
690
+ stream: "error",
691
+ ts: Date.now(),
692
+ sessionKey,
693
+ ...heartbeatAgentCtx?.isHeartbeat ? { isHeartbeat: true } : {},
694
+ data: {
695
+ reason: "seq gap",
696
+ expected: last + 1,
697
+ received: evt.seq
698
+ }
699
+ });
700
+ agentRunSeq.set(evt.runId, evt.seq);
701
+ if (isToolEvent) {
702
+ const recipients = toolEventRecipients.get(evt.runId);
703
+ if (recipients && recipients.size > 0) broadcastToConnIds("agent", toolPayload, recipients);
704
+ } else broadcast("agent", agentPayload);
705
+ const lifecyclePhase = evt.stream === "lifecycle" && typeof evt.data?.phase === "string" ? evt.data.phase : null;
706
+ if (lifecyclePhase === "start" && sessionKey && !isAborted) {
707
+ if (!resolveHeartbeatContext(clientRunId, evt.runId)?.isHeartbeat) broadcast("chat", {
708
+ runId: clientRunId,
709
+ sessionKey,
710
+ seq: evt.seq,
711
+ state: "thinking"
712
+ });
713
+ }
714
+ if (lifecyclePhase && sessionKey && sessionKey.includes(":subagent:")) {
715
+ if (lifecyclePhase === "start") broadcast("subagent", {
716
+ phase: "started",
717
+ sessionKey,
718
+ runId: clientRunId
719
+ });
720
+ else if (lifecyclePhase === "end" || lifecyclePhase === "error") broadcast("subagent", {
721
+ phase: "completed",
722
+ sessionKey,
723
+ runId: clientRunId
724
+ });
725
+ }
726
+ if (sessionKey) {
727
+ if (!isToolEvent || toolVerbose !== "off") nodeSendToSession(sessionKey, "agent", isToolEvent ? toolPayload : agentPayload);
728
+ if (!isAborted && evt.stream === "assistant" && typeof evt.data?.text === "string") {
729
+ const deltaText = typeof evt.data?.delta === "string" && evt.data.delta ? evt.data.delta : evt.data.text;
730
+ emitChatDelta(sessionKey, clientRunId, evt.runId, evt.seq, deltaText);
731
+ } else if (!isAborted && (lifecyclePhase === "end" || lifecyclePhase === "error")) if (chatLink) {
732
+ const finished = chatRunState.registry.shift(evt.runId);
733
+ if (!finished) {
734
+ clearAgentRunContext(evt.runId);
735
+ return;
736
+ }
737
+ emitChatFinal(finished.sessionKey, finished.clientRunId, evt.runId, evt.seq, lifecyclePhase === "error" ? "error" : "done", evt.data?.error);
738
+ } else emitChatFinal(sessionKey, eventRunId, evt.runId, evt.seq, lifecyclePhase === "error" ? "error" : "done", evt.data?.error);
739
+ else if (isAborted && (lifecyclePhase === "end" || lifecyclePhase === "error")) {
740
+ chatRunState.abortedRuns.delete(clientRunId);
741
+ chatRunState.abortedRuns.delete(evt.runId);
742
+ chatRunState.buffers.delete(clientRunId);
743
+ chatRunState.deltaSentAt.delete(clientRunId);
744
+ if (chatLink) chatRunState.registry.remove(evt.runId, clientRunId, sessionKey);
745
+ }
746
+ }
747
+ if (lifecyclePhase === "end" || lifecyclePhase === "error") {
748
+ toolEventRecipients.markFinal(evt.runId);
749
+ clearAgentRunContext(evt.runId);
750
+ agentRunSeq.delete(evt.runId);
751
+ agentRunSeq.delete(clientRunId);
752
+ }
753
+ };
754
+ }
755
+
406
756
  //#endregion
407
757
  //#region src/cron/run-log.ts
408
758
  function resolveCronRunLogPath(params) {
@@ -496,12 +846,14 @@ function resolveChatRunExpiresAtMs(params) {
496
846
  }
497
847
  function broadcastChatAborted(ops, params) {
498
848
  const { runId, sessionKey, stopReason, partialText } = params;
849
+ const heartbeatCtx = resolveHeartbeatContext(runId);
499
850
  const payload = {
500
851
  runId,
501
852
  sessionKey,
502
853
  seq: (ops.agentRunSeq.get(runId) ?? 0) + 1,
503
854
  state: "aborted",
504
855
  stopReason,
856
+ ...heartbeatCtx?.isHeartbeat ? { isHeartbeat: true } : {},
505
857
  message: partialText ? {
506
858
  role: "assistant",
507
859
  content: [{
@@ -4110,11 +4462,13 @@ function nextChatSeq(context, runId) {
4110
4462
  }
4111
4463
  function broadcastChatFinal(params) {
4112
4464
  const seq = nextChatSeq({ agentRunSeq: params.context.agentRunSeq }, params.runId);
4465
+ const heartbeatCtx = resolveHeartbeatContext(params.runId);
4113
4466
  const payload = {
4114
4467
  runId: params.runId,
4115
4468
  sessionKey: params.sessionKey,
4116
4469
  seq,
4117
4470
  state: "final",
4471
+ ...heartbeatCtx?.isHeartbeat ? { isHeartbeat: true } : {},
4118
4472
  message: params.message
4119
4473
  };
4120
4474
  params.context.broadcast("chat", payload);
@@ -4123,11 +4477,13 @@ function broadcastChatFinal(params) {
4123
4477
  }
4124
4478
  function broadcastChatError(params) {
4125
4479
  const seq = nextChatSeq({ agentRunSeq: params.context.agentRunSeq }, params.runId);
4480
+ const heartbeatCtx = resolveHeartbeatContext(params.runId);
4126
4481
  const payload = {
4127
4482
  runId: params.runId,
4128
4483
  sessionKey: params.sessionKey,
4129
4484
  seq,
4130
4485
  state: "error",
4486
+ ...heartbeatCtx?.isHeartbeat ? { isHeartbeat: true } : {},
4131
4487
  errorMessage: params.errorMessage
4132
4488
  };
4133
4489
  params.context.broadcast("chat", payload);
@@ -7491,7 +7847,7 @@ const nodeHandlers = {
7491
7847
  const p = params;
7492
7848
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
7493
7849
  await respondUnavailableOnThrow(respond, async () => {
7494
- const { handleNodeEvent } = await import("./server-node-events-DZxA-yXb.js");
7850
+ const { handleNodeEvent } = await import("./server-node-events-BQEpHt9X.js");
7495
7851
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
7496
7852
  await handleNodeEvent({
7497
7853
  deps: context.deps,
@@ -9601,4 +9957,4 @@ async function handleGatewayRequest(opts) {
9601
9957
  }
9602
9958
 
9603
9959
  //#endregion
9604
- export { startGatewayConfigReloader as C, resolveCronRunLogPath as S, MAX_PAYLOAD_BYTES as _, loadFavoritesSet as a, abortChatRunById as b, resolveAssistantIdentity as c, formatError as d, loadVoiceWakeConfig as f, MAX_BUFFERED_BYTES as g, HEALTH_REFRESH_INTERVAL_MS as h, safeParseJson as i, listSystemPresence as l, DEDUPE_TTL_MS as m, handleGatewayRequest as n, reconcileFavorites as o, DEDUPE_MAX as p, broadcastPresenceSnapshot as r, DEFAULT_ASSISTANT_IDENTITY as s, coreGatewayHandlers as t, upsertPresence as u, TICK_INTERVAL_MS as v, appendCronRunLog as x, getHandshakeTimeoutMs as y };
9960
+ export { createAgentEventHandler as C, startGatewayConfigReloader as E, resolveCronRunLogPath as S, createToolEventRecipientRegistry as T, MAX_PAYLOAD_BYTES as _, loadFavoritesSet as a, abortChatRunById as b, resolveAssistantIdentity as c, formatError as d, loadVoiceWakeConfig as f, MAX_BUFFERED_BYTES as g, HEALTH_REFRESH_INTERVAL_MS as h, safeParseJson as i, listSystemPresence as l, DEDUPE_TTL_MS as m, handleGatewayRequest as n, reconcileFavorites as o, DEDUPE_MAX as p, broadcastPresenceSnapshot as r, DEFAULT_ASSISTANT_IDENTITY as s, coreGatewayHandlers as t, upsertPresence as u, TICK_INTERVAL_MS as v, createChatRunState as w, appendCronRunLog as x, getHandshakeTimeoutMs as y };