@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
@@ -3,7 +3,7 @@ import { $t as triggerInternalHook, A as normalizeChannelId, B as getPluginComma
3
3
  import { A as buildConfiguredAllowlistKeys, At as resolveShellEnvFallbackTimeoutMs, Ct as resolveEnvApiKey, E as withFileLock, Et as normalizeSecretInput, F as modelKey, H as resolveDefaultModelForAgent, Ht as DEFAULT_MODEL, I as normalizeModelRef$2, K as resolveSubagentSpawnModelSelection, L as normalizeProviderId, M as findNormalizedProviderValue, Ot as getShellPathFromLoginShell, P as isCliProvider, T as resolveSymiAgentDir, Ut as DEFAULT_PROVIDER, V as resolveConfiguredModelRef, Vt as DEFAULT_CONTEXT_TOKENS, W as resolveModelRefFromString, Wt as resolveAuthProfileDisplayLabel, _t as createOllamaStreamFn, a as markAuthProfileFailure, b as ensureAuthProfileStore, bt as requireApiKey, c as resolveApiKeyForProfile, g as markAuthProfileGood, gt as OLLAMA_NATIVE_BASE_URL, h as listProfilesForProvider, i as isProfileInCooldown, j as buildModelAliasIndex, k as buildAllowedModelSet, m as dedupeProfileIds, n as resolveAuthProfileOrder, o as markAuthProfileUsed, q as resolveThinkingDefault, r as getSoonestCooldownExpiry, vt as getApiKeyForModel, w as resolveAuthStorePathForDisplay, wt as resolveModelAuthMode, xt as resolveApiKeyForProvider, yt as getCustomProviderApiKey } from "./auth-profiles-BBniPGeS.js";
4
4
  import { t as formatCliCommand } from "./command-format-BtYOfWxC.js";
5
5
  import { C as resolveThreadParentSessionKey, S as parseAgentSessionKey, _ as getSubagentDepth, b as isCronSessionKey, c as normalizeMainKey, d as sanitizeAgentId, h as normalizeAccountId$2, l as resolveAgentIdFromSessionKey, m as DEFAULT_ACCOUNT_ID, o as classifySessionKeyShape, r as buildAgentMainSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID, u as resolveThreadSessionKeys, v as isAcpSessionKey, x as isSubagentSessionKey } from "./session-key-DjZ7Z1hW.js";
6
- import { t as resolveSymiPackageRoot } from "./symi-root-BNuQ4lAT.js";
6
+ import { n as resolveSymiPackageRootSync, t as resolveSymiPackageRoot } from "./symi-root-BNuQ4lAT.js";
7
7
  import { a as logError, i as logDebug, n as runExec, o as logInfo, r as spawnWithFallback, s as logWarn, t as runCommandWithTimeout } from "./exec-CBKBIMpA.js";
8
8
  import { C as ensureAgentWorkspace, E as loadWorkspaceBootstrapFiles, a as resolveAgentModelFallbacksOverride, c as resolveAgentWorkspaceDir, d as resolveSessionAgentId, f as resolveSessionAgentIds, g as DEFAULT_IDENTITY_FILENAME, h as DEFAULT_BOOTSTRAP_FILENAME, i as resolveAgentDir, l as resolveDefaultAgentId, m as DEFAULT_AGENT_WORKSPACE_DIR, n as listAgentIds, o as resolveAgentModelPrimary, r as resolveAgentConfig, s as resolveAgentSkillsFilter, u as resolveEffectiveModelFallbacks, w as filterBootstrapFilesForSession } from "./agent-scope-D-jRCY0d.js";
9
9
  import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-DuFIqfeC.js";
@@ -14,29 +14,29 @@ import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discov
14
14
  import { r as isPathInsideWithRealpath } from "./scan-paths-ppKrtZ9U.js";
15
15
  import { a as resolveSkillsPromptForRun, d as resolveSandboxInputPath, h as applySkillEnvOverridesFromSnapshot, i as loadWorkspaceSkillEntries, l as assertMediaNotDataUrl, m as applySkillEnvOverrides, p as resolveSandboxedMediaSource, r as buildWorkspaceSkillSnapshot, u as assertSandboxPath } from "./skills-D_oCiaQn.js";
16
16
  import { a as safeStatSync, c as applyTestPluginDefaults, d as resolveEnableState, f as resolveMemorySlotDecision, h as isDangerousHostEnvVarName, i as isPathInside, n as loadPluginManifestRegistry, r as discoverSymiPlugins, u as normalizePluginsConfig } from "./manifest-registry-D5bnO5uA.js";
17
- import { A as parseConfigPath, B as resolveAgentMaxConcurrent, C as parseDurationMs, D as setConfigOverride, E as resetConfigOverrides, H as VERSION, M as unsetConfigValueAtPath, O as unsetConfigOverride, T as getConfigOverrides, _ as isInboundPathAllowed, b as resolveIMessageRemoteAttachmentRoots, c as resolveConfigSnapshotHash, h as resolveTelegramCustomCommands, i as loadConfig, j as setConfigValueAtPath, k as getConfigValueAtPath, l as writeConfigFile, m as normalizeTelegramCommandName, o as readConfigFileSnapshot, p as TELEGRAM_COMMAND_NAME_PATTERN, u as validateConfigObjectWithPlugins, w as validateJsonSchemaValue, x as normalizeScpRemoteHost, y as resolveIMessageAttachmentRoots, z as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "./config-DXt3pc08.js";
17
+ import { A as parseConfigPath, B as resolveAgentMaxConcurrent, C as parseDurationMs, D as setConfigOverride, E as resetConfigOverrides, H as VERSION, M as unsetConfigValueAtPath, O as unsetConfigOverride, T as getConfigOverrides, _ as isInboundPathAllowed, b as resolveIMessageRemoteAttachmentRoots, c as resolveConfigSnapshotHash, h as resolveTelegramCustomCommands, i as loadConfig, j as setConfigValueAtPath, k as getConfigValueAtPath, l as writeConfigFile, m as normalizeTelegramCommandName, o as readConfigFileSnapshot, p as TELEGRAM_COMMAND_NAME_PATTERN, u as validateConfigObjectWithPlugins, w as validateJsonSchemaValue, x as normalizeScpRemoteHost, y as resolveIMessageAttachmentRoots, z as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "./config-DE6JXMtt.js";
18
18
  import { Rt as SESSION_LABEL_MAX_LENGTH, t as GatewayClient } from "./client-CJIMV1WD.js";
19
- import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege, t as buildGatewayConnectionDetails } from "./call-M4YyUnwu.js";
19
+ import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege, t as buildGatewayConnectionDetails } from "./call-X_vwo309.js";
20
20
  import { a as isInternalMessageChannel, c as listDeliverableMessageChannels, d as resolveMessageChannel, h as GATEWAY_CLIENT_NAMES, i as isGatewayMessageChannel, l as normalizeMessageChannel, m as GATEWAY_CLIENT_MODES, n as isDeliverableMessageChannel, o as isMarkdownCapableMessageChannel, p as GATEWAY_CLIENT_IDS, t as INTERNAL_MESSAGE_CHANNEL, u as resolveGatewayMessageChannel } from "./message-channel-C9dERklz.js";
21
21
  import { i as normalizeInputProvenance, n as applyInputProvenanceToUserMessage, r as hasInterSessionUserProvenance } from "./input-provenance-D0lNkCf6.js";
22
- import { A as DEFAULT_RESET_TRIGGERS, B as resolveGroupSessionKey, D as resolveSessionResetPolicy, E as resolveChannelResetConfig, F as resolveMainSessionKey, G as deliveryContextKey, J as normalizeSessionDeliveryFields, K as mergeDeliveryContext, L as deriveSessionMetaPatch, O as resolveSessionResetType, P as resolveExplicitAgentSessionKey, T as evaluateSessionFreshness, U as resolveSessionLockMaxHoldFromTimeout, V as acquireSessionWriteLock, W as deliveryContextFromSession, Y as normalizeAccountId$3, _ as capArrayByJsonBytes, a as resolveAndPersistSessionFile, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as archiveSessionTranscripts, j as resolveFreshSessionTotalTokens, k as resolveThreadFlag, m as resolveCacheTtlMs$1, n as parseSessionThreadInfo, o as loadSessionStore, p as isCacheEnabled, q as normalizeDeliveryContext, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, w as resolveSessionKey } from "./sessions-BPD85pWA.js";
22
+ import { A as DEFAULT_RESET_TRIGGERS, B as resolveGroupSessionKey, D as resolveSessionResetPolicy, E as resolveChannelResetConfig, F as resolveMainSessionKey, G as deliveryContextKey, J as normalizeSessionDeliveryFields, K as mergeDeliveryContext, L as deriveSessionMetaPatch, O as resolveSessionResetType, P as resolveExplicitAgentSessionKey, T as evaluateSessionFreshness, U as resolveSessionLockMaxHoldFromTimeout, V as acquireSessionWriteLock, W as deliveryContextFromSession, Y as normalizeAccountId$3, _ as capArrayByJsonBytes, a as resolveAndPersistSessionFile, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as archiveSessionTranscripts, j as resolveFreshSessionTotalTokens, k as resolveThreadFlag, m as resolveCacheTtlMs$1, n as parseSessionThreadInfo, o as loadSessionStore, p as isCacheEnabled, q as normalizeDeliveryContext, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, w as resolveSessionKey } from "./sessions-DCr5nAOw.js";
23
23
  import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-Csntmwwn.js";
24
24
  import { _ as listEnabledDiscordAccounts, a as isWhatsAppGroupJid, c as listEnabledTelegramAccounts, d as resolveTelegramToken, f as resolveSlackAccount, g as createDiscordActionGate, h as resolveSlackBotToken, l as listTelegramAccountIds, m as resolveSlackAppToken, n as listChannelPlugins, o as normalizeWhatsAppTarget, r as normalizeChannelId$1, s as createTelegramActionGate, t as getChannelPlugin, u as resolveTelegramAccount, v as resolveDiscordAccount, y as normalizeDiscordToken } from "./plugins-CwSlLxM8.js";
25
25
  import { a as logWebSelfId, i as getWebAuthAgeMs, m as webAuthExists, n as resolveWhatsAppAccount, o as logoutWeb, u as readWebSelfId } from "./accounts-D9ITgITj.js";
26
26
  import { t as normalizeChatType } from "./chat-type-CeFzWU-6.js";
27
- 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-CJJuN-Fg.js";
28
- 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-BaFD3lZ7.js";
29
- import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$4 } from "./with-timeout-BuIx7QnX.js";
30
- 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-Bdk_R0pQ.js";
27
+ 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-CoSPwGiI.js";
28
+ 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-CcD9S5so.js";
29
+ import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$4 } from "./with-timeout-C1vsg3IF.js";
30
+ 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-CeNdvQJ3.js";
31
31
  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-Ci8Xsc_Y.js";
