@symerian/symi 2.8.17 → 2.9.1

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 (356) hide show
  1. package/dist/{acp-cli-Bav1bRj2.js → acp-cli-BNM6b6XY.js} +2 -2
  2. package/dist/{acp-cli-BTu3_kZ1.js → acp-cli-DXsJS3-G.js} +2 -2
  3. package/dist/{agents-9cAyC5ED.js → agents-FNeM-byc.js} +7 -7
  4. package/dist/{agents.config-DuwhYjpi.js → agents.config-CjML1ogJ.js} +1 -1
  5. package/dist/{agents.config-Cu9zTq04.js → agents.config-DUYDFbfP.js} +1 -1
  6. package/dist/{audio-preflight-C6vpFnOG.js → audio-preflight-CMutcMs5.js} +5 -5
  7. package/dist/{audio-preflight-C2EgDXSo.js → audio-preflight-CwbuWmdG.js} +11 -11
  8. package/dist/{audio-preflight-rjCWpcfE.js → audio-preflight-DlO0Hw-w.js} +5 -5
  9. package/dist/{audio-preflight-1dv3T5Zx.js → audio-preflight-SaT5IcVn.js} +11 -11
  10. package/dist/{audit-C9nq99IR.js → audit-Ojap-R-Y.js} +5 -5
  11. package/dist/{audit-CuKP86d_.js → audit-qWCLpveM.js} +5 -5
  12. package/dist/{auth-choice-DeNzlUAR.js → auth-choice-BjTiWmH-.js} +4 -4
  13. package/dist/{auth-choice-CPqyqc93.js → auth-choice-RQ5keocP.js} +4 -4
  14. package/dist/{banner-S1NGA6-s.js → banner-dYiFXA70.js} +1 -1
  15. package/dist/{browser-cli-ClgQ-C8E.js → browser-cli-BQ9jHIXP.js} +3 -3
  16. package/dist/{browser-cli-DuPPIcuV.js → browser-cli-BW0C5Y8-.js} +3 -3
  17. package/dist/build-info.json +3 -3
  18. package/dist/bundled/boot-md/handler.js +14 -14
  19. package/dist/bundled/session-memory/handler.js +14 -14
  20. package/dist/{call-DYfKEdwh.js → call-BZbBLMOq.js} +1 -1
  21. package/dist/{call-M4YyUnwu.js → call-X_vwo309.js} +1 -1
  22. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  23. package/dist/{channel-options-C0v4BJgp.js → channel-options-CjZlTumK.js} +1 -1
  24. package/dist/{channel-options-C6y7Khvq.js → channel-options-DqXYA7rM.js} +1 -1
  25. package/dist/{channel-web-DirOFV_n.js → channel-web-BITaNjFT.js} +7 -7
  26. package/dist/{channels-cli-BhNHckMo.js → channels-cli-7cDtM5kW.js} +30 -30
  27. package/dist/{channels-cli-By_SbriI.js → channels-cli-C8CesA1x.js} +31 -31
  28. package/dist/{chrome-C08Z0XAa.js → chrome-B1zznUiv.js} +1 -1
  29. package/dist/{chrome-BJvuH-NZ.js → chrome-BFDOGeu3.js} +1 -1
  30. package/dist/{chrome-D2ohnA09.js → chrome-faqXQ9f1.js} +1 -1
  31. package/dist/{chrome-B14NNyfm.js → chrome-t-stBgN6.js} +1 -1
  32. package/dist/cli/daemon-cli.js +1 -1
  33. package/dist/{cli-B1QQv1cb.js → cli-BJ9_X9eE.js} +27 -27
  34. package/dist/{cli-Bx4RQCuK.js → cli-ZC_92Xyn.js} +26 -26
  35. package/dist/{command-registry-uMOPbrbY.js → command-registry-B1ltIC7z.js} +11 -11
  36. package/dist/{completion-cli-DVD79pVj.js → completion-cli-KSs4eFcq.js} +1 -1
  37. package/dist/{completion-cli-B6s_3rEE.js → completion-cli-_P0e-rhC.js} +2 -2
  38. package/dist/{config-BkZ9HOKT.js → config-BXMAsmut.js} +2 -0
  39. package/dist/{config-PXAJCHa5.js → config-BYCtuYPj.js} +2 -0
  40. package/dist/{config-BAVNLbja.js → config-CbBZUq-Q.js} +2 -0
  41. package/dist/{config-DXt3pc08.js → config-DE6JXMtt.js} +2 -0
  42. package/dist/{config-cli-DzudcNAD.js → config-cli-DIrPShKH.js} +2 -2
  43. package/dist/{config-cli-DCGgd-ZL.js → config-cli-DjCKp4Pe.js} +2 -2
  44. package/dist/{config-guard-BvqCjFPk.js → config-guard-BrZXdLQw.js} +2 -2
  45. package/dist/{config-guard-CaP-V3tf.js → config-guard-DYmSI51f.js} +3 -3
  46. package/dist/{config-validation-B6Fa3VmF.js → config-validation-CNRgc5vc.js} +1 -1
  47. package/dist/{config-validation-EmHZVnuz.js → config-validation-fdYfdAc3.js} +1 -1
  48. package/dist/{configure-CItWwZwI.js → configure-CsZWO6Nr.js} +10 -10
  49. package/dist/{configure-BybpK_1N.js → configure-Ds8SzTEw.js} +10 -10
  50. package/dist/{control-service-Bujr5pk7.js → control-service-B5HVCnUI.js} +4 -4
  51. package/dist/{control-service-C0pRqIFv.js → control-service-DQX3HXS4.js} +4 -4
  52. package/dist/{cron-cli-C8-Gv5dd.js → cron-cli-CfSmL43G.js} +3 -3
  53. package/dist/{cron-cli-BEdmHCWZ.js → cron-cli-D2L3-4aw.js} +3 -3
  54. package/dist/{daemon-cli-BFoJGCHZ.js → daemon-cli-BHwfgmrQ.js} +6 -6
  55. package/dist/{daemon-cli-D6wyb9bo.js → daemon-cli-D9_xrFGD.js} +6 -6
  56. package/dist/daemon-cli.js +2 -0
  57. package/dist/{daemon-runtime-Cp7obV7Q.js → daemon-runtime-BiZG4Kqi.js} +1 -1
  58. package/dist/{daemon-runtime-D_elkkFW.js → daemon-runtime-DOqm0LLm.js} +1 -1
  59. package/dist/{deliver-D0bWiRCg.js → deliver--ff__Iq0.js} +2 -2
  60. package/dist/{deliver-Bdk_R0pQ.js → deliver-CeNdvQJ3.js} +3 -3
  61. package/dist/{deliver-D7BQXt0l.js → deliver-Cqk3zmyW.js} +3 -3
  62. package/dist/{deliver-qUx-eLKt.js → deliver-nBdNxMIr.js} +2 -2
  63. package/dist/{devices-cli-CHt4I-7e.js → devices-cli-BzyrjuAk.js} +2 -2
  64. package/dist/{devices-cli-BXc6DPkC.js → devices-cli-CEvTb9Vr.js} +2 -2
  65. package/dist/{directory-cli-DRWJsAT6.js → directory-cli-Ds7uESrp.js} +1 -1
  66. package/dist/{directory-cli-CQTzAhw1.js → directory-cli-KZHlp_jk.js} +1 -1
  67. package/dist/{dns-cli-BCKPibb8.js → dns-cli-SNU_PJfw.js} +1 -1
  68. package/dist/{dns-cli-BBVIay6Z.js → dns-cli-e8z7wTzi.js} +1 -1
  69. package/dist/{doctor-completion-Bf6dN4D-.js → doctor-completion-CfGWMYVG.js} +1 -1
  70. package/dist/{doctor-completion-BkwgaO4G.js → doctor-completion-D4bMStWc.js} +1 -1
  71. package/dist/{doctor-config-flow-BCMxS2lf.js → doctor-config-flow-CJ4__c8U.js} +2 -2
  72. package/dist/{doctor-config-flow-B2dVxbL7.js → doctor-config-flow-DHXFFSRu.js} +2 -2
  73. package/dist/entry.js +1 -1
  74. package/dist/{exec-approvals-cli-CKRDAo17.js → exec-approvals-cli-_AbKrXIH.js} +4 -4
  75. package/dist/{exec-approvals-cli-BBKVrFTj.js → exec-approvals-cli-z9Iy8aWD.js} +4 -4
  76. package/dist/extensionAPI.js +14 -14
  77. package/dist/{gateway-cli-7CVmb3cX.js → gateway-cli-B4ElmhPF.js} +116 -72
  78. package/dist/{gateway-cli-eNV6kb1V.js → gateway-cli-CfO9aUt0.js} +117 -73
  79. package/dist/{gateway-rpc-DZrB7Sl_.js → gateway-rpc-BlWORxUe.js} +1 -1
  80. package/dist/{gateway-rpc-BEfosIsg.js → gateway-rpc-D1S1i5HM.js} +1 -1
  81. package/dist/{glass-ui-ws-B4fsBuHx.js → glass-ui-ws-Bhu3COgn.js} +34 -34
  82. package/dist/{glass-ui-ws-i91Ms6ts.js → glass-ui-ws-D1UKJUFI.js} +35 -35
  83. package/dist/{health-dA8r4WJ4.js → health-CCslN1xh.js} +5 -5
  84. package/dist/{health-C4tWTDu_.js → health-CLRDrjsk.js} +5 -5
  85. package/dist/{hooks-cli-uGLWBIcW.js → hooks-cli-BrVLhsJ6.js} +27 -27
  86. package/dist/{hooks-cli-DYn9nXX0.js → hooks-cli-DvLYXNNe.js} +28 -28
  87. package/dist/{image-6RZuWKy5.js → image-B6aY1oY3.js} +2 -2
  88. package/dist/{image-C6rCON9L.js → image-CEdTQp1F.js} +2 -2
  89. package/dist/{image-CnEFsKgw.js → image-Cp6qRPZ2.js} +2 -2
  90. package/dist/{image-MNvheU8U.js → image-D5bsPk2_.js} +2 -2
  91. package/dist/index.js +35 -35
  92. package/dist/{lifecycle-core-v3lT0Ymo.js → lifecycle-core-BUGPz1GT.js} +2 -2
  93. package/dist/{lifecycle-core-Uucs6Wz6.js → lifecycle-core-CcPnnp9c.js} +2 -2
  94. package/dist/llm-slug-generator.js +14 -14
  95. package/dist/{login-EYdkb0dH.js → login-B7OJui4y.js} +2 -2
  96. package/dist/{login-D4rZWBXe.js → login-Cu0fTI3Z.js} +2 -2
  97. package/dist/{login-C7EdfiAr.js → login-DKeZ-sOf.js} +2 -2
  98. package/dist/{login-F4pbdnF5.js → login-DwBazcKM.js} +2 -2
  99. package/dist/{login-qr-Apnag5S6.js → login-qr-BBrzemk7.js} +2 -2
  100. package/dist/{login-qr-BElXRp6T.js → login-qr-CtELJan3.js} +2 -2
  101. package/dist/{login-qr-DdAVHOEC.js → login-qr-DyU6qD2X.js} +2 -2
  102. package/dist/{login-qr-DML5LgsI.js → login-qr-Ft17VIG6.js} +2 -2
  103. package/dist/{logs-cli-N5jQvJTm.js → logs-cli-CvgvoxvI.js} +3 -3
  104. package/dist/{logs-cli-CsHpYc2M.js → logs-cli-Dg6OSEA6.js} +3 -3
  105. package/dist/{manager-CgQo1mIM.js → manager-8N1YbbDk.js} +1 -1
  106. package/dist/{manager-D6E6EGWa.js → manager-CztTHQhN.js} +1 -1
  107. package/dist/{manager-BaSutzfz.js → manager-HASZR70T.js} +1 -1
  108. package/dist/{manager-DhGfNqfc.js → manager-OSWCBsL_.js} +1 -1
  109. package/dist/{memory-cli-BMb31chU.js → memory-cli-BDWdeqta.js} +4 -4
  110. package/dist/{memory-cli-lJe72a5i.js → memory-cli-BmWvHCEJ.js} +4 -4
  111. package/dist/{model-catalog-D7k3dDQq.js → model-catalog-BhW-vn5v.js} +2 -2
  112. package/dist/{model-catalog-BuYrTTBn.js → model-catalog-FckJ4pcL.js} +2 -2
  113. package/dist/{model-picker-BNWV-jU4.js → model-picker-D3ii5sBm.js} +2 -2
  114. package/dist/{model-picker-n7beL1F5.js → model-picker-DEUeht6L.js} +2 -2
  115. package/dist/{models-BITN17gY.js → models-5C-QKF0q.js} +8 -8
  116. package/dist/{models-cli-C6JJWWoI.js → models-cli-B2IebIhR.js} +29 -29
  117. package/dist/{models-cli-CHjxevMe.js → models-cli-BqW-Y1GI.js} +30 -30
  118. package/dist/{models-config-J1x_DaPn.js → models-config-CHVfeRDR.js} +1 -1
  119. package/dist/{models-config-B91ShhoT.js → models-config-DGDMieos.js} +1 -1
  120. package/dist/{node-cli-BD4E-Y8a.js → node-cli-emEb0aRo.js} +9 -9
  121. package/dist/{node-cli-CwnTjFkG.js → node-cli-hAxte5bw.js} +9 -9
  122. package/dist/{nodes-cli-Dv0NXhCO.js → nodes-cli-DQPQqEYN.js} +3 -3
  123. package/dist/{nodes-cli-DUD8_q_Q.js → nodes-cli-yd9KABqj.js} +3 -3
  124. package/dist/{onboard-C8Si08MS.js → onboard-BL7Ei8OA.js} +7 -7
  125. package/dist/{onboard-channels-Cb-bemSg.js → onboard-channels-B-PEQmiI.js} +1 -1
  126. package/dist/{onboard-channels-PQP9wlk8.js → onboard-channels-Do0lkLVV.js} +1 -1
  127. package/dist/{onboard-custom-Dk9cL3Uu.js → onboard-custom-BVMtQfB1.js} +2 -2
  128. package/dist/{onboard-custom-CJGSIPt3.js → onboard-custom-CVA34zSg.js} +2 -2
  129. package/dist/{onboard-helpers-DWDNKmkJ.js → onboard-helpers-CNFdWQIV.js} +2 -2
  130. package/dist/{onboard-helpers-CBxazphs.js → onboard-helpers-O6bxf40E.js} +2 -2
  131. package/dist/{onboard-DdJV-Doq.js → onboard-o5O2Ipvr.js} +7 -7
  132. package/dist/{onboard-remote-cZrkePlK.js → onboard-remote-QMqQxvh7.js} +1 -1
  133. package/dist/{onboard-remote-DoIKLWXA.js → onboard-remote-uYveiXQe.js} +1 -1
  134. package/dist/{onboard-skills-BjGYTueQ.js → onboard-skills-CLb94Ag2.js} +1 -1
  135. package/dist/{onboard-skills-zauvnEui.js → onboard-skills-Du3aWSN3.js} +1 -1
  136. package/dist/{onboarding-QAtuyHtA.js → onboarding-3DwQLO4z.js} +10 -10
  137. package/dist/{onboarding-CAaoPaVQ.js → onboarding-B_F_DbjQ.js} +10 -10
  138. package/dist/{onboarding.finalize-MuO2mvHv.js → onboarding.finalize-BWejCrVi.js} +32 -32
  139. package/dist/{onboarding.finalize-BhlQmJlX.js → onboarding.finalize-D_G6Tcqi.js} +34 -34
  140. package/dist/{onboarding.gateway-config-Dg12RcXA.js → onboarding.gateway-config-D8K7HsWb.js} +4 -4
  141. package/dist/{onboarding.gateway-config-uIRsaxMy.js → onboarding.gateway-config-Dixr8mmH.js} +4 -4
  142. package/dist/{outbound-mG1crIsY.js → outbound-CLCy4Nsg.js} +1 -1
  143. package/dist/{outbound-Zmd7UyQH.js → outbound-DVVulk0E.js} +1 -1
  144. package/dist/{outbound-B5OgOn1h.js → outbound-DlWjA7jN.js} +1 -1
  145. package/dist/{outbound-CW8eNbCh.js → outbound-b9pVFyW7.js} +1 -1
  146. package/dist/{pairing-cli-7X1qlhzF.js → pairing-cli-CchjvjCR.js} +1 -1
  147. package/dist/{pairing-cli-Cl4t3cDV.js → pairing-cli-Cgj6qx8Z.js} +1 -1
  148. package/dist/{pi-embedded-helpers-TcYQOZAY.js → pi-embedded-helpers-BPP4adeW.js} +5 -5
  149. package/dist/{pi-embedded-helpers-YD1JQ5xV.js → pi-embedded-helpers-BgpogTwt.js} +1 -1
  150. package/dist/{pi-embedded-helpers-DHAJW99p.js → pi-embedded-helpers-DK2WpZI8.js} +1 -1
  151. package/dist/{pi-embedded-helpers-P13adotN.js → pi-embedded-helpers-DrAT2ieP.js} +5 -5
  152. package/dist/{pi-embedded-BUYKq7Wv.js → pi-embedded-q_tNOp_h.js} +355 -120
  153. package/dist/{pi-tools.policy-Bx5zp45n.js → pi-tools.policy-BE7fB_Cf.js} +2 -2
  154. package/dist/{pi-tools.policy-o0ytjRqu.js → pi-tools.policy-GxaAKOgf.js} +2 -2
  155. package/dist/{plugin-registry-DEhkDNDx.js → plugin-registry-B_KRAoou.js} +2 -2
  156. package/dist/{plugin-registry-tXiHw0vr.js → plugin-registry-CRIH5Sdf.js} +2 -2
  157. package/dist/plugin-sdk/agents/pi-embedded-runner/system-prompt.d.ts +7 -0
  158. package/dist/plugin-sdk/agents/pi-tools.read-edit-guard.d.ts +5 -0
  159. package/dist/plugin-sdk/agents/pi-tools.read-edit-tracker.d.ts +26 -0
  160. package/dist/plugin-sdk/agents/pi-tools.read.d.ts +11 -0
  161. package/dist/plugin-sdk/agents/system-prompt-skills-autoload.d.ts +21 -0
  162. package/dist/plugin-sdk/{audio-preflight-DucGa8w7.js → audio-preflight-CwMsvdv8.js} +5 -5
  163. package/dist/plugin-sdk/{channel-web-C7aP_KKZ.js → channel-web-CiewzSOW.js} +7 -7
  164. package/dist/plugin-sdk/{chrome-D9kN9org.js → chrome-Cou8jVJ2.js} +1 -1
  165. package/dist/plugin-sdk/config/model-profiles-builtin.d.ts +16 -0
  166. package/dist/plugin-sdk/config/resolve-model-profile.d.ts +9 -1
  167. package/dist/plugin-sdk/config/types.skills.d.ts +8 -0
  168. package/dist/plugin-sdk/config/zod-schema.d.ts +4 -0
  169. package/dist/plugin-sdk/{config-BzupW6LN.js → config-DQntj58u.js} +2 -0
  170. package/dist/plugin-sdk/{deliver-CKgFosI5.js → deliver-OVx3XKTy.js} +2 -2
  171. package/dist/plugin-sdk/{image-DFyINnvE.js → image-ChrcMCo_.js} +2 -2
  172. package/dist/plugin-sdk/index.js +18 -18
  173. package/dist/plugin-sdk/{login-K1YB_7-t.js → login-WuhOM4Dg.js} +2 -2
  174. package/dist/plugin-sdk/{login-qr-lMl_OqDj.js → login-qr-C87Q7LuN.js} +2 -2
  175. package/dist/plugin-sdk/{manager-CvrDwB1Q.js → manager-Yvm-LGVR.js} +1 -1
  176. package/dist/plugin-sdk/{outbound-DW3cqlQW.js → outbound-T0XdUo-H.js} +1 -1
  177. package/dist/plugin-sdk/{pi-embedded-helpers-BL7ZRhGv.js → pi-embedded-helpers-DihvU43r.js} +5 -5
  178. package/dist/plugin-sdk/{pw-ai-B3T0mTHr.js → pw-ai-DUQ9kG2D.js} +2 -2
  179. package/dist/plugin-sdk/{replies-BR2TPTVW.js → replies-DD0EJRXx.js} +1 -1
  180. package/dist/plugin-sdk/{reply-BI7Rf3_S.js → reply-I6ZFg_UE.js} +355 -120
  181. package/dist/plugin-sdk/{runner-BhifC1J_.js → runner-IyZnVyIT.js} +2 -2
  182. package/dist/plugin-sdk/{send-ZhAe1nXO.js → send-Cxr9NnOd.js} +1 -1
  183. package/dist/plugin-sdk/{send-BP5pSPaZ.js → send-Dd71o3sZ.js} +1 -1
  184. package/dist/plugin-sdk/{send-DLO_yV5_.js → send-Do_qdBr_.js} +1 -1
  185. package/dist/plugin-sdk/{send-CGhw9mO3.js → send-DxXXcQ_o.js} +1 -1
  186. package/dist/plugin-sdk/{send-jsofmTfJ.js → send-SRQweHTE.js} +1 -1
  187. package/dist/plugin-sdk/{session-BfyK_04G.js → session-LEZ8u8RX.js} +1 -1
  188. package/dist/plugin-sdk/{synthesis-B3z0Jqt1.js → synthesis-bQ4DMwsj.js} +14 -14
  189. package/dist/plugin-sdk/{web-D2WrY-DI.js → web-C3YuHiih.js} +18 -18
  190. package/dist/plugin-sdk/{whatsapp-actions-eTefsWhW.js → whatsapp-actions-ClWxTG5S.js} +2 -2
  191. package/dist/{plugins-cli-D1vPxTOQ.js → plugins-cli-Co9cRpLe.js} +27 -27
  192. package/dist/{plugins-cli-ByG6o7D2.js → plugins-cli-MDYiXsRL.js} +28 -28
  193. package/dist/{program-Q44fKoq6.js → program-BWqVPm5t.js} +34 -34
  194. package/dist/{program-context-C3QEc34t.js → program-context-m9C36Cuq.js} +38 -38
  195. package/dist/{prompt-select-styled-DBVeLysq.js → prompt-select-styled-BKJVEVPk.js} +15 -15
  196. package/dist/{prompt-select-styled-BSZrZcW2.js → prompt-select-styled-DzjQVaDM.js} +15 -15
  197. package/dist/{provider-auth-helpers-Bm4cf-Ms.js → provider-auth-helpers-DYJ-0sNe.js} +2 -2
  198. package/dist/{provider-auth-helpers-rH91VXG-.js → provider-auth-helpers-DaTqy1aA.js} +2 -2
  199. package/dist/{push-apns-CRD9IH1s.js → push-apns-DdQlLTpV.js} +1 -1
  200. package/dist/{push-apns-Cj10sUbK.js → push-apns-_aeFBwsP.js} +1 -1
  201. package/dist/{pw-ai-CeWN4iD9.js → pw-ai-Bpp0J0PM.js} +2 -2
  202. package/dist/{pw-ai-DYZonrPL.js → pw-ai-D9ZuX3U6.js} +2 -2
  203. package/dist/{pw-ai-D9fCYPe7.js → pw-ai-DSmC8YuO.js} +2 -2
  204. package/dist/{pw-ai-40Jf9QIb.js → pw-ai-XSTIQILG.js} +2 -2
  205. package/dist/{qr-cli-CCWM_3Nb.js → qr-cli-Dq9G8FPl.js} +1 -1
  206. package/dist/{qr-cli-6eVyM6ek.js → qr-cli-DtHLOD1G.js} +1 -1
  207. package/dist/{register.agent-Dfu85lRL.js → register.agent-Hi0PN67T.js} +35 -35
  208. package/dist/{register.agent-DGDnsvVd.js → register.agent-RNTVF_Nk.js} +33 -33
  209. package/dist/{register.configure-BcdyiQui.js → register.configure-DE2Fg1dO.js} +38 -38
  210. package/dist/{register.configure-FCTbPCwe.js → register.configure-Dp-F_KKy.js} +37 -37
  211. package/dist/{register.maintenance-Y8P9AnLe.js → register.maintenance-Bbd-g7nL.js} +37 -37
  212. package/dist/{register.maintenance-DvDwpW6B.js → register.maintenance-QHRRhtsg.js} +35 -35
  213. package/dist/{register.message-mTqwOntI.js → register.message-B5uWOXev.js} +27 -27
  214. package/dist/{register.message-C57ubt4f.js → register.message-BvutRi1a.js} +28 -28
  215. package/dist/{register.onboard-MIChlygg.js → register.onboard-CNOh527M.js} +34 -34
  216. package/dist/{register.onboard-YCmMzAW-.js → register.onboard-DRHuoRTm.js} +33 -33
  217. package/dist/{register.setup-DzUZ2x6y.js → register.setup-Cj0oOZqL.js} +33 -33
  218. package/dist/{register.setup-sQeN5xag.js → register.setup-D1ePW7dl.js} +34 -34
  219. package/dist/{register.status-health-sessions-DsptpS7K.js → register.status-health-sessions-DfyO7JaH.js} +30 -30
  220. package/dist/{register.status-health-sessions-DaPK2tow.js → register.status-health-sessions-sf1XzcPo.js} +32 -32
  221. package/dist/{register.subclis-17z5d7uO.js → register.subclis-Do_HdpUT.js} +28 -28
  222. package/dist/{replies-D0NFBbd-.js → replies-BV7oFP7Z.js} +1 -1
  223. package/dist/{replies-Sxbew659.js → replies-BxvfG7Oj.js} +1 -1
  224. package/dist/{replies-CZH45dMt.js → replies-CPhYC11m.js} +1 -1
  225. package/dist/{replies-CUWXgyx2.js → replies-IkylJ7lX.js} +1 -1
  226. package/dist/{reply-2awhibgG.js → reply-DEub7xci.js} +364 -129
  227. package/dist/{routes-wmFRpLa9.js → routes-Evl8vnTV.js} +3 -3
  228. package/dist/{routes-c86p9MPH.js → routes-n7RUgOOW.js} +3 -3
  229. package/dist/{rpc-BKlQ97aZ.js → rpc-3T_LjHn1.js} +1 -1
  230. package/dist/{rpc-DC4ol5Xa.js → rpc-DeJsMHDF.js} +1 -1
  231. package/dist/{run-main-CfVO6DFS.js → run-main-B_ZLo4JR.js} +45 -45
  232. package/dist/{runner-BBYms6g4.js → runner-BX-ap4VU.js} +3 -3
  233. package/dist/{runner-DFuAePEr.js → runner-B_6xBcPB.js} +2 -2
  234. package/dist/{runner-D633VT13.js → runner-CMvsDzah.js} +2 -2
  235. package/dist/{runner-Cbz8g76d.js → runner-CiThXXY3.js} +3 -3
  236. package/dist/{sandbox-CCHQuSja.js → sandbox-BQ5LAIBQ.js} +5 -5
  237. package/dist/{sandbox-WWVXeHlA.js → sandbox-T9SO3y3b.js} +5 -5
  238. package/dist/{sandbox-cli-BtGgnGrs.js → sandbox-cli-Bi8lblc6.js} +6 -6
  239. package/dist/{sandbox-cli-momxce7H.js → sandbox-cli-MZJX1Ht6.js} +6 -6
  240. package/dist/{security-cli-BfiJ3e0Y.js → security-cli-AZBZs6ww.js} +9 -9
  241. package/dist/{security-cli-CIB7kqEk.js → security-cli-txjMZzBx.js} +9 -9
  242. package/dist/{send-DvbOiJ-I.js → send-BPBFuPrC.js} +1 -1
  243. package/dist/{send-SF7x1UHb.js → send-BUBES34Y.js} +1 -1
  244. package/dist/{send-DpMnSIi5.js → send-BaSqjfd_.js} +1 -1
  245. package/dist/{send-Dz656vcm.js → send-Bi8XhwOZ.js} +1 -1
  246. package/dist/{send-Bb4it0te.js → send-BtbWvw2k.js} +1 -1
  247. package/dist/{send-DFtnbzqy.js → send-C4IU_tV3.js} +1 -1
  248. package/dist/{send-Iocbaltq.js → send-C6-rN_Li.js} +1 -1
  249. package/dist/{send-5GrSqB6v.js → send-CSkNKYIc.js} +1 -1
  250. package/dist/{send-BaFD3lZ7.js → send-CcD9S5so.js} +1 -1
  251. package/dist/{send-DLVrnezL.js → send-CfejAK2u.js} +1 -1
  252. package/dist/{send-CJJuN-Fg.js → send-CoSPwGiI.js} +1 -1
  253. package/dist/{send-9sVK0zP4.js → send-CupfdYEg.js} +1 -1
  254. package/dist/{send-BKo1T3HF.js → send-CyPj_MLV.js} +1 -1
  255. package/dist/{send-COVVt64P.js → send-DNqcjLyg.js} +1 -1
  256. package/dist/{send-C0QjmPaf.js → send-DlYO3ExM.js} +1 -1
  257. package/dist/{send-Cpk3Ti6-.js → send-Dn1Pirhx.js} +1 -1
  258. package/dist/{send-B5kAnKqP.js → send-_CmB6CKB.js} +1 -1
  259. package/dist/{send-DGbBPbV0.js → send-dohExhb8.js} +1 -1
  260. package/dist/{send-BqOhAhRS.js → send-llekTUks.js} +1 -1
  261. package/dist/{send-BaBv1rAU.js → send-vmIzYMwN.js} +1 -1
  262. package/dist/{server-context-C66bI8ZM.js → server-context-BkYSrDni.js} +5 -5
  263. package/dist/{server-context-DefCxQsB.js → server-context-CGMSzPWd.js} +5 -5
  264. package/dist/{server-methods-D_g3GJhv.js → server-methods-C-itThFa.js} +17 -17
  265. package/dist/{server-methods-Bdgs89ve.js → server-methods-P-ayY-6k.js} +16 -16
  266. package/dist/{server-node-events-Cvgmf8fS.js → server-node-events-D5ee96aZ.js} +27 -27
  267. package/dist/{server-node-events-BZN3RZ8H.js → server-node-events-tvNFkev2.js} +28 -28
  268. package/dist/{session-mFiujXaP.js → session-CMploMg7.js} +1 -1
  269. package/dist/{session-BTeY6Gn2.js → session-CifmyF9K.js} +1 -1
  270. package/dist/{session-BtL_LuWh.js → session-DQimwuIx.js} +1 -1
  271. package/dist/{session-BpaF8fzk.js → session-bvybh7vL.js} +1 -1
  272. package/dist/{session-utils-DaBIs243.js → session-utils-DQ-t0PxQ.js} +3 -3
  273. package/dist/{sessions-B2KSRtKQ.js → sessions-BIsirZy0.js} +3 -3
  274. package/dist/{sessions-BeYHj0gr.js → sessions-BKn2DFYs.js} +1 -1
  275. package/dist/{sessions-BPD85pWA.js → sessions-DCr5nAOw.js} +1 -1
  276. package/dist/{shared-PtB96PLH.js → shared-F4GNd-mC.js} +1 -1
  277. package/dist/{shared-C9vLT1Vj.js → shared-iaXjUnvo.js} +1 -1
  278. package/dist/{skills-cli-dTks7st0.js → skills-cli-BX1J5GLJ.js} +1 -1
  279. package/dist/{skills-cli-DiND94Um.js → skills-cli-CZgrqMPo.js} +1 -1
  280. package/dist/{status-CwqBkxi2.js → status-BlTLrS6h.js} +2 -2
  281. package/dist/{status-Dkr4Celv.js → status-BqjF9Q9S.js} +9 -9
  282. package/dist/{status-Ca_VZkZV.js → status-CfIkReeE.js} +10 -10
  283. package/dist/{status-DcxWlds6.js → status-DjvBeoYl.js} +2 -2
  284. package/dist/{status.update-B5zI1_Id.js → status.update-BZnfRS2e.js} +1 -1
  285. package/dist/{status.update-8HXdAdwz.js → status.update-C5evp93A.js} +1 -1
  286. package/dist/{subagent-registry-CncIZPCd.js → subagent-registry-DVYhalAo.js} +365 -130
  287. package/dist/{synthesis-DOmJ2Gay.js → synthesis-DDQ5zAtf.js} +14 -14
  288. package/dist/{synthesis-CxvpkXBW.js → synthesis-DRXsTePq.js} +26 -26
  289. package/dist/{synthesis-lD0Vb_9q.js → synthesis-DgiYnjmZ.js} +14 -14
  290. package/dist/{synthesis-CTC73eY9.js → synthesis-y-Ozm8YK.js} +27 -27
  291. package/dist/{system-cli-BERSpUjO.js → system-cli-IeefTiI1.js} +3 -3
  292. package/dist/{system-cli-C61hzNPk.js → system-cli-hjvWuxnn.js} +3 -3
  293. package/dist/{systemd-hints-Ct8ebNeC.js → systemd-hints-CW7G2Z_2.js} +1 -1
  294. package/dist/{systemd-hints-vhJS1sOh.js → systemd-hints-CcsN2P1C.js} +1 -1
  295. package/dist/{tui-CI_zqapL.js → tui-ByDc_eA-.js} +4 -4
  296. package/dist/{tui-Dg_cvgVP.js → tui-DulNash-.js} +4 -4
  297. package/dist/{tui-cli-DtBW_VCL.js → tui-cli-D--Wucil.js} +9 -9
  298. package/dist/{tui-cli-BD1cbShC.js → tui-cli-cbFjX5ua.js} +9 -9
  299. package/dist/{unified-runner-JQaSdhSg.js → unified-runner-BRmPenSK.js} +355 -120
  300. package/dist/{update-cli-CplnPSZ5.js → update-cli-5uhTWLns.js} +38 -38
  301. package/dist/{update-cli-BO1uw-SU.js → update-cli-BfvcUFky.js} +40 -40
  302. package/dist/{update-runner-DFp9PDMN.js → update-runner-22u8HOoq.js} +1 -1
  303. package/dist/{update-runner-Df4mjndq.js → update-runner-DyENgdTM.js} +1 -1
  304. package/dist/{web-CZoQ03ZE.js → web-B8GaP73t.js} +17 -17
  305. package/dist/{web-Dn33Cd3-.js → web-CqeSgivQ.js} +30 -30
  306. package/dist/{web-BEDc6iEz.js → web-Dbe1DwOE.js} +17 -17
  307. package/dist/{web-CCEVjDcU.js → web-s9NWpUYH.js} +30 -30
  308. package/dist/{webhooks-cli-BEk3Xj9r.js → webhooks-cli-9lyrT9S-.js} +1 -1
  309. package/dist/{webhooks-cli-B7WTF3ao.js → webhooks-cli-C56QoA-d.js} +1 -1
  310. package/dist/{whatsapp-actions-uEcDLORc.js → whatsapp-actions-BV4mjN5j.js} +2 -2
  311. package/dist/{whatsapp-actions-DmVpLXmh.js → whatsapp-actions-BngdI8G3.js} +2 -2
  312. package/dist/{whatsapp-actions-DEn0NRir.js → whatsapp-actions-D5RBK0Cm.js} +2 -2
  313. package/dist/{whatsapp-actions-BUZuNBin.js → whatsapp-actions-Dx8FkbIf.js} +2 -2
  314. package/dist/{with-timeout-DwriPEWn.js → with-timeout-7gwjaz5c.js} +1 -1
  315. package/dist/{with-timeout-BuIx7QnX.js → with-timeout-C1vsg3IF.js} +1 -1
  316. package/extensions/bluebubbles/package.json +1 -1
  317. package/extensions/copilot-proxy/package.json +1 -1
  318. package/extensions/diagnostics-otel/package.json +1 -1
  319. package/extensions/discord/package.json +1 -1
  320. package/extensions/feishu/package.json +1 -1
  321. package/extensions/google-antigravity-auth/package.json +1 -1
  322. package/extensions/google-gemini-cli-auth/package.json +1 -1
  323. package/extensions/googlechat/package.json +1 -1
  324. package/extensions/imessage/package.json +1 -1
  325. package/extensions/irc/package.json +1 -1
  326. package/extensions/learning-loop/package.json +1 -1
  327. package/extensions/line/package.json +1 -1
  328. package/extensions/llm-task/package.json +1 -1
  329. package/extensions/matrix/CHANGELOG.md +12 -0
  330. package/extensions/matrix/package.json +1 -1
  331. package/extensions/mattermost/package.json +1 -1
  332. package/extensions/memory-core/package.json +1 -1
  333. package/extensions/memory-lancedb/package.json +1 -1
  334. package/extensions/minimax-portal-auth/package.json +1 -1
  335. package/extensions/msteams/CHANGELOG.md +12 -0
  336. package/extensions/msteams/package.json +1 -1
  337. package/extensions/nextcloud-talk/package.json +1 -1
  338. package/extensions/nostr/CHANGELOG.md +12 -0
  339. package/extensions/nostr/package.json +1 -1
  340. package/extensions/open-prose/package.json +1 -1
  341. package/extensions/outlook/package.json +1 -1
  342. package/extensions/pipeline/package.json +1 -1
  343. package/extensions/signal/package.json +1 -1
  344. package/extensions/slack/package.json +1 -1
  345. package/extensions/telegram/package.json +1 -1
  346. package/extensions/tlon/package.json +1 -1
  347. package/extensions/twitch/CHANGELOG.md +12 -0
  348. package/extensions/twitch/package.json +1 -1
  349. package/extensions/voice-call/CHANGELOG.md +12 -0
  350. package/extensions/voice-call/package.json +1 -1
  351. package/extensions/whatsapp/package.json +1 -1
  352. package/extensions/zalo/CHANGELOG.md +12 -0
  353. package/extensions/zalo/package.json +1 -1
  354. package/extensions/zalouser/CHANGELOG.md +12 -0
  355. package/extensions/zalouser/package.json +1 -1
  356. package/package.json +1 -1
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { c as expandHomePrefix, i as resolveGatewayPort, n as resolveConfigPath, s as resolveStateDir, t as STATE_DIR, u as resolveRequiredHomeDir } from "./paths-CE7eVGHg.js";
3
3
  import { _ as isCronSessionKey, b as resolveThreadParentSessionKey, c as normalizeMainKey, d as sanitizeAgentId, f as DEFAULT_ACCOUNT_ID, g as isAcpSessionKey, h as getSubagentDepth, l as resolveAgentIdFromSessionKey, o as classifySessionKeyShape, p as normalizeAccountId$2, r as buildAgentMainSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID, u as resolveThreadSessionKeys, v as isSubagentSessionKey, y as parseAgentSessionKey } from "./session-key-BCzIW1Y2.js";
