@symerian/symi 2.9.1 → 2.9.3

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 (422) hide show
  1. package/dist/{acp-cli-BNM6b6XY.js → acp-cli-Bc6ZQZ4f.js} +2 -2
  2. package/dist/{acp-cli-DXsJS3-G.js → acp-cli-Dy9QuDBN.js} +2 -2
  3. package/dist/{agents-FNeM-byc.js → agents-D6V_7iZL.js} +7 -7
  4. package/dist/{agents.config-CjML1ogJ.js → agents.config-B-NRTvyi.js} +1 -1
  5. package/dist/{agents.config-DUYDFbfP.js → agents.config-BeX0kxT3.js} +1 -1
  6. package/dist/{audio-preflight-CwbuWmdG.js → audio-preflight-8UNY1akA.js} +11 -11
  7. package/dist/{audio-preflight-SaT5IcVn.js → audio-preflight-By0dnw-T.js} +11 -11
  8. package/dist/{audio-preflight-DlO0Hw-w.js → audio-preflight-CbyJ_yDs.js} +5 -5
  9. package/dist/{audio-preflight-CMutcMs5.js → audio-preflight-Dtsvq6Hj.js} +6 -6
  10. package/dist/{audit-qWCLpveM.js → audit-DGwhL71Q.js} +5 -5
  11. package/dist/{audit-Ojap-R-Y.js → audit-OPWWS900.js} +5 -5
  12. package/dist/{auth-choice-BjTiWmH-.js → auth-choice-4lzxjIcf.js} +4 -4
  13. package/dist/{auth-choice-RQ5keocP.js → auth-choice-BJQjxe_Y.js} +4 -4
  14. package/dist/{banner-dYiFXA70.js → banner-Q3fjWWy3.js} +1 -1
  15. package/dist/{browser-cli-BQ9jHIXP.js → browser-cli-CGLTZ9KQ.js} +3 -3
  16. package/dist/{browser-cli-BW0C5Y8-.js → browser-cli-qpJlsofO.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-X_vwo309.js → call-BCTAmPye.js} +1 -1
  21. package/dist/{call-BZbBLMOq.js → call-BIETyST6.js} +1 -1
  22. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  23. package/dist/{channel-options-DqXYA7rM.js → channel-options-CQ0Q0xZr.js} +1 -1
  24. package/dist/{channel-options-CjZlTumK.js → channel-options-D6U_Dpa2.js} +1 -1
  25. package/dist/{channel-web-BITaNjFT.js → channel-web-D6aolbVC.js} +7 -7
  26. package/dist/{channels-cli-C8CesA1x.js → channels-cli-By4y_t51.js} +31 -31
  27. package/dist/{channels-cli-7cDtM5kW.js → channels-cli-CxuKeNkr.js} +30 -30
  28. package/dist/{chrome-t-stBgN6.js → chrome-B-hW5hrK.js} +1 -1
  29. package/dist/{chrome-B1zznUiv.js → chrome-CJHOBnUB.js} +1 -1
  30. package/dist/{chrome-faqXQ9f1.js → chrome-CO5ZhkcZ.js} +1 -1
  31. package/dist/{chrome-BFDOGeu3.js → chrome-CtTba9sH.js} +1 -1
  32. package/dist/cli/daemon-cli.js +1 -1
  33. package/dist/{cli-ZC_92Xyn.js → cli-41r_BAjv.js} +26 -26
  34. package/dist/{cli-BJ9_X9eE.js → cli-B1gtEojq.js} +27 -27
  35. package/dist/{command-registry-B1ltIC7z.js → command-registry-FJWuYmEn.js} +11 -11
  36. package/dist/{completion-cli-KSs4eFcq.js → completion-cli-C20c_vzO.js} +1 -1
  37. package/dist/{completion-cli-_P0e-rhC.js → completion-cli-DWVW4P54.js} +2 -2
  38. package/dist/{config-BYCtuYPj.js → config-CitI_jxW.js} +6 -0
  39. package/dist/{config-CbBZUq-Q.js → config-D7Zr88dI.js} +6 -0
  40. package/dist/{config-BXMAsmut.js → config-Do4JxgLI.js} +6 -0
  41. package/dist/{config-DE6JXMtt.js → config-Gfhqs66L.js} +6 -0
  42. package/dist/{config-cli-DIrPShKH.js → config-cli-CJQ-12f7.js} +2 -2
  43. package/dist/{config-cli-DjCKp4Pe.js → config-cli-CLXuCFJc.js} +2 -2
  44. package/dist/{config-guard-BrZXdLQw.js → config-guard-BLcbR_sH.js} +2 -2
  45. package/dist/{config-guard-DYmSI51f.js → config-guard-CgPPAm7S.js} +3 -3
  46. package/dist/{config-validation-CNRgc5vc.js → config-validation-B6GnatLw.js} +1 -1
  47. package/dist/{config-validation-fdYfdAc3.js → config-validation-UMq2H_tR.js} +1 -1
  48. package/dist/{configure-Ds8SzTEw.js → configure-DrIhqYYW.js} +10 -10
  49. package/dist/{configure-CsZWO6Nr.js → configure-I99ztt2Y.js} +10 -10
  50. package/dist/{control-service-DQX3HXS4.js → control-service-BkyH7qkF.js} +4 -4
  51. package/dist/{control-service-B5HVCnUI.js → control-service-DnNPjFvU.js} +4 -4
  52. package/dist/{cron-cli-CfSmL43G.js → cron-cli-CcgewYtp.js} +3 -3
  53. package/dist/{cron-cli-D2L3-4aw.js → cron-cli-DEcQk1bb.js} +3 -3
  54. package/dist/{daemon-cli-D9_xrFGD.js → daemon-cli-BNZu5unw.js} +6 -6
  55. package/dist/{daemon-cli-BHwfgmrQ.js → daemon-cli-BiBjGGfw.js} +6 -6
  56. package/dist/daemon-cli.js +6 -0
  57. package/dist/{daemon-runtime-BiZG4Kqi.js → daemon-runtime-C-Mwepv_.js} +1 -1
  58. package/dist/{daemon-runtime-DOqm0LLm.js → daemon-runtime-C86WnKU5.js} +1 -1
  59. package/dist/{deliver-nBdNxMIr.js → deliver-D5655IkX.js} +2 -2
  60. package/dist/{deliver-CeNdvQJ3.js → deliver-DaRQn5Ai.js} +3 -3
  61. package/dist/{deliver-Cqk3zmyW.js → deliver-DrgHcdVo.js} +3 -3
  62. package/dist/{deliver--ff__Iq0.js → deliver-XYF4JahT.js} +2 -2
  63. package/dist/{devices-cli-BzyrjuAk.js → devices-cli-Wb4H-vyx.js} +2 -2
  64. package/dist/{devices-cli-CEvTb9Vr.js → devices-cli-hX2lrsCy.js} +2 -2
  65. package/dist/{directory-cli-KZHlp_jk.js → directory-cli-CLIYvXkV.js} +1 -1
  66. package/dist/{directory-cli-Ds7uESrp.js → directory-cli-C_vm-dsr.js} +1 -1
  67. package/dist/{dns-cli-e8z7wTzi.js → dns-cli-BJuUZ4pr.js} +1 -1
  68. package/dist/{dns-cli-SNU_PJfw.js → dns-cli-CTCAHPcB.js} +1 -1
  69. package/dist/{doctor-completion-D4bMStWc.js → doctor-completion-B4pjrehH.js} +1 -1
  70. package/dist/{doctor-completion-CfGWMYVG.js → doctor-completion-C9A7E6Wb.js} +1 -1
  71. package/dist/{doctor-config-flow-CJ4__c8U.js → doctor-config-flow-BFHsvL2k.js} +2 -2
  72. package/dist/{doctor-config-flow-DHXFFSRu.js → doctor-config-flow-l2aPNzHP.js} +2 -2
  73. package/dist/entry.js +1 -1
  74. package/dist/{exec-approvals-cli-z9Iy8aWD.js → exec-approvals-cli-BXDSu2Ze.js} +4 -4
  75. package/dist/{exec-approvals-cli-_AbKrXIH.js → exec-approvals-cli-uAM6-swA.js} +4 -4
  76. package/dist/extensionAPI.js +16 -16
  77. package/dist/{gateway-cli-B4ElmhPF.js → gateway-cli-BByLEck3.js} +42 -42
  78. package/dist/{gateway-cli-CfO9aUt0.js → gateway-cli-cZpbavO4.js} +43 -43
  79. package/dist/{gateway-rpc-D1S1i5HM.js → gateway-rpc-DMEPdgmc.js} +1 -1
  80. package/dist/{gateway-rpc-BlWORxUe.js → gateway-rpc-Wa_4MrZb.js} +1 -1
  81. package/dist/{glass-ui-ws-D1UKJUFI.js → glass-ui-ws-09XXkYnX.js} +35 -35
  82. package/dist/{glass-ui-ws-Bhu3COgn.js → glass-ui-ws-DUHaC6lE.js} +34 -34
  83. package/dist/{health-CLRDrjsk.js → health-Bvo3NXZK.js} +5 -5
  84. package/dist/{health-CCslN1xh.js → health-CYHbTw04.js} +5 -5
  85. package/dist/{hooks-cli-BrVLhsJ6.js → hooks-cli-BwFW4lKC.js} +27 -27
  86. package/dist/{hooks-cli-DvLYXNNe.js → hooks-cli-CiFs-0g0.js} +28 -28
  87. package/dist/{image-D5bsPk2_.js → image-BjyeKf1c.js} +2 -2
  88. package/dist/{image-CEdTQp1F.js → image-BqpivNGG.js} +2 -2
  89. package/dist/{image-B6aY1oY3.js → image-GaF72sln.js} +2 -2
  90. package/dist/{image-Cp6qRPZ2.js → image-dYtWZNKT.js} +2 -2
  91. package/dist/index.js +35 -35
  92. package/dist/{lifecycle-core-CcPnnp9c.js → lifecycle-core-BMVHLJi_.js} +2 -2
  93. package/dist/{lifecycle-core-BUGPz1GT.js → lifecycle-core-HOQrbQ-_.js} +2 -2
  94. package/dist/llm-slug-generator.js +14 -14
  95. package/dist/{login-DwBazcKM.js → login-Cd4DTmg6.js} +2 -2
  96. package/dist/{login-B7OJui4y.js → login-Cv_LYGzG.js} +2 -2
  97. package/dist/{login-DKeZ-sOf.js → login-D4OYfM0U.js} +2 -2
  98. package/dist/{login-Cu0fTI3Z.js → login-DqhTprwd.js} +2 -2
  99. package/dist/{login-qr-BBrzemk7.js → login-qr-CZXIrzvh.js} +2 -2
  100. package/dist/{login-qr-DyU6qD2X.js → login-qr-DiyxAHpv.js} +2 -2
  101. package/dist/{login-qr-CtELJan3.js → login-qr-Dq_hs3eJ.js} +2 -2
  102. package/dist/{login-qr-Ft17VIG6.js → login-qr-Xgw7JPYo.js} +2 -2
  103. package/dist/{logs-cli-CvgvoxvI.js → logs-cli-DZTxEhiM.js} +3 -3
  104. package/dist/{logs-cli-Dg6OSEA6.js → logs-cli-Dh-aAqF3.js} +3 -3
  105. package/dist/{manager-CztTHQhN.js → manager-Bj8GFlcZ.js} +1 -1
  106. package/dist/{manager-8N1YbbDk.js → manager-BsfrsBPw.js} +1 -1
  107. package/dist/{manager-OSWCBsL_.js → manager-CB20PmUH.js} +1 -1
  108. package/dist/{manager-HASZR70T.js → manager-CMB15ft8.js} +1 -1
  109. package/dist/{memory-cli-BDWdeqta.js → memory-cli-CoTkaEhh.js} +4 -4
  110. package/dist/{memory-cli-BmWvHCEJ.js → memory-cli-Cuhhh4qN.js} +4 -4
  111. package/dist/{model-catalog-BhW-vn5v.js → model-catalog-BFJW_s3i.js} +2 -2
  112. package/dist/{model-catalog-FckJ4pcL.js → model-catalog-DRqmevpR.js} +2 -2
  113. package/dist/{model-picker-D3ii5sBm.js → model-picker-BT8MumhL.js} +2 -2
  114. package/dist/{model-picker-DEUeht6L.js → model-picker-DhsG4iZa.js} +2 -2
  115. package/dist/{models-5C-QKF0q.js → models-CdIe1IJX.js} +8 -8
  116. package/dist/{models-cli-BqW-Y1GI.js → models-cli-CZcMWBL0.js} +30 -30
  117. package/dist/{models-cli-B2IebIhR.js → models-cli-o07a-fh5.js} +29 -29
  118. package/dist/{models-config-DGDMieos.js → models-config-DdK8uWQW.js} +1 -1
  119. package/dist/{models-config-CHVfeRDR.js → models-config-frWb8fDT.js} +1 -1
  120. package/dist/{node-cli-hAxte5bw.js → node-cli-DB4Z23h8.js} +9 -9
  121. package/dist/{node-cli-emEb0aRo.js → node-cli-DcRlL2Np.js} +9 -9
  122. package/dist/{nodes-cli-DQPQqEYN.js → nodes-cli-B42u9UxB.js} +3 -3
  123. package/dist/{nodes-cli-yd9KABqj.js → nodes-cli-DQ9YsQmy.js} +3 -3
  124. package/dist/{onboard-BL7Ei8OA.js → onboard-44op-88v.js} +7 -7
  125. package/dist/{onboard-o5O2Ipvr.js → onboard-Cjlal6-V.js} +7 -7
  126. package/dist/{onboard-channels-B-PEQmiI.js → onboard-channels-BseAErC9.js} +1 -1
  127. package/dist/{onboard-channels-Do0lkLVV.js → onboard-channels-Lt1TlRrb.js} +1 -1
  128. package/dist/{onboard-custom-BVMtQfB1.js → onboard-custom-7TON2w6b.js} +2 -2
  129. package/dist/{onboard-custom-CVA34zSg.js → onboard-custom-Bb3xuH0G.js} +2 -2
  130. package/dist/{onboard-helpers-O6bxf40E.js → onboard-helpers-BiCrYw-N.js} +2 -2
  131. package/dist/{onboard-helpers-CNFdWQIV.js → onboard-helpers-Ca4KojJF.js} +2 -2
  132. package/dist/{onboard-remote-QMqQxvh7.js → onboard-remote-B8MQTgX-.js} +1 -1
  133. package/dist/{onboard-remote-uYveiXQe.js → onboard-remote-IMqgmH78.js} +1 -1
  134. package/dist/{onboard-skills-CLb94Ag2.js → onboard-skills-BP1P7f-w.js} +1 -1
  135. package/dist/{onboard-skills-Du3aWSN3.js → onboard-skills-BcvPjVfl.js} +1 -1
  136. package/dist/{onboarding-B_F_DbjQ.js → onboarding-DODsq7cg.js} +10 -10
  137. package/dist/{onboarding-3DwQLO4z.js → onboarding-DYJYybkl.js} +10 -10
  138. package/dist/{onboarding.finalize-BWejCrVi.js → onboarding.finalize-BX-xeFu7.js} +32 -32
  139. package/dist/{onboarding.finalize-D_G6Tcqi.js → onboarding.finalize-DhhWr8GR.js} +34 -34
  140. package/dist/{onboarding.gateway-config-D8K7HsWb.js → onboarding.gateway-config-Cp8mV8S9.js} +4 -4
  141. package/dist/{onboarding.gateway-config-Dixr8mmH.js → onboarding.gateway-config-tmzsyFbT.js} +4 -4
  142. package/dist/{outbound-CLCy4Nsg.js → outbound-BD7PNRhC.js} +1 -1
  143. package/dist/{outbound-DVVulk0E.js → outbound-BaF9dF-H.js} +1 -1
  144. package/dist/{outbound-b9pVFyW7.js → outbound-CDuo0JH3.js} +1 -1
  145. package/dist/{outbound-DlWjA7jN.js → outbound-CPcVipU-.js} +1 -1
  146. package/dist/{pairing-cli-Cgj6qx8Z.js → pairing-cli-CfuG75IW.js} +1 -1
  147. package/dist/{pairing-cli-CchjvjCR.js → pairing-cli-K09J3MIl.js} +1 -1
  148. package/dist/{pi-embedded-q_tNOp_h.js → pi-embedded-UMBd-Mrj.js} +405 -88
  149. package/dist/{pi-embedded-helpers-BgpogTwt.js → pi-embedded-helpers-BlL08R8g.js} +1 -1
  150. package/dist/{pi-embedded-helpers-DrAT2ieP.js → pi-embedded-helpers-CU-kYRrF.js} +5 -5
  151. package/dist/{pi-embedded-helpers-DK2WpZI8.js → pi-embedded-helpers-CmY04lZ7.js} +1 -1
  152. package/dist/{pi-embedded-helpers-BPP4adeW.js → pi-embedded-helpers-DuZtk5SK.js} +6 -6
  153. package/dist/{pi-tools.policy-BE7fB_Cf.js → pi-tools.policy-54ABEJtH.js} +2 -2
  154. package/dist/{pi-tools.policy-GxaAKOgf.js → pi-tools.policy-BFsWV2pS.js} +2 -2
  155. package/dist/{plugin-registry-B_KRAoou.js → plugin-registry-Di_isjUm.js} +2 -2
  156. package/dist/{plugin-registry-CRIH5Sdf.js → plugin-registry-HrZC-Iww.js} +2 -2
  157. package/dist/plugin-sdk/agents/pi-embedded-runner/system-prompt.d.ts +23 -0
  158. package/dist/plugin-sdk/agents/skills/triggers.d.ts +12 -0
  159. package/dist/plugin-sdk/agents/system-prompt-skills-jit.d.ts +28 -0
  160. package/dist/plugin-sdk/agents/system-prompt.d.ts +17 -0
  161. package/dist/plugin-sdk/agents/tools/skill-search-tool.d.ts +30 -0
  162. package/dist/plugin-sdk/{audio-preflight-CwMsvdv8.js → audio-preflight-CoKYDdd4.js} +6 -6
  163. package/dist/plugin-sdk/{channel-web-CiewzSOW.js → channel-web-CzZZsS3O.js} +7 -7
  164. package/dist/plugin-sdk/{chrome-Cou8jVJ2.js → chrome-CdjVSHtz.js} +1 -1
  165. package/dist/plugin-sdk/config/types.skills.d.ts +14 -0
  166. package/dist/plugin-sdk/config/types.symi.d.ts +7 -0
  167. package/dist/plugin-sdk/config/zod-schema.d.ts +2 -0
  168. package/dist/plugin-sdk/{config-DQntj58u.js → config-Cf-PzD3r.js} +6 -0
  169. package/dist/plugin-sdk/{deliver-OVx3XKTy.js → deliver-hjUeDZ7e.js} +2 -2
  170. package/dist/plugin-sdk/{image-ChrcMCo_.js → image-CS95I-I5.js} +2 -2
  171. package/dist/plugin-sdk/index.js +20 -20
  172. package/dist/plugin-sdk/{login-WuhOM4Dg.js → login-BhLw-aw1.js} +2 -2
  173. package/dist/plugin-sdk/{login-qr-C87Q7LuN.js → login-qr-B4dxH543.js} +2 -2
  174. package/dist/plugin-sdk/{manager-Yvm-LGVR.js → manager-BiRYpsW7.js} +1 -1
  175. package/dist/plugin-sdk/{outbound-T0XdUo-H.js → outbound-D7yJKgEX.js} +1 -1
  176. package/dist/plugin-sdk/{pi-embedded-helpers-DihvU43r.js → pi-embedded-helpers-6EL59cK1.js} +6 -6
  177. package/dist/plugin-sdk/{pw-ai-DUQ9kG2D.js → pw-ai-DWcXZkbZ.js} +2 -2
  178. package/dist/plugin-sdk/{replies-DD0EJRXx.js → replies-B4fizDsZ.js} +1 -1
  179. package/dist/plugin-sdk/{reply-I6ZFg_UE.js → reply-DYEklKOc.js} +410 -93
  180. package/dist/plugin-sdk/{runner-IyZnVyIT.js → runner-D9c_MNRa.js} +2 -2
  181. package/dist/plugin-sdk/{send-Do_qdBr_.js → send-BAzimHH-.js} +1 -1
  182. package/dist/plugin-sdk/{send-DxXXcQ_o.js → send-BfqyNBU1.js} +1 -1
  183. package/dist/plugin-sdk/{send-Cxr9NnOd.js → send-CF7BhO8B.js} +1 -1
  184. package/dist/plugin-sdk/{send-SRQweHTE.js → send-CJIEYVXL.js} +1 -1
  185. package/dist/plugin-sdk/{send-Dd71o3sZ.js → send-DDpZS9jb.js} +1 -1
  186. package/dist/plugin-sdk/{session-LEZ8u8RX.js → session-BfTQAyNx.js} +1 -1
  187. package/dist/plugin-sdk/{skill-commands-DEfqC_kJ.js → skill-commands-C70yD9PL.js} +1 -1
  188. package/dist/plugin-sdk/{skills-C9DbB-Kp.js → skills-DuQ-xGok.js} +1 -1
  189. package/dist/plugin-sdk/{synthesis-bQ4DMwsj.js → synthesis-CaDiVumM.js} +16 -16
  190. package/dist/plugin-sdk/{web-C3YuHiih.js → web-DU4xaLZf.js} +20 -20
  191. package/dist/plugin-sdk/{whatsapp-actions-ClWxTG5S.js → whatsapp-actions-B_3do0s7.js} +2 -2
  192. package/dist/{plugins-cli-Co9cRpLe.js → plugins-cli-BlBz4J4q.js} +27 -27
  193. package/dist/{plugins-cli-MDYiXsRL.js → plugins-cli-CMz1ww6G.js} +28 -28
  194. package/dist/{program-context-m9C36Cuq.js → program-context-ByWsh-2T.js} +38 -38
  195. package/dist/{program-BWqVPm5t.js → program-dFZ5CYgD.js} +34 -34
  196. package/dist/{prompt-select-styled-DzjQVaDM.js → prompt-select-styled-BkwnTGjt.js} +15 -15
  197. package/dist/{prompt-select-styled-BKJVEVPk.js → prompt-select-styled-nywEyQoQ.js} +15 -15
  198. package/dist/{provider-auth-helpers-DaTqy1aA.js → provider-auth-helpers-CQ604vQz.js} +2 -2
  199. package/dist/{provider-auth-helpers-DYJ-0sNe.js → provider-auth-helpers-CgJE4rvP.js} +2 -2
  200. package/dist/{push-apns-_aeFBwsP.js → push-apns-CQlSAman.js} +1 -1
  201. package/dist/{push-apns-DdQlLTpV.js → push-apns-CbjqnCIn.js} +1 -1
  202. package/dist/{pw-ai-DSmC8YuO.js → pw-ai-B8IypzYb.js} +2 -2
  203. package/dist/{pw-ai-D9ZuX3U6.js → pw-ai-BYRvpqBg.js} +2 -2
  204. package/dist/{pw-ai-Bpp0J0PM.js → pw-ai-BjfsUmjw.js} +2 -2
  205. package/dist/{pw-ai-XSTIQILG.js → pw-ai-BwKx4yAQ.js} +2 -2
  206. package/dist/{qr-cli-DtHLOD1G.js → qr-cli-B7hz3Zj2.js} +1 -1
  207. package/dist/{qr-cli-Dq9G8FPl.js → qr-cli-Zf3abH3y.js} +1 -1
  208. package/dist/{register.agent-RNTVF_Nk.js → register.agent-BaLgPcGg.js} +33 -33
  209. package/dist/{register.agent-Hi0PN67T.js → register.agent-Hw7FS0tf.js} +35 -35
  210. package/dist/{register.configure-Dp-F_KKy.js → register.configure-BC-jW4EY.js} +37 -37
  211. package/dist/{register.configure-DE2Fg1dO.js → register.configure-D6bKnyeR.js} +38 -38
  212. package/dist/{register.maintenance-Bbd-g7nL.js → register.maintenance-7LeID6wA.js} +37 -37
  213. package/dist/{register.maintenance-QHRRhtsg.js → register.maintenance-DQ73gAH0.js} +35 -35
  214. package/dist/{register.message-B5uWOXev.js → register.message-D2Ubr7KY.js} +27 -27
  215. package/dist/{register.message-BvutRi1a.js → register.message-odamuJP5.js} +28 -28
  216. package/dist/{register.onboard-DRHuoRTm.js → register.onboard-Bv3BjuIZ.js} +33 -33
  217. package/dist/{register.onboard-CNOh527M.js → register.onboard-DwYvxoBx.js} +34 -34
  218. package/dist/{register.setup-Cj0oOZqL.js → register.setup-B6ylBd_s.js} +33 -33
  219. package/dist/{register.setup-D1ePW7dl.js → register.setup-BvNMj7Tn.js} +34 -34
  220. package/dist/{register.status-health-sessions-DfyO7JaH.js → register.status-health-sessions-Bx0oTY_P.js} +30 -30
  221. package/dist/{register.status-health-sessions-sf1XzcPo.js → register.status-health-sessions-Cr65vOYW.js} +32 -32
  222. package/dist/{register.subclis-Do_HdpUT.js → register.subclis-BzbNYOC6.js} +28 -28
  223. package/dist/{replies-IkylJ7lX.js → replies-A6SltFjk.js} +1 -1
  224. package/dist/{replies-CPhYC11m.js → replies-CsNZ9ImJ.js} +1 -1
  225. package/dist/{replies-BxvfG7Oj.js → replies-Dk0cnpHa.js} +1 -1
  226. package/dist/{replies-BV7oFP7Z.js → replies-Dmo0pSSf.js} +1 -1
  227. package/dist/{reply-DEub7xci.js → reply-Bymjl4wV.js} +417 -99
  228. package/dist/{routes-n7RUgOOW.js → routes-B3wAMCSw.js} +3 -3
  229. package/dist/{routes-Evl8vnTV.js → routes-DH2Da7TP.js} +3 -3
  230. package/dist/{rpc-3T_LjHn1.js → rpc-BPtq6BO7.js} +1 -1
  231. package/dist/{rpc-DeJsMHDF.js → rpc-DCB41PXt.js} +1 -1
  232. package/dist/{run-main-B_ZLo4JR.js → run-main-BAaL6QjO.js} +45 -45
  233. package/dist/{runner-CiThXXY3.js → runner-CY_8vnxU.js} +3 -3
  234. package/dist/{runner-B_6xBcPB.js → runner-Dbs3i8HW.js} +2 -2
  235. package/dist/{runner-CMvsDzah.js → runner-DzNo-GCz.js} +2 -2
  236. package/dist/{runner-BX-ap4VU.js → runner-Im1oOE3i.js} +3 -3
  237. package/dist/{sandbox-T9SO3y3b.js → sandbox-BTziorto.js} +5 -5
  238. package/dist/{sandbox-cli-MZJX1Ht6.js → sandbox-cli-BVpVuidu.js} +6 -6
  239. package/dist/{sandbox-cli-Bi8lblc6.js → sandbox-cli-rOwF1Yuh.js} +6 -6
  240. package/dist/{sandbox-BQ5LAIBQ.js → sandbox-wUKYI3zy.js} +5 -5
  241. package/dist/{security-cli-AZBZs6ww.js → security-cli-Bb4vR6LY.js} +9 -9
  242. package/dist/{security-cli-txjMZzBx.js → security-cli-Cg7KhJC7.js} +9 -9
  243. package/dist/{send-CcD9S5so.js → send-8Gw3YmOh.js} +1 -1
  244. package/dist/{send-BtbWvw2k.js → send-90t8KM2a.js} +1 -1
  245. package/dist/{send-DlYO3ExM.js → send-9ktd0CBZ.js} +1 -1
  246. package/dist/{send-C6-rN_Li.js → send-B0szkIfv.js} +1 -1
  247. package/dist/{send-CyPj_MLV.js → send-B7kMNQ-T.js} +1 -1
  248. package/dist/{send-DNqcjLyg.js → send-BbZtP8GJ.js} +1 -1
  249. package/dist/{send-C4IU_tV3.js → send-CQj8FBE3.js} +1 -1
  250. package/dist/{send-Bi8XhwOZ.js → send-Cxr6CgGf.js} +1 -1
  251. package/dist/{send-CfejAK2u.js → send-D27q8Oqo.js} +1 -1
  252. package/dist/{send-CupfdYEg.js → send-D4GfXudZ.js} +1 -1
  253. package/dist/{send-BPBFuPrC.js → send-D5Siw6wn.js} +1 -1
  254. package/dist/{send-BUBES34Y.js → send-DanpvmZQ.js} +1 -1
  255. package/dist/{send-CSkNKYIc.js → send-DbJsN7Lj.js} +1 -1
  256. package/dist/{send-dohExhb8.js → send-Dj6_LS_W.js} +1 -1
  257. package/dist/{send-vmIzYMwN.js → send-F2Cpm-SJ.js} +1 -1
  258. package/dist/{send-BaSqjfd_.js → send-aXMPprv9.js} +1 -1
  259. package/dist/{send-_CmB6CKB.js → send-depbZ9aA.js} +1 -1
  260. package/dist/{send-llekTUks.js → send-nRhkxbqX.js} +1 -1
  261. package/dist/{send-CoSPwGiI.js → send-t_DoGd2Y.js} +1 -1
  262. package/dist/{send-Dn1Pirhx.js → send-zMHWALCW.js} +1 -1
  263. package/dist/{server-context-CGMSzPWd.js → server-context-BPuBLXYG.js} +5 -5
  264. package/dist/{server-context-BkYSrDni.js → server-context-DQIkGNj2.js} +5 -5
  265. package/dist/{server-methods-C-itThFa.js → server-methods-C4j7W_qQ.js} +17 -17
  266. package/dist/{server-methods-P-ayY-6k.js → server-methods-Ds4i0Q2F.js} +16 -16
  267. package/dist/{server-node-events-D5ee96aZ.js → server-node-events-D0gNq3h6.js} +27 -27
  268. package/dist/{server-node-events-tvNFkev2.js → server-node-events-tbjGwgHF.js} +28 -28
  269. package/dist/{session-CifmyF9K.js → session-C4odFBc2.js} +1 -1
  270. package/dist/{session-bvybh7vL.js → session-CTTpxOx1.js} +1 -1
  271. package/dist/{session-CMploMg7.js → session-Cs58by4_.js} +1 -1
  272. package/dist/{session-DQimwuIx.js → session-d5_vMl76.js} +1 -1
  273. package/dist/{session-utils-DQ-t0PxQ.js → session-utils--1xVj2BC.js} +3 -3
  274. package/dist/{sessions-BIsirZy0.js → sessions-BikjOqQs.js} +3 -3
  275. package/dist/{sessions-BKn2DFYs.js → sessions-CVWGQEWu.js} +1 -1
  276. package/dist/{sessions-DCr5nAOw.js → sessions-CpDbQNFu.js} +1 -1
  277. package/dist/{shared-iaXjUnvo.js → shared-DHpMu95O.js} +1 -1
  278. package/dist/{shared-F4GNd-mC.js → shared-NCp143fJ.js} +1 -1
  279. package/dist/{skill-commands-CSF7Poen.js → skill-commands-QmLQo8Tj.js} +1 -1
  280. package/dist/{skills-XEbTRNYL.js → skills-D0hfZgFz.js} +1 -1
  281. package/dist/{skills-cli-BX1J5GLJ.js → skills-cli-6wYY0Xes.js} +1 -1
  282. package/dist/{skills-cli-CZgrqMPo.js → skills-cli-CkTThcTU.js} +1 -1
  283. package/dist/{status-BlTLrS6h.js → status-BdkVcIDX.js} +2 -2
  284. package/dist/{status-BqjF9Q9S.js → status-BfNSBvnp.js} +9 -9
  285. package/dist/{status-CfIkReeE.js → status-CGabcN-L.js} +10 -10
  286. package/dist/{status-DjvBeoYl.js → status-DpVc9DSG.js} +2 -2
  287. package/dist/{status.update-C5evp93A.js → status.update-BSaVYFQv.js} +1 -1
  288. package/dist/{status.update-BZnfRS2e.js → status.update-DoXJrRh6.js} +1 -1
  289. package/dist/{subagent-registry-DVYhalAo.js → subagent-registry-0D_yjdW5.js} +413 -95
  290. package/dist/{synthesis-DRXsTePq.js → synthesis-1f-yGtS7.js} +26 -26
  291. package/dist/{synthesis-y-Ozm8YK.js → synthesis-A2SfvBRN.js} +27 -27
  292. package/dist/{synthesis-DDQ5zAtf.js → synthesis-Bf2XnlvP.js} +16 -16
  293. package/dist/{synthesis-DgiYnjmZ.js → synthesis-DFQ_rjEF.js} +14 -14
  294. package/dist/{system-cli-IeefTiI1.js → system-cli-BmccUOcE.js} +3 -3
  295. package/dist/{system-cli-hjvWuxnn.js → system-cli-DJIrqTFB.js} +3 -3
  296. package/dist/{systemd-hints-CW7G2Z_2.js → systemd-hints-BbqPFaZ2.js} +1 -1
  297. package/dist/{systemd-hints-CcsN2P1C.js → systemd-hints-CfnF9j3s.js} +1 -1
  298. package/dist/{tui-DulNash-.js → tui-Cc1L4YuN.js} +4 -4
  299. package/dist/{tui-ByDc_eA-.js → tui-D5we2kr7.js} +4 -4
  300. package/dist/{tui-cli-cbFjX5ua.js → tui-cli-BHBp8e8w.js} +9 -9
  301. package/dist/{tui-cli-D--Wucil.js → tui-cli-CmVmkEzr.js} +9 -9
  302. package/dist/{unified-runner-BRmPenSK.js → unified-runner-j_Vn4K8X.js} +408 -90
  303. package/dist/{update-cli-5uhTWLns.js → update-cli-B3t4yUU6.js} +38 -38
  304. package/dist/{update-cli-BfvcUFky.js → update-cli-CWMGbbPM.js} +40 -40
  305. package/dist/{update-runner-DyENgdTM.js → update-runner-CfzHxbsu.js} +1 -1
  306. package/dist/{update-runner-22u8HOoq.js → update-runner-UfVHKth_.js} +1 -1
  307. package/dist/{web-Dbe1DwOE.js → web-BSf9H0_w.js} +17 -17
  308. package/dist/{web-s9NWpUYH.js → web-DCTvbYTy.js} +30 -30
  309. package/dist/{web-CqeSgivQ.js → web-DIDhNbES.js} +30 -30
  310. package/dist/{web-B8GaP73t.js → web-DaChMSyM.js} +19 -19
  311. package/dist/{webhooks-cli-9lyrT9S-.js → webhooks-cli-BPWIcZ4r.js} +1 -1
  312. package/dist/{webhooks-cli-C56QoA-d.js → webhooks-cli-DCw-yCzR.js} +1 -1
  313. package/dist/{whatsapp-actions-Dx8FkbIf.js → whatsapp-actions-B5o7eFIc.js} +2 -2
  314. package/dist/{whatsapp-actions-D5RBK0Cm.js → whatsapp-actions-CJkCiI_n.js} +2 -2
  315. package/dist/{whatsapp-actions-BV4mjN5j.js → whatsapp-actions-CkT3dnmD.js} +2 -2
  316. package/dist/{whatsapp-actions-BngdI8G3.js → whatsapp-actions-DRvUrapa.js} +2 -2
  317. package/dist/{with-timeout-7gwjaz5c.js → with-timeout-7M4c248g.js} +1 -1
  318. package/dist/{with-timeout-C1vsg3IF.js → with-timeout-BWETfI9T.js} +1 -1
  319. package/docs/capabilities.md +153 -0
  320. package/extensions/bluebubbles/package.json +1 -1
  321. package/extensions/copilot-proxy/package.json +1 -1
  322. package/extensions/diagnostics-otel/package.json +1 -1
  323. package/extensions/discord/package.json +1 -1
  324. package/extensions/feishu/package.json +1 -1
  325. package/extensions/google-antigravity-auth/package.json +1 -1
  326. package/extensions/google-gemini-cli-auth/package.json +1 -1
  327. package/extensions/googlechat/package.json +1 -1
  328. package/extensions/imessage/package.json +1 -1
  329. package/extensions/irc/package.json +1 -1
  330. package/extensions/learning-loop/package.json +1 -1
  331. package/extensions/line/package.json +1 -1
  332. package/extensions/llm-task/package.json +1 -1
  333. package/extensions/matrix/CHANGELOG.md +12 -0
  334. package/extensions/matrix/package.json +1 -1
  335. package/extensions/mattermost/package.json +1 -1
  336. package/extensions/memory-core/package.json +1 -1
  337. package/extensions/memory-lancedb/package.json +1 -1
  338. package/extensions/minimax-portal-auth/package.json +1 -1
  339. package/extensions/msteams/CHANGELOG.md +12 -0
  340. package/extensions/msteams/package.json +1 -1
  341. package/extensions/nextcloud-talk/package.json +1 -1
  342. package/extensions/nostr/CHANGELOG.md +12 -0
  343. package/extensions/nostr/package.json +1 -1
  344. package/extensions/open-prose/package.json +1 -1
  345. package/extensions/outlook/package.json +1 -1
  346. package/extensions/pipeline/package.json +1 -1
  347. package/extensions/signal/package.json +1 -1
  348. package/extensions/slack/package.json +1 -1
  349. package/extensions/telegram/package.json +1 -1
  350. package/extensions/tlon/package.json +1 -1
  351. package/extensions/twitch/CHANGELOG.md +12 -0
  352. package/extensions/twitch/package.json +1 -1
  353. package/extensions/voice-call/CHANGELOG.md +12 -0
  354. package/extensions/voice-call/package.json +1 -1
  355. package/extensions/whatsapp/package.json +1 -1
  356. package/extensions/zalo/CHANGELOG.md +12 -0
  357. package/extensions/zalo/package.json +1 -1
  358. package/extensions/zalouser/CHANGELOG.md +12 -0
  359. package/extensions/zalouser/package.json +1 -1
  360. package/package.json +1 -1
  361. package/skills/1password/SKILL.md +1 -0
  362. package/skills/apple-notes/SKILL.md +1 -0
  363. package/skills/apple-reminders/SKILL.md +1 -0
  364. package/skills/bear-notes/SKILL.md +1 -0
  365. package/skills/blogwatcher/SKILL.md +1 -0
  366. package/skills/blucli/SKILL.md +1 -0
  367. package/skills/bluebubbles/SKILL.md +1 -0
  368. package/skills/camsnap/SKILL.md +1 -0
  369. package/skills/canvas/SKILL.md +6 -0
  370. package/skills/channel-routing/SKILL.md +42 -0
  371. package/skills/coding-agent/SKILL.md +1 -0
  372. package/skills/connect-email/SKILL.md +1 -0
  373. package/skills/discord/SKILL.md +1 -0
  374. package/skills/document-generation/SKILL.md +64 -0
  375. package/skills/eightctl/SKILL.md +1 -0
  376. package/skills/food-order/SKILL.md +1 -0
  377. package/skills/gemini/SKILL.md +1 -0
  378. package/skills/gh-issues/SKILL.md +1 -0
  379. package/skills/gifgrep/SKILL.md +1 -0
  380. package/skills/github/SKILL.md +1 -0
  381. package/skills/gog/SKILL.md +1 -0
  382. package/skills/goplaces/SKILL.md +1 -0
  383. package/skills/healthcheck/SKILL.md +1 -0
  384. package/skills/himalaya/SKILL.md +1 -0
  385. package/skills/imsg/SKILL.md +1 -0
  386. package/skills/long-task/SKILL.md +1 -0
  387. package/skills/mcporter/SKILL.md +1 -0
  388. package/skills/model-usage/SKILL.md +1 -0
  389. package/skills/nano-banana-pro/SKILL.md +1 -0
  390. package/skills/nano-pdf/SKILL.md +1 -0
  391. package/skills/notion/SKILL.md +1 -0
  392. package/skills/obsidian/SKILL.md +1 -0
  393. package/skills/openai-image-gen/SKILL.md +1 -0
  394. package/skills/openai-whisper/SKILL.md +1 -0
  395. package/skills/openai-whisper-api/SKILL.md +1 -0
  396. package/skills/openhue/SKILL.md +1 -0
  397. package/skills/oracle/SKILL.md +1 -0
  398. package/skills/ordercli/SKILL.md +1 -0
  399. package/skills/peekaboo/SKILL.md +1 -0
  400. package/skills/reactions-extensive/SKILL.md +30 -0
  401. package/skills/reactions-minimal/SKILL.md +31 -0
  402. package/skills/safe-edit/SKILL.md +51 -0
  403. package/skills/sag/SKILL.md +1 -0
  404. package/skills/session-logs/SKILL.md +1 -0
  405. package/skills/sherpa-onnx-tts/SKILL.md +1 -0
  406. package/skills/skill-creator/SKILL.md +1 -0
  407. package/skills/slack/SKILL.md +1 -0
  408. package/skills/songsee/SKILL.md +1 -0
  409. package/skills/sonoscli/SKILL.md +1 -0
  410. package/skills/spotify-player/SKILL.md +1 -0
  411. package/skills/summarize/SKILL.md +1 -0
  412. package/skills/symihub/SKILL.md +1 -0
  413. package/skills/things-mac/SKILL.md +1 -0
  414. package/skills/tmux/SKILL.md +1 -0
  415. package/skills/tool-narration/SKILL.md +40 -0
  416. package/skills/trello/SKILL.md +1 -0
  417. package/skills/verify-output/SKILL.md +47 -0
  418. package/skills/video-frames/SKILL.md +1 -0
  419. package/skills/voice-call/SKILL.md +1 -0
  420. package/skills/wacli/SKILL.md +1 -0
  421. package/skills/weather/SKILL.md +1 -0
  422. package/skills/xurl/SKILL.md +1 -0
