@symerian/symi 2.0.6 → 2.0.8

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 (252) hide show
  1. package/dist/{agents-CypLQ-TX.js → agents-Ck7Cf272.js} +4 -4
  2. package/dist/{agents.config-DWqwPV32.js → agents.config-BTWn70A_.js} +1 -1
  3. package/dist/{agents.config-S5g63_Ww.js → agents.config-DRDcXXQC.js} +1 -1
  4. package/dist/{audio-preflight-Cq4C-m27.js → audio-preflight-B6L8N6Ly.js} +13 -12
  5. package/dist/{audio-preflight-DSeaWZZW.js → audio-preflight-BQbkYWBq.js} +6 -5
  6. package/dist/{audio-preflight-DbUFnPX1.js → audio-preflight-Bk54IW__.js} +17 -16
  7. package/dist/{audio-preflight-CO2seHjy.js → audio-preflight-Bl8Xkt6g.js} +12 -11
  8. package/dist/{audit-DKUpFt8z.js → audit-Bv_hWhC7.js} +2 -2
  9. package/dist/{audit-CiugrQda.js → audit-Dmg0_STU.js} +2 -2
  10. package/dist/{auth-choice-1csNxn5J.js → auth-choice-B2vfWdxb.js} +1 -1
  11. package/dist/{auth-choice-DxhF9BuU.js → auth-choice-BTHtq4sU.js} +4 -4
  12. package/dist/{banner-CV_YEEQe.js → banner-C93WYZhg.js} +1 -1
  13. package/dist/build-info.json +3 -3
  14. package/dist/bundled/boot-md/handler.js +34 -34
  15. package/dist/bundled/session-memory/handler.js +34 -34
  16. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  17. package/dist/{channel-options-NbbM348A.js → channel-options-DzVgaV8r.js} +1 -1
  18. package/dist/{channel-options-DN7ZZEMr.js → channel-options-FXf1Vm4X.js} +1 -1
  19. package/dist/{channel-web-BUODlmfF.js → channel-web-DXNS1120.js} +8 -8
  20. package/dist/{channels-cli-6MNbtk6T.js → channels-cli-VMjbf17C.js} +32 -32
  21. package/dist/{channels-cli-DOoGJd4k.js → channels-cli-jwN3bQiA.js} +12 -12
  22. package/dist/{chrome-BATLK3yK.js → chrome-2-wXJfuH.js} +8 -8
  23. package/dist/{chrome-h6BnL8Lp.js → chrome-B_zrSLce.js} +7 -7
  24. package/dist/{chunk-BW5f05BR.js → chunk-BPSLqkZN.js} +1 -1
  25. package/dist/{chunk-DTMTDXwE.js → chunk-rw3-yl6B.js} +1 -1
  26. package/dist/{cli-TVchR8N9.js → cli-B0zfZMTk.js} +29 -29
  27. package/dist/{cli-DxHEDvD7.js → cli-pVI3InZO.js} +9 -9
  28. package/dist/{command-registry-S2yEeoft.js → command-registry-BfDMSQVM.js} +9 -9
  29. package/dist/{commands-registry-C3C4Rv3O.js → commands-registry-CZ5P8CpC.js} +2 -2
  30. package/dist/{commands-registry-Copoizgv.js → commands-registry-UwWpNkQg.js} +1 -1
  31. package/dist/{completion-cli-u1z9O4lQ.js → completion-cli-BIb71n9R.js} +2 -2
  32. package/dist/{completion-cli-BrgaQVPk.js → completion-cli-CtFc2LrR.js} +1 -1
  33. package/dist/{config-DM0K7qC1.js → config-D3XlX-h-.js} +1 -1
  34. package/dist/{config-cli-CUdFNGGC.js → config-cli-5k0J0n8w.js} +1 -1
  35. package/dist/{config-cli-CipxRDcw.js → config-cli-S34vsL8T.js} +1 -1
  36. package/dist/{config-guard-BpQn1MKk.js → config-guard-Ca5SgLv4.js} +1 -1
  37. package/dist/{config-guard-Cnu2qssk.js → config-guard-lpwxY7-I.js} +3 -2
  38. package/dist/{configure-D9n_M6Ra.js → configure-CwPEm658.js} +3 -3
  39. package/dist/{configure-B2DVh1MI.js → configure-DK60UZR-.js} +6 -6
  40. package/dist/{deliver-DONp5mgd.js → deliver-BubWdk2x.js} +2 -2
  41. package/dist/{deliver-DD3gs9SF.js → deliver-DGaRNkFI.js} +5 -5
  42. package/dist/{deliver-2Y_F_0yh.js → deliver-DTHhqsN5.js} +5 -5
  43. package/dist/{deliver-CZF9f8aC.js → deliver-jK_qcWx-.js} +5 -5
  44. package/dist/{diagnostic-CI0kRQkt.js → diagnostic-BIVLRT_X.js} +1 -1
  45. package/dist/{diagnostic-D0xmLpej.js → diagnostic-C-7DW8ZL.js} +1 -1
  46. package/dist/{doctor-completion-Beg_3VG2.js → doctor-completion-B0H-LZ9F.js} +1 -1
  47. package/dist/{doctor-completion-94bdxcgy.js → doctor-completion-B7omSm-D.js} +1 -1
  48. package/dist/{doctor-config-flow-C_56SUPO.js → doctor-config-flow-CifTPMbU.js} +1 -1
  49. package/dist/{doctor-config-flow-B150h841.js → doctor-config-flow-Da5WjdWM.js} +1 -1
  50. package/dist/entry.js +1 -1
  51. package/dist/extensionAPI.js +29 -29
  52. package/dist/{fetch-DTNGXEzX.js → fetch-BrtlUMgb.js} +1 -1
  53. package/dist/{fetch-guard-DOPkVbh3.js → fetch-guard-DPA1vbaF.js} +1 -1
  54. package/dist/{gateway-cli-CKIJn013.js → gateway-cli-BIQu6Utl.js} +43 -43
  55. package/dist/{gateway-cli-BkfAKxxR.js → gateway-cli-C9FvkbFy.js} +20 -20
  56. package/dist/{gemini-auth-7AWT6JXV.js → gemini-auth-Ca6F0cNq.js} +1 -1
  57. package/dist/{glass-ui-ws-BQ6j-PII.js → glass-ui-ws-CwHtwMkP.js} +16 -16
  58. package/dist/{glass-ui-ws-BrvN2A06.js → glass-ui-ws-DpKEdS_Z.js} +39 -39
  59. package/dist/{health-BUaaGug2.js → health-Cey03nVq.js} +4 -4
  60. package/dist/{health-9kUMJPU4.js → health-KL2iuEbF.js} +5 -5
  61. package/dist/{heartbeat-visibility-U4BL57eQ.js → heartbeat-visibility-D4Xy8Sv0.js} +2 -2
  62. package/dist/{heartbeat-visibility-B8TDjqpW.js → heartbeat-visibility-DS9JNq6T.js} +2 -2
  63. package/dist/{hooks-cli-CBkjAKu_.js → hooks-cli-BQF_wX5P.js} +10 -10
  64. package/dist/{hooks-cli-CxqrpSnT.js → hooks-cli-Dzw7jPNk.js} +30 -30
  65. package/dist/{image-RLbZ3RUn.js → image-BJiE96Ml.js} +4 -4
  66. package/dist/{image-DrZEJQwQ.js → image-BPHwlO8o.js} +2 -2
  67. package/dist/{image-B4LY9KFw.js → image-CPNmq0j8.js} +1 -1
  68. package/dist/{image-DOnOTocl.js → image-qnqUW4nb.js} +2 -2
  69. package/dist/index.js +36 -36
  70. package/dist/{ir-DccrnjsE.js → ir-B4l25ISI.js} +3 -3
  71. package/dist/{ir-DZam9q5M.js → ir-DEVHhjq7.js} +1 -1
  72. package/dist/{ir-F0moAwIl.js → ir-DPLo2LIn.js} +3 -3
  73. package/dist/llm-slug-generator.js +34 -34
  74. package/dist/{local-roots-CC8jiKDk.js → local-roots-BDORNz_Q.js} +1 -1
  75. package/dist/{local-roots-aAFLQGkY.js → local-roots-C31eq7PP.js} +1 -1
  76. package/dist/{local-roots-DMwIh5cS.js → local-roots-Dg0r0pJL.js} +1 -1
  77. package/dist/{login-BG_7eJLu.js → login-DNi-TGJT.js} +2 -2
  78. package/dist/{login-qr-9OQSnm5L.js → login-qr-DWlyS1Bc.js} +4 -4
  79. package/dist/{manager-B5EXdBQV.js → manager-BX65xO2I.js} +2 -2
  80. package/dist/{manager-C_DoJrcP.js → manager-DjVWQ1JF.js} +3 -3
  81. package/dist/{memory-cli-D4J9SO7Z.js → memory-cli-BsBiPX0L.js} +4 -4
  82. package/dist/{model-auth-CeL58m55.js → model-auth-Daguh6Kb.js} +1 -1
  83. package/dist/{model-picker-DXwUsLAy.js → model-picker-CiSWZdy1.js} +1 -1
  84. package/dist/{models-CZSMuo5B.js → models-CmtHVZ9B.js} +2 -2
  85. package/dist/{models-cli-Ds23awjm.js → models-cli-CoLpqD2i.js} +11 -11
  86. package/dist/{models-cli-MqWvGB7f.js → models-cli-CzXJgEMc.js} +30 -30
  87. package/dist/{onboard-G9IN6QQx.js → onboard-CYpfv_zR.js} +2 -2
  88. package/dist/{onboard-D3oW4O-4.js → onboard-CctP17cu.js} +5 -5
  89. package/dist/{onboard-channels-dfTDyb59.js → onboard-channels-BfEIJ5D9.js} +1 -1
  90. package/dist/{onboard-channels-oFTqVfhO.js → onboard-channels-KDLz_5CQ.js} +1 -1
  91. package/dist/{onboard-custom-DoIhWPnb.js → onboard-custom-B3RZopk5.js} +2 -2
  92. package/dist/{onboard-skills-BD8JNVwL.js → onboard-skills-DfKmsYuM.js} +1 -1
  93. package/dist/{onboarding-Ckpz4QDg.js → onboarding-D8u579LU.js} +7 -7
  94. package/dist/{onboarding-g2bI9l8x.js → onboarding-HyPoSPVD.js} +4 -4
  95. package/dist/{onboarding.finalize-C1lR3Y__.js → onboarding.finalize-BVxx88Nj.js} +15 -15
  96. package/dist/{onboarding.finalize-MWEKi_hL.js → onboarding.finalize-DKJJyaEK.js} +34 -34
  97. package/dist/{onboarding.gateway-config-DipSuaKH.js → onboarding.gateway-config-C88Tut4n.js} +2 -1
  98. package/dist/{onboarding.gateway-config-Cj_s_IG8.js → onboarding.gateway-config-svEaDNCf.js} +2 -1
  99. package/dist/{openai-model-default-DF334-MD.js → openai-model-default-BkscYpXX.js} +1 -1
  100. package/dist/{outbound-DfOF58G2.js → outbound-56UQxS1I.js} +2 -2
  101. package/dist/{outbound-BNMysnJ1.js → outbound-ByC0HdWz.js} +2 -2
  102. package/dist/{outbound-Cedd_yui.js → outbound-DpGc1neG.js} +3 -3
  103. package/dist/{outbound-attachment-D_QuKi8U.js → outbound-attachment-C-GD7uJh.js} +1 -1
  104. package/dist/{outbound-attachment-DjNDa3zn.js → outbound-attachment-CJZwroQb.js} +2 -2
  105. package/dist/{outbound-attachment-entfcjDW.js → outbound-attachment-Cir36qaG.js} +2 -2
  106. package/dist/{pi-auth-json-BNhcohVK.js → pi-auth-json-CHgA276j.js} +2 -2
  107. package/dist/{pi-embedded-BJC3CNWN.js → pi-embedded-C5XncARS.js} +223 -161
  108. package/dist/{pi-embedded-Cll2enMR.js → pi-embedded-FBOXa0Py.js} +211 -149
  109. package/dist/{pi-embedded-helpers-x8rJur4F.js → pi-embedded-helpers-B8JQjQlx.js} +109 -13
  110. package/dist/{pi-embedded-helpers--yFTAWwW.js → pi-embedded-helpers-BqnI9Mzn.js} +107 -11
  111. package/dist/{pi-embedded-helpers-ueCT6VlS.js → pi-embedded-helpers-Ct3OLzYp.js} +2 -2
  112. package/dist/{pi-embedded-helpers-CgxKWHj9.js → pi-embedded-helpers-DhWpSwU-.js} +1 -1
  113. package/dist/{pi-tools.policy-DPmdlOwE.js → pi-tools.policy-BXcx55vF.js} +1 -1
  114. package/dist/{pi-tools.policy-T6Z5F-_n.js → pi-tools.policy-Bs2MTSlR.js} +1 -1
  115. package/dist/{plugin-registry-C5KPfoPc.js → plugin-registry-BDz-xHIX.js} +1 -1
  116. package/dist/{plugin-registry-KUffgxdX.js → plugin-registry-CdUu6pO0.js} +1 -1
  117. package/dist/plugin-sdk/agents/plan-mode.d.ts +32 -0
  118. package/dist/plugin-sdk/{audio-preflight-CpYjfwrA.js → audio-preflight-CAWn5TBW.js} +4 -3
  119. package/dist/plugin-sdk/{channel-web-DTV6QoJV.js → channel-web-CdAlKpn7.js} +3 -3
  120. package/dist/plugin-sdk/{deliver-BwnrMlHO.js → deliver-PnVwVXLm.js} +1 -1
  121. package/dist/plugin-sdk/gateway/chat-sanitize.d.ts +10 -0
  122. package/dist/plugin-sdk/{image-k_W1USVr.js → image-BGfQ0dkr.js} +1 -1
  123. package/dist/plugin-sdk/index.js +6 -6
  124. package/dist/plugin-sdk/{pi-embedded-helpers-Cs2-_EpL.js → pi-embedded-helpers-BMudP5Tn.js} +98 -2
  125. package/dist/plugin-sdk/{reply-CzCsghFB.js → reply-QYyMp-Tw.js} +169 -107
  126. package/dist/plugin-sdk/{runner-Br1179I4.js → runner-qajBqJHY.js} +1 -1
  127. package/dist/plugin-sdk/{web-BLcsH45O.js → web-CVs35ve3.js} +6 -6
  128. package/dist/{plugins-cli-DRDUAaBR.js → plugins-cli-D0KwuqdQ.js} +30 -30
  129. package/dist/{plugins-cli-BIHhue19.js → plugins-cli-g3VAbxTK.js} +10 -10
  130. package/dist/{program-BCEnYzi8.js → program-CARq3XaO.js} +16 -16
  131. package/dist/{program-context-CS1wSnZE.js → program-context-D3z9orfX.js} +21 -21
  132. package/dist/{prompt-select-styled-AZW_g_xe.js → prompt-select-styled-BFHQx73x.js} +10 -10
  133. package/dist/{prompt-select-styled-99u32PPK.js → prompt-select-styled-CwssKDY4.js} +7 -7
  134. package/dist/{provider-auth-helpers-CeJqzcdK.js → provider-auth-helpers-DJ3yECqH.js} +1 -1
  135. package/dist/{provider-auth-helpers-DqJ69hdw.js → provider-auth-helpers-gNJWrk0O.js} +1 -1
  136. package/dist/{push-apns-Dwt-_Kns.js → push-apns-CZM-8wga.js} +1 -1
  137. package/dist/{push-apns-C5xLtVxl.js → push-apns-D1GxPyeO.js} +1 -1
  138. package/dist/{pw-ai-CCt1nIO-.js → pw-ai-D8UzqLyI.js} +4 -4
  139. package/dist/{pw-ai-C_C5as1t.js → pw-ai-s-d46DCX.js} +1 -1
  140. package/dist/{qmd-manager-D85GJrir.js → qmd-manager-DeZm1nJL.js} +1 -1
  141. package/dist/{register.agent-nnrj8tc5.js → register.agent-4Vr8rfNN.js} +35 -35
  142. package/dist/{register.agent-Cyq17z22.js → register.agent-BQ5ERQ9d.js} +14 -14
  143. package/dist/{register.configure-D1zZ3jgM.js → register.configure-BKh4lgRd.js} +14 -14
  144. package/dist/{register.configure-DSknC_88.js → register.configure-Do3kZMFp.js} +39 -39
  145. package/dist/{register.maintenance-Dt1AUhn3.js → register.maintenance-BMPh4huD.js} +17 -17
  146. package/dist/{register.maintenance-ClQi_hVH.js → register.maintenance-DvrBn6u3.js} +37 -37
  147. package/dist/{register.message-x7nPJjwN.js → register.message-BNNSKB5m.js} +10 -10
  148. package/dist/{register.message-C0R7nCJf.js → register.message-BYL16pRB.js} +30 -30
  149. package/dist/{register.onboard-BOXdnoFU.js → register.onboard-CPPotri6.js} +35 -35
  150. package/dist/{register.onboard-Bry0wxl_.js → register.onboard-CZY5K__u.js} +12 -12
  151. package/dist/{register.setup-C5d8909b.js → register.setup-CMc-wYv4.js} +12 -12
  152. package/dist/{register.setup-fPrs1eMy.js → register.setup-DU2rUacO.js} +35 -35
  153. package/dist/{register.status-health-sessions-Bg3bAzzg.js → register.status-health-sessions-DDeNkHlW.js} +13 -13
  154. package/dist/{register.status-health-sessions-C6FKgGFx.js → register.status-health-sessions-Dm0neK04.js} +34 -34
  155. package/dist/{register.subclis-BrOWQICr.js → register.subclis-D69k9OGJ.js} +12 -12
  156. package/dist/{replies-D9V19U2-.js → replies-B4-OBhpP.js} +2 -2
  157. package/dist/{replies-DqdOBkTB.js → replies-ConxSQu4.js} +2 -2
  158. package/dist/{replies-QloQerhz.js → replies-DPvPoRgq.js} +2 -2
  159. package/dist/{reply-D_FZec1Q.js → reply-B7N_xCT0.js} +202 -166
  160. package/dist/{run-main-BNSY40iN.js → run-main-Dw4qcIps.js} +25 -25
  161. package/dist/{runner-C0tJTZmp.js → runner-BJmolY3h.js} +6 -6
  162. package/dist/{runner-BXN4KYDK.js → runner-CR105aVj.js} +1 -1
  163. package/dist/{runner-DjHRFXSI.js → runner-Ct0-sE8b.js} +8 -8
  164. package/dist/{runner-uDZlTCm2.js → runner-t-wbbvf-.js} +4 -4
  165. package/dist/{sandbox-rMmahr2s.js → sandbox-BGegLZ1X.js} +1 -1
  166. package/dist/{sandbox-CbuJolk2.js → sandbox-CAcCcpV3.js} +1 -1
  167. package/dist/{sandbox-cli-C90jqh9l.js → sandbox-cli-CvvSZr3D.js} +3 -2
  168. package/dist/{sandbox-cli-Duc05KL9.js → sandbox-cli-GaFIkZTh.js} +3 -2
  169. package/dist/{security-cli-Bt0VkUtO.js → security-cli-DJpFpYUY.js} +5 -4
  170. package/dist/{security-cli-YGXUUBvD.js → security-cli-Vyuc8XY7.js} +5 -4
  171. package/dist/{send-CzE5UKr-.js → send-B9JhmJSo.js} +5 -5
  172. package/dist/{send-D_yJMeJa.js → send-COvqFO3S.js} +4 -4
  173. package/dist/{send-DEWzWqfZ.js → send-CiVBt5gu.js} +4 -4
  174. package/dist/{send-BeASPkFg.js → send-D3qb_2Q-.js} +4 -4
  175. package/dist/{send-mi3NHnwI.js → send-DBTO2dLX.js} +2 -2
  176. package/dist/{send-De_WCeGZ.js → send-DDt3Bdxx.js} +4 -4
  177. package/dist/{send-3YM-aarb.js → send-DXoJ5lC_.js} +1 -1
  178. package/dist/{send-Do-0Kcmv.js → send-DmlK72uJ.js} +3 -3
  179. package/dist/{send-BsocounR.js → send-Dz76LuDQ.js} +2 -2
  180. package/dist/{send-CHOArYFe.js → send-DzmRVAHq.js} +3 -3
  181. package/dist/{send-BVZGeP2r.js → send-LZO3UNRb.js} +3 -3
  182. package/dist/{send-B18gkuvz.js → send-OEyo5LFE.js} +2 -2
  183. package/dist/{send-D0dzPf6g.js → send-TQWniAsM.js} +2 -2
  184. package/dist/{send-D16XtYvC.js → send-bTMPppyJ.js} +4 -4
  185. package/dist/{send-D3M6pMr5.js → send-yBb6c4og.js} +5 -5
  186. package/dist/{server-methods-BBkI0oCw.js → server-methods-C7N7UMSW.js} +14 -14
  187. package/dist/{server-methods-CQo9n7_8.js → server-methods-CkOu6zha.js} +13 -13
  188. package/dist/{server-node-events-DBIaf_Oj.js → server-node-events-BVdEI7tT.js} +10 -10
  189. package/dist/{server-node-events-DXVd5rRh.js → server-node-events-DHR0gLJD.js} +30 -30
  190. package/dist/{session-T0JXlYWe.js → session-_ViRAnAz.js} +1 -1
  191. package/dist/{session-utils-Cdv2Qaq2.js → session-utils-BcI6SO4J.js} +1 -1
  192. package/dist/{sessions-CX93jXmG.js → sessions-Cyr_cPRu.js} +2 -2
  193. package/dist/{sessions-BEyCtqBB.js → sessions-DcjESPyL.js} +263 -3
  194. package/dist/{sessions-DJAxaVI7.js → sessions-WDdS9Yo7.js} +262 -2
  195. package/dist/{skill-commands-DWcJOIzP.js → skill-commands-Bc-ztbDr.js} +1 -1
  196. package/dist/{skill-commands-B64uavY9.js → skill-commands-D_bBwwvA.js} +1 -1
  197. package/dist/{skills-install-D67isO1L.js → skills-install-CKFZBTH2.js} +1 -1
  198. package/dist/{status-CqnXLNV0.js → status-BenJOJF2.js} +5 -5
  199. package/dist/{status-CsoUJxpm.js → status-C8wS7Lbr.js} +7 -7
  200. package/dist/{status-B77mKduK.js → status-DcY3KTFx.js} +1 -1
  201. package/dist/{status-Be3sgGJN.js → status-DxNQmdA8.js} +1 -1
  202. package/dist/{status.update-DlaskfTr.js → status.update-D40obmG1.js} +1 -1
  203. package/dist/{store-C0wvOkae.js → store-Bb4oiLME.js} +1 -1
  204. package/dist/{store-bnzGvI16.js → store-C4ZvS7QX.js} +1 -1
  205. package/dist/{subagent-registry-BH79W7i1.js → subagent-registry-ujHhkiDm.js} +174 -138
  206. package/dist/{tables-BEzT0Da4.js → tables-CjPLB3aX.js} +1 -1
  207. package/dist/{tables-DuZspiBu.js → tables-XnT3BCYh.js} +1 -1
  208. package/dist/{tables-COnZ169v.js → tables-dfFTl4Oa.js} +1 -1
  209. package/dist/{target-errors-7AvoVa10.js → target-errors-B_xs1J06.js} +1 -1
  210. package/dist/{target-errors-BbOqxMY0.js → target-errors-CL9BfceM.js} +2 -2
  211. package/dist/{target-errors-Be1SwYlW.js → target-errors-LR7w6--g.js} +2 -2
  212. package/dist/{thinking-CdlENGRW.js → thinking-EjJEKdLq.js} +1 -1
  213. package/dist/{thinking-W85Rb32m.js → thinking-XA7vussX.js} +1 -1
  214. package/dist/{tool-images-ChC2CXaN.js → tool-images-BHM4TeU5.js} +1 -1
  215. package/dist/{tool-images-DXB7tqWi.js → tool-images-BwAkbbBM.js} +1 -1
  216. package/dist/{tui-CcirlGg5.js → tui-CzysFxZ0.js} +3 -3
  217. package/dist/{tui-0rURH3b3.js → tui-DMKdRwFF.js} +2 -2
  218. package/dist/{tui-cli-hcbzeOtp.js → tui-cli-CKHu_yYJ.js} +5 -4
  219. package/dist/{tui-cli-D3VMk5c8.js → tui-cli-Hzw_5-oe.js} +7 -6
  220. package/dist/{update-check-CtckACbb.js → update-check-DK1kMuwI.js} +1 -1
  221. package/dist/{update-cli-Ce9xf_CT.js → update-cli-Byw3vUdU.js} +17 -17
  222. package/dist/{update-cli-BhPzUXNP.js → update-cli-D__K_5cn.js} +38 -38
  223. package/dist/{update-runner-DYnn5y5L.js → update-runner-CqciHxLK.js} +2 -2
  224. package/dist/{update-runner-BpQxWph5.js → update-runner-yKAKuw2W.js} +1 -1
  225. package/dist/{web-uh4O13Iu.js → web-B2v6AvX-.js} +31 -31
  226. package/dist/{web-sN6ARhg2.js → web-DJzj2HU0.js} +9 -9
  227. package/dist/{web-D3J3pm9B.js → web-ENDSDPaD.js} +37 -37
  228. package/dist/{web-07aQbQrq.js → web-cJUlI_Wb.js} +30 -30
  229. package/dist/{whatsapp-actions-Jfx4zcwv.js → whatsapp-actions-BcsFR5tf.js} +7 -7
  230. package/dist/{whatsapp-actions-BIjGyW3T.js → whatsapp-actions-CUczC854.js} +9 -9
  231. package/dist/{whatsapp-actions-BL7tCNC_.js → whatsapp-actions-ia2odzch.js} +12 -12
  232. package/docs/reference/templates/AGENTS.md +18 -0
  233. package/docs/reference/templates/SYMICORE.md +2 -0
  234. package/package.json +1 -1
  235. /package/dist/{accounts-8zZqL37v.js → accounts-9VRq1rY7.js} +0 -0
  236. /package/dist/{accounts-CWktKM8a.js → accounts-BCS-nbgN.js} +0 -0
  237. /package/dist/{api-key-rotation-BukD0zzl.js → api-key-rotation-erqZ9Tuc.js} +0 -0
  238. /package/dist/{diagnostic-session-state-Bxo4UHOL.js → diagnostic-session-state-Bu3E4Enn.js} +0 -0
  239. /package/dist/{diagnostic-session-state-C1vRJs5w.js → diagnostic-session-state-DmrztgHU.js} +0 -0
  240. /package/dist/{fetch-timeout-Db3da8yR.js → fetch-timeout-DoySHqfO.js} +0 -0
  241. /package/dist/{github-copilot-token-C_qUP7p5.js → github-copilot-token-BqpAEW8G.js} +0 -0
  242. /package/dist/{image-ops-CvJzsyvE.js → image-ops-DD37OhdR.js} +0 -0
  243. /package/dist/{image-ops-ByaQt43P.js → image-ops-UtlmP67m.js} +0 -0
  244. /package/dist/{message-channel-BQINJQIT.js → message-channel-B3YUM8IG.js} +0 -0
  245. /package/dist/{message-channel-Dz5lr5b0.js → message-channel-Bj7aZphL.js} +0 -0
  246. /package/dist/{model-catalog-DjJ9GtKX.js → model-catalog-DhaH7him.js} +0 -0
  247. /package/dist/{pi-model-discovery-j5tVLINv.js → pi-model-discovery-C-yOXpma.js} +0 -0
  248. /package/dist/{sqlite-Dx3J_aSE.js → sqlite-DhNyBVPk.js} +0 -0
  249. /package/dist/{tokens-BuceUQDl.js → tokens-DBCvs-Ns.js} +0 -0
  250. /package/dist/{tool-display-D8N3rsYt.js → tool-display-pHB3J5PK.js} +0 -0
  251. /package/dist/{tool-images-DvUBlqjX.js → tool-images-CLRUTPlM.js} +0 -0
  252. /package/dist/{transcript-events-DdnTeoR1.js → transcript-events-CJRvASY_.js} +0 -0