32
32
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-CIjIGxEE.js";
33
33
  import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-D1eLj5t8.js";
34
- import { 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 parseTelegramTarget, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, Y as resolveTelegramTargetChatType, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, 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 isVoiceCompatibleAudio, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-Dz656vcm.js";
34
+ import { 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 parseTelegramTarget, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, Y as resolveTelegramTargetChatType, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, 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 isVoiceCompatibleAudio, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-Bi8XhwOZ.js";
35
35
  import { c as detectMime, d as imageMimeFromFormat, f as isAudioFileName, g as MAX_IMAGE_BYTES, i as getImageMetadata, l as extensionForMime, p as isGifMedia, s as resizeToJpeg, v as mediaKindFromMime } from "./image-ops-CUkaZz2F.js";
36
- import { A as isTransientHttpError, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as ensureSessionHeader, I as resolveBootstrapMaxChars, L as resolveBootstrapTotalMaxChars, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as buildBootstrapContextFiles, R as sanitizeGoogleTurnOrdering, S as isCompactionFailureError, T as isFailoverErrorMessage, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, b as isBillingAssistantError, c as extractToolCallsFromAssistant, d as isAntigravityClaude, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, m as classifyFailoverReason, n as validateGeminiTurns, o as normalizeTextForComparison, p as BILLING_ERROR_USER_MESSAGE, r as pickFallbackThinkingLevel, s as sanitizeSessionMessagesImages, t as validateAnthropicTurns, u as downgradeOpenAIReasoningBlocks, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError } from "./pi-embedded-helpers-YD1JQ5xV.js";
37
- import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, f as resolveSandboxConfigForAgent, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-WWVXeHlA.js";
38
- import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-D2ohnA09.js";
39
- import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-C66bI8ZM.js";
36
+ import { A as isTransientHttpError, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as ensureSessionHeader, I as resolveBootstrapMaxChars, L as resolveBootstrapTotalMaxChars, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as buildBootstrapContextFiles, R as sanitizeGoogleTurnOrdering, S as isCompactionFailureError, T as isFailoverErrorMessage, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, b as isBillingAssistantError, c as extractToolCallsFromAssistant, d as isAntigravityClaude, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, m as classifyFailoverReason, n as validateGeminiTurns, o as normalizeTextForComparison, p as BILLING_ERROR_USER_MESSAGE, r as pickFallbackThinkingLevel, s as sanitizeSessionMessagesImages, t as validateAnthropicTurns, u as downgradeOpenAIReasoningBlocks, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError } from "./pi-embedded-helpers-BgpogTwt.js";
37
+ import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, f as resolveSandboxConfigForAgent, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-T9SO3y3b.js";
38
+ import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-faqXQ9f1.js";
39
+ import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-BkYSrDni.js";
40
40
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-Ba_ROWsq.js";
41
41
  import { i as resolveExistingPathsWithinRoot, r as DEFAULT_UPLOAD_DIR } from "./paths-OWKu4tXF.js";
42
42
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-Ixuyn7h8.js";
@@ -48,10 +48,10 @@ import { c as resolveStorePath, i as resolveSessionTranscriptPath, n as resolveS
48
48
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-D5O01TlD.js";
49
49
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-CVLISeRT.js";
50
50
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels, u as resolveResponseUsageMode } from "./thinking-8sKPnzpp.js";
51
- import { t as ensureSymiModelsJson } from "./models-config-J1x_DaPn.js";
51
+ import { t as ensureSymiModelsJson } from "./models-config-CHVfeRDR.js";
52
52
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-BUN71nd5.js";
53
- import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-lJe72a5i.js";
54
- import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-CgQo1mIM.js";
53
+ import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-BmWvHCEJ.js";
54
+ import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-8N1YbbDk.js";
55
55
  import { f as runTasksWithConcurrency } from "./internal-C2jxeHS9.js";
56
56
  import { n as retryAsync } from "./retry-C4Q_VPOo.js";
57
57
  import { c as imageResultFromFile, d as readNumberParam, f as readReactionParams, h as readStringParam, l as jsonResult, m as readStringOrNumberParam, n as missingTargetError, o as createActionGate, p as readStringArrayParam, r as unknownTargetError, s as imageResult, t as ambiguousTargetError, u as parseAvailableTags } from "./target-errors-Co0LcWKH.js";
@@ -63,13 +63,13 @@ import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMedia
63
63
  import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-BRlF7czi.js";
64
64
  import { a as resolveNativeSkillsEnabled, i as resolveNativeCommandsEnabled, n as isNativeCommandsExplicitlyDisabled, r as isRestartEnabled, t as isCommandFlagEnabled } from "./commands-Ee-evDmm.js";
65
65
  import { a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, i as listChatCommands, l as parseCommandArgs, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices } from "./commands-registry-CsxsFveo.js";
66
- import { _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as extractTextFromChatContent, 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, y as stripReasoningTagsFromText } from "./image-CnEFsKgw.js";
66
+ import { _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as extractTextFromChatContent, 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, y as stripReasoningTagsFromText } from "./image-Cp6qRPZ2.js";
67
67
  import { n as resolveToolDisplay } from "./tool-display-I4rDxv8J.js";
68
68
  import { n as formatTimeAgo } from "./format-relative-BDwAggS5.js";
69
69
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-DZozDZN-.js";
70
- import { _ as applyTemplate, a as resolveMediaAttachmentLocalRoots, c as resolveAttachmentKind, d as registerUnhandledRejectionHandler, f as resolveConcurrency, g as CLI_OUTPUT_MAX_BUFFER, h as resolveMediaUnderstandingScope, i as resolveAutoImageModel, l as buildRandomTempFilePath, m as normalizeMediaUnderstandingChatType, n as createMediaAttachmentCache, o as runCapability, p as resolveTimeoutMs, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-Cbz8g76d.js";
71
- import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-BuYrTTBn.js";
72
- import { a as loadCombinedSessionStoreForGateway, u as lookupContextTokens } from "./session-utils-DaBIs243.js";
70
+ import { _ as applyTemplate, a as resolveMediaAttachmentLocalRoots, c as resolveAttachmentKind, d as registerUnhandledRejectionHandler, f as resolveConcurrency, g as CLI_OUTPUT_MAX_BUFFER, h as resolveMediaUnderstandingScope, i as resolveAutoImageModel, l as buildRandomTempFilePath, m as normalizeMediaUnderstandingChatType, n as createMediaAttachmentCache, o as runCapability, p as resolveTimeoutMs, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-CiThXXY3.js";
71
+ import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-FckJ4pcL.js";
72
+ import { a as loadCombinedSessionStoreForGateway, u as lookupContextTokens } from "./session-utils-DQ-t0PxQ.js";
73
73
  import { b as ensureSkillsWatcher, i as resolveSkillCommandInvocation, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, r as listSkillCommandsForWorkspace, t as listReservedChatSlashCommandNames, x as getSkillsSnapshotVersion } from "./skill-commands-DrX4xCNq.js";
74
74
  import { i as readChannelAllowFromStore, l as listPairingChannels, o as removeChannelAllowFromStoreEntry, s as upsertChannelPairingRequest, t as addChannelAllowFromStoreEntry } from "./pairing-store-B2viSnRj.js";
75
75
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-Bsts3MRD.js";
@@ -83,19 +83,19 @@ import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChan
83
83
  import { n as normalizePollInput } from "./polls-Cm1-n4jF.js";
84
84
  import { t as convertMarkdownTables } from "./tables-DL_wkymg.js";
85
85
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName } from "./constants-l9TQg-aP.js";
86
- import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-Bujr5pk7.js";
86
+ import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-B5HVCnUI.js";
87
87
  import { i as parseAbsoluteTimeMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-BDqsqTKI.js";
88
88
  import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-CmPVNjnf.js";
89
- import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-5GrSqB6v.js";
90
- 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-9sVK0zP4.js";
89
+ import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-CSkNKYIc.js";
90
+ 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-CupfdYEg.js";
91
91
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-BFA2RukR.js";
92
92
  import { t as parseTimeoutMs } from "./parse-timeout-FUO1ff14.js";
93
93
  import { t as makeProxyFetch } from "./proxy-GY5xhMp0.js";
94
- import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-Sxbew659.js";
95
- import { r as detectBinary } from "./onboard-helpers-DWDNKmkJ.js";
94
+ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-BxvfG7Oj.js";
95
+ import { r as detectBinary } from "./onboard-helpers-CNFdWQIV.js";
96
96
  import { t as resolvePairingIdLabel } from "./pairing-labels-BHx_CdbP.js";
97
97
  import { t as getActiveWebListener } from "./active-listener-DEi7sEFa.js";
98
- import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-o0ytjRqu.js";
98
+ import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-GxaAKOgf.js";
99
99
  import { createRequire } from "node:module";
100
100
  import { execFileSync, spawn, spawnSync } from "node:child_process";
101
101
  import os, { homedir } from "node:os";
@@ -4957,16 +4957,16 @@ function shouldComputeCommandAuthorized(text, cfg, options) {
4957
4957
 
4958
4958
  //#endregion
4959
4959
  //#region src/channels/sender-label.ts
4960
- function normalize(value) {
4960
+ function normalize$1(value) {
4961
4961
  const trimmed = value?.trim();
4962
4962
  return trimmed ? trimmed : void 0;
4963
4963
  }
4964
4964
  function resolveSenderLabel(params) {
4965
- const name = normalize(params.name);
4966
- const username = normalize(params.username);
4967
- const tag = normalize(params.tag);
4968
- const e164 = normalize(params.e164);
4969
- const id = normalize(params.id);
4965
+ const name = normalize$1(params.name);
4966
+ const username = normalize$1(params.username);
4967
+ const tag = normalize$1(params.tag);
4968
+ const e164 = normalize$1(params.e164);
4969
+ const id = normalize$1(params.id);
4970
4970
  const display = name ?? username ?? tag ?? "";
4971
4971
  const idPart = e164 ?? id ?? "";
4972
4972
  if (display && idPart && display !== idPart) return `${display} (${idPart})`;
@@ -20470,7 +20470,7 @@ async function routeReply(params) {
20470
20470
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
20471
20471
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
20472
20472
  try {
20473
- const { deliverOutboundPayloads } = await import("./deliver-Bdk_R0pQ.js").then((n) => n.n);
20473
+ const { deliverOutboundPayloads } = await import("./deliver-CeNdvQJ3.js").then((n) => n.n);
20474
20474
  return {
20475
20475
  ok: true,
20476
20476
  messageId: (await deliverOutboundPayloads({
@@ -23720,8 +23720,39 @@ const GatewayToolSchema = Type.Object({
23720
23720
  baseHash: Type.Optional(Type.String()),
23721
23721
  sessionKey: Type.Optional(Type.String()),
23722
23722
  note: Type.Optional(Type.String()),
23723
- restartDelayMs: Type.Optional(Type.Number())
23723
+ restartDelayMs: Type.Optional(Type.Number()),
23724
+ userRequestAcknowledgment: Type.Optional(Type.String())
23724
23725
  });
23726
+ /** Actions that mutate gateway state and require explicit user authorization. */
23727
+ const DESTRUCTIVE_ACTIONS = new Set([
23728
+ "config.apply",
23729
+ "config.patch",
23730
+ "update.run"
23731
+ ]);
23732
+ /** Minimum length for a meaningful authorization message. */
23733
+ const MIN_AUTHORIZATION_LENGTH = 10;
23734
+ /**
23735
+ * Asserts the user's request was explicitly acknowledged for destructive
23736
+ * actions. Throws a descriptive error if the acknowledgment is missing,
23737
+ * empty, or trivially short.
23738
+ *
23739
+ * NOTE: This is defense-in-depth, not a hard barrier. A determined model
23740
+ * could still populate the field with fabricated text. The barrier exists
23741
+ * to:
23742
+ * 1. Force the agent to deliberately compose a justification (vs. blind
23743
+ * tool invocation).
23744
+ * 2. Provide an audit trail (the acknowledgment is logged with the tool
23745
+ * call args).
23746
+ * 3. Surface for future tightening (e.g., matching against real session
23747
+ * history).
23748
+ */
23749
+ function assertUserAuthorization(action, params) {
23750
+ if (!DESTRUCTIVE_ACTIONS.has(action)) return;
23751
+ const ack = params.userRequestAcknowledgment;
23752
+ const trimmed = typeof ack === "string" ? ack.trim() : "";
23753
+ 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.`);
23754
+ 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)}.`);
23755
+ }
23725
23756
  function createGatewayTool(opts) {
23726
23757
  return {
23727
23758
  label: "Gateway",
@@ -23732,6 +23763,7 @@ function createGatewayTool(opts) {
23732
23763
  execute: async (_toolCallId, args) => {
23733
23764
  const params = args;
23734
23765
  const action = readStringParam(params, "action", { required: true });
23766
+ assertUserAuthorization(action, params);
23735
23767
  if (action === "restart") {
23736
23768
  if (!isRestartEnabled(opts?.config)) throw new Error("Gateway restart is disabled (commands.restart=false).");
23737
23769
  const sessionKey = typeof params.sessionKey === "string" && params.sessionKey.trim() ? params.sessionKey.trim() : opts?.agentSessionKey?.trim() || void 0;
@@ -32691,6 +32723,38 @@ function setCliSessionId(entry, provider, sessionId) {
32691
32723
  //#endregion
32692
32724
  //#region src/config/model-profiles-builtin.ts
32693
32725
  /**
32726
+ * Shared safety + output-style additions applied to most built-in profiles
32727
+ * and the Generic fallback. These rules came from a long history of
32728
+ * model-specific bugs (verification-monologue padding, "I have addressed"
32729
+ * preambles, post-answer assessment lists). Keeping them in one place
32730
+ * means a new profile inherits sane defaults instead of starting empty.
32731
+ *
32732
+ * Stage 2.4 of the prompt-reduction plan: rules that ALL profiles need
32733
+ * live here; profile-specific rules (control-token stripping, tool-arg
32734
+ * cleanup, reasoning hints) live in their own per-profile additions.
32735
+ *
32736
+ * Exported so resolve-model-profile.ts can apply the same additions to
32737
+ * the Generic fallback profile — no model resolves to "Generic" without
32738
+ * inheriting the safety/style rules.
32739
+ */
32740
+ const SAFETY_AND_STYLE_ADDITIONS = [
32741
+ "CRITICAL OUTPUT RULES:",
32742
+ "- Your response ends when you have delivered the answer. Do not append anything after.",
32743
+ "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
32744
+ "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
32745
+ "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
32746
+ "- If you need to verify your work, do so before writing your response, not after.",
32747
+ "- Send brief progress updates on long tasks so the user knows you are active."
32748
+ ];
32749
+ /** Hint for native-reasoning models (Nemotron, Qwen 3.5/3.6) to keep
32750
+ * planning internal. Not applied to Gemma/Ollama because those models
32751
+ * don't have structured thinking and the rule confuses them. */
32752
+ const REASONING_DISCIPLINE_ADDITION = "- Keep planning and reasoning internal. Only speak when you have a result or need user input.";
32753
+ /** Hint for models that leak Gemma-style control tokens (Gemma family,
32754
+ * Ollama hosting any uncensored open model). Forces tool-arg cleanup and
32755
+ * forbids leaking turn markers in user-visible text. */
32756
+ 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."];
32757
+ /**
32694
32758
  * Built-in model profiles. Ordered from most-specific to least-specific so
32695
32759
  * that `resolveModelProfile` can return the first match.
32696
32760
  *
@@ -32724,17 +32788,7 @@ const BUILTIN_PROFILES = [
32724
32788
  hasStructuredThinking: false,
32725
32789
  validateToolArgs: true
32726
32790
  },
32727
- promptAdditions: [
32728
- "CRITICAL OUTPUT RULES:",
32729
- "- Your response ends when you have delivered the answer. Do not append anything after.",
32730
- "- Do not output raw control tokens, channel tags, or turn markers.",
32731
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
32732
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
32733
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
32734
- "- If you need to verify your work, do so before writing your response, not after.",
32735
- "- Send brief progress updates on long tasks so the user knows you are active.",
32736
- "- 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."
32737
- ],
32791
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, ...CONTROL_TOKEN_ADDITIONS],
32738
32792
  ui: {
32739
32793
  badge: "Local",
32740
32794
  watchdogMs: 9e5,
@@ -32761,16 +32815,7 @@ const BUILTIN_PROFILES = [
32761
32815
  hasStructuredThinking: true,
32762
32816
  validateToolArgs: false
32763
32817
  },
32764
- promptAdditions: [
32765
- "CRITICAL OUTPUT RULES:",
32766
- "- Your response ends when you have delivered the answer. Do not append anything after.",
32767
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
32768
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
32769
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
32770
- "- If you need to verify your work, do so before writing your response, not after.",
32771
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
32772
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
32773
- ],
32818
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
32774
32819
  ui: {
32775
32820
  badge: "Local",
32776
32821
  watchdogMs: 9e5,
@@ -32796,7 +32841,7 @@ const BUILTIN_PROFILES = [
32796
32841
  hasStructuredThinking: true,
32797
32842
  validateToolArgs: false
32798
32843
  },
32799
- promptAdditions: [],
32844
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS],
32800
32845
  ui: {
32801
32846
  badge: "API",
32802
32847
  watchdogMs: 3e5,
@@ -32829,15 +32874,7 @@ const BUILTIN_PROFILES = [
32829
32874
  hasStructuredThinking: true,
32830
32875
  validateToolArgs: false
32831
32876
  },
32832
- promptAdditions: [
32833
- "CRITICAL OUTPUT RULES:",
32834
- "- Your response ends when you have delivered the answer. Do not append anything after.",
32835
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
32836
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
32837
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
32838
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
32839
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
32840
- ],
32877
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
32841
32878
  ui: {
32842
32879
  badge: "Spider",
32843
32880
  watchdogMs: 9e5,
@@ -32870,16 +32907,7 @@ const BUILTIN_PROFILES = [
32870
32907
  hasStructuredThinking: false,
32871
32908
  validateToolArgs: true
32872
32909
  },
32873
- promptAdditions: [
32874
- "CRITICAL OUTPUT RULES:",
32875
- "- Your response ends when you have delivered the answer. Do not append anything after.",
32876
- "- Do not output raw control tokens, channel tags, or turn markers.",
32877
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
32878
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
32879
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
32880
- "- Send brief progress updates on long tasks so the user knows you are active.",
32881
- "- 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."
32882
- ],
32910
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, ...CONTROL_TOKEN_ADDITIONS],
32883
32911
  ui: {
32884
32912
  badge: "Spider",
32885
32913
  watchdogMs: 6e5,
@@ -32911,16 +32939,7 @@ const BUILTIN_PROFILES = [
32911
32939
  hasStructuredThinking: true,
32912
32940
  validateToolArgs: false
32913
32941
  },
32914
- promptAdditions: [
32915
- "CRITICAL OUTPUT RULES:",
32916
- "- Your response ends when you have delivered the answer. Do not append anything after.",
32917
- "- Do not begin any sentence with 'I have addressed' or 'I've reviewed'.",
32918
- "- Do not write verification checklists, self-assessments, or numbered assessment lists after your answer.",
32919
- "- Do not write 'Verification:', 'Requirements:', 'Status Check:', or 'Everything is correct'.",
32920
- "- If you need to verify your work, do so before writing your response, not after.",
32921
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
32922
- "- When working on multi-step tasks, send a brief one-line status update so the user knows you are active."
32923
- ],
32942
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS, REASONING_DISCIPLINE_ADDITION],
32924
32943
  ui: {
32925
32944
  badge: "CoreWeave",
32926
32945
  watchdogMs: 9e5,
@@ -32931,7 +32950,15 @@ const BUILTIN_PROFILES = [
32931
32950
 
32932
32951
  //#endregion
32933
32952
  //#region src/config/resolve-model-profile.ts
32934
- /** Default profile returned when no match is found. */
32953
+ /**
32954
+ * Default profile returned when no match is found.
32955
+ *
32956
+ * Stage 2.4 of the prompt-reduction plan: the Generic fallback now ships
32957
+ * the same safety+style additions as every named profile, so newly-added
32958
+ * models without a profile entry inherit sane defaults instead of
32959
+ * starting empty (which would silently regress safety rules until someone
32960
+ * notices and adds a profile).
32961
+ */
32935
32962
  const FALLBACK_PROFILE = {
32936
32963
  match: "*",
32937
32964
  label: "Generic",
@@ -32950,7 +32977,7 @@ const FALLBACK_PROFILE = {
32950
32977
  hasStructuredThinking: false,
32951
32978
  validateToolArgs: false
32952
32979
  },
32953
- promptAdditions: [],
32980
+ promptAdditions: [...SAFETY_AND_STYLE_ADDITIONS],
32954
32981
  ui: {
32955
32982
  watchdogMs: 3e5,
32956
32983
  armWatchdogOnSend: true
@@ -39539,10 +39566,90 @@ async function prepareSessionManagerForRun(params) {
39539
39566
  }
39540
39567
  }
39541
39568
 
39569
+ //#endregion
39570
+ //#region src/agents/system-prompt-skills-autoload.ts
39571
+ const FRONTMATTER_RE = /^---\s*\n[\s\S]*?\n---\s*\n?/;
39572
+ let cachedPackageRoot;
39573
+ function getPackageRoot() {
39574
+ if (cachedPackageRoot === void 0) cachedPackageRoot = resolveSymiPackageRootSync({});
39575
+ return cachedPackageRoot;
39576
+ }
39577
+ function safeSkillName(name) {
39578
+ return /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/.test(name);
39579
+ }
39580
+ function tryLoadSkill(skillName, root) {
39581
+ const skillPath = path.join(root, "skills", skillName, "SKILL.md");
39582
+ try {
39583
+ if (!fs.statSync(skillPath).isFile()) return null;
39584
+ } catch {
39585
+ return null;
39586
+ }
39587
+ try {
39588
+ return fs.readFileSync(skillPath, "utf8");
39589
+ } catch {
39590
+ return null;
39591
+ }
39592
+ }
39593
+ function stripFrontmatter(body) {
39594
+ return body.replace(FRONTMATTER_RE, "").trimStart();
39595
+ }
39596
+ /**
39597
+ * Resolves and loads each named skill. Returns the inlinable Markdown block,
39598
+ * or empty string when no skills loaded / minimal mode / no names supplied.
39599
+ */
39600
+ function buildAutoLoadedSkillsBlock(opts) {
39601
+ if (opts.minimalMode) return "";
39602
+ const names = opts.skillNames.filter((n) => typeof n === "string" && n.trim().length > 0);
39603
+ if (names.length === 0) return "";
39604
+ const packageRoot = getPackageRoot();
39605
+ const loaded = [];
39606
+ for (const rawName of names) {
39607
+ const name = rawName.trim();
39608
+ if (!safeSkillName(name)) {
39609
+ logWarn(`autoLoadInline: skipping invalid skill name '${rawName}'`);
39610
+ continue;
39611
+ }
39612
+ let body = null;
39613
+ let source = "bundled";
39614
+ if (opts.workspaceDir) {
39615
+ body = tryLoadSkill(name, opts.workspaceDir);
39616
+ source = "workspace";
39617
+ }
39618
+ if (body === null && packageRoot) {
39619
+ body = tryLoadSkill(name, packageRoot);
39620
+ source = "bundled";
39621
+ }
39622
+ if (body === null) {
39623
+ logWarn(`autoLoadInline: skill '${name}' not found in workspace or bundled skills`);
39624
+ continue;
39625
+ }
39626
+ const stripped = stripFrontmatter(body).trim();
39627
+ if (!stripped) {
39628
+ logWarn(`autoLoadInline: skill '${name}' has empty body after frontmatter strip; skipping`);
39629
+ continue;
39630
+ }
39631
+ loaded.push({
39632
+ name,
39633
+ body: stripped,
39634
+ source
39635
+ });
39636
+ }
39637
+ if (loaded.length === 0) return "";
39638
+ return [
39639
+ "",
39640
+ "---",
39641
+ "",
39642
+ "## Auto-loaded Skills",
39643
+ "",
39644
+ loaded.map((skill) => `<!-- auto-loaded: ${skill.name} (${skill.source}) -->\n${skill.body}`).join("\n\n---\n\n"),
39645
+ ""
39646
+ ].join("\n");
39647
+ }
39648
+
39542
39649
  //#endregion
39543
39650
  //#region src/agents/pi-embedded-runner/system-prompt.ts
39544
39651
  function buildEmbeddedSystemPrompt(params) {
39545
- return buildAgentSystemPrompt({
39652
+ const corePrompt = buildAgentSystemPrompt({
39546
39653
  workspaceDir: params.workspaceDir,
39547
39654
  defaultThinkLevel: params.defaultThinkLevel,
39548
39655
  reasoningLevel: params.reasoningLevel,
@@ -39570,6 +39677,14 @@ function buildEmbeddedSystemPrompt(params) {
39570
39677
  contextFiles: params.contextFiles,
39571
39678
  memoryCitationsMode: params.memoryCitationsMode
39572
39679
  });
39680
+ const promptMode = params.promptMode ?? "full";
39681
+ const isMinimal = promptMode === "minimal" || promptMode === "none";
39682
+ const skillsBlock = buildAutoLoadedSkillsBlock({
39683
+ skillNames: params.autoLoadInlineSkills ?? [],
39684
+ workspaceDir: params.workspaceDir,
39685
+ minimalMode: isMinimal
39686
+ });
39687
+ return skillsBlock ? `${corePrompt}${skillsBlock}` : corePrompt;
39573
39688
  }
39574
39689
  function createSystemPromptOverride(systemPrompt) {
39575
39690
  const override = systemPrompt.trim();
@@ -40357,7 +40472,8 @@ async function runEmbeddedAttempt(params) {
40357
40472
  userTime,
40358
40473
  userTimeFormat,
40359
40474
  contextFiles,
40360
- memoryCitationsMode: params.config?.memory?.citations
40475
+ memoryCitationsMode: params.config?.memory?.citations,
40476
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline
40361
40477
  });
40362
40478
  const systemPromptReport = buildSystemPromptReport({
40363
40479
  source: "run",
@@ -44846,7 +44962,7 @@ async function deliverSessionMaintenanceWarning(params) {
44846
44962
  return;
44847
44963
  }
44848
44964
  try {
44849
- const { deliverOutboundPayloads } = await import("./deliver-Bdk_R0pQ.js").then((n) => n.n);
44965
+ const { deliverOutboundPayloads } = await import("./deliver-CeNdvQJ3.js").then((n) => n.n);
44850
44966
  await deliverOutboundPayloads({
44851
44967
  cfg: params.cfg,
44852
44968
  channel,
@@ -48300,7 +48416,7 @@ async function describeStickerImage(params) {
48300
48416
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
48301
48417
  try {
48302
48418
  const buffer = await fs$1.readFile(imagePath);
48303
- const { describeImageWithModel } = await import("./image-CnEFsKgw.js").then((n) => n.n);
48419
+ const { describeImageWithModel } = await import("./image-Cp6qRPZ2.js").then((n) => n.n);
48304
48420
  return (await describeImageWithModel({
48305
48421
  buffer,
48306
48422
  fileName: "sticker.webp",
@@ -48723,7 +48839,7 @@ function createWhatsAppLoginTool() {
48723
48839
  force: Type.Optional(Type.Boolean())
48724
48840
  }),
48725
48841
  execute: async (_toolCallId, args) => {
48726
- const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-BElXRp6T.js");
48842
+ const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-CtELJan3.js");
48727
48843
  if ((args?.action ?? "start") === "wait") {
48728
48844
  const result = await waitForWebLogin({ timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0 });
48729
48845
  return {
@@ -50099,7 +50215,7 @@ async function preflightDiscordMessage(params) {
50099
50215
  let preflightTranscript;
50100
50216
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
50101
50217
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
50102
- const { transcribeFirstAudio } = await import("./audio-preflight-1dv3T5Zx.js");
50218
+ const { transcribeFirstAudio } = await import("./audio-preflight-SaT5IcVn.js");
50103
50219
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
50104
50220
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
50105
50221
  ctx: {
@@ -53882,27 +53998,27 @@ function isVoiceChannelType(type) {
53882
53998
  function createDefaultDeps() {
53883
53999
  return {
53884
54000
  sendMessageWhatsApp: async (...args) => {
53885
- const { sendMessageWhatsApp } = await import("./web-CCEVjDcU.js");
54001
+ const { sendMessageWhatsApp } = await import("./web-s9NWpUYH.js");
53886
54002
  return await sendMessageWhatsApp(...args);
53887
54003
  },
53888
54004
  sendMessageTelegram: async (...args) => {
53889
- const { sendMessageTelegram } = await import("./send-Dz656vcm.js").then((n) => n.l);
54005
+ const { sendMessageTelegram } = await import("./send-Bi8XhwOZ.js").then((n) => n.l);
53890
54006
  return await sendMessageTelegram(...args);
53891
54007
  },
53892
54008
  sendMessageDiscord: async (...args) => {
53893
- const { sendMessageDiscord } = await import("./send-BaFD3lZ7.js").then((n) => n.t);
54009
+ const { sendMessageDiscord } = await import("./send-CcD9S5so.js").then((n) => n.t);
53894
54010
  return await sendMessageDiscord(...args);
53895
54011
  },
53896
54012
  sendMessageSlack: async (...args) => {
53897
- const { sendMessageSlack } = await import("./send-CJJuN-Fg.js").then((n) => n.n);
54013
+ const { sendMessageSlack } = await import("./send-CoSPwGiI.js").then((n) => n.n);
53898
54014
  return await sendMessageSlack(...args);
53899
54015
  },
53900
54016
  sendMessageSignal: async (...args) => {
53901
- const { sendMessageSignal } = await import("./send-5GrSqB6v.js").then((n) => n.i);
54017
+ const { sendMessageSignal } = await import("./send-CSkNKYIc.js").then((n) => n.i);
53902
54018
  return await sendMessageSignal(...args);
53903
54019
  },
53904
54020
  sendMessageIMessage: async (...args) => {
53905
- const { sendMessageIMessage } = await import("./send-9sVK0zP4.js").then((n) => n.n);
54021
+ const { sendMessageIMessage } = await import("./send-CupfdYEg.js").then((n) => n.n);
53906
54022
  return await sendMessageIMessage(...args);
53907
54023
  }
53908
54024
  };
@@ -64757,7 +64873,7 @@ async function registerSlackMonitorSlashCommands(params) {
64757
64873
  });
64758
64874
  const deliverSlashPayloads = async (replies) => {
64759
64875
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
64760
- import("./replies-Sxbew659.js").then((n) => n.r),
64876
+ import("./replies-BxvfG7Oj.js").then((n) => n.r),
64761
64877
  import("./chunk-CBaqrC3-.js").then((n) => n.s),
64762
64878
  import("./markdown-tables-Xw0UrL4I.js").then((n) => n.t)
64763
64879
  ]);
@@ -67030,7 +67146,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
67030
67146
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
67031
67147
  let preflightTranscript;
67032
67148
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
67033
- const { transcribeFirstAudio } = await import("./audio-preflight-1dv3T5Zx.js");
67149
+ const { transcribeFirstAudio } = await import("./audio-preflight-SaT5IcVn.js");
67034
67150
  preflightTranscript = await transcribeFirstAudio({
67035
67151
  ctx: {
67036
67152
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -69184,23 +69300,23 @@ let webLoginQrPromise = null;
69184
69300
  let webChannelPromise = null;
69185
69301
  let whatsappActionsPromise = null;
69186
69302
  function loadWebOutbound() {
69187
- webOutboundPromise ??= import("./outbound-CW8eNbCh.js").then((n) => n.t);
69303
+ webOutboundPromise ??= import("./outbound-b9pVFyW7.js").then((n) => n.t);
69188
69304
  return webOutboundPromise;
69189
69305
  }
69190
69306
  function loadWebLogin() {
69191
- webLoginPromise ??= import("./login-C7EdfiAr.js").then((n) => n.n);
69307
+ webLoginPromise ??= import("./login-DKeZ-sOf.js").then((n) => n.n);
69192
69308
  return webLoginPromise;
69193
69309
  }
69194
69310
  function loadWebLoginQr() {
69195
- webLoginQrPromise ??= import("./login-qr-BElXRp6T.js");
69311
+ webLoginQrPromise ??= import("./login-qr-CtELJan3.js");
69196
69312
  return webLoginQrPromise;
69197
69313
  }
69198
69314
  function loadWebChannel() {
69199
- webChannelPromise ??= import("./web-CCEVjDcU.js");
69315
+ webChannelPromise ??= import("./web-s9NWpUYH.js");
69200
69316
  return webChannelPromise;
69201
69317
  }
69202
69318
  function loadWhatsAppActions() {
69203
- whatsappActionsPromise ??= import("./whatsapp-actions-BUZuNBin.js");
69319
+ whatsappActionsPromise ??= import("./whatsapp-actions-Dx8FkbIf.js");
69204
69320
  return whatsappActionsPromise;
69205
69321
  }
69206
69322
  function createPluginRuntime() {
@@ -70458,6 +70574,91 @@ function wrapToolWithAbortSignal(tool, abortSignal) {
70458
70574
  };
70459
70575
  }
70460
70576
 
70577
+ //#endregion
70578
+ //#region src/agents/pi-tools.read-edit-guard.ts
70579
+ const RETRY_GUIDANCE_SUFFIX$1 = " Read the file first, then retry the edit.";
70580
+ function readGuardError(filePath) {
70581
+ 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}`);
70582
+ }
70583
+ function extractPath(args) {
70584
+ if (!args || typeof args !== "object") return;
70585
+ const record = args;
70586
+ const candidate = record.path ?? record.file_path;
70587
+ if (typeof candidate !== "string") return;
70588
+ const trimmed = candidate.trim();
70589
+ return trimmed.length > 0 ? trimmed : void 0;
70590
+ }
70591
+ function wrapReadToolWithTracker(tool, tracker) {
70592
+ return {
70593
+ ...tool,
70594
+ execute: async (toolCallId, args, signal, onUpdate) => {
70595
+ const result = await tool.execute(toolCallId, args, signal, onUpdate);
70596
+ if (!(!!result && typeof result === "object" && result.isError === true)) {
70597
+ const filePath = extractPath(args);
70598
+ if (filePath) tracker.recordRead(filePath);
70599
+ }
70600
+ return result;
70601
+ }
70602
+ };
70603
+ }
70604
+ function wrapWriteToolWithTracker(tool, tracker) {
70605
+ return {
70606
+ ...tool,
70607
+ execute: async (toolCallId, args, signal, onUpdate) => {
70608
+ const result = await tool.execute(toolCallId, args, signal, onUpdate);
70609
+ if (!(!!result && typeof result === "object" && result.isError === true)) {
70610
+ const filePath = extractPath(args);
70611
+ if (filePath) tracker.recordWrite(filePath);
70612
+ }
70613
+ return result;
70614
+ }
70615
+ };
70616
+ }
70617
+ function wrapEditToolWithGuard(tool, tracker) {
70618
+ return {
70619
+ ...tool,
70620
+ execute: async (toolCallId, args, signal, onUpdate) => {
70621
+ const filePath = extractPath(args);
70622
+ if (filePath && !tracker.hasObserved(filePath)) throw readGuardError(filePath);
70623
+ return tool.execute(toolCallId, args, signal, onUpdate);
70624
+ }
70625
+ };
70626
+ }
70627
+
70628
+ //#endregion
70629
+ //#region src/agents/pi-tools.read-edit-tracker.ts
70630
+ function normalize(filePath, workspaceRoot) {
70631
+ if (!workspaceRoot) return filePath;
70632
+ if (path.isAbsolute(filePath)) return path.normalize(filePath);
70633
+ return path.resolve(workspaceRoot, filePath);
70634
+ }
70635
+ function createReadEditTracker(opts = {}) {
70636
+ const observed = /* @__PURE__ */ new Map();
70637
+ const record = (filePath, kind) => {
70638
+ if (typeof filePath !== "string" || !filePath.trim()) return;
70639
+ const key = normalize(filePath.trim(), opts.workspaceRoot);
70640
+ const prior = observed.get(key);
70641
+ if (kind === "written" || prior !== "written") observed.set(key, kind);
70642
+ };
70643
+ return {
70644
+ recordRead: (filePath) => record(filePath, "read"),
70645
+ recordWrite: (filePath) => record(filePath, "written"),
70646
+ observation: (filePath) => {
70647
+ if (typeof filePath !== "string" || !filePath.trim()) return null;
70648
+ const key = normalize(filePath.trim(), opts.workspaceRoot);
70649
+ return observed.get(key) ?? null;
70650
+ },
70651
+ hasObserved: (filePath) => {
70652
+ if (typeof filePath !== "string" || !filePath.trim()) return false;
70653
+ const key = normalize(filePath.trim(), opts.workspaceRoot);
70654
+ return observed.has(key);
70655
+ },
70656
+ reset: () => {
70657
+ observed.clear();
70658
+ }
70659
+ };
70660
+ }
70661
+
70461
70662
  //#endregion
70462
70663
  //#region src/media/sniff-mime-from-base64.ts
70463
70664
  async function sniffMimeFromBase64(base64) {
@@ -70783,6 +70984,22 @@ function wrapToolParamNormalization(tool, requiredParamGroups) {
70783
70984
  }
70784
70985
  };
70785
70986
  }
70987
+ /**
70988
+ * Override a tool's description while preserving execute, parameters, and
70989
+ * other properties. Used by Stage 2.5 of the prompt-reduction plan to move
70990
+ * usage docs from the system prompt into tool descriptions where they
70991
+ * belong contextually.
70992
+ *
70993
+ * The replacement description should include the upstream's tool-purpose
70994
+ * sentence so models that only read the description (without the prompt
70995
+ * section) still have the same baseline understanding.
70996
+ */
70997
+ function wrapToolWithDescriptionOverride(tool, description) {
70998
+ return {
70999
+ ...tool,
71000
+ description
71001
+ };
71002
+ }
70786
71003
  function wrapToolWorkspaceRootGuard(tool, root) {
70787
71004
  return {
70788
71005
  ...tool,
@@ -71023,6 +71240,26 @@ function resolveToolLoopDetectionConfig(params) {
71023
71240
  }
71024
71241
  };
71025
71242
  }
71243
+ /**
71244
+ * Edit tool description. Replaces the upstream's terse one-liner with
71245
+ * usage notes migrated from the system prompt's "Edit Tool Best Practices"
71246
+ * section in Stage 2.5 of the prompt-reduction plan. Co-locating these
71247
+ * notes with the tool means they ship only when edit is in palette, and
71248
+ * the system prompt section can be deleted in Stage 4 without losing the
71249
+ * guidance.
71250
+ *
71251
+ * Combined with the read-before-edit guard (Stage 1.3) and the model's
71252
+ * own discipline, this should kill the hallucinated-oldText failure class
71253
+ * for any well-intentioned model.
71254
+ */
71255
+ const EDIT_TOOL_DESCRIPTION = [
71256
+ "Edit a file by replacing exact text. The oldText must match the file EXACTLY (whitespace, indentation, and all).",
71257
+ "Best practices to avoid match failures:",
71258
+ "- Use the SHORTEST unique snippet that identifies the edit location (1-3 lines). Do NOT paste large blocks.",
71259
+ "- 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.",
71260
+ "- 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.",
71261
+ "- Prefer lines with distinctive content (function names, unique strings) over generic code (braces, blank lines)."
71262
+ ].join(" ");
71026
71263
  function createSymiCodingTools(options) {
71027
71264
  const execToolName = "exec";
71028
71265
  const sandbox = options?.sandbox?.enabled ? options.sandbox : void 0;
@@ -71085,33 +71322,34 @@ function createSymiCodingTools(options) {
71085
71322
  });
71086
71323
  if (sandboxRoot && !sandboxFsBridge) throw new Error("Sandbox filesystem bridge is unavailable.");
71087
71324
  const imageSanitization = resolveImageSanitizationLimits(options?.config);
71325
+ const readEditTracker = createReadEditTracker({ workspaceRoot: sandboxRoot ?? workspaceRoot });
71088
71326
  const base = codingTools.flatMap((tool) => {
71089
71327
  if (tool.name === readTool.name) {
71090
71328
  if (sandboxRoot) {
71091
- const sandboxed = createSandboxedReadTool({
71329
+ const tracked = wrapReadToolWithTracker(createSandboxedReadTool({
71092
71330
  root: sandboxRoot,
71093
71331
  bridge: sandboxFsBridge,
71094
71332
  modelContextWindowTokens: options?.modelContextWindowTokens,
71095
71333
  imageSanitization
71096
- });
71097
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(sandboxed, sandboxRoot) : sandboxed];
71334
+ }), readEditTracker);
71335
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(tracked, sandboxRoot) : tracked];
71098
71336
  }
71099
- const wrapped = createSymiReadTool(createReadTool(workspaceRoot), {
71337
+ const tracked = wrapReadToolWithTracker(createSymiReadTool(createReadTool(workspaceRoot), {
71100
71338
  modelContextWindowTokens: options?.modelContextWindowTokens,
71101
71339
  imageSanitization
71102
- });
71103
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(wrapped, workspaceRoot) : wrapped];
71340
+ }), readEditTracker);
71341
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(tracked, workspaceRoot) : tracked];
71104
71342
  }
71105
71343
  if (tool.name === "bash" || tool.name === execToolName) return [];
71106
71344
  if (tool.name === "write") {
71107
71345
  if (sandboxRoot) return [];
71108
- const wrapped = wrapToolParamNormalization(createWriteTool(workspaceRoot), CLAUDE_PARAM_GROUPS.write);
71109
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(wrapped, workspaceRoot) : wrapped];
71346
+ const tracked = wrapWriteToolWithTracker(wrapToolParamNormalization(createWriteTool(workspaceRoot), CLAUDE_PARAM_GROUPS.write), readEditTracker);
71347
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(tracked, workspaceRoot) : tracked];
71110
71348
  }
71111
71349
  if (tool.name === "edit") {
71112
71350
  if (sandboxRoot) return [];
71113
- const wrapped = wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit);
71114
- return [workspaceOnly ? wrapToolWorkspaceRootGuard(wrapped, workspaceRoot) : wrapped];
71351
+ const guarded = wrapEditToolWithGuard(wrapToolWithDescriptionOverride(wrapToolParamNormalization(createEditTool(workspaceRoot), CLAUDE_PARAM_GROUPS.edit), EDIT_TOOL_DESCRIPTION), readEditTracker);
71352
+ return [workspaceOnly ? wrapToolWorkspaceRootGuard(guarded, workspaceRoot) : guarded];
71115
71353
  }
71116
71354
  return [tool];
71117
71355
  });
@@ -71154,22 +71392,18 @@ function createSymiCodingTools(options) {
71154
71392
  } : void 0,
71155
71393
  workspaceOnly: applyPatchWorkspaceOnly
71156
71394
  });
71395
+ const sandboxedEditTool = sandboxRoot ? wrapEditToolWithGuard(createSandboxedEditTool({
71396
+ root: sandboxRoot,
71397
+ bridge: sandboxFsBridge
71398
+ }), readEditTracker) : null;
71399
+ const sandboxedWriteTool = sandboxRoot ? wrapWriteToolWithTracker(createSandboxedWriteTool({
71400
+ root: sandboxRoot,
71401
+ bridge: sandboxFsBridge
71402
+ }), readEditTracker) : null;
71157
71403
  const withHooks = applyToolPolicyPipeline({
71158
71404
  tools: applyOwnerOnlyToolPolicy([
71159
71405
  ...base,
71160
- ...sandboxRoot ? allowWorkspaceWrites ? [workspaceOnly ? wrapToolWorkspaceRootGuard(createSandboxedEditTool({
71161
- root: sandboxRoot,
71162
- bridge: sandboxFsBridge
71163
- }), sandboxRoot) : createSandboxedEditTool({
71164
- root: sandboxRoot,
71165
- bridge: sandboxFsBridge
71166
- }), workspaceOnly ? wrapToolWorkspaceRootGuard(createSandboxedWriteTool({
71167
- root: sandboxRoot,
71168
- bridge: sandboxFsBridge
71169
- }), sandboxRoot) : createSandboxedWriteTool({
71170
- root: sandboxRoot,
71171
- bridge: sandboxFsBridge
71172
- })] : [] : [],
71406
+ ...sandboxRoot ? allowWorkspaceWrites && sandboxedEditTool && sandboxedWriteTool ? [workspaceOnly ? wrapToolWorkspaceRootGuard(sandboxedEditTool, sandboxRoot) : sandboxedEditTool, workspaceOnly ? wrapToolWorkspaceRootGuard(sandboxedWriteTool, sandboxRoot) : sandboxedWriteTool] : [] : [],
71173
71407
  ...applyPatchTool ? [applyPatchTool] : [],
71174
71408
  execTool,
71175
71409
  processTool,
@@ -71535,7 +71769,8 @@ async function compactEmbeddedPiSessionDirect(params) {
71535
71769
  userTime,
71536
71770
  userTimeFormat,
71537
71771
  contextFiles,
71538
- memoryCitationsMode: params.config?.memory?.citations
71772
+ memoryCitationsMode: params.config?.memory?.citations,
71773
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline
71539
71774
  }));
71540
71775
  const sessionLock = await acquireSessionWriteLock({
71541
71776
  sessionFile: params.sessionFile,