@@ -12,21 +12,21 @@ import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY
12
12
  import { _ as resolveDiscordAccount, a as normalizeWhatsAppTarget, c as listTelegramAccountIds, d as resolveSlackAccount, g as listEnabledDiscordAccounts, h as createDiscordActionGate, i as isWhatsAppGroupJid, l as resolveTelegramAccount, m as resolveSlackBotToken, n as listChannelPlugins, o as createTelegramActionGate, p as resolveSlackAppToken, r as normalizeChannelId$1, s as listEnabledTelegramAccounts, t as getChannelPlugin, u as resolveTelegramToken, v as normalizeDiscordToken } from "./plugins-71oIavrF.js";
13
13
  import { a as logoutWeb, i as logWebSelfId, l as readWebSelfId, p as webAuthExists, r as getWebAuthAgeMs, t as resolveWhatsAppAccount } from "./accounts-DDEyGwby.js";
14
14
  import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
15
- import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-vmIzYMwN.js";
16
- import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-CfejAK2u.js";
17
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver--ff__Iq0.js";
15
+ import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-F2Cpm-SJ.js";
16
+ import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-D27q8Oqo.js";
17
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-XYF4JahT.js";
18
18
  import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-Kbl70eCP.js";
19
19
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-C1vRJs5w.js";
20
20
  import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-8zZqL37v.js";