4
4
  import { $ as isRich, A as normalizeE164, D as isRecord$1, E as formatTerminalLink, H as isPlainObject, I as shortenHomeInString, J as setVerbose, K as logVerbose, L as shortenHomePath, P as resolveUserPath, Q as colorize, R as sleep$1, S as clampInt, T as escapeRegExp, U as danger, V as truncateUtf16Safe, Y as shouldLogVerbose, Z as warn, _ as matchPluginCommand, a as normalizeAnyChannelId, b as CONFIG_DIR, d as createPluginRegistry, et as theme, f as normalizePluginHttpPath, g as listPluginCommands, h as getPluginCommandSpecs, l as requireActivePluginRegistry, lt as resolvePreferredSymiTmpDir, m as executePluginCommand, n as CHAT_CHANNEL_ORDER, o as normalizeChannelId, p as clearPluginCommands, r as DEFAULT_CHAT_CHANNEL, st as normalizeLogLevel, tt as getChildLogger, u as setActivePluginRegistry, v as createInternalHookEvent, w as ensureDir$3, y as triggerInternalHook, z as sliceUtf16Safe } from "./registry-BhoUuugi.js";
5
- import { A as logInfo, C as resolveSymiPackageRoot, D as spawnWithFallback, E as runExec, O as logDebug, S as loadWorkspaceBootstrapFiles, T as runCommandWithTimeout, a as resolveAgentModelPrimary, b as ensureAgentWorkspace, c as resolveDefaultAgentId, d as resolveSessionAgentIds, h as DEFAULT_IDENTITY_FILENAME, i as resolveAgentModelFallbacksOverride, j as logWarn, k as logError, l as resolveEffectiveModelFallbacks, m as DEFAULT_BOOTSTRAP_FILENAME, n as resolveAgentConfig, o as resolveAgentSkillsFilter, p as DEFAULT_AGENT_WORKSPACE_DIR, r as resolveAgentDir, s as resolveAgentWorkspaceDir, t as listAgentIds, u as resolveSessionAgentId, x as filterBootstrapFilesForSession } from "./agent-scope-Cbl5pNe1.js";
5
+ import { A as logInfo, C as resolveSymiPackageRoot, D as spawnWithFallback, E as runExec, O as logDebug, S as loadWorkspaceBootstrapFiles, T as runCommandWithTimeout, a as resolveAgentModelPrimary, b as ensureAgentWorkspace, c as resolveDefaultAgentId, d as resolveSessionAgentIds, h as DEFAULT_IDENTITY_FILENAME, i as resolveAgentModelFallbacksOverride, j as logWarn, k as logError, l as resolveEffectiveModelFallbacks, m as DEFAULT_BOOTSTRAP_FILENAME, n as resolveAgentConfig, o as resolveAgentSkillsFilter, p as DEFAULT_AGENT_WORKSPACE_DIR, r as resolveAgentDir, s as resolveAgentWorkspaceDir, t as listAgentIds, u as resolveSessionAgentId, w as resolveSymiPackageRootSync, x as filterBootstrapFilesForSession } from "./agent-scope-Cbl5pNe1.js";
6
6
  import { a as registerActiveProgressLine, i as clearActiveProgressLine, n as createNonExitingRuntime, o as unregisterActiveProgressLine, r as defaultRuntime, t as createSubsystemLogger } from "./subsystem-CZixfwU8.js";