@@ -8,58 +8,58 @@ import { $ as DEFAULT_PROVIDER, A as resolveShellEnvFallbackTimeoutMs, B as dedu
8
8
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-K_J_nfgx.js";
9
9
  import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-BbsJ0Qbo.js";
10
10
  import { i as resolveCliName, n as parseBooleanValue$1, r as formatCliCommand, t as isTruthyEnvValue } from "./env-CQ_DQOwT.js";
11
- import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-Cn6drXx2.js";
11
+ import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-Cn6drXx2.js";
12
+ import { $ as mergeDeliveryContext, $t as stripHeartbeatToken, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as updateSessionStoreEntry, Jt as ensureSessionHeader, K as updateLastRoute, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as deliveryContextKey, Qt as resolveHeartbeatPrompt, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as resolveCacheTtlMs$1, Xt as resolveBootstrapTotalMaxChars, Y as isCacheEnabled, Yt as resolveBootstrapMaxChars, Z as deliveryContextFromSession, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as DEFAULT_RESET_TRIGGERS, a as isMessagingToolDuplicateNormalized, at as countToolResults, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as applyInputProvenanceToUserMessage, d as isAntigravityClaude, dt as resolveSessionKey, et as normalizeDeliveryContext, f as isGoogleModelApi, ft as evaluateSessionFreshness, g as formatBillingErrorMessage, gt as resolveThreadFlag, h as formatAssistantErrorText, ht as resolveSessionResetType, it as capArrayByJsonBytes, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as hasInterSessionUserProvenance, m as classifyFailoverReason, mt as resolveSessionResetPolicy, n as validateGeminiTurns, nt as normalizeAccountId$3, o as normalizeTextForComparison, ot as extractToolCallNames, p as BILLING_ERROR_USER_MESSAGE, pt as resolveChannelResetConfig, q as updateSessionStore, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as archiveSessionTranscripts, s as sanitizeSessionMessagesImages, st as INPUT_PROVENANCE_KIND_VALUES, t as validateAnthropicTurns, tt as normalizeSessionDeliveryFields, u as downgradeOpenAIReasoningBlocks, ut as normalizeInputProvenance, v as getApiErrorPayloadFingerprint, vt as resolveFreshSessionTotalTokens, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, yt as canonicalizeMainSessionAlias, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-BqnI9Mzn.js";
12
13
  import { _ as resolveDiscordAccount, a as normalizeWhatsAppTarget, c as listTelegramAccountIds, d as resolveSlackAccount, g as listEnabledDiscordAccounts, h as createDiscordActionGate, i as isWhatsAppGroupJid, l as resolveTelegramAccount, m as resolveSlackBotToken, n as listChannelPlugins, o as createTelegramActionGate, p as resolveSlackAppToken, r as normalizeChannelId$1, s as listEnabledTelegramAccounts, t as getChannelPlugin, u as resolveTelegramToken, v as normalizeDiscordToken } from "./plugins-71oIavrF.js";
13
14
  import { a as logoutWeb, i as logWebSelfId, l as readWebSelfId, p as webAuthExists, r as getWebAuthAgeMs, t as resolveWhatsAppAccount } from "./accounts-DDEyGwby.js";
14
15
  import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
15
- import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-D0dzPf6g.js";
16
- import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-De_WCeGZ.js";
17
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-CZF9f8aC.js";
18
- import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-D0xmLpej.js";
19
- import { r as getDiagnosticSessionState } from "./diagnostic-session-state-C1vRJs5w.js";
20
- import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-8zZqL37v.js";
21
- import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as readChannelAllowFromStore, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, Q as listPairingChannels, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, X as upsertChannelPairingRequest, Y as removeChannelAllowFromStoreEntry, Z as getPairingAdapter, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, et as parseTelegramTarget, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as addChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as resolveTelegramTargetChatType, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-mi3NHnwI.js";
22
- import { d as detectMime, f as extensionForMime, g as isGifMedia, h as isAudioFileName, i as getImageMetadata, m as imageMimeFromFormat, s as resizeToJpeg, x as mediaKindFromMime, y as MAX_IMAGE_BYTES } from "./image-ops-ByaQt43P.js";
23
- import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-j5tVLINv.js";
24
- import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel, d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, i as isInternalMessageChannel, l as resolveMessageChannel, n as isDeliverableMessageChannel, o as listDeliverableMessageChannels, r as isGatewayMessageChannel, s as normalizeMessageChannel, t as INTERNAL_MESSAGE_CHANNEL, u as GATEWAY_CLIENT_IDS } from "./message-channel-BQINJQIT.js";
25
- import { $ as mergeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as updateSessionStoreEntry, Jt as ensureSessionHeader, K as updateLastRoute, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as deliveryContextKey, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as resolveCacheTtlMs$1, Xt as resolveBootstrapTotalMaxChars, Y as isCacheEnabled, Yt as resolveBootstrapMaxChars, Z as deliveryContextFromSession, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as DEFAULT_RESET_TRIGGERS, a as isMessagingToolDuplicateNormalized, at as countToolResults, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as applyInputProvenanceToUserMessage, d as isAntigravityClaude, dt as resolveSessionKey, et as normalizeDeliveryContext, f as isGoogleModelApi, ft as evaluateSessionFreshness, g as formatBillingErrorMessage, gt as resolveThreadFlag, h as formatAssistantErrorText, ht as resolveSessionResetType, it as capArrayByJsonBytes, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as hasInterSessionUserProvenance, m as classifyFailoverReason, mt as resolveSessionResetPolicy, n as validateGeminiTurns, nt as normalizeAccountId$3, o as normalizeTextForComparison, ot as extractToolCallNames, p as BILLING_ERROR_USER_MESSAGE, pt as resolveChannelResetConfig, q as updateSessionStore, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as archiveSessionTranscripts, s as sanitizeSessionMessagesImages, st as INPUT_PROVENANCE_KIND_VALUES, t as validateAnthropicTurns, tt as normalizeSessionDeliveryFields, u as downgradeOpenAIReasoningBlocks, ut as normalizeInputProvenance, v as getApiErrorPayloadFingerprint, vt as resolveFreshSessionTotalTokens, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, yt as canonicalizeMainSessionAlias, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers--yFTAWwW.js";
16
+ import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-TQWniAsM.js";
17
+ import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-DDt3Bdxx.js";
18
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-jK_qcWx-.js";
19
+ import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-C-7DW8ZL.js";
20
+ import { r as getDiagnosticSessionState } from "./diagnostic-session-state-Bu3E4Enn.js";
21
+ import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-9VRq1rY7.js";
22
+ import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as readChannelAllowFromStore, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, Q as listPairingChannels, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, X as upsertChannelPairingRequest, Y as removeChannelAllowFromStoreEntry, Z as getPairingAdapter, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, et as parseTelegramTarget, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as addChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as resolveTelegramTargetChatType, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-DBTO2dLX.js";
23
+ import { d as detectMime, f as extensionForMime, g as isGifMedia, h as isAudioFileName, i as getImageMetadata, m as imageMimeFromFormat, s as resizeToJpeg, x as mediaKindFromMime, y as MAX_IMAGE_BYTES } from "./image-ops-UtlmP67m.js";
24
+ import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-DaNAekda.js";
25
+ import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel, d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, i as isInternalMessageChannel, l as resolveMessageChannel, n as isDeliverableMessageChannel, o as listDeliverableMessageChannels, r as isGatewayMessageChannel, s as normalizeMessageChannel, t as INTERNAL_MESSAGE_CHANNEL, u as GATEWAY_CLIENT_IDS } from "./message-channel-B3YUM8IG.js";
26
26
  import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-BjGo9GnL.js";
27
27
  import { c as normalizePluginsConfig, f as isPathInsideWithRealpath, i as safeStatSync, l as resolveEnableState, n as discoverSymiPlugins, p as isDangerousHostEnvVarName, r as isPathInside, s as applyTestPluginDefaults, t as loadPluginManifestRegistry, u as resolveMemorySlotDecision } from "./manifest-registry-D-mTF1cj.js";
28
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-h6BnL8Lp.js";
28
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-B_zrSLce.js";
29
29
  import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-BNpGMnp-.js";
30
30
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-CPfngF0S.js";
31
31
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-CxfFyMRZ.js";
32
- import { n as getMediaDir, r as saveMediaBuffer } from "./store-bnzGvI16.js";
33
- import { _ as normalizeAtHashSlug, a as normalizeReasoningLevel, b as normalizeStringEntriesLower, c as normalizeVerboseLevel, d as getChannelDock, f as listChannelDocks, g as resolveChannelGroupToolsPolicy, h as resolveChannelGroupRequireMention, i as normalizeElevatedLevel, l as resolveResponseUsageMode, m as resolveChannelGroupPolicy, n as formatXHighModelHint, o as normalizeThinkLevel, p as normalizeSignalMessagingTarget, s as normalizeUsageDisplay, t as formatThinkingLevels, u as supportsXHighThinking, v as normalizeHyphenSlug, y as normalizeStringEntries } from "./thinking-W85Rb32m.js";
32
+ import { n as getMediaDir, r as saveMediaBuffer } from "./store-C4ZvS7QX.js";
33
+ import { _ as normalizeAtHashSlug, a as normalizeReasoningLevel, b as normalizeStringEntriesLower, c as normalizeVerboseLevel, d as getChannelDock, f as listChannelDocks, g as resolveChannelGroupToolsPolicy, h as resolveChannelGroupRequireMention, i as normalizeElevatedLevel, l as resolveResponseUsageMode, m as resolveChannelGroupPolicy, n as formatXHighModelHint, o as normalizeThinkLevel, p as normalizeSignalMessagingTarget, s as normalizeUsageDisplay, t as formatThinkingLevels, u as supportsXHighThinking, v as normalizeHyphenSlug, y as normalizeStringEntries } from "./thinking-XA7vussX.js";
34
34
  import { n as resolveConversationLabel } from "./conversation-label-BShfMyKA.js";
35
35
  import { t as resolveIMessageAccount } from "./accounts-DImOt9jX.js";
36
36
  import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-DkMamAQ-.js";
37
37
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-C8Tqw4td.js";
38
- import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-ChC2CXaN.js";
39
- import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-DOnOTocl.js";
38
+ import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-BHM4TeU5.js";
39
+ import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-qnqUW4nb.js";
40
40
  import { n as resolveMemorySearchConfig } from "./manager-oiX42wby.js";
41
41
  import { d as listMemoryFiles, f as normalizeExtraMemoryPaths, g as runTasksWithConcurrency } from "./sqlite-BNh23mUR.js";
42
42
  import { n as retryAsync } from "./retry-QGp0jvVi.js";
43
- import { a as createActionGate, c as jsonResult, d as readReactionParams, f as readStringArrayParam, l as parseAvailableTags, m as readStringParam, n as missingTargetError, o as imageResult, p as readStringOrNumberParam, r as unknownTargetError, s as imageResultFromFile, t as ambiguousTargetError, u as readNumberParam } from "./target-errors-BbOqxMY0.js";
44
- import { a as chunkText, c as resolveChunkMode, d as isSafeFenceBreak, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, o as chunkTextWithMode, r as chunkMarkdownText, t as chunkByNewline, u as findFenceSpanAt } from "./chunk-DTMTDXwE.js";
43
+ import { a as createActionGate, c as jsonResult, d as readReactionParams, f as readStringArrayParam, l as parseAvailableTags, m as readStringParam, n as missingTargetError, o as imageResult, p as readStringOrNumberParam, r as unknownTargetError, s as imageResultFromFile, t as ambiguousTargetError, u as readNumberParam } from "./target-errors-LR7w6--g.js";
44
+ import { a as chunkText, c as resolveChunkMode, d as isSafeFenceBreak, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, o as chunkTextWithMode, r as chunkMarkdownText, t as chunkByNewline, u as findFenceSpanAt } from "./chunk-rw3-yl6B.js";
45
45
  import { n as resolveMarkdownTableMode } from "./markdown-tables-DawaaZEe.js";
46
46
  import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-BheTNyes.js";
47
- import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, t as getAgentScopedMediaLocalRoots } from "./local-roots-CC8jiKDk.js";
48
- import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-F0moAwIl.js";
49
- import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-Copoizgv.js";
50
- import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-DWcJOIzP.js";
47
+ import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, t as getAgentScopedMediaLocalRoots } from "./local-roots-BDORNz_Q.js";
48
+ import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-DPLo2LIn.js";
49
+ import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-UwWpNkQg.js";
50
+ import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-Bc-ztbDr.js";
51
51
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-QOi5vzUt.js";
52
- import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-uDZlTCm2.js";
52
+ import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-t-wbbvf-.js";
53
53
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-DtLn7YU3.js";
54
54
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-DtXYsHEc.js";
55
55
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-D9q-fIPB.js";
56
56
  import { n as normalizePollInput } from "./polls-DQcEziPg.js";