21
- import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as readChannelAllowFromStore, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, Q as listPairingChannels, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, X as upsertChannelPairingRequest, Y as removeChannelAllowFromStoreEntry, Z as getPairingAdapter, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, et as parseTelegramTarget, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as addChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as resolveTelegramTargetChatType, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-_CmB6CKB.js";
21
+ import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as readChannelAllowFromStore, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, Q as listPairingChannels, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, X as upsertChannelPairingRequest, Y as removeChannelAllowFromStoreEntry, Z as getPairingAdapter, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, et as parseTelegramTarget, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as addChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as resolveTelegramTargetChatType, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-depbZ9aA.js";
22
22
  import { d as detectMime, f as extensionForMime, g as isGifMedia, h as isAudioFileName, i as getImageMetadata, m as imageMimeFromFormat, s as resizeToJpeg, x as mediaKindFromMime, y as MAX_IMAGE_BYTES } from "./image-ops-ByaQt43P.js";
23
23
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-j5tVLINv.js";
24
24
  import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel, d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, i as isInternalMessageChannel, l as resolveMessageChannel, n as isDeliverableMessageChannel, o as listDeliverableMessageChannels, r as isGatewayMessageChannel, s as normalizeMessageChannel, t as INTERNAL_MESSAGE_CHANNEL, u as GATEWAY_CLIENT_IDS } from "./message-channel-BQINJQIT.js";