7
7
  import { $ as DEFAULT_MODEL, A as resolveShellEnvFallbackTimeoutMs, B as dedupeProfileIds, C as getCustomProviderApiKey, D as resolveModelAuthMode, E as resolveEnvApiKey, F as getSoonestCooldownExpiry, G as resolveSymiAgentDir, H as markAuthProfileGood, I as isProfileInCooldown, K as withFileLock, L as markAuthProfileFailure, O as getShellPathFromLoginShell, P as resolveAuthProfileOrder, Q as DEFAULT_CONTEXT_TOKENS, R as markAuthProfileUsed, S as getApiKeyForModel, T as resolveApiKeyForProvider, U as ensureAuthProfileStore, V as listProfilesForProvider, W as resolveAuthStorePathForDisplay, X as normalizeSecretInput, Z as resolveAuthProfileDisplayLabel, a as isCliProvider, b as OLLAMA_NATIVE_BASE_URL, c as normalizeProviderId, d as resolveDefaultModelForAgent, et as DEFAULT_PROVIDER, f as resolveModelRefFromString, i as findNormalizedProviderValue, m as resolveThinkingDefault, n as buildConfiguredAllowlistKeys, o as modelKey, p as resolveSubagentSpawnModelSelection, r as buildModelAliasIndex, s as normalizeModelRef$2, t as buildAllowedModelSet, u as resolveConfiguredModelRef, w as requireApiKey, x as createOllamaStreamFn, z as resolveApiKeyForProfile } from "./model-selection-vHAQ4r1b.js";
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";
@@ -12,20 +12,20 @@ import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY
12
12
  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