57
- import { t as convertMarkdownTables } from "./tables-COnZ169v.js";
58
- import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-D16XtYvC.js";
59
- import { a as formatIMessageChatTarget, c as parseIMessageTarget, i as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, o as isAllowedIMessageSender, r as createIMessageRpcClient, s as normalizeIMessageHandle, t as sendMessageIMessage } from "./send-Do-0Kcmv.js";
57
+ import { t as convertMarkdownTables } from "./tables-dfFTl4Oa.js";
58
+ import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-bTMPppyJ.js";
59
+ import { a as formatIMessageChatTarget, c as parseIMessageTarget, i as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, o as isAllowedIMessageSender, r as createIMessageRpcClient, s as normalizeIMessageHandle, t as sendMessageIMessage } from "./send-DmlK72uJ.js";
60
60
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-We7ViAbg.js";
61
61
  import { t as makeProxyFetch } from "./proxy-BaSHbVlA.js";
62
- import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-DqdOBkTB.js";
62
+ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-ConxSQu4.js";
63
63
  import { t as getActiveWebListener } from "./active-listener-1krIj9TM.js";
64
64
  import { createRequire } from "node:module";
65
65
  import * as path$1 from "node:path";
@@ -79,7 +79,7 @@ import { EdgeTTS } from "node-edge-tts";
79
79
  import AjvPkg from "ajv";