25
- import { $ as mergeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as updateSessionStoreEntry, Jt as ensureSessionHeader, K as updateLastRoute, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as deliveryContextKey, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as resolveCacheTtlMs$1, Xt as resolveBootstrapTotalMaxChars, Y as isCacheEnabled, Yt as resolveBootstrapMaxChars, Z as deliveryContextFromSession, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as DEFAULT_RESET_TRIGGERS, a as isMessagingToolDuplicateNormalized, at as countToolResults, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as applyInputProvenanceToUserMessage, d as isAntigravityClaude, dt as resolveSessionKey, et as normalizeDeliveryContext, f as isGoogleModelApi, ft as evaluateSessionFreshness, g as formatBillingErrorMessage, gt as resolveThreadFlag, h as formatAssistantErrorText, ht as resolveSessionResetType, it as capArrayByJsonBytes, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as hasInterSessionUserProvenance, m as classifyFailoverReason, mt as resolveSessionResetPolicy, n as validateGeminiTurns, nt as normalizeAccountId$3, o as normalizeTextForComparison, ot as extractToolCallNames, p as BILLING_ERROR_USER_MESSAGE, pt as resolveChannelResetConfig, q as updateSessionStore, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as archiveSessionTranscripts, s as sanitizeSessionMessagesImages, st as INPUT_PROVENANCE_KIND_VALUES, t as validateAnthropicTurns, tt as normalizeSessionDeliveryFields, u as downgradeOpenAIReasoningBlocks, ut as normalizeInputProvenance, v as getApiErrorPayloadFingerprint, vt as resolveFreshSessionTotalTokens, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, yt as canonicalizeMainSessionAlias, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-BPP4adeW.js";
26
- import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-CbBZUq-Q.js";
25
+ import { $ as mergeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as updateSessionStoreEntry, Jt as ensureSessionHeader, K as updateLastRoute, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as deliveryContextKey, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as resolveCacheTtlMs$1, Xt as resolveBootstrapTotalMaxChars, Y as isCacheEnabled, Yt as resolveBootstrapMaxChars, Z as deliveryContextFromSession, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as DEFAULT_RESET_TRIGGERS, a as isMessagingToolDuplicateNormalized, at as countToolResults, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as applyInputProvenanceToUserMessage, d as isAntigravityClaude, dt as resolveSessionKey, et as normalizeDeliveryContext, f as isGoogleModelApi, ft as evaluateSessionFreshness, g as formatBillingErrorMessage, gt as resolveThreadFlag, h as formatAssistantErrorText, ht as resolveSessionResetType, it as capArrayByJsonBytes, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as hasInterSessionUserProvenance, m as classifyFailoverReason, mt as resolveSessionResetPolicy, n as validateGeminiTurns, nt as normalizeAccountId$3, o as normalizeTextForComparison, ot as extractToolCallNames, p as BILLING_ERROR_USER_MESSAGE, pt as resolveChannelResetConfig, q as updateSessionStore, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as archiveSessionTranscripts, s as sanitizeSessionMessagesImages, st as INPUT_PROVENANCE_KIND_VALUES, t as validateAnthropicTurns, tt as normalizeSessionDeliveryFields, u as downgradeOpenAIReasoningBlocks, ut as normalizeInputProvenance, v as getApiErrorPayloadFingerprint, vt as resolveFreshSessionTotalTokens, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, yt as canonicalizeMainSessionAlias, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-DuZtk5SK.js";
26
+ import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-D7Zr88dI.js";
27
27
  import { c as normalizePluginsConfig, f as isPathInsideWithRealpath, i as safeStatSync, l as resolveEnableState, n as discoverSymiPlugins, p as isDangerousHostEnvVarName, r as isPathInside, s as applyTestPluginDefaults, t as loadPluginManifestRegistry, u as resolveMemorySlotDecision } from "./manifest-registry-DWdYdchb.js";
28
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-t-stBgN6.js";
29
- import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-XEbTRNYL.js";
28
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-B-hW5hrK.js";
29
+ import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, h as parseFrontmatterBlock, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-D0hfZgFz.js";
30
30
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-CPfngF0S.js";
31
31
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-CxfFyMRZ.js";
32
32
  import { n as getMediaDir, r as saveMediaBuffer } from "./store-bnzGvI16.js";
@@ -36,8 +36,8 @@ import { t as resolveIMessageAccount } from "./accounts-DImOt9jX.js";
36
36
  import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-DkMamAQ-.js";
37
37
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-C8Tqw4td.js";
38
38
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-ChC2CXaN.js";
39
- import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-D5bsPk2_.js";
40
- import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-CztTHQhN.js";
39
+ import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-BjyeKf1c.js";
40
+ import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-Bj8GFlcZ.js";
41
41
  import { c as normalizeExtraMemoryPaths, f as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-479FB0St.js";
42
42
  import { n as retryAsync } from "./retry-QGp0jvVi.js";
43
43
  import { a as createActionGate, c as jsonResult, d as readReactionParams, f as readStringArrayParam, l as parseAvailableTags, m as readStringParam, n as missingTargetError, o as imageResult, p as readStringOrNumberParam, r as unknownTargetError, s as imageResultFromFile, t as ambiguousTargetError, u as readNumberParam } from "./target-errors-Dm716SF3.js";
@@ -47,20 +47,20 @@ import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-DwuL
47
47
  import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, t as getAgentScopedMediaLocalRoots } from "./local-roots-BuSWcEvl.js";
48
48
  import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-0kwEfxD4.js";
49
49
  import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-ke7KirEH.js";
50
- import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-CSF7Poen.js";
50
+ import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-QmLQo8Tj.js";
51
51
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-CgGv6nTy.js";
52
- import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-B_6xBcPB.js";
52
+ import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-Dbs3i8HW.js";
53
53
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-WLZaC77l.js";
54
54
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-BaoETsQI.js";
55
55
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-C-6tM-GK.js";
56
56
  import { n as normalizePollInput } from "./polls-Coxe0Akm.js";
57
57
  import { t as convertMarkdownTables } from "./tables-BE0lT1IV.js";
58
- import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-dohExhb8.js";
59
- import { a as formatIMessageChatTarget, c as parseIMessageTarget, i as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, o as isAllowedIMessageSender, r as createIMessageRpcClient, s as normalizeIMessageHandle, t as sendMessageIMessage } from "./send-C6-rN_Li.js";
58
+ import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-Dj6_LS_W.js";
59
+ import { a as formatIMessageChatTarget, c as parseIMessageTarget, i as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, o as isAllowedIMessageSender, r as createIMessageRpcClient, s as normalizeIMessageHandle, t as sendMessageIMessage } from "./send-B0szkIfv.js";
60
60
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-Dd2_hyM2.js";
61
61
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-CFRe6XNa.js";
62
62
  import { t as makeProxyFetch } from "./proxy-DaT-KQ7w.js";
63
- import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-BV7oFP7Z.js";
63
+ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-Dmo0pSSf.js";
64
64
  import { t as getActiveWebListener } from "./active-listener-OKZn7EWc.js";
65
65
  import { createRequire } from "node:module";
66
66
  import * as path$1 from "node:path";
@@ -3473,7 +3473,7 @@ async function getMemorySearchManager(params) {
3473
3473
  const wrapper = new FallbackMemoryManager({
3474
3474
  primary,
3475
3475
  fallbackFactory: async () => {
3476
- const { MemoryIndexManager } = await import("./manager-CztTHQhN.js").then((n) => n.n);
3476
+ const { MemoryIndexManager } = await import("./manager-Bj8GFlcZ.js").then((n) => n.n);
3477
3477
  return await MemoryIndexManager.get(params);
3478
3478
  }
3479
3479
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -3486,7 +3486,7 @@ async function getMemorySearchManager(params) {
3486
3486
  }
3487
3487
  }
3488
3488
  try {
3489
- const { MemoryIndexManager } = await import("./manager-CztTHQhN.js").then((n) => n.n);
3489
+ const { MemoryIndexManager } = await import("./manager-Bj8GFlcZ.js").then((n) => n.n);
3490
3490
  return { manager: await MemoryIndexManager.get(params) };
3491
3491
  } catch (err) {
3492
3492
  return {
@@ -7367,7 +7367,7 @@ async function routeReply(params) {
7367
7367
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
7368
7368
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
7369
7369
  try {
7370
- const { deliverOutboundPayloads } = await import("./deliver--ff__Iq0.js").then((n) => n.n);
7370
+ const { deliverOutboundPayloads } = await import("./deliver-XYF4JahT.js").then((n) => n.n);
7371
7371
  return {
7372
7372
  ok: true,
7373
7373
  messageId: (await deliverOutboundPayloads({
@@ -21604,6 +21604,7 @@ function sanitizeForPromptLiteral(value) {
21604
21604
  //#region src/agents/system-prompt.ts
21605
21605
  function buildSkillsSection(params) {
21606
21606
  if (params.isMinimal) return [];
21607
+ if (params.dropCatalog) return [];
21607
21608
  const trimmed = params.skillsPrompt?.trim();
21608
21609
  if (!trimmed) return [];
21609
21610
  return [
@@ -21708,7 +21709,7 @@ function buildVoiceSection(params) {
21708
21709
  ];
21709
21710
  }
21710
21711
  function buildVerifyYourWorkSection(params) {
21711
- if (params.isMinimal) return [];
21712
+ if (params.isMinimal || params.compactMode) return [];
21712
21713
  const exec = params.execToolName;
21713
21714
  const read = params.readToolName;
21714
21715
  return [
@@ -21897,6 +21898,7 @@ function buildAgentSystemPrompt(params) {
21897
21898
  const promptMode = params.promptMode ?? "full";
21898
21899
  const isMinimal = promptMode === "minimal" || promptMode === "none";
21899
21900
  const isCoding = promptMode === "coding";
21901
+ const compactMode = params.compactMode === true;
21900
21902
  const sandboxContainerWorkspace = params.sandboxInfo?.containerWorkspaceDir?.trim();
21901
21903
  const sanitizedWorkspaceDir = sanitizeForPromptLiteral(params.workspaceDir);
21902
21904
  const sanitizedSandboxContainerWorkspace = sandboxContainerWorkspace ? sanitizeForPromptLiteral(sandboxContainerWorkspace) : "";
@@ -21912,7 +21914,8 @@ function buildAgentSystemPrompt(params) {
21912
21914
  const skillsSection = buildSkillsSection({
21913
21915
  skillsPrompt,
21914
21916
  isMinimal,
21915
- readToolName
21917
+ readToolName,
21918
+ dropCatalog: compactMode && (params.skillsDiscoveryMode === "jit" || params.skillsDiscoveryMode === "hybrid")
21916
21919
  });
21917
21920
  const memorySection = buildMemorySection({
21918
21921
  isMinimal,
@@ -21955,39 +21958,43 @@ function buildAgentSystemPrompt(params) {
21955
21958
  "If a task is more complex or takes longer, spawn a sub-agent. Completion is push-based: it will auto-announce when done.",
21956
21959
  "Do not poll `subagents list` / `sessions_list` in a loop; only check status on-demand (for intervention, debugging, or when explicitly asked).",
21957
21960
  "",
21958
- "## Tool Call Style",
21959
- "Default: do not narrate routine, low-risk tool calls (just call the tool).",
21960
- "Narrate only when it helps: multi-step work, complex/challenging problems, sensitive actions (e.g., deletions), or when the user explicitly asks.",
21961
- "Keep narration brief and value-dense; avoid repeating obvious steps.",
21962
- "Use plain human language for narration unless in a technical context.",
21963
- "",
21964
- "## Edit Tool Best Practices",
21965
- "When using the edit tool, the oldText must match the file EXACTLY (whitespace, indentation, and all).",
21966
- "To avoid match failures:",
21967
- "- Use the SHORTEST unique snippet that identifies the edit location (1-3 lines). Do NOT paste large blocks.",
21968
- "- ALWAYS read the file first, then copy the exact text from the read output for oldText.",
21969
- "- 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 move on or fix a different issue.",
21970
- "- Prefer lines with distinctive content (function names, unique strings) over generic code (braces, blank lines).",
21971
- "",
21961
+ ...compactMode ? [] : [
21962
+ "## Tool Call Style",
21963
+ "Default: do not narrate routine, low-risk tool calls (just call the tool).",
21964
+ "Narrate only when it helps: multi-step work, complex/challenging problems, sensitive actions (e.g., deletions), or when the user explicitly asks.",
21965
+ "Keep narration brief and value-dense; avoid repeating obvious steps.",
21966
+ "Use plain human language for narration unless in a technical context.",
21967
+ "",
21968
+ "## Edit Tool Best Practices",
21969
+ "When using the edit tool, the oldText must match the file EXACTLY (whitespace, indentation, and all).",
21970
+ "To avoid match failures:",
21971
+ "- Use the SHORTEST unique snippet that identifies the edit location (1-3 lines). Do NOT paste large blocks.",
21972
+ "- ALWAYS read the file first, then copy the exact text from the read output for oldText.",
21973
+ "- 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 move on or fix a different issue.",
21974
+ "- Prefer lines with distinctive content (function names, unique strings) over generic code (braces, blank lines).",
21975
+ ""
21976
+ ],
21972
21977
  ...safetySection,
21973
- "## Symi CLI Quick Reference",
21974
- "Symi is controlled via subcommands. Do not invent commands.",
21975
- "To manage the Gateway daemon service (start/stop/restart):",
21976
- "- symi gateway status",
21977
- "- symi gateway start",
21978
- "- symi gateway stop",
21979
- "- symi gateway restart",
21980
- "If unsure, ask the user to run `symi help` (or `symi gateway --help`) and paste the output.",
21981
- "",
21978
+ ...compactMode ? ["For Symi CLI commands, ask the user to run `symi help` and paste the output.", ""] : [
21979
+ "## Symi CLI Quick Reference",
21980
+ "Symi is controlled via subcommands. Do not invent commands.",
21981
+ "To manage the Gateway daemon service (start/stop/restart):",
21982
+ "- symi gateway status",
21983
+ "- symi gateway start",
21984
+ "- symi gateway stop",
21985
+ "- symi gateway restart",
21986
+ "If unsure, ask the user to run `symi help` (or `symi gateway --help`) and paste the output.",
21987
+ ""
21988
+ ],
21982
21989
  ...skillsSection,
21983
21990
  ...memorySection,
21984
- hasGateway && !isMinimal && !isCoding ? "## Symi Self-Update" : "",
21985
- hasGateway && !isMinimal && !isCoding ? [
21991
+ hasGateway && !isMinimal && !isCoding && !compactMode ? "## Symi Self-Update" : "",
21992
+ hasGateway && !isMinimal && !isCoding && !compactMode ? [
21986
21993
  "Get Updates (self-update) is ONLY allowed when the user explicitly asks for it.",
21987
21994
  "Do not run config.apply or update.run unless the user explicitly requests an update or config change; if it's not explicit, ask first.",
21988
21995
  "Actions: config.get, config.schema, config.apply (validate + write full config, then restart), update.run (update deps or git, then restart).",
21989
21996
  "After restart, Symi pings the last active session automatically."
21990
- ].join("\n") : "",
21997
+ ].join("\n") : hasGateway && !isMinimal && !isCoding && compactMode ? "Gateway destructive actions (config.apply, config.patch, update.run) require explicit user authorization via userRequestAcknowledgment — never invoke speculatively." : "",
21991
21998
  hasGateway && !isMinimal && !isCoding ? "" : "",
21992
21999
  "",
21993
22000
  params.modelAliasLines && params.modelAliasLines.length > 0 && !isMinimal && !isCoding ? "## Model Aliases" : "",
@@ -22004,7 +22011,8 @@ function buildAgentSystemPrompt(params) {
22004
22011
  ...buildVerifyYourWorkSection({
22005
22012
  isMinimal,
22006
22013
  execToolName,
22007
- readToolName
22014
+ readToolName,
22015
+ compactMode
22008
22016
  }),
22009
22017
  params.sandboxInfo?.enabled ? "## Sandbox" : "",
22010
22018
  params.sandboxInfo?.enabled ? [
@@ -22050,23 +22058,26 @@ function buildAgentSystemPrompt(params) {
22050
22058
  }
22051
22059
  if (params.reactionGuidance) {
22052
22060
  const { level, channel } = params.reactionGuidance;
22053
- const guidanceText = level === "minimal" ? [
22054
- `Reactions are enabled for ${channel} in MINIMAL mode.`,
22055
- "React ONLY when truly relevant:",
22056
- "- Acknowledge important user requests or confirmations",
22057
- "- Express genuine sentiment (humor, appreciation) sparingly",
22058
- "- Avoid reacting to routine messages or your own replies",
22059
- "Guideline: at most 1 reaction per 5-10 exchanges."
22060
- ].join("\n") : [
22061
- `Reactions are enabled for ${channel} in EXTENSIVE mode.`,
22062
- "Feel free to react liberally:",
22063
- "- Acknowledge messages with appropriate emojis",
22064
- "- Express sentiment and personality through reactions",
22065
- "- React to interesting content, humor, or notable events",
22066
- "- Use reactions to confirm understanding or agreement",
22067
- "Guideline: react whenever it feels natural."
22068
- ].join("\n");
22069
- lines.push("## Reactions", guidanceText, "");
22061
+ if (compactMode) lines.push("## Reactions", `Reactions for ${channel} are in ${level.toUpperCase()} mode — see the reactions-${level} skill (auto-loaded).`, "");
22062
+ else {
22063
+ const guidanceText = level === "minimal" ? [
22064
+ `Reactions are enabled for ${channel} in MINIMAL mode.`,
22065
+ "React ONLY when truly relevant:",
22066
+ "- Acknowledge important user requests or confirmations",
22067
+ "- Express genuine sentiment (humor, appreciation) sparingly",
22068
+ "- Avoid reacting to routine messages or your own replies",
22069
+ "Guideline: at most 1 reaction per 5-10 exchanges."
22070
+ ].join("\n") : [
22071
+ `Reactions are enabled for ${channel} in EXTENSIVE mode.`,
22072
+ "Feel free to react liberally:",
22073
+ "- Acknowledge messages with appropriate emojis",
22074
+ "- Express sentiment and personality through reactions",
22075
+ "- React to interesting content, humor, or notable events",
22076
+ "- Use reactions to confirm understanding or agreement",
22077
+ "Guideline: react whenever it feels natural."
22078
+ ].join("\n");
22079
+ lines.push("## Reactions", guidanceText, "");
22080
+ }
22070
22081
  }
22071
22082
  if (reasoningHint) lines.push("## Reasoning Format", reasoningHint, "");
22072
22083
  const validContextFiles = (params.contextFiles ?? []).filter((file) => typeof file.path === "string" && file.path.trim().length > 0);
@@ -36293,6 +36304,231 @@ function createSessionsSpawnTool(opts) {
36293
36304
  };
36294
36305
  }
36295
36306
 
36307
+ //#endregion
36308
+ //#region src/agents/skills/triggers.ts
36309
+ const QUOTE_RE = /^["'`](.*)["'`]$/;
36310
+ const ARRAY_FORM_RE = /^\[(.*)\]$/s;
36311
+ function stripWrappingQuotes(s) {
36312
+ const m = s.trim().match(QUOTE_RE);
36313
+ return m ? m[1] : s.trim();
36314
+ }
36315
+ /** Parse a single trigger value, dropping empty / whitespace-only entries. */
36316
+ function cleanTrigger(raw) {
36317
+ const trimmed = stripWrappingQuotes(raw).toLowerCase();
36318
+ return trimmed.length > 0 ? trimmed : null;
36319
+ }
36320
+ /**
36321
+ * Parse the value of a `triggers:` frontmatter field into a string[].
36322
+ * Accepts both inline-array form `[a, b, "c d"]` and YAML-list form
36323
+ * (multiline with leading hyphens). Returns deduped lowercased trigger
36324
+ * strings, or empty array on unparseable / missing input.
36325
+ */
36326
+ function parseTriggersValue(raw) {
36327
+ if (typeof raw !== "string") return [];
36328
+ const trimmed = raw.trim();
36329
+ if (!trimmed) return [];
36330
+ const items = [];
36331
+ const arrayMatch = trimmed.match(ARRAY_FORM_RE);
36332
+ if (arrayMatch) {
36333
+ const inner = arrayMatch[1];
36334
+ let buf = "";
36335
+ let inQuote = null;
36336
+ for (const ch of inner) {
36337
+ if (inQuote) {
36338
+ if (ch === inQuote) inQuote = null;
36339
+ else buf += ch;
36340
+ continue;
36341
+ }
36342
+ if (ch === "\"" || ch === "'") {
36343
+ inQuote = ch;
36344
+ continue;
36345
+ }
36346
+ if (ch === ",") {
36347
+ const cleaned = cleanTrigger(buf);
36348
+ if (cleaned) items.push(cleaned);
36349
+ buf = "";
36350
+ continue;
36351
+ }
36352
+ buf += ch;
36353
+ }
36354
+ const cleaned = cleanTrigger(buf);
36355
+ if (cleaned) items.push(cleaned);
36356
+ } else for (const line of trimmed.split("\n")) {
36357
+ const ltrim = line.trimStart();
36358
+ if (ltrim.startsWith("- ")) {
36359
+ const cleaned = cleanTrigger(ltrim.slice(2));
36360
+ if (cleaned) items.push(cleaned);
36361
+ } else if (ltrim && !ltrim.startsWith("#")) {
36362
+ const cleaned = cleanTrigger(ltrim);
36363
+ if (cleaned) items.push(cleaned);
36364
+ }
36365
+ }
36366
+ const seen = /* @__PURE__ */ new Set();
36367
+ const out = [];
36368
+ for (const t of items) if (!seen.has(t)) {
36369
+ seen.add(t);
36370
+ out.push(t);
36371
+ }
36372
+ return out;
36373
+ }
36374
+ /**
36375
+ * Extract triggers from a parsed frontmatter record. Returns empty array
36376
+ * when the field is absent or unparseable.
36377
+ */
36378
+ function getSkillTriggers(frontmatter) {
36379
+ return parseTriggersValue(frontmatter.triggers);
36380
+ }
36381
+
36382
+ //#endregion
36383
+ //#region src/agents/tools/skill-search-tool.ts
36384
+ const SkillSearchToolSchema = Type.Object({
36385
+ query: Type.String({
36386
+ minLength: 1,
36387
+ description: "Intent description (2-8 words). Match by trigger keywords first, then description text."
36388
+ }),
36389
+ limit: Type.Optional(Type.Number({
36390
+ minimum: 1,
36391
+ maximum: 10,
36392
+ description: "Max results to return (default 5, capped at 10)."
36393
+ }))
36394
+ });
36395
+ const CACHE_TTL_MS = 6e4;
36396
+ const SAFE_NAME_RE = /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/;
36397
+ function loadSkillFromDir(dir, source) {
36398
+ const name = path.basename(dir);
36399
+ if (!SAFE_NAME_RE.test(name)) return null;
36400
+ const file = path.join(dir, "SKILL.md");
36401
+ let raw;
36402
+ try {
36403
+ if (!fs.statSync(file).isFile()) return null;
36404
+ raw = fs.readFileSync(file, "utf8");
36405
+ } catch {
36406
+ return null;
36407
+ }
36408
+ const fm = parseFrontmatterBlock(raw);
36409
+ return {
36410
+ name,
36411
+ description: (fm.description ?? "").trim(),
36412
+ path: file,
36413
+ triggers: getSkillTriggers(fm),
36414
+ source
36415
+ };
36416
+ }
36417
+ function listSkillDirs(root) {
36418
+ const skillsDir = path.join(root, "skills");
36419
+ let entries;
36420
+ try {
36421
+ entries = fs.readdirSync(skillsDir, { withFileTypes: true });
36422
+ } catch {
36423
+ return [];
36424
+ }
36425
+ return entries.filter((e) => e.isDirectory()).map((e) => path.join(skillsDir, e.name));
36426
+ }
36427
+ let cachedPackageRoot$1;
36428
+ const cachePerWorkspace = /* @__PURE__ */ new Map();
36429
+ function getPackageRoot$1() {
36430
+ if (cachedPackageRoot$1 === void 0) cachedPackageRoot$1 = resolveSymiPackageRootSync({});
36431
+ return cachedPackageRoot$1;
36432
+ }
36433
+ function loadAllSkills(workspaceDir) {
36434
+ const cacheKey = workspaceDir ?? "";
36435
+ const now = Date.now();
36436
+ const existing = cachePerWorkspace.get(cacheKey);
36437
+ if (existing && now - existing.loadedAt < CACHE_TTL_MS) return existing.skills;
36438
+ const seen = /* @__PURE__ */ new Map();
36439
+ if (workspaceDir) for (const dir of listSkillDirs(workspaceDir)) {
36440
+ const skill = loadSkillFromDir(dir, "workspace");
36441
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
36442
+ }
36443
+ const packageRoot = getPackageRoot$1();
36444
+ if (packageRoot) for (const dir of listSkillDirs(packageRoot)) {
36445
+ const skill = loadSkillFromDir(dir, "bundled");
36446
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
36447
+ }
36448
+ const skills = [...seen.values()];
36449
+ cachePerWorkspace.set(cacheKey, {
36450
+ skills,
36451
+ loadedAt: now
36452
+ });
36453
+ return skills;
36454
+ }
36455
+ const TOKEN_SPLIT_RE = /[^\w/]+/;
36456
+ function tokenizeQuery(raw) {
36457
+ return raw.toLowerCase().split(TOKEN_SPLIT_RE).filter((t) => t.length >= 2);
36458
+ }
36459
+ /**
36460
+ * Score a query against one skill's triggers + description.
36461
+ * - Trigger score: ratio of query tokens that appear in the trigger set.
36462
+ * - FTS score: 0.4 × ratio of query tokens that appear in the description
36463
+ * (case-insensitive substring match).
36464
+ * - Final = max(trigger, fts) so trigger matches always beat descriptions.
36465
+ * - Returns 0 for "no signal at all" (caller should drop these).
36466
+ */
36467
+ function scoreSkillMatch(skill, queryTokens) {
36468
+ if (queryTokens.length === 0) return 0;
36469
+ const triggerSet = new Set(skill.triggers.map((t) => t.toLowerCase()));
36470
+ const description = skill.description.toLowerCase();
36471
+ let triggerHits = 0;
36472
+ let ftsHits = 0;
36473
+ for (const token of queryTokens) if (triggerSet.has(token)) triggerHits += 1;
36474
+ else if (description.includes(token)) ftsHits += 1;
36475
+ const triggerScore = triggerHits / queryTokens.length;
36476
+ const ftsScore = ftsHits / queryTokens.length * .4;
36477
+ return Math.max(triggerScore, ftsScore);
36478
+ }
36479
+ /**
36480
+ * Pure-function search; exported for testing without going through the
36481
+ * tool execute wrapper.
36482
+ */
36483
+ function searchSkills(query, limit, workspaceDir) {
36484
+ const tokens = tokenizeQuery(query);
36485
+ if (tokens.length === 0) return [];
36486
+ const all = loadAllSkills(workspaceDir);
36487
+ const scored = [];
36488
+ for (const skill of all) {
36489
+ const score = scoreSkillMatch(skill, tokens);
36490
+ if (score > 0) scored.push({
36491
+ name: skill.name,
36492
+ description: skill.description,
36493
+ path: skill.path,
36494
+ score
36495
+ });
36496
+ }
36497
+ scored.sort((a, b) => b.score - a.score || a.name.localeCompare(b.name));
36498
+ return scored.slice(0, limit);
36499
+ }
36500
+ function createSkillSearchTool(opts) {
36501
+ return {
36502
+ name: "skill_search",
36503
+ label: "skill_search",
36504
+ description: "Find skills relevant to the current task. Returns matching skills with name/description/path; `read` the SKILL.md to apply. Call before non-trivial tool work — search by intent ('connect email', 'long task') not tool name.",
36505
+ parameters: SkillSearchToolSchema,
36506
+ execute: async (_toolCallId, args) => {
36507
+ const params = args;
36508
+ const query = typeof params.query === "string" ? params.query.trim() : "";
36509
+ if (!query) return jsonResult({
36510
+ ok: false,
36511
+ error: "skill_search requires a non-empty `query` string."
36512
+ });
36513
+ const limit = typeof params.limit === "number" && Number.isFinite(params.limit) ? Math.min(10, Math.max(1, Math.floor(params.limit))) : 5;
36514
+ try {
36515
+ return jsonResult({
36516
+ ok: true,
36517
+ query,
36518
+ matches: searchSkills(query, limit, opts?.workspaceDir)
36519
+ });
36520
+ } catch (err) {
36521
+ const message = err instanceof Error ? err.message : String(err);
36522
+ logWarn(`skill_search failed: ${message}`);
36523
+ return jsonResult({
36524
+ ok: false,
36525
+ error: message
36526
+ });
36527
+ }
36528
+ }
36529
+ };
36530
+ }
36531
+
36296
36532
  //#endregion
36297
36533
  //#region src/agents/tools/subagents-tool.ts
36298
36534
  const SUBAGENT_ACTIONS = [
@@ -38353,6 +38589,7 @@ function createSymiTools(options) {
38353
38589
  createCronTool({ agentSessionKey: options?.agentSessionKey }),
38354
38590
  createTaskListTool({ workspaceDir }),
38355
38591
  createTaskCancelTool({ workspaceDir }),
38592
+ createSkillSearchTool({ workspaceDir }),
38356
38593
  ...messageTool ? [messageTool] : [],
38357
38594
  createTtsTool({
38358
38595
  agentChannel: options?.agentChannel,
@@ -46454,6 +46691,71 @@ function buildAutoLoadedSkillsBlock(opts) {
46454
46691
  ].join("\n");
46455
46692
  }
46456
46693
 
46694
+ //#endregion
46695
+ //#region src/agents/system-prompt-skills-jit.ts
46696
+ const MAX_ANCHOR_DESCRIPTION_CHARS = 100;
46697
+ const MAX_AUTO_INJECT_RESULTS = 3;
46698
+ const MAX_AUTO_INJECT_TOTAL_CHARS = 600;
46699
+ /**
46700
+ * Build the anchor list block. Returns "" when no anchor list configured
46701
+ * or in preload mode (anchor list adds value only in jit/hybrid).
46702
+ */
46703
+ function buildAnchorListBlock(opts) {
46704
+ if (opts.minimalMode) return "";
46705
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
46706
+ const names = (opts.anchorList ?? []).filter((n) => typeof n === "string" && n.trim().length > 0);
46707
+ if (names.length === 0) return "";
46708
+ const lines = [];
46709
+ for (const name of names) {
46710
+ const description = searchSkills(name, 1, opts.workspaceDir)[0]?.description.trim() ?? "";
46711
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
46712
+ lines.push(truncated ? `- ${name}: ${truncated}` : `- ${name}`);
46713
+ }
46714
+ return [
46715
+ "",
46716
+ "## Anchor Skills",
46717
+ "These skills are always available. Read their SKILL.md via `read` if relevant. For full discovery use the `skill_search` tool.",
46718
+ lines.join("\n"),
46719
+ ""
46720
+ ].join("\n");
46721
+ }
46722
+ /**
46723
+ * Build the auto-injected matches block based on the user message triggers.
46724
+ * Returns "" when discoveryMode doesn't ask for it, no message available,
46725
+ * no matches found, or in minimal mode.
46726
+ */
46727
+ function buildAutoInjectBlock(opts) {
46728
+ if (opts.minimalMode) return "";
46729
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
46730
+ const message = (opts.userMessage ?? "").trim();
46731
+ if (!message) return "";
46732
+ const matches = searchSkills(message, MAX_AUTO_INJECT_RESULTS, opts.workspaceDir);
46733
+ if (matches.length === 0) return "";
46734
+ const lines = [];
46735
+ let total = 0;
46736
+ for (const match of matches) {
46737
+ const description = match.description.trim();
46738
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
46739
+ const skillRef = path.basename(path.dirname(match.path));
46740
+ const line = truncated ? `- ${skillRef}: ${truncated}` : `- ${skillRef}`;
46741
+ if (total + line.length > MAX_AUTO_INJECT_TOTAL_CHARS) break;
46742
+ lines.push(line);
46743
+ total += line.length + 1;
46744
+ }
46745
+ if (lines.length === 0) return "";
46746
+ return [
46747
+ "",
46748
+ "## Possibly Relevant Skills (auto-suggested for this request)",
46749
+ "These skills' triggers matched keywords in your message. Read the SKILL.md if it applies; otherwise ignore and proceed.",
46750
+ lines.join("\n"),
46751
+ ""
46752
+ ].join("\n");
46753
+ }
46754
+ /** Convenience: build both blocks concatenated. */
46755
+ function buildSkillsJitBlocks(opts) {
46756
+ return `${buildAnchorListBlock(opts)}${buildAutoInjectBlock(opts)}`;
46757
+ }
46758
+
46457
46759
  //#endregion
46458
46760
  //#region src/agents/pi-embedded-runner/system-prompt.ts
46459
46761
  function buildEmbeddedSystemPrompt(params) {
@@ -46483,16 +46785,23 @@ function buildEmbeddedSystemPrompt(params) {
46483
46785
  userTime: params.userTime,
46484
46786
  userTimeFormat: params.userTimeFormat,
46485
46787
  contextFiles: params.contextFiles,
46486
- memoryCitationsMode: params.memoryCitationsMode
46788
+ memoryCitationsMode: params.memoryCitationsMode,
46789
+ compactMode: params.compactMode,
46790
+ skillsDiscoveryMode: params.skillsDiscoveryMode
46487
46791
  });
46488
46792
  const promptMode = params.promptMode ?? "full";
46489
46793
  const isMinimal = promptMode === "minimal" || promptMode === "none";
46490
- const skillsBlock = buildAutoLoadedSkillsBlock({
46794
+ return `${corePrompt}${buildAutoLoadedSkillsBlock({
46491
46795
  skillNames: params.autoLoadInlineSkills ?? [],
46492
46796
  workspaceDir: params.workspaceDir,
46493
46797
  minimalMode: isMinimal
46494
- });
46495
- return skillsBlock ? `${corePrompt}${skillsBlock}` : corePrompt;
46798
+ })}${buildSkillsJitBlocks({
46799
+ discoveryMode: params.skillsDiscoveryMode,
46800
+ anchorList: params.skillsAnchorList,
46801
+ userMessage: params.currentUserMessage,
46802
+ workspaceDir: params.workspaceDir,
46803
+ minimalMode: isMinimal
46804
+ })}`;
46496
46805
  }
46497
46806
  function createSystemPromptOverride(systemPrompt) {
46498
46807
  const override = systemPrompt.trim();
@@ -47281,7 +47590,11 @@ async function runEmbeddedAttempt(params) {
47281
47590
  userTimeFormat,
47282
47591
  contextFiles,
47283
47592
  memoryCitationsMode: params.config?.memory?.citations,
47284
- autoLoadInlineSkills: params.config?.skills?.autoLoadInline
47593
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
47594
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
47595
+ skillsAnchorList: params.config?.skills?.anchorList,
47596
+ currentUserMessage: params.prompt,
47597
+ compactMode: params.config?.prompt?.compactMode
47285
47598
  });
47286
47599
  const systemPromptReport = buildSystemPromptReport({
47287
47600
  source: "run",
@@ -51764,7 +52077,7 @@ async function deliverSessionMaintenanceWarning(params) {
51764
52077
  return;
51765
52078
  }
51766
52079
  try {
51767
- const { deliverOutboundPayloads } = await import("./deliver--ff__Iq0.js").then((n) => n.n);
52080
+ const { deliverOutboundPayloads } = await import("./deliver-XYF4JahT.js").then((n) => n.n);
51768
52081
  await deliverOutboundPayloads({
51769
52082
  cfg: params.cfg,
51770
52083
  channel,
@@ -55210,7 +55523,7 @@ async function describeStickerImage(params) {
55210
55523
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
55211
55524
  try {
55212
55525
  const buffer = await fs$1.readFile(imagePath);
55213
- const { describeImageWithModel } = await import("./image-D5bsPk2_.js").then((n) => n.n);
55526
+ const { describeImageWithModel } = await import("./image-BjyeKf1c.js").then((n) => n.n);
55214
55527
  return (await describeImageWithModel({
55215
55528
  buffer,
55216
55529
  fileName: "sticker.webp",
@@ -55633,7 +55946,7 @@ function createWhatsAppLoginTool() {
55633
55946
  force: Type.Optional(Type.Boolean())
55634
55947
  }),
55635
55948
  execute: async (_toolCallId, args) => {
55636
- const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-BBrzemk7.js");
55949
+ const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-CZXIrzvh.js");
55637
55950
  if ((args?.action ?? "start") === "wait") {
55638
55951
  const result = await waitForWebLogin({ timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0 });
55639
55952
  return {
@@ -57959,7 +58272,7 @@ async function preflightDiscordMessage(params) {
57959
58272
  let preflightTranscript;
57960
58273
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
57961
58274
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
57962
- const { transcribeFirstAudio } = await import("./audio-preflight-CMutcMs5.js");
58275
+ const { transcribeFirstAudio } = await import("./audio-preflight-Dtsvq6Hj.js");
57963
58276
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
57964
58277
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
57965
58278
  ctx: {
@@ -61742,27 +62055,27 @@ function isVoiceChannelType(type) {
61742
62055
  function createDefaultDeps() {
61743
62056
  return {
61744
62057
  sendMessageWhatsApp: async (...args) => {
61745
- const { sendMessageWhatsApp } = await import("./web-B8GaP73t.js");
62058
+ const { sendMessageWhatsApp } = await import("./web-DaChMSyM.js");
61746
62059
  return await sendMessageWhatsApp(...args);
61747
62060
  },
61748
62061
  sendMessageTelegram: async (...args) => {
61749
- const { sendMessageTelegram } = await import("./send-_CmB6CKB.js").then((n) => n.l);
62062
+ const { sendMessageTelegram } = await import("./send-depbZ9aA.js").then((n) => n.l);
61750
62063
  return await sendMessageTelegram(...args);
61751
62064
  },
61752
62065
  sendMessageDiscord: async (...args) => {
61753
- const { sendMessageDiscord } = await import("./send-CfejAK2u.js").then((n) => n.t);
62066
+ const { sendMessageDiscord } = await import("./send-D27q8Oqo.js").then((n) => n.t);
61754
62067
  return await sendMessageDiscord(...args);
61755
62068
  },
61756
62069
  sendMessageSlack: async (...args) => {
61757
- const { sendMessageSlack } = await import("./send-vmIzYMwN.js").then((n) => n.n);
62070
+ const { sendMessageSlack } = await import("./send-F2Cpm-SJ.js").then((n) => n.n);
61758
62071
  return await sendMessageSlack(...args);
61759
62072
  },
61760
62073
  sendMessageSignal: async (...args) => {
61761
- const { sendMessageSignal } = await import("./send-dohExhb8.js").then((n) => n.i);
62074
+ const { sendMessageSignal } = await import("./send-Dj6_LS_W.js").then((n) => n.i);
61762
62075
  return await sendMessageSignal(...args);
61763
62076
  },
61764
62077
  sendMessageIMessage: async (...args) => {
61765
- const { sendMessageIMessage } = await import("./send-C6-rN_Li.js").then((n) => n.n);
62078
+ const { sendMessageIMessage } = await import("./send-B0szkIfv.js").then((n) => n.n);
61766
62079
  return await sendMessageIMessage(...args);
61767
62080
  }
61768
62081
  };
@@ -72592,7 +72905,7 @@ async function registerSlackMonitorSlashCommands(params) {
72592
72905
  });
72593
72906
  const deliverSlashPayloads = async (replies) => {
72594
72907
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
72595
- import("./replies-BV7oFP7Z.js").then((n) => n.r),
72908
+ import("./replies-Dmo0pSSf.js").then((n) => n.r),
72596
72909
  import("./chunk-Bk95VMr4.js").then((n) => n.s),
72597
72910
  import("./markdown-tables-XmEPv2t0.js").then((n) => n.t)
72598
72911
  ]);
@@ -72647,7 +72960,7 @@ async function registerSlackMonitorSlashCommands(params) {
72647
72960
  let nativeCommands = [];
72648
72961
  if (nativeEnabled) {
72649
72962
  reg = await getCommandsRegistry();
72650
- const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-CSF7Poen.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
72963
+ const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-QmLQo8Tj.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
72651
72964
  nativeCommands = reg.listNativeCommandSpecsForConfig(cfg, {
72652
72965
  skillCommands,
72653
72966
  provider: "slack"
@@ -74865,7 +75178,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
74865
75178
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
74866
75179
  let preflightTranscript;
74867
75180
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
74868
- const { transcribeFirstAudio } = await import("./audio-preflight-CMutcMs5.js");
75181
+ const { transcribeFirstAudio } = await import("./audio-preflight-Dtsvq6Hj.js");
74869
75182
  preflightTranscript = await transcribeFirstAudio({
74870
75183
  ctx: {
74871
75184
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -77010,23 +77323,23 @@ let webLoginQrPromise = null;
77010
77323
  let webChannelPromise = null;
77011
77324
  let whatsappActionsPromise = null;
77012
77325
  function loadWebOutbound() {
77013
- webOutboundPromise ??= import("./outbound-CLCy4Nsg.js").then((n) => n.t);
77326
+ webOutboundPromise ??= import("./outbound-BD7PNRhC.js").then((n) => n.t);
77014
77327
  return webOutboundPromise;
77015
77328
  }
77016
77329
  function loadWebLogin() {
77017
- webLoginPromise ??= import("./login-B7OJui4y.js").then((n) => n.n);
77330
+ webLoginPromise ??= import("./login-Cv_LYGzG.js").then((n) => n.n);
77018
77331
  return webLoginPromise;
77019
77332
  }
77020
77333
  function loadWebLoginQr() {
77021
- webLoginQrPromise ??= import("./login-qr-BBrzemk7.js");
77334
+ webLoginQrPromise ??= import("./login-qr-CZXIrzvh.js");
77022
77335
  return webLoginQrPromise;
77023
77336
  }
77024
77337
  function loadWebChannel() {
77025
- webChannelPromise ??= import("./web-B8GaP73t.js");
77338
+ webChannelPromise ??= import("./web-DaChMSyM.js");
77026
77339
  return webChannelPromise;
77027
77340
  }
77028
77341
  function loadWhatsAppActions() {
77029
- whatsappActionsPromise ??= import("./whatsapp-actions-BV4mjN5j.js");
77342
+ whatsappActionsPromise ??= import("./whatsapp-actions-CkT3dnmD.js");
77030
77343
  return whatsappActionsPromise;
77031
77344
  }
77032
77345
  function createPluginRuntime() {
@@ -79709,7 +80022,11 @@ async function compactEmbeddedPiSessionDirect(params) {
79709
80022
  userTimeFormat,
79710
80023
  contextFiles,
79711
80024
  memoryCitationsMode: params.config?.memory?.citations,
79712
- autoLoadInlineSkills: params.config?.skills?.autoLoadInline
80025
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
80026
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
80027
+ skillsAnchorList: params.config?.skills?.anchorList,
80028
+ currentUserMessage: void 0,
80029
+ compactMode: params.config?.prompt?.compactMode
79713
80030
  }));
79714
80031
  const sessionLock = await acquireSessionWriteLock({
79715
80032
  sessionFile: params.sessionFile,