13
  import { a as logoutWeb, i as logWebSelfId, l as readWebSelfId, p as webAuthExists, r as getWebAuthAgeMs, t as resolveWhatsAppAccount } from "./accounts-DDEyGwby.js";
14
14
  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-BaBv1rAU.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-DLVrnezL.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-D0bWiRCg.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-vmIzYMwN.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-CfejAK2u.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--ff__Iq0.js";
18
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-Kbl70eCP.js";
19
19
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-C1vRJs5w.js";
20
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-B5kAnKqP.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-_CmB6CKB.js";
22
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
23
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-j5tVLINv.js";
24
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-TcYQOZAY.js";
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-BAVNLbja.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-BPP4adeW.js";
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-CbBZUq-Q.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-DWdYdchb.js";
28
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-B14NNyfm.js";
28
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-t-stBgN6.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-XEbTRNYL.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";
@@ -36,8 +36,8 @@ 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
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-MNvheU8U.js";
40
- import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-D6E6EGWa.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-D5bsPk2_.js";
40
+ import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-CztTHQhN.js";
41
41
  import { c as normalizeExtraMemoryPaths, f as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-479FB0St.js";
42
42
  import { n as retryAsync } from "./retry-QGp0jvVi.js";
43
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-Dm716SF3.js";
@@ -49,18 +49,18 @@ import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-0kwEfxD4.js";
49
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-ke7KirEH.js";
50
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-CSF7Poen.js";
51
51
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-CgGv6nTy.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-DFuAePEr.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-B_6xBcPB.js";
53
53
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-WLZaC77l.js";
54
54
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-BaoETsQI.js";
55
55
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-C-6tM-GK.js";
56
56
  import { n as normalizePollInput } from "./polls-Coxe0Akm.js";
57
57
  import { t as convertMarkdownTables } from "./tables-BE0lT1IV.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-DGbBPbV0.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-Iocbaltq.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-dohExhb8.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-C6-rN_Li.js";
60
60
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-Dd2_hyM2.js";
61
61
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-CFRe6XNa.js";
62
62
  import { t as makeProxyFetch } from "./proxy-DaT-KQ7w.js";
63
- import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-D0NFBbd-.js";
63
+ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-BV7oFP7Z.js";
64
64
  import { t as getActiveWebListener } from "./active-listener-OKZn7EWc.js";
65
65
  import { createRequire } from "node:module";
66
66
  import * as path$1 from "node:path";
@@ -3473,7 +3473,7 @@ async function getMemorySearchManager(params) {
3473
3473
  const wrapper = new FallbackMemoryManager({
3474
3474
  primary,
3475
3475
  fallbackFactory: async () => {
3476
- const { MemoryIndexManager } = await import("./manager-D6E6EGWa.js").then((n) => n.n);
3476
+ const { MemoryIndexManager } = await import("./manager-CztTHQhN.js").then((n) => n.n);
3477
3477
  return await MemoryIndexManager.get(params);
3478
3478
  }
3479
3479
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -3486,7 +3486,7 @@ async function getMemorySearchManager(params) {
3486
3486
  }
3487
3487
  }
3488
3488
  try {
3489
- const { MemoryIndexManager } = await import("./manager-D6E6EGWa.js").then((n) => n.n);
3489
+ const { MemoryIndexManager } = await import("./manager-CztTHQhN.js").then((n) => n.n);
3490
3490
  return { manager: await MemoryIndexManager.get(params) };
3491
3491
  } catch (err) {
3492
3492
  return {
@@ -7367,7 +7367,7 @@ async function routeReply(params) {
7367
7367
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
7368
7368
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
7369
7369
  try {
7370
- const { deliverOutboundPayloads } = await import("./deliver-D0bWiRCg.js").then((n) => n.n);
7370
+ const { deliverOutboundPayloads } = await import("./deliver--ff__Iq0.js").then((n) => n.n);
7371
7371
  return {
7372
7372
  ok: true,
7373
7373
  messageId: (await deliverOutboundPayloads({
@@ -10252,16 +10252,16 @@ function shouldComputeCommandAuthorized(text, cfg, options) {
10252
10252
 
10253
10253
  //#endregion
10254
10254
  //#region src/channels/sender-label.ts
10255
- function normalize(value) {
10255
+ function normalize$1(value) {
10256
10256
  const trimmed = value?.trim();
10257
10257
  return trimmed ? trimmed : void 0;
10258
10258
  }
10259
10259
  function resolveSenderLabel(params) {
10260
- const name = normalize(params.name);
10261
- const username = normalize(params.username);
10262
- const tag = normalize(params.tag);
10263
- const e164 = normalize(params.e164);
10264
- const id = normalize(params.id);
10260
+ const name = normalize$1(params.name);
10261
+ const username = normalize$1(params.username);
10262
+ const tag = normalize$1(params.tag);
10263
+ const e164 = normalize$1(params.e164);
10264
+ const id = normalize$1(params.id);
10265
10265
  const display = name ?? username ?? tag ?? "";
10266
10266
  const idPart = e164 ?? id ?? "";
10267
10267
  if (display && idPart && display !== idPart) return `${display} (${idPart})`;
@@ -30509,8 +30509,39 @@ const GatewayToolSchema = Type.Object({
30509
30509
  baseHash: Type.Optional(Type.String()),
30510
30510
  sessionKey: Type.Optional(Type.String()),
30511
30511
  note: Type.Optional(Type.String()),
30512
- restartDelayMs: Type.Optional(Type.Number())
30512
+ restartDelayMs: Type.Optional(Type.Number()),
30513
+ userRequestAcknowledgment: Type.Optional(Type.String())
30513
30514
  });
30515
+ /** Actions that mutate gateway state and require explicit user authorization. */
30516
+ const DESTRUCTIVE_ACTIONS = new Set([
30517
+ "config.apply",
30518
+ "config.patch",
30519
+ "update.run"
30520
+ ]);
30521
+ /** Minimum length for a meaningful authorization message. */
30522
+ const MIN_AUTHORIZATION_LENGTH = 10;
30523
+ /**
30524
+ * Asserts the user's request was explicitly acknowledged for destructive
30525
+ * actions. Throws a descriptive error if the acknowledgment is missing,
30526
+ * empty, or trivially short.
30527
+ *
30528
+ * NOTE: This is defense-in-depth, not a hard barrier. A determined model
30529
+ * could still populate the field with fabricated text. The barrier exists
30530
+ * to:
30531
+ * 1. Force the agent to deliberately compose a justification (vs. blind
30532
+ * tool invocation).
30533
+ * 2. Provide an audit trail (the acknowledgment is logged with the tool
30534
+ * call args).
30535
+ * 3. Surface for future tightening (e.g., matching against real session
30536
+ * history).
30537
+ */
30538
+ function assertUserAuthorization(action, params) {
30539
+ if (!DESTRUCTIVE_ACTIONS.has(action)) return;
30540
+ const ack = params.userRequestAcknowledgment;
30541
+ const trimmed = typeof ack === "string" ? ack.trim() : "";
30542
+ if (!trimmed) throw new Error(`Action '${action}' requires an explicit user authorization. Pass userRequestAcknowledgment with a paraphrase of the user's request (e.g., "user said: please update Symi"). If the user did not explicitly request this action, ask them first instead of invoking it.`);
30543
+ if (trimmed.length < MIN_AUTHORIZATION_LENGTH) throw new Error(`Action '${action}' requires a substantive userRequestAcknowledgment (minimum ${MIN_AUTHORIZATION_LENGTH} characters describing the user's request). Received: ${JSON.stringify(trimmed)}.`);
30544
+ }
30514
30545
  function createGatewayTool(opts) {
30515
30546
  return {
30516
30547
  label: "Gateway",
@@ -30521,6 +30552,7 @@ function createGatewayTool(opts) {
30521
30552
  execute: async (_toolCallId, args) => {
30522
30553
  const params = args;
30523
30554
  const action = readStringParam(params, "action", { required: true });
30555
+ assertUserAuthorization(action, params);
30524
30556
  if (action === "restart") {
30525
30557
  if (!isRestartEnabled(opts?.config)) throw new Error("Gateway restart is disabled (commands.restart=false).");
30526
30558
  const sessionKey = typeof params.sessionKey === "string" && params.sessionKey.trim() ? params.sessionKey.trim() : opts?.agentSessionKey?.trim() || void 0;
@@ -39502,6 +39534,38 @@ function setCliSessionId(entry, provider, sessionId) {
39502
39534
  //#endregion
39503
39535
  //#region src/config/model-profiles-builtin.ts
39504
39536
  /**
39537
+ * Shared safety + output-style additions applied to most built-in profiles
39538
+ * and the Generic fallback. These rules came from a long history of
39539
+ * model-specific bugs (verification-monologue padding, "I have addressed"
39540
+ * preambles, post-answer assessment lists). Keeping them in one place
39541
+ * means a new profile inherits sane defaults instead of starting empty.
39542
+ *
39543
+ * Stage 2.4 of the prompt-reduction plan: rules that ALL profiles need
39544
+ * live here; profile-specific rules (control-token stripping, tool-arg
39545
+ * cleanup, reasoning hints) live in their own per-profile additions.
39546
+ *
39547
+ * Exported so resolve-model-profile.ts can apply the same additions to
39548
+ * the Generic fallback profile — no model resolves to "Generic" without
39549
+ * inheriting the safety/style rules.
39550
+ */
39551
+ const SAFETY_AND_STYLE_ADDITIONS = [
39552
+ "CRITICAL OUTPUT RULES:",
39553
+ "- Your response ends when you have delivered the answer. Do not append anything after.",
39554
+ "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
39555
+ "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
39556
+ "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
39557
+ "- If you need to verify your work, do so before writing your response, not after.",
39558
+ "- Send brief progress updates on long tasks so the user knows you are active."
39559
+ ];
39560
+ /** Hint for native-reasoning models (Nemotron, Qwen 3.5/3.6) to keep
39561
+ * planning internal. Not applied to Gemma/Ollama because those models
39562
+ * don't have structured thinking and the rule confuses them. */
39563
+ const REASONING_DISCIPLINE_ADDITION = "- Keep planning and reasoning internal. Only speak when you have a result or need user input.";
39564
+ /** Hint for models that leak Gemma-style control tokens (Gemma family,
39565
+ * Ollama hosting any uncensored open model). Forces tool-arg cleanup and
39566
+ * forbids leaking turn markers in user-visible text. */
39567
+ const CONTROL_TOKEN_ADDITIONS = ["- Do not output raw control tokens, channel tags, or turn markers.", "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax."];
39568
+ /**
39505
39569
  * Built-in model profiles. Ordered from most-specific to least-specific so
39506
39570
  * that `resolveModelProfile` can return the first match.
39507
39571
  *
@@ -39535,17 +39599,7 @@ const BUILTIN_PROFILES = [
39535
39599
  hasStructuredThinking: false,
39536
39600
  validateToolArgs: true
39537
39601
  },
39538
- promptAdditions: [
39539
- "CRITICAL OUTPUT RULES:",
39540
- "- Your response ends when you have delivered the answer. Do not append anything after.",
39541
- "- Do not output raw control tokens, channel tags, or turn markers.",
39542
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
39543
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
39544
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
39545
- "- If you need to verify your work, do so before writing your response, not after.",
39546
- "- Send brief progress updates on long tasks so the user knows you are active.",
39547
- "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax."
39548
- ],
39602
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, ...CONTROL_TOKEN_ADDITIONS],
39549
39603
  ui: {
39550
39604
  badge: "Local",
39551
39605
  watchdogMs: 9e5,
@@ -39572,16 +39626,7 @@ const BUILTIN_PROFILES = [
39572
39626
  hasStructuredThinking: true,
39573
39627
  validateToolArgs: false
39574
39628
  },
39575
- promptAdditions: [
39576
- "CRITICAL OUTPUT RULES:",
39577
- "- Your response ends when you have delivered the answer. Do not append anything after.",
39578
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
39579
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
39580
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
39581
- "- If you need to verify your work, do so before writing your response, not after.",
39582
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
39583
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
39584
- ],
39629
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
39585
39630
  ui: {
39586
39631
  badge: "Local",
39587
39632
  watchdogMs: 9e5,
@@ -39607,7 +39652,7 @@ const BUILTIN_PROFILES = [
39607
39652
  hasStructuredThinking: true,
39608
39653
  validateToolArgs: false
39609
39654
  },
39610
- promptAdditions: [],
39655
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS],
39611
39656
  ui: {
39612
39657
  badge: "API",
39613
39658
  watchdogMs: 3e5,
@@ -39640,15 +39685,7 @@ const BUILTIN_PROFILES = [
39640
39685
  hasStructuredThinking: true,
39641
39686
  validateToolArgs: false
39642
39687
  },
39643
- promptAdditions: [
39644
- "CRITICAL OUTPUT RULES:",
39645
- "- Your response ends when you have delivered the answer. Do not append anything after.",
39646
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
39647
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
39648
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
39649
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
39650
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
39651
- ],
39688
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
39652
39689
  ui: {
39653
39690
  badge: "Spider",
39654
39691
  watchdogMs: 9e5,
@@ -39681,16 +39718,7 @@ const BUILTIN_PROFILES = [
39681
39718
  hasStructuredThinking: false,
39682
39719
  validateToolArgs: true
39683
39720
  },
39684
- promptAdditions: [
39685
- "CRITICAL OUTPUT RULES:",
39686
- "- Your response ends when you have delivered the answer. Do not append anything after.",
39687
- "- Do not output raw control tokens, channel tags, or turn markers.",
39688
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
39689
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
39690
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
39691
- "- Send brief progress updates on long tasks so the user knows you are active.",
39692
- "- When calling tools, provide arguments as clean values only. Never include <|, |>, or XML-like tags in tool argument values. For exec/bash commands, provide only valid shell syntax."
39693
- ],
39721
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, ...CONTROL_TOKEN_ADDITIONS],
39694
39722
  ui: {
39695
39723
  badge: "Spider",
39696
39724
  watchdogMs: 6e5,
@@ -39722,16 +39750,7 @@ const BUILTIN_PROFILES = [
39722
39750
  hasStructuredThinking: true,
39723
39751
  validateToolArgs: false
39724
39752
  },
39725
- promptAdditions: [
39726
- "CRITICAL OUTPUT RULES:",
39727
- "- Your response ends when you have delivered the answer. Do not append anything after.",
39728
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
39729
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
39730
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
39731
- "- If you need to verify your work, do so before writing your response, not after.",
39732
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
39733
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
39734
- ],
39753
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
39735
39754
  ui: {
39736
39755
  badge: "CoreWeave",
39737
39756
  watchdogMs: 9e5,
@@ -39742,7 +39761,15 @@ const BUILTIN_PROFILES = [
39742
39761
 
39743
39762
  //#endregion
39744
39763
  //#region src/config/resolve-model-profile.ts
39745
- /** Default profile returned when no match is found. */
39764
+ /**
39765
+ * Default profile returned when no match is found.
39766
+ *
39767
+ * Stage 2.4 of the prompt-reduction plan: the Generic fallback now ships
39768
+ * the same safety+style additions as every named profile, so newly-added
39769
+ * models without a profile entry inherit sane defaults instead of
39770
+ * starting empty (which would silently regress safety rules until someone
39771
+ * notices and adds a profile).
39772
+ */
39746
39773
  const FALLBACK_PROFILE = {
39747
39774
  match: "*",
39748
39775
  label: "Generic",
@@ -39761,7 +39788,7 @@ const FALLBACK_PROFILE = {
39761
39788
  hasStructuredThinking: false,
39762
39789
  validateToolArgs: false
39763
39790
  },
39764
- promptAdditions: [],
39791
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS],
39765
39792
  ui: {
39766
39793
  watchdogMs: 3e5,
39767
39794
  armWatchdogOnSend: true
@@ -46347,10 +46374,90 @@ async function prepareSessionManagerForRun(params) {
46347
46374
  }
46348
46375
  }
46349
46376
 
46377
+ //#endregion
46378
+ //#region src/agents/system-prompt-skills-autoload.ts
46379
+ const FRONTMATTER_RE = /^---\s*\n[\s\S]*?\n---\s*\n?/;
46380
+ let cachedPackageRoot;
46381
+ function getPackageRoot() {
46382
+ if (cachedPackageRoot === void 0) cachedPackageRoot = resolveSymiPackageRootSync({});
46383
+ return cachedPackageRoot;
46384
+ }
46385
+ function safeSkillName(name) {
46386
+ return /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/.test(name);
46387
+ }
46388
+ function tryLoadSkill(skillName, root) {
46389
+ const skillPath = path.join(root, "skills", skillName, "SKILL.md");
46390
+ try {
46391
+ if (!fs.statSync(skillPath).isFile()) return null;
46392
+ } catch {
46393
+ return null;
46394
+ }
46395
+ try {
46396
+ return fs.readFileSync(skillPath, "utf8");
46397
+ } catch {
46398
+ return null;
46399
+ }
46400
+ }
46401
+ function stripFrontmatter(body) {
46402
+ return body.replace(FRONTMATTER_RE, "").trimStart();
46403
+ }
46404
+ /**
46405
+ * Resolves and loads each named skill. Returns the inlinable Markdown block,
46406
+ * or empty string when no skills loaded / minimal mode / no names supplied.
46407
+ */
46408
+ function buildAutoLoadedSkillsBlock(opts) {
46409
+ if (opts.minimalMode) return "";
46410
+ const names = opts.skillNames.filter((n) => typeof n === "string" && n.trim().length > 0);
46411
+ if (names.length === 0) return "";
46412
+ const packageRoot = getPackageRoot();
46413
+ const loaded = [];
46414
+ for (const rawName of names) {
46415
+ const name = rawName.trim();
46416
+ if (!safeSkillName(name)) {
46417
+ logWarn(`autoLoadInline: skipping invalid skill name '${rawName}'`);
46418
+ continue;
46419
+ }
46420
+ let body = null;
46421
+ let source = "bundled";
46422
+ if (opts.workspaceDir) {
46423
+ body = tryLoadSkill(name, opts.workspaceDir);
46424
+ source = "workspace";
46425
+ }
46426
+ if (body === null && packageRoot) {
46427
+ body = tryLoadSkill(name, packageRoot);
46428
+ source = "bundled";
46429
+ }
46430
+ if (body === null) {
46431
+ logWarn(`autoLoadInline: skill '${name}' not found in workspace or bundled skills`);
46432
+ continue;
46433
+ }
46434
+ const stripped = stripFrontmatter(body).trim();
46435
+ if (!stripped) {
46436
+ logWarn(`autoLoadInline: skill '${name}' has empty body after frontmatter strip; skipping`);
46437
+ continue;
46438
+ }
46439
+ loaded.push({
46440
+ name,
46441
+ body: stripped,
46442
+ source
46443
+ });
46444
+ }
46445
+ if (loaded.length === 0) return "";
46446
+ return [
46447
+ "",
46448
+ "---",
46449
+ "",
46450
+ "## Auto-loaded Skills",
46451
+ "",
46452
+ loaded.map((skill) => `<!-- auto-loaded: ${skill.name} (${skill.source}) -->\n${skill.body}`).join("\n\n---\n\n"),
46453
+ ""
46454
+ ].join("\n");
46455
+ }
46456
+
46350
46457
  //#endregion
46351
46458
  //#region src/agents/pi-embedded-runner/system-prompt.ts
46352
46459
  function buildEmbeddedSystemPrompt(params) {
46353
- return buildAgentSystemPrompt({
46460
+ const corePrompt = buildAgentSystemPrompt({
46354
46461
  workspaceDir: params.workspaceDir,
46355
46462
  defaultThinkLevel: params.defaultThinkLevel,
46356
46463
  reasoningLevel: params.reasoningLevel,
@@ -46378,6 +46485,14 @@ function buildEmbeddedSystemPrompt(params) {
46378
46485
  contextFiles: params.contextFiles,
46379
46486
  memoryCitationsMode: params.memoryCitationsMode
46380
46487
  });
46488
+ const promptMode = params.promptMode ?? "full";
46489
+ const isMinimal = promptMode === "minimal" || promptMode === "none";
46490
+ const skillsBlock = buildAutoLoadedSkillsBlock({
46491
+ skillNames: params.autoLoadInlineSkills ?? [],
46492
+ workspaceDir: params.workspaceDir,
46493
+ minimalMode: isMinimal
46494
+ });
46495
+ return skillsBlock ? `${corePrompt}${skillsBlock}` : corePrompt;
46381
46496
  }
46382
46497
  function createSystemPromptOverride(systemPrompt) {
46383
46498
  const override = systemPrompt.trim();
@@ -47165,7 +47280,8 @@ async function runEmbeddedAttempt(params) {
47165
47280
  userTime,
47166
47281
  userTimeFormat,
47167
47282
  contextFiles,
47168
- memoryCitationsMode: params.config?.memory?.citations
47283
+ memoryCitationsMode: params.config?.memory?.citations,
47284
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline
47169
47285
  });
47170
47286
  const systemPromptReport = buildSystemPromptReport({
47171
47287
  source: "run",
@@ -51648,7 +51764,7 @@ async function deliverSessionMaintenanceWarning(params) {
51648
51764
  return;
51649
51765
  }
51650
51766
  try {
51651
- const { deliverOutboundPayloads } = await import("./deliver-D0bWiRCg.js").then((n) => n.n);
51767
+ const { deliverOutboundPayloads } = await import("./deliver--ff__Iq0.js").then((n) => n.n);
51652
51768
  await deliverOutboundPayloads({
51653
51769
  cfg: params.cfg,
51654
51770
  channel,
@@ -55094,7 +55210,7 @@ async function describeStickerImage(params) {
55094
55210
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
55095
55211
  try {
55096
55212
  const buffer = await fs$1.readFile(imagePath);
55097
- const { describeImageWithModel } = await import("./image-MNvheU8U.js").then((n) => n.n);
55213
+ const { describeImageWithModel } = await import("./image-D5bsPk2_.js").then((n) => n.n);
55098
55214
  return (await describeImageWithModel({
55099
55215
  buffer,
55100
55216
  fileName: "sticker.webp",
@@ -55517,7 +55633,7 @@ function createWhatsAppLoginTool() {
55517
55633
  force: Type.Optional(Type.Boolean())
55518
55634
  }),
55519
55635
  execute: async (_toolCallId, args) => {
55520
- const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-Apnag5S6.js");
55636
+ const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-BBrzemk7.js");
55521
55637
  if ((args?.action ?? "start") === "wait") {
55522
55638
  const result = await waitForWebLogin({ timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0 });
55523
55639
  return {
@@ -57843,7 +57959,7 @@ async function preflightDiscordMessage(params) {
57843
57959
  let preflightTranscript;
57844
57960
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
57845
57961
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
57846
- const { transcribeFirstAudio } = await import("./audio-preflight-C6vpFnOG.js");
57962
+ const { transcribeFirstAudio } = await import("./audio-preflight-CMutcMs5.js");
57847
57963
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
57848
57964
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
57849
57965
  ctx: {
@@ -61626,27 +61742,27 @@ function isVoiceChannelType(type) {
61626
61742
  function createDefaultDeps() {
61627
61743
  return {
61628
61744
  sendMessageWhatsApp: async (...args) => {
61629
- const { sendMessageWhatsApp } = await import("./web-CZoQ03ZE.js");
61745
+ const { sendMessageWhatsApp } = await import("./web-B8GaP73t.js");
61630
61746
  return await sendMessageWhatsApp(...args);
61631
61747
  },
61632
61748
  sendMessageTelegram: async (...args) => {
61633
- const { sendMessageTelegram } = await import("./send-B5kAnKqP.js").then((n) => n.l);
61749
+ const { sendMessageTelegram } = await import("./send-_CmB6CKB.js").then((n) => n.l);
61634
61750
  return await sendMessageTelegram(...args);
61635
61751
  },
61636
61752
  sendMessageDiscord: async (...args) => {
61637
- const { sendMessageDiscord } = await import("./send-DLVrnezL.js").then((n) => n.t);
61753
+ const { sendMessageDiscord } = await import("./send-CfejAK2u.js").then((n) => n.t);
61638
61754
  return await sendMessageDiscord(...args);
61639
61755
  },
61640
61756
  sendMessageSlack: async (...args) => {
61641
- const { sendMessageSlack } = await import("./send-BaBv1rAU.js").then((n) => n.n);
61757
+ const { sendMessageSlack } = await import("./send-vmIzYMwN.js").then((n) => n.n);
61642
61758
  return await sendMessageSlack(...args);
61643
61759
  },
61644
61760
  sendMessageSignal: async (...args) => {
61645
- const { sendMessageSignal } = await import("./send-DGbBPbV0.js").then((n) => n.i);
61761
+ const { sendMessageSignal } = await import("./send-dohExhb8.js").then((n) => n.i);
61646
61762
  return await sendMessageSignal(...args);
61647
61763
  },
61648
61764
  sendMessageIMessage: async (...args) => {
61649
- const { sendMessageIMessage } = await import("./send-Iocbaltq.js").then((n) => n.n);
61765
+ const { sendMessageIMessage } = await import("./send-C6-rN_Li.js").then((n) => n.n);
61650
61766
  return await sendMessageIMessage(...args);
61651
61767
  }
61652
61768
  };
@@ -72476,7 +72592,7 @@ async function registerSlackMonitorSlashCommands(params) {
72476
72592
  });
72477
72593
  const deliverSlashPayloads = async (replies) => {
72478
72594
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
72479
- import("./replies-D0NFBbd-.js").then((n) => n.r),
72595
+ import("./replies-BV7oFP7Z.js").then((n) => n.r),
72480
72596
  import("./chunk-Bk95VMr4.js").then((n) => n.s),
72481
72597
  import("./markdown-tables-XmEPv2t0.js").then((n) => n.t)
72482
72598
  ]);
@@ -74749,7 +74865,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
74749
74865
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
74750
74866
  let preflightTranscript;
74751
74867
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
74752
- const { transcribeFirstAudio } = await import("./audio-preflight-C6vpFnOG.js");
74868
+ const { transcribeFirstAudio } = await import("./audio-preflight-CMutcMs5.js");
74753
74869
  preflightTranscript = await transcribeFirstAudio({
74754
74870
  ctx: {
74755
74871
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -76894,23 +77010,23 @@ let webLoginQrPromise = null;
76894
77010
  let webChannelPromise = null;
76895
77011
  let whatsappActionsPromise = null;
76896
77012
  function loadWebOutbound() {
76897
- webOutboundPromise ??= import("./outbound-mG1crIsY.js").then((n) => n.t);
77013
+ webOutboundPromise ??= import("./outbound-CLCy4Nsg.js").then((n) => n.t);
76898
77014
  return webOutboundPromise;
76899
77015
  }
76900
77016
  function loadWebLogin() {
76901
- webLoginPromise ??= import("./login-EYdkb0dH.js").then((n) => n.n);
77017
+ webLoginPromise ??= import("./login-B7OJui4y.js").then((n) => n.n);
76902
77018
  return webLoginPromise;
76903
77019
  }
76904
77020
  function loadWebLoginQr() {
76905
- webLoginQrPromise ??= import("./login-qr-Apnag5S6.js");
77021
+ webLoginQrPromise ??= import("./login-qr-BBrzemk7.js");
76906
77022
  return webLoginQrPromise;
76907
77023
  }
76908
77024
  function loadWebChannel() {
76909
- webChannelPromise ??= import("./web-CZoQ03ZE.js");
77025
+ webChannelPromise ??= import("./web-B8GaP73t.js");
76910
77026
  return webChannelPromise;
76911
77027
  }
76912
77028
  function loadWhatsAppActions() {
76913
- whatsappActionsPromise ??= import("./whatsapp-actions-uEcDLORc.js");
77029
+ whatsappActionsPromise ??= import("./whatsapp-actions-BV4mjN5j.js");
76914
77030
  return whatsappActionsPromise;
76915
77031
  }
76916
77032
  function createPluginRuntime() {
@@ -78375,6 +78491,91 @@ function isToolAllowedByPolicies(name, policies) {
78375
78491
  return policies.every((policy) => isToolAllowedByPolicyName(name, policy));
78376
78492
  }
78377
78493
 
78494
+ //#endregion
78495
+ //#region src/agents/pi-tools.read-edit-guard.ts
78496
+ const RETRY_GUIDANCE_SUFFIX$1 = " Read the file first, then retry the edit.";
78497
+ function readGuardError(filePath) {
78498
+ return /* @__PURE__ */ new Error(`Edit refused: '${filePath}' has not been read in this session. The edit tool requires the agent to read the file first so oldText can match real content rather than hallucinated content.${RETRY_GUIDANCE_SUFFIX$1}`);
78499
+ }
78500
+ function extractPath(args) {
78501
+ if (!args || typeof args !== "object") return;
78502
+ const record = args;
78503
+ const candidate = record.path ?? record.file_path;
78504
+ if (typeof candidate !== "string") return;
78505
+ const trimmed = candidate.trim();
78506
+ return trimmed.length > 0 ? trimmed : void 0;
78507
+ }
78508
+ function wrapReadToolWithTracker(tool, tracker) {
78509
+ return {
78510
+ ...tool,
78511
+ execute: async (toolCallId, args, signal, onUpdate) => {
78512
+ const result = await tool.execute(toolCallId, args, signal, onUpdate);
78513
+ if (!(!!result && typeof result === "object" && result.isError === true)) {
78514
+ const filePath = extractPath(args);
78515
+ if (filePath) tracker.recordRead(filePath);
78516
+ }
78517
+ return result;
78518
+ }
78519
+ };
78520
+ }
78521
+ function wrapWriteToolWithTracker(tool, tracker) {
78522
+ return {
78523
+ ...tool,
78524
+ execute: async (toolCallId, args, signal, onUpdate) => {
78525
+ const result = await tool.execute(toolCallId, args, signal, onUpdate);
78526
+ if (!(!!result && typeof result === "object" && result.isError === true)) {
78527
+ const filePath = extractPath(args);
78528
+ if (filePath) tracker.recordWrite(filePath);
78529
+ }
78530
+ return result;
78531
+ }
78532
+ };
78533
+ }
78534
+ function wrapEditToolWithGuard(tool, tracker) {
78535
+ return {
78536
+ ...tool,
78537
+ execute: async (toolCallId, args, signal, onUpdate) => {
78538
+ const filePath = extractPath(args);
78539
+ if (filePath && !tracker.hasObserved(filePath)) throw readGuardError(filePath);
78540
+ return tool.execute(toolCallId, args, signal, onUpdate);
78541
+ }
78542
+ };
78543
+ }
78544
+
78545
+ //#endregion
78546
+ //#region src/agents/pi-tools.read-edit-tracker.ts
78547
+ function normalize(filePath, workspaceRoot) {
78548
+ if (!workspaceRoot) return filePath;
78549
+ if (path.isAbsolute(filePath)) return path.normalize(filePath);
78550
+ return path.resolve(workspaceRoot, filePath);
78551
+ }
78552
+ function createReadEditTracker(opts = {}) {
78553
+ const observed = /* @__PURE__ */ new Map();
78554
+ const record = (filePath, kind) => {
78555
+ if (typeof filePath !== "string" || !filePath.trim()) return;
78556
+ const key = normalize(filePath.trim(), opts.workspaceRoot);
78557
+ const prior = observed.get(key);
78558
+ if (kind === "written" || prior !== "written") observed.set(key, kind);
78559
+ };
78560
+ return {
78561
+ recordRead: (filePath) => record(filePath, "read"),
78562
+ recordWrite: (filePath) => record(filePath, "written"),
78563
+ observation: (filePath) => {
78564
+ if (typeof filePath !== "string" || !filePath.trim()) return null;
78565
+ const key = normalize(filePath.trim(), opts.workspaceRoot);
78566
+ return observed.get(key) ?? null;
78567
+ },
78568
+ hasObserved: (filePath) => {
78569
+ if (typeof filePath !== "string" || !filePath.trim()) return false;
78570
+ const key = normalize(filePath.trim(), opts.workspaceRoot);
78571
+ return observed.has(key);
78572
+ },
78573
+ reset: () => {
78574
+ observed.clear();
78575
+ }
78576
+ };
78577
+ }
78578
+
78378
78579
  //#endregion
78379
78580
  //#region src/media/sniff-mime-from-base64.ts
78380
78581
  async function sniffMimeFromBase64(base64) {
@@ -78700,6 +78901,22 @@ function wrapToolParamNormalization(tool, requiredParamGroups) {
78700
78901
  }
78701
78902
  };
78702
78903
  }
78904
+ /**
78905
+ * Override a tool's description while preserving execute, parameters, and
78906
+ * other properties. Used by Stage 2.5 of the prompt-reduction plan to move
78907
+ * usage docs from the system prompt into tool descriptions where they
78908
+ * belong contextually.
78909
+ *
78910
+ * The replacement description should include the upstream's tool-purpose
78911
+ * sentence so models that only read the description (without the prompt
78912
+ * section) still have the same baseline understanding.
78913
+ */
78914
+ function wrapToolWithDescriptionOverride(tool, description) {
78915
+ return {
78916
+ ...tool,
78917
+ description
78918
+ };
78919
+ }
78703
78920
  function wrapToolWorkspaceRootGuard(tool, root) {
78704
78921
  return {
78705
78922
  ...tool,
@@ -78940,6 +79157,26 @@ function resolveToolLoopDetectionConfig(params) {
78940
79157
  }
78941
79158
  };
78942
79159
  }
79160
+ /**
79161
+ * Edit tool description. Replaces the upstream's terse one-liner with
79162
+ * usage notes migrated from the system prompt's "Edit Tool Best Practices"
79163
+ * section in Stage 2.5 of the prompt-reduction plan. Co-locating these
79164
+ * notes with the tool means they ship only when edit is in palette, and
79165
+ * the system prompt section can be deleted in Stage 4 without losing the
79166
+ * guidance.
79167
+ *
79168
+ * Combined with the read-before-edit guard (Stage 1.3) and the model's
79169
+ * own discipline, this should kill the hallucinated-oldText failure class
79170
+ * for any well-intentioned model.
79171
+ */
79172
+ const EDIT_TOOL_DESCRIPTION = [
79173
+ "Edit a file by replacing exact text. The oldText must match the file EXACTLY (whitespace, indentation, and all).",
79174
+ "Best practices to avoid match failures:",
79175
+ "- Use the SHORTEST unique snippet that identifies the edit location (1-3 lines). Do NOT paste large blocks.",
79176
+ "- ALWAYS read the file first, then copy the exact text from the read output for oldText. The read-before-edit guard refuses edits to unread files.",
79177
+ "- If an edit fails with 'Could not find the exact text', re-read the file and retry with the exact text from the fresh read. Do NOT skip to a different issue.",
79178
+ "- Prefer lines with distinctive content (function names, unique strings) over generic code (braces, blank lines)."
79179
+ ].join(" ");
78943
79180
  function createSymiCodingTools(options) {
78944
79181
  const execToolName = "exec";
78945
79182
  const sandbox = options?.sandbox?.enabled ? options.sandbox : void 0;
@@ -79002,33 +79239,34 @@ function createSymiCodingTools(options) {
79002
79239
  });
79003
79240
  if (sandboxRoot && !sandboxFsBridge) throw new Error("Sandbox filesystem bridge is unavailable.");
79004
79241
  const imageSanitization = resolveImageSanitizationLimits(options?.config);
79242
+ const readEditTracker = createReadEditTracker({ workspaceRoot: sandboxRoot ?? workspaceRoot });
79005
79243
  const base = codingTools.flatMap((tool) => {
79006
79244
  if (tool.name === readTool.name) {
79007
79245
  if (sandboxRoot) {
79008
- const sandboxed = createSandboxedReadTool({
79246
+ const tracked = wrapReadToolWithTracker(createSandboxedReadTool({
79009
79247
  root: sandboxRoot,
79010
79248
  bridge: sandboxFsBridge,
79011
79249
  modelContextWindowTokens: options?.modelContextWindowTokens,
79012
79250
  imageSanitization
79013
- });
79014
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(sandboxed, sandboxRoot) : sandboxed];
79251
+ }), readEditTracker);
79252
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(tracked, sandboxRoot) : tracked];
79015
79253
  }
79016
- const wrapped = createSymiReadTool(createReadTool(workspaceRoot), {
79254
+ const tracked = wrapReadToolWithTracker(createSymiReadTool(createReadTool(workspaceRoot), {
79017
79255
  modelContextWindowTokens: options?.modelContextWindowTokens,
79018
79256
  imageSanitization
79019
- });
79020
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(wrapped, workspaceRoot) : wrapped];
79257
+ }), readEditTracker);
79258
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(tracked, workspaceRoot) : tracked];
79021
79259
  }
79022
79260
  if (tool.name === "bash" || tool.name === execToolName) return [];
79023
79261
  if (tool.name === "write") {
79024
79262
  if (sandboxRoot) return [];
79025
- const wrapped = wrapToolParamNormalization(createWriteTool(workspaceRoot), CLAUDE_PARAM_GROUPS.write);
79026
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(wrapped, workspaceRoot) : wrapped];
79263
+ const tracked = wrapWriteToolWithTracker(wrapToolParamNormalization(createWriteTool(workspaceRoot), CLAUDE_PARAM_GROUPS.write), readEditTracker);
79264
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(tracked, workspaceRoot) : tracked];
79027
79265
  }
79028
79266
  if (tool.name === "edit") {
79029
79267
  if (sandboxRoot) return [];
79030
- const wrapped = wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit);
79031
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(wrapped, workspaceRoot) : wrapped];
79268
+ const guarded = wrapEditToolWithGuard(wrapToolWithDescriptionOverride(wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit), EDIT_TOOL_DESCRIPTION), readEditTracker);
79269
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(guarded, workspaceRoot) : guarded];
79032
79270
  }
79033
79271
  return [tool];
79034
79272
  });
@@ -79071,22 +79309,18 @@ function createSymiCodingTools(options) {
79071
79309
  } : void 0,
79072
79310
  workspaceOnly: applyPatchWorkspaceOnly
79073
79311
  });
79312
+ const sandboxedEditTool = sandboxRoot ? wrapEditToolWithGuard(createSandboxedEditTool({
79313
+ root: sandboxRoot,
79314
+ bridge: sandboxFsBridge
79315
+ }), readEditTracker) : null;
79316
+ const sandboxedWriteTool = sandboxRoot ? wrapWriteToolWithTracker(createSandboxedWriteTool({
79317
+ root: sandboxRoot,
79318
+ bridge: sandboxFsBridge
79319
+ }), readEditTracker) : null;
79074
79320
  const withHooks = applyToolPolicyPipeline({
79075
79321
  tools: applyOwnerOnlyToolPolicy([
79076
79322
  ...base,
79077
- ...sandboxRoot ? allowWorkspaceWrites ? [workspaceOnly ? wrapToolWorkspaceRootGuard(createSandboxedEditTool({
79078
- root: sandboxRoot,
79079
- bridge: sandboxFsBridge
79080
- }), sandboxRoot) : createSandboxedEditTool({
79081
- root: sandboxRoot,
79082
- bridge: sandboxFsBridge
79083
- }), workspaceOnly ? wrapToolWorkspaceRootGuard(createSandboxedWriteTool({
79084
- root: sandboxRoot,
79085
- bridge: sandboxFsBridge
79086
- }), sandboxRoot) : createSandboxedWriteTool({
79087
- root: sandboxRoot,
79088
- bridge: sandboxFsBridge
79089
- })] : [] : [],
79323
+ ...sandboxRoot ? allowWorkspaceWrites && sandboxedEditTool && sandboxedWriteTool ? [workspaceOnly ? wrapToolWorkspaceRootGuard(sandboxedEditTool, sandboxRoot) : sandboxedEditTool, workspaceOnly ? wrapToolWorkspaceRootGuard(sandboxedWriteTool, sandboxRoot) : sandboxedWriteTool] : [] : [],
79090
79324
  ...applyPatchTool ? [applyPatchTool] : [],
79091
79325
  execTool,
79092
79326
  processTool,
@@ -79474,7 +79708,8 @@ async function compactEmbeddedPiSessionDirect(params) {
79474
79708
  userTime,
79475
79709
  userTimeFormat,
79476
79710
  contextFiles,
79477
- memoryCitationsMode: params.config?.memory?.citations
79711
+ memoryCitationsMode: params.config?.memory?.citations,
79712
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline
79478
79713
  }));
79479
79714
  const sessionLock = await acquireSessionWriteLock({
79480
79715
  sessionFile: params.sessionFile,