80
80
  import { createServer } from "node:http";
81
81
  import { ProxyAgent, fetch as fetch$1 } from "undici";
82
- import WebSocket$1, { WebSocket } from "ws";
82
+ import WebSocket, { WebSocket as WebSocket$1 } from "ws";
83
83
  import { Buffer as Buffer$1 } from "node:buffer";
84
84
  import { createJiti } from "jiti";
85
85
  import { Type } from "@sinclair/typebox";
@@ -100,101 +100,6 @@ import { run, sequentialize } from "@grammyjs/runner";
100
100
  import { apiThrottler } from "@grammyjs/transformer-throttler";
101
101
  import { EventEmitter } from "node:events";
102
102
 
103
- //#region src/auto-reply/heartbeat.ts
104
- const HEARTBEAT_PROMPT = "Read SYMIPULSE.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply SYMIPULSE_OK.";
105
- const DEFAULT_HEARTBEAT_ACK_MAX_CHARS = 300;
106
- function resolveHeartbeatPrompt(raw) {
107
- return (typeof raw === "string" ? raw.trim() : "") || HEARTBEAT_PROMPT;
108
- }
109
- function stripTokenAtEdges(raw) {
110
- let text = raw.trim();
111
- if (!text) return {
112
- text: "",
113
- didStrip: false
114
- };
115
- const token = SYMIPULSE_TOKEN;
116
- const tokenAtEndWithOptionalTrailingPunctuation = new RegExp(`${escapeRegExp(token)}[^\\w]{0,4}$`);
117
- if (!text.includes(token)) return {
118
- text,
119
- didStrip: false
120
- };
121
- let didStrip = false;
122
- let changed = true;
123
- while (changed) {
124
- changed = false;
125
- const next = text.trim();
126
- if (next.startsWith(token)) {
127
- text = next.slice(token.length).trimStart();
128
- didStrip = true;
129
- changed = true;
130
- continue;
131
- }
132
- if (tokenAtEndWithOptionalTrailingPunctuation.test(next)) {
133
- const idx = next.lastIndexOf(token);
134
- const before = next.slice(0, idx).trimEnd();
135
- if (!before) text = "";
136
- else text = `${before}${next.slice(idx + token.length).trimStart()}`.trimEnd();
137
- didStrip = true;
138
- changed = true;
139
- }
140
- }
141
- return {
142
- text: text.replace(/\s+/g, " ").trim(),
143
- didStrip
144
- };
145
- }
146
- function stripHeartbeatToken(raw, opts = {}) {
147
- if (!raw) return {
148
- shouldSkip: true,
149
- text: "",
150
- didStrip: false
151
- };
152
- const trimmed = raw.trim();
153
- if (!trimmed) return {
154
- shouldSkip: true,
155
- text: "",
156
- didStrip: false
157
- };
158
- const mode = opts.mode ?? "message";
159
- const maxAckCharsRaw = opts.maxAckChars;
160
- const parsedAckChars = typeof maxAckCharsRaw === "string" ? Number(maxAckCharsRaw) : maxAckCharsRaw;
161
- const maxAckChars = Math.max(0, typeof parsedAckChars === "number" && Number.isFinite(parsedAckChars) ? parsedAckChars : DEFAULT_HEARTBEAT_ACK_MAX_CHARS);
162
- const stripMarkup = (text) => text.replace(/<[^>]*>/g, " ").replace(/&nbsp;/gi, " ").replace(/^[*`~_]+/, "").replace(/[*`~_]+$/, "");
163
- const trimmedNormalized = stripMarkup(trimmed);
164
- if (!(trimmed.includes(SYMIPULSE_TOKEN) || trimmedNormalized.includes(SYMIPULSE_TOKEN))) return {
165
- shouldSkip: false,
166
- text: trimmed,
167
- didStrip: false
168
- };
169
- const strippedOriginal = stripTokenAtEdges(trimmed);
170
- const strippedNormalized = stripTokenAtEdges(trimmedNormalized);
171
- const picked = strippedOriginal.didStrip && strippedOriginal.text ? strippedOriginal : strippedNormalized;
172
- if (!picked.didStrip) return {
173
- shouldSkip: false,
174
- text: trimmed,
175
- didStrip: false
176
- };
177
- if (!picked.text) return {
178
- shouldSkip: true,
179
- text: "",
180
- didStrip: true
181
- };
182
- const rest = picked.text.trim();
183
- if (mode === "heartbeat") {
184
- if (rest.length <= maxAckChars) return {
185
- shouldSkip: true,
186
- text: "",
187
- didStrip: true
188
- };
189
- }
190
- return {
191
- shouldSkip: false,
192
- text: rest,
193
- didStrip: true
194
- };
195
- }
196
-
197
- //#endregion
198
103
  //#region src/channels/allowlist-match.ts
199
104
  function formatAllowlistMatchMeta(match) {
200
105
  return `matchKey=${match?.matchKey ?? "none"} matchSource=${match?.matchSource ?? "none"}`;
@@ -5713,7 +5618,7 @@ var GatewayClient = class {
5713
5618
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
5714
5619
  });
5715
5620
  }
5716
- this.ws = new WebSocket(url, wsOptions);
5621
+ this.ws = new WebSocket$1(url, wsOptions);
5717
5622
  this.ws.on("open", () => {
5718
5623
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
5719
5624
  const tlsError = this.validateTlsFingerprint();
@@ -5932,7 +5837,7 @@ var GatewayClient = class {
5932
5837
  return null;
5933
5838
  }
5934
5839
  async request(method, params, opts) {
5935
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
5840
+ if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
5936
5841
  const id = randomUUID();
5937
5842
  const frame = {
5938
5843
  type: "req",
@@ -7198,7 +7103,7 @@ async function routeReply(params) {
7198
7103
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
7199
7104
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
7200
7105
  try {
7201
- const { deliverOutboundPayloads } = await import("./deliver-CZF9f8aC.js").then((n) => n.n);
7106
+ const { deliverOutboundPayloads } = await import("./deliver-jK_qcWx-.js").then((n) => n.n);
7202
7107
  return {
7203
7108
  ok: true,
7204
7109
  messageId: (await deliverOutboundPayloads({
@@ -12433,7 +12338,7 @@ const MODEL_CACHE = /* @__PURE__ */ new Map();
12433
12338
  await ensureSymiModelsJson(cfg);
12434
12339
  } catch {}
12435
12340
  try {
12436
- const { discoverAuthStorage, discoverModels } = await import("./pi-model-discovery-j5tVLINv.js").then((n) => n.r);
12341
+ const { discoverAuthStorage, discoverModels } = await import("./pi-model-discovery-DaNAekda.js").then((n) => n.r);
12437
12342
  const agentDir = resolveSymiAgentDir();
12438
12343
  const modelRegistry = discoverModels(discoverAuthStorage(agentDir), agentDir);
12439
12344
  applyDiscoveredContextWindows({
@@ -41571,7 +41476,7 @@ async function deliverSessionMaintenanceWarning(params) {
41571
41476
  return;
41572
41477
  }
41573
41478
  try {
41574
- const { deliverOutboundPayloads } = await import("./deliver-CZF9f8aC.js").then((n) => n.n);
41479
+ const { deliverOutboundPayloads } = await import("./deliver-jK_qcWx-.js").then((n) => n.n);
41575
41480
  await deliverOutboundPayloads({
41576
41481
  cfg: params.cfg,
41577
41482
  channel,
@@ -45014,7 +44919,7 @@ async function describeStickerImage(params) {
45014
44919
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
45015
44920
  try {
45016
44921
  const buffer = await fs$1.readFile(imagePath);
45017
- const { describeImageWithModel } = await import("./image-DOnOTocl.js").then((n) => n.n);
44922
+ const { describeImageWithModel } = await import("./image-qnqUW4nb.js").then((n) => n.n);
45018
44923
  return (await describeImageWithModel({
45019
44924
  buffer,
45020
44925
  fileName: "sticker.webp",
@@ -47475,7 +47380,7 @@ async function preflightDiscordMessage(params) {
47475
47380
  let preflightTranscript;
47476
47381
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
47477
47382
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
47478
- const { transcribeFirstAudio } = await import("./audio-preflight-Cq4C-m27.js");
47383
+ const { transcribeFirstAudio } = await import("./audio-preflight-B6L8N6Ly.js");
47479
47384
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
47480
47385
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
47481
47386
  ctx: {
@@ -51481,27 +51386,27 @@ function isVoiceChannelType(type) {
51481
51386
  function createDefaultDeps() {
51482
51387
  return {
51483
51388
  sendMessageWhatsApp: async (...args) => {
51484
- const { sendMessageWhatsApp } = await import("./web-07aQbQrq.js");
51389
+ const { sendMessageWhatsApp } = await import("./web-cJUlI_Wb.js");
51485
51390
  return await sendMessageWhatsApp(...args);
51486
51391
  },
51487
51392
  sendMessageTelegram: async (...args) => {
51488
- const { sendMessageTelegram } = await import("./send-mi3NHnwI.js").then((n) => n.l);
51393
+ const { sendMessageTelegram } = await import("./send-DBTO2dLX.js").then((n) => n.l);
51489
51394
  return await sendMessageTelegram(...args);
51490
51395
  },
51491
51396
  sendMessageDiscord: async (...args) => {
51492
- const { sendMessageDiscord } = await import("./send-De_WCeGZ.js").then((n) => n.t);
51397
+ const { sendMessageDiscord } = await import("./send-DDt3Bdxx.js").then((n) => n.t);
51493
51398
  return await sendMessageDiscord(...args);
51494
51399
  },
51495
51400
  sendMessageSlack: async (...args) => {
51496
- const { sendMessageSlack } = await import("./send-D0dzPf6g.js").then((n) => n.n);
51401
+ const { sendMessageSlack } = await import("./send-TQWniAsM.js").then((n) => n.n);
51497
51402
  return await sendMessageSlack(...args);
51498
51403
  },
51499
51404
  sendMessageSignal: async (...args) => {
51500
- const { sendMessageSignal } = await import("./send-D16XtYvC.js").then((n) => n.i);
51405
+ const { sendMessageSignal } = await import("./send-bTMPppyJ.js").then((n) => n.i);
51501
51406
  return await sendMessageSignal(...args);
51502
51407
  },
51503
51408
  sendMessageIMessage: async (...args) => {
51504
- const { sendMessageIMessage } = await import("./send-Do-0Kcmv.js").then((n) => n.n);
51409
+ const { sendMessageIMessage } = await import("./send-DmlK72uJ.js").then((n) => n.n);
51505
51410
  return await sendMessageIMessage(...args);
51506
51411
  }
51507
51412
  };
@@ -54385,7 +54290,7 @@ function createDiscordGatewayPlugin(params) {
54385
54290
  super(options);
54386
54291
  }
54387
54292
  createWebSocket(url) {
54388
- return new WebSocket$1(url, { agent });
54293
+ return new WebSocket(url, { agent });
54389
54294
  }
54390
54295
  }
54391
54296
  return new ProxyGatewayPlugin();
@@ -61927,7 +61832,7 @@ function readSlackExternalArgMenuToken(raw) {
61927
61832
  }
61928
61833
  let commandsRegistry;
61929
61834
  async function getCommandsRegistry() {
61930
- if (!commandsRegistry) commandsRegistry = await import("./commands-registry-Copoizgv.js").then((n) => n.n);
61835
+ if (!commandsRegistry) commandsRegistry = await import("./commands-registry-UwWpNkQg.js").then((n) => n.n);
61931
61836
  return commandsRegistry;
61932
61837
  }
61933
61838
  function encodeSlackCommandArgValue(parts) {
@@ -62330,8 +62235,8 @@ async function registerSlackMonitorSlashCommands(params) {
62330
62235
  });
62331
62236
  const deliverSlashPayloads = async (replies) => {
62332
62237
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
62333
- import("./replies-DqdOBkTB.js").then((n) => n.r),
62334
- import("./chunk-DTMTDXwE.js").then((n) => n.s),
62238
+ import("./replies-ConxSQu4.js").then((n) => n.r),
62239
+ import("./chunk-rw3-yl6B.js").then((n) => n.s),
62335
62240
  import("./markdown-tables-DawaaZEe.js").then((n) => n.t)
62336
62241
  ]);
62337
62242
  await deliverSlackSlashReplies({
@@ -62385,7 +62290,7 @@ async function registerSlackMonitorSlashCommands(params) {
62385
62290
  let nativeCommands = [];
62386
62291
  if (nativeEnabled) {
62387
62292
  reg = await getCommandsRegistry();
62388
- const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-DWcJOIzP.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
62293
+ const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-Bc-ztbDr.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
62389
62294
  nativeCommands = reg.listNativeCommandSpecsForConfig(cfg, {
62390
62295
  skillCommands,
62391
62296
  provider: "slack"
@@ -64603,7 +64508,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
64603
64508
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
64604
64509
  let preflightTranscript;
64605
64510
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
64606
- const { transcribeFirstAudio } = await import("./audio-preflight-Cq4C-m27.js");
64511
+ const { transcribeFirstAudio } = await import("./audio-preflight-B6L8N6Ly.js");
64607
64512
  preflightTranscript = await transcribeFirstAudio({
64608
64513
  ctx: {
64609
64514
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -66748,7 +66653,7 @@ let webLoginQrPromise = null;
66748
66653
  let webChannelPromise = null;
66749
66654
  let whatsappActionsPromise = null;
66750
66655
  function loadWebOutbound() {
66751
- webOutboundPromise ??= import("./outbound-BNMysnJ1.js").then((n) => n.t);
66656
+ webOutboundPromise ??= import("./outbound-ByC0HdWz.js").then((n) => n.t);
66752
66657
  return webOutboundPromise;
66753
66658
  }
66754
66659
  function loadWebLogin() {
@@ -66760,11 +66665,11 @@ function loadWebLoginQr() {
66760
66665
  return webLoginQrPromise;
66761
66666
  }
66762
66667
  function loadWebChannel() {
66763
- webChannelPromise ??= import("./web-07aQbQrq.js");
66668
+ webChannelPromise ??= import("./web-cJUlI_Wb.js");
66764
66669
  return webChannelPromise;
66765
66670
  }
66766
66671
  function loadWhatsAppActions() {
66767
- whatsappActionsPromise ??= import("./whatsapp-actions-BIjGyW3T.js");
66672
+ whatsappActionsPromise ??= import("./whatsapp-actions-CUczC854.js");
66768
66673
  return whatsappActionsPromise;
66769
66674
  }
66770
66675
  function createPluginRuntime() {
@@ -68042,7 +67947,7 @@ function shouldEmitLoopWarning(state, warningKey, count) {
68042
67947
  async function recordLoopOutcome(args) {
68043
67948
  if (!args.ctx?.sessionKey) return;
68044
67949
  try {
68045
- const { getDiagnosticSessionState } = await import("./diagnostic-session-state-C1vRJs5w.js").then((n) => n.n);
67950
+ const { getDiagnosticSessionState } = await import("./diagnostic-session-state-Bu3E4Enn.js").then((n) => n.n);
68046
67951
  const { recordToolCallOutcome } = await import("./tool-loop-detection-BgbtzUGc.js");
68047
67952
  recordToolCallOutcome(getDiagnosticSessionState({
68048
67953
  sessionKey: args.ctx.sessionKey,
@@ -68063,8 +67968,8 @@ async function runBeforeToolCallHook(args) {
68063
67968
  const toolName = normalizeToolName(args.toolName || "tool");
68064
67969
  const params = args.params;
68065
67970
  if (args.ctx?.sessionKey) {
68066
- const { getDiagnosticSessionState } = await import("./diagnostic-session-state-C1vRJs5w.js").then((n) => n.n);
68067
- const { logToolLoopAction } = await import("./diagnostic-D0xmLpej.js").then((n) => n.n);
67971
+ const { getDiagnosticSessionState } = await import("./diagnostic-session-state-Bu3E4Enn.js").then((n) => n.n);
67972
+ const { logToolLoopAction } = await import("./diagnostic-C-7DW8ZL.js").then((n) => n.n);
68068
67973
  const { detectToolCallLoop, recordToolCall } = await import("./tool-loop-detection-BgbtzUGc.js");
68069
67974
  const sessionState = getDiagnosticSessionState({
68070
67975
  sessionKey: args.ctx.sessionKey,
@@ -74587,6 +74492,152 @@ function subscribeEmbeddedPiSession(params) {
74587
74492
  };
74588
74493
  }
74589
74494
 
74495
+ //#endregion
74496
+ //#region src/agents/plan-mode.ts
74497
+ /**
74498
+ * Plan Mode — automatic complexity detection and structured planning.
74499
+ *
74500
+ * When a user message is complex (multi-step, multi-file, refactoring, etc.),
74501
+ * Symi auto-enters plan mode: read-only investigation → structured plan →
74502
+ * user approval → context-cleared execution.
74503
+ */
74504
+ const PLAN_KEYWORDS = new Set([
74505
+ "investigate",
74506
+ "refactor",
74507
+ "migrate",
74508
+ "redesign",
74509
+ "set up",
74510
+ "setup",
74511
+ "build",
74512
+ "implement",
74513
+ "architect",
74514
+ "overhaul",
74515
+ "restructure",
74516
+ "rewrite"
74517
+ ]);
74518
+ const ANALYSIS_KEYWORDS = new Set([
74519
+ "analyze",
74520
+ "analyse",
74521
+ "compare",
74522
+ "audit",
74523
+ "review",
74524
+ "evaluate",
74525
+ "assess"
74526
+ ]);
74527
+ const SEQUENTIAL_MARKERS = [
74528
+ /\bthen\b/i,
74529
+ /\bafter that\b/i,
74530
+ /\bonce .+ is done\b/i,
74531
+ /\bnext,?\s/i,
74532
+ /\bfollowed by\b/i,
74533
+ /\bfinally\b/i
74534
+ ];
74535
+ const NUMBERED_LIST_RE = /^\s*\d+[.)]\s/gm;
74536
+ const FILE_PATH_RE = /(?:\/[\w.-]+){2,}|[\w.-]+\.[a-z]{1,4}/g;
74537
+ /**
74538
+ * Score a user message for complexity.
74539
+ * Returns a numeric score; >= PLAN_MODE_THRESHOLD triggers plan mode.
74540
+ */
74541
+ function scorePlanComplexity(prompt) {
74542
+ let score = 0;
74543
+ const lower = prompt.toLowerCase();
74544
+ if (prompt.length > 500) {
74545
+ if ([...PLAN_KEYWORDS, ...ANALYSIS_KEYWORDS].some((kw) => lower.includes(kw)) || FILE_PATH_RE.test(prompt)) score += 3;
74546
+ }
74547
+ const numberedItems = prompt.match(NUMBERED_LIST_RE);
74548
+ if (numberedItems && numberedItems.length >= 3) score += 2;
74549
+ for (const kw of PLAN_KEYWORDS) if (lower.includes(kw)) {
74550
+ score += 2;
74551
+ break;
74552
+ }
74553
+ for (const re of SEQUENTIAL_MARKERS) if (re.test(prompt)) {
74554
+ score += 2;
74555
+ break;
74556
+ }
74557
+ const filePaths = prompt.match(FILE_PATH_RE);
74558
+ if (filePaths && new Set(filePaths).size >= 2) score += 1;
74559
+ for (const kw of ANALYSIS_KEYWORDS) if (lower.includes(kw)) {
74560
+ score += 1;
74561
+ break;
74562
+ }
74563
+ return score;
74564
+ }
74565
+ const PLAN_MODE_THRESHOLD = 5;
74566
+ /**
74567
+ * Determine whether a prompt should trigger plan mode.
74568
+ *
74569
+ * Priority:
74570
+ * 1. /plan prefix → always
74571
+ * 2. /noplan prefix → never
74572
+ * 3. Subagent/cron sessions → never
74573
+ * 4. Heuristic scoring
74574
+ */
74575
+ function shouldEnterPlanMode(prompt, opts = {}) {
74576
+ const trimmed = prompt.trim();
74577
+ if (/^\/plan\b/i.test(trimmed)) return {
74578
+ enter: true,
74579
+ reason: "explicit /plan directive",
74580
+ score: 99,
74581
+ stripped: trimmed.replace(/^\/plan\s*/i, "").trim()
74582
+ };
74583
+ if (/^\/noplan\b/i.test(trimmed)) return {
74584
+ enter: false,
74585
+ reason: "explicit /noplan directive",
74586
+ score: 0,
74587
+ stripped: trimmed.replace(/^\/noplan\s*/i, "").trim()
74588
+ };
74589
+ if (opts.isSubagent) return {
74590
+ enter: false,
74591
+ reason: "subagent session",
74592
+ score: 0
74593
+ };
74594
+ if (opts.isCron) return {
74595
+ enter: false,
74596
+ reason: "cron session",
74597
+ score: 0
74598
+ };
74599
+ const score = scorePlanComplexity(trimmed);
74600
+ if (score >= PLAN_MODE_THRESHOLD) return {
74601
+ enter: true,
74602
+ reason: `complexity score ${score} >= ${PLAN_MODE_THRESHOLD}`,
74603
+ score
74604
+ };
74605
+ return {
74606
+ enter: false,
74607
+ reason: `complexity score ${score} < ${PLAN_MODE_THRESHOLD}`,
74608
+ score
74609
+ };
74610
+ }
74611
+ const PLAN_MODE_SYSTEM_PROMPT = `<plan_mode>
74612
+ You have entered PLAN MODE because this task is complex.
74613
+
74614
+ RULES:
74615
+ - DO NOT write, edit, or create any files yet
74616
+ - DO NOT execute destructive commands (rm, mv, git reset, etc.)
74617
+ - DO read files, search code, check runtime state
74618
+ - DO use memory_search, web_search, exec (read-only commands like ls, cat, git status, git log)
74619
+ - Produce a detailed step-by-step implementation plan
74620
+
74621
+ OUTPUT FORMAT:
74622
+ 1. **Summary** — what needs to be done and why
74623
+ 2. **Investigation** — files read, code searched, state checked
74624
+ 3. **Files to modify** — list every file that will be created, edited, or deleted
74625
+ 4. **Implementation phases** — numbered steps with:
74626
+ - What changes in each phase
74627
+ - Which files are touched
74628
+ - Dependencies on prior phases
74629
+ 5. **Risks & considerations** — things that could go wrong, edge cases, rollback strategy
74630
+
74631
+ After presenting the plan, ask the user to choose one of these options.
74632
+ Present these as inline buttons if the channel supports them:
74633
+ - **Proceed** — clear context and execute the plan
74634
+ - **Modify** — adjust the plan based on feedback
74635
+ - **Cancel** — abandon the plan
74636
+
74637
+ Use the message tool with buttons:
74638
+ [{"label": "✅ Proceed", "data": "/plan-proceed"}, {"label": "✏️ Modify", "data": "/plan-modify"}, {"label": "❌ Cancel", "data": "/plan-cancel"}]
74639
+ </plan_mode>`;
74640
+
74590
74641
  //#endregion
74591
74642
  //#region src/agents/pi-embedded-runner/abort.ts
74592
74643
  /**
@@ -75840,6 +75891,17 @@ async function runEmbeddedAttempt(params) {
75840
75891
  log$2.debug(`auto-recall: skipped (${String(recallErr)})`);
75841
75892
  }
75842
75893
  }
75894
+ {
75895
+ const planResult = shouldEnterPlanMode(effectivePrompt, {
75896
+ isSubagent: isSubagentSessionKey(params.sessionKey),
75897
+ isCron: isCronSessionKey(params.sessionKey)
75898
+ });
75899
+ if (planResult.enter) {
75900
+ if (planResult.stripped != null) effectivePrompt = planResult.stripped;
75901
+ effectivePrompt = `${PLAN_MODE_SYSTEM_PROMPT}\n\n${effectivePrompt}`;
75902
+ log$2.info(`plan-mode: activated (${planResult.reason}) for runId=${params.runId}`);
75903
+ } else if (planResult.stripped != null) effectivePrompt = planResult.stripped;
75904
+ }
75843
75905
  log$2.debug(`embedded run prompt start: runId=${params.runId} sessionId=${params.sessionId}`);
75844
75906
  cacheTrace?.recordStage("prompt:before", {
75845
75907
  prompt: effectivePrompt,