@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
@@ -8,8 +8,8 @@ import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-ChYu
8
8
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-CUNoPTKm.js";
9
9
  import { $ as isRich, A as normalizeE164, D as isRecord$1, E as formatTerminalLink, H as isPlainObject, I as shortenHomeInString, J as setVerbose, K as logVerbose, L as shortenHomePath, P as resolveUserPath, Q as colorize, R as sleep$1, S as clampInt, T as escapeRegExp, U as danger, V as truncateUtf16Safe, Y as shouldLogVerbose, Z as warn, _ as matchPluginCommand, a as normalizeAnyChannelId, b as CONFIG_DIR, ct as normalizeLogLevel, d as createPluginRegistry, et as theme, f as normalizePluginHttpPath, g as listPluginCommands, h as getPluginCommandSpecs, l as requireActivePluginRegistry, m as executePluginCommand, n as CHAT_CHANNEL_ORDER, o as normalizeChannelId$1, p as clearPluginCommands, r as DEFAULT_CHAT_CHANNEL, tt as getChildLogger, u as setActivePluginRegistry, ut as resolvePreferredSymiTmpDir, v as createInternalHookEvent, w as ensureDir$3, y as triggerInternalHook, z as sliceUtf16Safe } from "./registry--_pGht6S.js";
10
10
  import { n as retryAsync } from "./retry-ilSJqnz9.js";
11
- import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, At as fetchDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, E as listThreadsDiscord, Et as normalizeChannelSlug, 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 buildChannelKeyCandidates, 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 applyChannelMatchMeta, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-Cxr9NnOd.js";
12
- import { B as getConfigOverrides, C as resolveIMessageRemoteAttachmentRoots, G as parseConfigPath, H as setConfigOverride, J as isSafeExecutableValue, K as setConfigValueAtPath, R as parseDurationMs, S as resolveIMessageAttachmentRoots, U as unsetConfigOverride, V as resetConfigOverrides, W as getConfigValueAtPath, X as resolveAgentMaxConcurrent, Y as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, Z as VERSION, _ as normalizeTelegramCommandName, a as writeConfigFile, b as isInboundPathAllowed, g as TELEGRAM_COMMAND_NAME_PATTERN, i as resolveConfigSnapshotHash, n as loadConfig, o as validateConfigObjectWithPlugins, q as unsetConfigValueAtPath, r as readConfigFileSnapshot, v as resolveTelegramCustomCommands, w as normalizeScpRemoteHost, z as validateJsonSchemaValue } from "./config-DQntj58u.js";
11
+ import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, At as fetchDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, E as listThreadsDiscord, Et as normalizeChannelSlug, 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 buildChannelKeyCandidates, 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 applyChannelMatchMeta, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-CF7BhO8B.js";
12
+ import { B as getConfigOverrides, C as resolveIMessageRemoteAttachmentRoots, G as parseConfigPath, H as setConfigOverride, J as isSafeExecutableValue, K as setConfigValueAtPath, R as parseDurationMs, S as resolveIMessageAttachmentRoots, U as unsetConfigOverride, V as resetConfigOverrides, W as getConfigValueAtPath, X as resolveAgentMaxConcurrent, Y as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, Z as VERSION, _ as normalizeTelegramCommandName, a as writeConfigFile, b as isInboundPathAllowed, g as TELEGRAM_COMMAND_NAME_PATTERN, i as resolveConfigSnapshotHash, n as loadConfig, o as validateConfigObjectWithPlugins, q as unsetConfigValueAtPath, r as readConfigFileSnapshot, v as resolveTelegramCustomCommands, w as normalizeScpRemoteHost, z as validateJsonSchemaValue } from "./config-Cf-PzD3r.js";
13
13
  import { a as clearActiveProgressLine, i as defaultRuntime, o as registerActiveProgressLine, r as createNonExitingRuntime, s as unregisterActiveProgressLine, t as createSubsystemLogger } from "./subsystem-Coz2AgU8.js";
14
14
  import { i as parseBooleanValue$1, n as resolveCliName, r as isTruthyEnvValue, t as formatCliCommand } from "./command-format-DSdvQ_M5.js";
15
15
  import { $ as resolveShellEnvFallbackTimeoutMs, A as getSoonestCooldownExpiry, B as resolveSymiAgentDir, C as getCustomProviderApiKey, D as resolveModelAuthMode, E as resolveEnvApiKey, F as dedupeProfileIds, H as withFileLock, I as listProfilesForProvider, J as DEFAULT_CONTEXT_TOKENS, K as normalizeSecretInput, L as markAuthProfileGood, M as markAuthProfileFailure, N as markAuthProfileUsed, P as resolveApiKeyForProfile, R as ensureAuthProfileStore, S as getApiKeyForModel, T as resolveApiKeyForProvider, X as DEFAULT_PROVIDER, Y as DEFAULT_MODEL, Z as getShellPathFromLoginShell, a as isCliProvider, b as OLLAMA_NATIVE_BASE_URL, c as normalizeProviderId, d as resolveDefaultModelForAgent, f as resolveModelRefFromString, i as findNormalizedProviderValue, j as isProfileInCooldown, k as resolveAuthProfileOrder, m as resolveThinkingDefault, n as buildConfiguredAllowlistKeys, o as modelKey, p as resolveSubagentSpawnModelSelection, q as resolveAuthProfileDisplayLabel, r as buildModelAliasIndex, s as normalizeModelRef$2, t as buildAllowedModelSet, u as resolveConfiguredModelRef, w as requireApiKey, x as createOllamaStreamFn, z as resolveAuthStorePathForDisplay } from "./model-selection-CtVwtb6y.js";
@@ -27,38 +27,38 @@ import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel
27
27
  import { t as normalizeChatType } from "./chat-type-CEMQNtWX.js";
28
28
  import { n as resolveMarkdownTableMode } from "./markdown-tables-Dfaqilz6.js";
29
29
  import { t as convertMarkdownTables } from "./tables-DR0NmBeH.js";
30
- 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-SRQweHTE.js";
30
+ 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-CJIEYVXL.js";
31
31
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-D7Lno-TE.js";
32
32
  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-B7YyMnIi.js";
33
- import { a as createSlackWebClient, c as validateSlackBlocksArray, i as buildSlackBlocksFallbackText, o as resolveSlackWebClientOptions, s as parseSlackBlocksInput, t as sendMessageSlack } from "./send-Dd71o3sZ.js";
34
- import { $ as parseTelegramTarget, A as hasBotMention, B as resolveSenderAllowMatch, C as buildTelegramGroupPeerId, D as describeReplyTarget, E as buildTypingThreadParams, F as resolveTelegramReplyId, G as readChannelAllowFromStore, H as isSenderIdAllowed, I as resolveTelegramStreamMode, J as upsertChannelPairingRequest, L as resolveTelegramThreadSpec, M as resolveTelegramForumThreadId, N as resolveTelegramGroupAllowFromContext, O as expandTextLinks, P as resolveTelegramMediaPlaceholder, Q as isVoiceCompatibleAudio, R as isSenderAllowed$1, S as buildTelegramGroupFrom, T as buildTelegramThreadParams, U as mergeAllowFromSources, V as firstDefined$1, W as addChannelAllowFromStoreEntry, X as listPairingChannels, Y as getPairingAdapter, Z as withTelegramApiErrorLogging, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildSenderLabel, c as sendStickerTelegram, d as wasSentByBot, et as resolveTelegramTargetChatType, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as normalizeForwardedContext, k as extractTelegramLocation, m as markdownToTelegramHtml, n as createForumTopicTelegram, nt as toLocationContext, o as sendMessageTelegram, p as markdownToTelegramChunks, q as removeChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as formatLocationText, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramParentPeer, x as buildSenderName, y as buildGroupLabel, z as normalizeAllowFromWithStore$1 } from "./send-Do_qdBr_.js";
35
- import { _ as CLI_OUTPUT_MAX_BUFFER, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as registerUnhandledRejectionHandler, g as resolveMediaUnderstandingScope, h as normalizeMediaUnderstandingChatType, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveTimeoutMs$1, n as createMediaAttachmentCache, o as runCapability, p as resolveConcurrency, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as applyTemplate, y as buildRandomTempFilePath } from "./runner-IyZnVyIT.js";
33
+ import { a as createSlackWebClient, c as validateSlackBlocksArray, i as buildSlackBlocksFallbackText, o as resolveSlackWebClientOptions, s as parseSlackBlocksInput, t as sendMessageSlack } from "./send-DDpZS9jb.js";
34
+ import { $ as parseTelegramTarget, A as hasBotMention, B as resolveSenderAllowMatch, C as buildTelegramGroupPeerId, D as describeReplyTarget, E as buildTypingThreadParams, F as resolveTelegramReplyId, G as readChannelAllowFromStore, H as isSenderIdAllowed, I as resolveTelegramStreamMode, J as upsertChannelPairingRequest, L as resolveTelegramThreadSpec, M as resolveTelegramForumThreadId, N as resolveTelegramGroupAllowFromContext, O as expandTextLinks, P as resolveTelegramMediaPlaceholder, Q as isVoiceCompatibleAudio, R as isSenderAllowed$1, S as buildTelegramGroupFrom, T as buildTelegramThreadParams, U as mergeAllowFromSources, V as firstDefined$1, W as addChannelAllowFromStoreEntry, X as listPairingChannels, Y as getPairingAdapter, Z as withTelegramApiErrorLogging, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildSenderLabel, c as sendStickerTelegram, d as wasSentByBot, et as resolveTelegramTargetChatType, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as normalizeForwardedContext, k as extractTelegramLocation, m as markdownToTelegramHtml, n as createForumTopicTelegram, nt as toLocationContext, o as sendMessageTelegram, p as markdownToTelegramChunks, q as removeChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as formatLocationText, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramParentPeer, x as buildSenderName, y as buildGroupLabel, z as normalizeAllowFromWithStore$1 } from "./send-BAzimHH-.js";
35
+ import { _ as CLI_OUTPUT_MAX_BUFFER, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as registerUnhandledRejectionHandler, g as resolveMediaUnderstandingScope, h as normalizeMediaUnderstandingChatType, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveTimeoutMs$1, n as createMediaAttachmentCache, o as runCapability, p as resolveConcurrency, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as applyTemplate, y as buildRandomTempFilePath } from "./runner-D9c_MNRa.js";
36
36
  import { a as resolveAckReaction, c as resolveHumanDelayConfig, i as resolveResponsePrefixTemplate, n as createReplyPrefixOptions, o as resolveAgentIdentity, s as resolveEffectiveMessagesConfig } from "./reply-prefix-BHuV5t70.js";
37
37
  import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-CWMflosr.js";
38
- import { c as getSkillsSnapshotVersion, d as resolvePairingPaths, f as createAsyncLock, i as resolveSkillCommandInvocation, l as generatePairingToken, m as writeJsonAtomic, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as readJsonFile, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as pruneExpiredPending } from "./skill-commands-DEfqC_kJ.js";
39
- 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-C9DbB-Kp.js";
40
- import { M as isSecureWebSocketUrl, N as rawDataToString, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, x as ensureChromeExtensionRelayServer } from "./chrome-Cou8jVJ2.js";
38
+ import { c as getSkillsSnapshotVersion, d as resolvePairingPaths, f as createAsyncLock, i as resolveSkillCommandInvocation, l as generatePairingToken, m as writeJsonAtomic, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as readJsonFile, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as pruneExpiredPending } from "./skill-commands-C70yD9PL.js";
39
+ 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-DuQ-xGok.js";
40
+ import { M as isSecureWebSocketUrl, N as rawDataToString, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, x as ensureChromeExtensionRelayServer } from "./chrome-CdjVSHtz.js";
41
41
  import { A as normalizeHyphenSlug, F as resolveChannelGroupRequireMention, I as resolveChannelGroupToolsPolicy, M as normalizeStringEntriesLower, P as resolveChannelGroupPolicy, a as normalizeReasoningLevel, c as normalizeVerboseLevel, d as getChannelDock, f as listChannelDocks, i as normalizeElevatedLevel, j as normalizeStringEntries, k as normalizeAtHashSlug, l as resolveResponseUsageMode, m as normalizeSignalMessagingTarget, n as formatXHighModelHint, o as normalizeThinkLevel, s as normalizeUsageDisplay, t as formatThinkingLevels, u as supportsXHighThinking } from "./thinking-DCNUIAHY.js";
42
42
  import { r as resolveIMessageAccount } from "./accounts-Dtszw3Zn.js";
43
43
  import { i as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-BToL3HlP.js";
44
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeChannelTargetInput, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as buildTargetResolverSignature, h as throwIfAborted, 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 normalizeTargetForProvider, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-OVx3XKTy.js";
45
- import { $ as normalizeToolName, A as isTransientHttpError, At as countToolResults, B as resolveProfile, Bt as resolveChannelResetConfig, C as isContextOverflowError, Ct as deliveryContextKey, D as isRateLimitAssistantError, Dt as normalizeAccountId$3, E as isLikelyContextOverflowError, Et as normalizeSessionDeliveryFields, F as resolveSandboxContext, Ft as normalizeInputProvenance, G as resolveBrowserControlAuth, Gt as resolveFreshSessionTotalTokens, H as resolveExistingPathsWithinRoot, Ht as resolveSessionResetType, I as resolveSandboxRuntimeStatus, It as acquireSessionWriteLock, J as buildPluginToolGroups, Jt as resolveMainSessionKey, K as resolveSandboxConfigForAgent, Kt as canonicalizeMainSessionAlias, L as createBrowserRouteContext, Lt as resolveSessionLockMaxHoldFromTimeout, M as parseImageSizeError, Mt as INPUT_PROVENANCE_KIND_VALUES, N as sanitizeUserFacingText, Nt as applyInputProvenanceToUserMessage, O as isRawApiErrorPayload, Ot as archiveSessionTranscripts, P as ensureSandboxWorkspaceForSession, Pt as hasInterSessionUserProvenance, Q as mergeAlsoAllowPolicy, R as registerBrowserRoutes, Rt as resolveSessionKey, S as isCompactionFailureError, St as deliveryContextFromSession, T as isFailoverErrorMessage, Tt as normalizeDeliveryContext, U as getBridgeAuthForPort, Ut as resolveThreadFlag, V as DEFAULT_UPLOAD_DIR, Vt as resolveSessionResetPolicy, W as ensureBrowserControlAuth, Wt as DEFAULT_RESET_TRIGGERS, X as expandPolicyWithPluginGroups, Xt as resolveGroupSessionKey, Y as collectExplicitAllowlist, Yt as deriveSessionMetaPatch, Z as expandToolGroups, _ as formatRawAssistantErrorForUi, _t as updateLastRoute, a as isMessagingToolDuplicateNormalized, at as ensureSessionHeader, b as isBillingAssistantError, bt as isCacheEnabled, c as extractToolCallsFromAssistant, ct as sanitizeGoogleTurnOrdering, d as isAntigravityClaude, dt as appendAssistantMessageToSessionTranscript, et as resolveToolProfilePolicy, f as isGoogleModelApi, g as formatBillingErrorMessage, gt as recordSessionMetaFromInbound, h as formatAssistantErrorText, ht as readSessionUpdatedAt, it as buildBootstrapContextFiles, j as parseImageDimensionError, jt as extractToolCallNames, k as isTimeoutErrorMessage, kt as capArrayByJsonBytes, l as extractToolResultId, lt as extractDeliveryInfo, m as classifyFailoverReason, mt as loadSessionStore, n as validateGeminiTurns, nt as compileGlobPatterns, o as normalizeTextForComparison, ot as resolveBootstrapMaxChars, p as BILLING_ERROR_USER_MESSAGE, pt as resolveAndPersistSessionFile, q as applyOwnerOnlyToolPolicy, qt as resolveExplicitAgentSessionKey, r as pickFallbackThinkingLevel, rt as matchesAnyGlobPattern, s as sanitizeSessionMessagesImages, st as resolveBootstrapTotalMaxChars, t as validateAnthropicTurns, tt as stripPluginOnlyAllowlist, u as downgradeOpenAIReasoningBlocks, ut as parseSessionThreadInfo, v as getApiErrorPayloadFingerprint, vt as updateSessionStore, w as isFailoverAssistantError, wt as mergeDeliveryContext, x as isCloudCodeAssistFormatError, xt as resolveCacheTtlMs$1, y as isAuthAssistantError, yt as updateSessionStoreEntry, z as resolveBrowserConfig, zt as evaluateSessionFreshness } from "./pi-embedded-helpers-DihvU43r.js";
44
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeChannelTargetInput, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as buildTargetResolverSignature, h as throwIfAborted, 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 normalizeTargetForProvider, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-hjUeDZ7e.js";
45
+ import { $ as normalizeToolName, A as isTransientHttpError, At as countToolResults, B as resolveProfile, Bt as resolveChannelResetConfig, C as isContextOverflowError, Ct as deliveryContextKey, D as isRateLimitAssistantError, Dt as normalizeAccountId$3, E as isLikelyContextOverflowError, Et as normalizeSessionDeliveryFields, F as resolveSandboxContext, Ft as normalizeInputProvenance, G as resolveBrowserControlAuth, Gt as resolveFreshSessionTotalTokens, H as resolveExistingPathsWithinRoot, Ht as resolveSessionResetType, I as resolveSandboxRuntimeStatus, It as acquireSessionWriteLock, J as buildPluginToolGroups, Jt as resolveMainSessionKey, K as resolveSandboxConfigForAgent, Kt as canonicalizeMainSessionAlias, L as createBrowserRouteContext, Lt as resolveSessionLockMaxHoldFromTimeout, M as parseImageSizeError, Mt as INPUT_PROVENANCE_KIND_VALUES, N as sanitizeUserFacingText, Nt as applyInputProvenanceToUserMessage, O as isRawApiErrorPayload, Ot as archiveSessionTranscripts, P as ensureSandboxWorkspaceForSession, Pt as hasInterSessionUserProvenance, Q as mergeAlsoAllowPolicy, R as registerBrowserRoutes, Rt as resolveSessionKey, S as isCompactionFailureError, St as deliveryContextFromSession, T as isFailoverErrorMessage, Tt as normalizeDeliveryContext, U as getBridgeAuthForPort, Ut as resolveThreadFlag, V as DEFAULT_UPLOAD_DIR, Vt as resolveSessionResetPolicy, W as ensureBrowserControlAuth, Wt as DEFAULT_RESET_TRIGGERS, X as expandPolicyWithPluginGroups, Xt as resolveGroupSessionKey, Y as collectExplicitAllowlist, Yt as deriveSessionMetaPatch, Z as expandToolGroups, _ as formatRawAssistantErrorForUi, _t as updateLastRoute, a as isMessagingToolDuplicateNormalized, at as ensureSessionHeader, b as isBillingAssistantError, bt as isCacheEnabled, c as extractToolCallsFromAssistant, ct as sanitizeGoogleTurnOrdering, d as isAntigravityClaude, dt as appendAssistantMessageToSessionTranscript, et as resolveToolProfilePolicy, f as isGoogleModelApi, g as formatBillingErrorMessage, gt as recordSessionMetaFromInbound, h as formatAssistantErrorText, ht as readSessionUpdatedAt, it as buildBootstrapContextFiles, j as parseImageDimensionError, jt as extractToolCallNames, k as isTimeoutErrorMessage, kt as capArrayByJsonBytes, l as extractToolResultId, lt as extractDeliveryInfo, m as classifyFailoverReason, mt as loadSessionStore, n as validateGeminiTurns, nt as compileGlobPatterns, o as normalizeTextForComparison, ot as resolveBootstrapMaxChars, p as BILLING_ERROR_USER_MESSAGE, pt as resolveAndPersistSessionFile, q as applyOwnerOnlyToolPolicy, qt as resolveExplicitAgentSessionKey, r as pickFallbackThinkingLevel, rt as matchesAnyGlobPattern, s as sanitizeSessionMessagesImages, st as resolveBootstrapTotalMaxChars, t as validateAnthropicTurns, tt as stripPluginOnlyAllowlist, u as downgradeOpenAIReasoningBlocks, ut as parseSessionThreadInfo, v as getApiErrorPayloadFingerprint, vt as updateSessionStore, w as isFailoverAssistantError, wt as mergeDeliveryContext, x as isCloudCodeAssistFormatError, xt as resolveCacheTtlMs$1, y as isAuthAssistantError, yt as updateSessionStoreEntry, z as resolveBrowserConfig, zt as evaluateSessionFreshness } from "./pi-embedded-helpers-6EL59cK1.js";
46
46
  import { n as resolveConversationLabel } from "./conversation-label-yNSj43Jt.js";
47
47
  import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-A0xdf3yk.js";
48
48
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-x1D4Vniz.js";
49
49
  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-_oc91gNi.js";
50
50
  import { i as saveMediaBuffer, r as getMediaDir } from "./store-Do3t33-c.js";
51
51
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-D5EzMeL_.js";
52
- import { S as minimaxUnderstandImage, _ as stripThinkingTagsFromText, a as decodeDataUrl, b as extractTextFromChatContent, c as extractAssistantThinking, d as formatReasoningMessage, f as inferToolMetaFromArgs, g as stripMinimaxToolCallXml, h as stripDowngradedToolCallText, i as coerceImageModelConfig, l as extractThinkingFromTaggedStream, m as promoteThinkingTagsToBlocks, o as resolveProviderVisionModelFromConfig, p as isAssistantMessage, r as coerceImageAssistantText, s as extractAssistantText$1, u as extractThinkingFromTaggedText, v as resolveToolDisplay, x as ensureSymiModelsJson, y as stripReasoningTagsFromText } from "./image-ChrcMCo_.js";
52
+ import { S as minimaxUnderstandImage, _ as stripThinkingTagsFromText, a as decodeDataUrl, b as extractTextFromChatContent, c as extractAssistantThinking, d as formatReasoningMessage, f as inferToolMetaFromArgs, g as stripMinimaxToolCallXml, h as stripDowngradedToolCallText, i as coerceImageModelConfig, l as extractThinkingFromTaggedStream, m as promoteThinkingTagsToBlocks, o as resolveProviderVisionModelFromConfig, p as isAssistantMessage, r as coerceImageAssistantText, s as extractAssistantText$1, u as extractThinkingFromTaggedText, v as resolveToolDisplay, x as ensureSymiModelsJson, y as stripReasoningTagsFromText } from "./image-CS95I-I5.js";
53
53
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-LbcEa65a.js";
54
54
  import { c as normalizeExtraMemoryPaths, m as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-Qi-tyvHh.js";
55
55
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-Wd5tNeQG.js";
56
- import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-Yvm-LGVR.js";
56
+ import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-BiRYpsW7.js";
57
57
  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-BuYpmEx-.js";
58
- import { c as signalRpcRequest, l as streamSignalEvents, n as sendReadReceiptSignal, o as resolveSignalRpcContext, r as sendTypingSignal, s as signalCheck, t as sendMessageSignal } from "./send-DxXXcQ_o.js";
58
+ import { c as signalRpcRequest, l as streamSignalEvents, n as sendReadReceiptSignal, o as resolveSignalRpcContext, r as sendTypingSignal, s as signalCheck, t as sendMessageSignal } from "./send-BfqyNBU1.js";
59
59
  import { t as makeProxyFetch } from "./proxy-D27OUbrW.js";
60
60
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-CHQ7BTlU.js";
61
- import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-DD0EJRXx.js";
61
+ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-B4fizDsZ.js";
62
62
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-DiyK6bgV.js";
63
63
  import { t as getActiveWebListener } from "./active-listener-CJuvR4C2.js";
64
64
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-CP722fTK.js";
@@ -11638,7 +11638,7 @@ async function getMemorySearchManager(params) {
11638
11638
  const wrapper = new FallbackMemoryManager({
11639
11639
  primary,
11640
11640
  fallbackFactory: async () => {
11641
- const { MemoryIndexManager } = await import("./manager-Yvm-LGVR.js").then((n) => n.n);
11641
+ const { MemoryIndexManager } = await import("./manager-BiRYpsW7.js").then((n) => n.n);
11642
11642
  return await MemoryIndexManager.get(params);
11643
11643
  }
11644
11644
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -11651,7 +11651,7 @@ async function getMemorySearchManager(params) {
11651
11651
  }
11652
11652
  }
11653
11653
  try {
11654
- const { MemoryIndexManager } = await import("./manager-Yvm-LGVR.js").then((n) => n.n);
11654
+ const { MemoryIndexManager } = await import("./manager-BiRYpsW7.js").then((n) => n.n);
11655
11655
  return { manager: await MemoryIndexManager.get(params) };
11656
11656
  } catch (err) {
11657
11657
  return {
@@ -15653,7 +15653,7 @@ async function routeReply(params) {
15653
15653
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
15654
15654
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
15655
15655
  try {
15656
- const { deliverOutboundPayloads } = await import("./deliver-OVx3XKTy.js").then((n) => n.n);
15656
+ const { deliverOutboundPayloads } = await import("./deliver-hjUeDZ7e.js").then((n) => n.n);
15657
15657
  return {
15658
15658
  ok: true,
15659
15659
  messageId: (await deliverOutboundPayloads({
@@ -18127,7 +18127,7 @@ async function describeStickerImage(params) {
18127
18127
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
18128
18128
  try {
18129
18129
  const buffer = await fs$1.readFile(imagePath);
18130
- const { describeImageWithModel } = await import("./image-ChrcMCo_.js").then((n) => n.n);
18130
+ const { describeImageWithModel } = await import("./image-CS95I-I5.js").then((n) => n.n);
18131
18131
  return (await describeImageWithModel({
18132
18132
  buffer,
18133
18133
  fileName: "sticker.webp",
@@ -18538,7 +18538,7 @@ function createWhatsAppLoginTool() {
18538
18538
  force: Type.Optional(Type.Boolean())
18539
18539
  }),
18540
18540
  execute: async (_toolCallId, args) => {
18541
- const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-C87Q7LuN.js");
18541
+ const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-B4dxH543.js");
18542
18542
  if ((args?.action ?? "start") === "wait") {
18543
18543
  const result = await waitForWebLogin({ timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0 });
18544
18544
  return {
@@ -20693,7 +20693,7 @@ async function preflightDiscordMessage(params) {
20693
20693
  let preflightTranscript;
20694
20694
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
20695
20695
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
20696
- const { transcribeFirstAudio } = await import("./audio-preflight-CwMsvdv8.js");
20696
+ const { transcribeFirstAudio } = await import("./audio-preflight-CoKYDdd4.js");
20697
20697
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
20698
20698
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
20699
20699
  ctx: {
@@ -25880,6 +25880,7 @@ function sanitizeForPromptLiteral(value) {
25880
25880
  //#region src/agents/system-prompt.ts
25881
25881
  function buildSkillsSection(params) {
25882
25882
  if (params.isMinimal) return [];
25883
+ if (params.dropCatalog) return [];
25883
25884
  const trimmed = params.skillsPrompt?.trim();
25884
25885
  if (!trimmed) return [];
25885
25886
  return [
@@ -25984,7 +25985,7 @@ function buildVoiceSection(params) {
25984
25985
  ];
25985
25986
  }
25986
25987
  function buildVerifyYourWorkSection(params) {
25987
- if (params.isMinimal) return [];
25988
+ if (params.isMinimal || params.compactMode) return [];
25988
25989
  const exec = params.execToolName;
25989
25990
  const read = params.readToolName;
25990
25991
  return [
@@ -26173,6 +26174,7 @@ function buildAgentSystemPrompt(params) {
26173
26174
  const promptMode = params.promptMode ?? "full";
26174
26175
  const isMinimal = promptMode === "minimal" || promptMode === "none";
26175
26176
  const isCoding = promptMode === "coding";
26177
+ const compactMode = params.compactMode === true;
26176
26178
  const sandboxContainerWorkspace = params.sandboxInfo?.containerWorkspaceDir?.trim();
26177
26179
  const sanitizedWorkspaceDir = sanitizeForPromptLiteral(params.workspaceDir);
26178
26180
  const sanitizedSandboxContainerWorkspace = sandboxContainerWorkspace ? sanitizeForPromptLiteral(sandboxContainerWorkspace) : "";
@@ -26188,7 +26190,8 @@ function buildAgentSystemPrompt(params) {
26188
26190
  const skillsSection = buildSkillsSection({
26189
26191
  skillsPrompt,
26190
26192
  isMinimal,
26191
- readToolName
26193
+ readToolName,
26194
+ dropCatalog: compactMode && (params.skillsDiscoveryMode === "jit" || params.skillsDiscoveryMode === "hybrid")
26192
26195
  });
26193
26196
  const memorySection = buildMemorySection({
26194
26197
  isMinimal,
@@ -26231,39 +26234,43 @@ function buildAgentSystemPrompt(params) {
26231
26234
  "If a task is more complex or takes longer, spawn a sub-agent. Completion is push-based: it will auto-announce when done.",
26232
26235
  "Do not poll `subagents list` / `sessions_list` in a loop; only check status on-demand (for intervention, debugging, or when explicitly asked).",
26233
26236
  "",
26234
- "## Tool Call Style",
26235
- "Default: do not narrate routine, low-risk tool calls (just call the tool).",
26236
- "Narrate only when it helps: multi-step work, complex/challenging problems, sensitive actions (e.g., deletions), or when the user explicitly asks.",
26237
- "Keep narration brief and value-dense; avoid repeating obvious steps.",
26238
- "Use plain human language for narration unless in a technical context.",
26239
- "",
26240
- "## Edit Tool Best Practices",
26241
- "When using the edit tool, the oldText must match the file EXACTLY (whitespace, indentation, and all).",
26242
- "To avoid match failures:",
26243
- "- Use the SHORTEST unique snippet that identifies the edit location (1-3 lines). Do NOT paste large blocks.",
26244
- "- ALWAYS read the file first, then copy the exact text from the read output for oldText.",
26245
- "- 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.",
26246
- "- Prefer lines with distinctive content (function names, unique strings) over generic code (braces, blank lines).",
26247
- "",
26237
+ ...compactMode ? [] : [
26238
+ "## Tool Call Style",
26239
+ "Default: do not narrate routine, low-risk tool calls (just call the tool).",
26240
+ "Narrate only when it helps: multi-step work, complex/challenging problems, sensitive actions (e.g., deletions), or when the user explicitly asks.",
26241
+ "Keep narration brief and value-dense; avoid repeating obvious steps.",
26242
+ "Use plain human language for narration unless in a technical context.",
26243
+ "",
26244
+ "## Edit Tool Best Practices",
26245
+ "When using the edit tool, the oldText must match the file EXACTLY (whitespace, indentation, and all).",
26246
+ "To avoid match failures:",
26247
+ "- Use the SHORTEST unique snippet that identifies the edit location (1-3 lines). Do NOT paste large blocks.",
26248
+ "- ALWAYS read the file first, then copy the exact text from the read output for oldText.",
26249
+ "- 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.",
26250
+ "- Prefer lines with distinctive content (function names, unique strings) over generic code (braces, blank lines).",
26251
+ ""
26252
+ ],
26248
26253
  ...safetySection,
26249
- "## Symi CLI Quick Reference",
26250
- "Symi is controlled via subcommands. Do not invent commands.",
26251
- "To manage the Gateway daemon service (start/stop/restart):",
26252
- "- symi gateway status",
26253
- "- symi gateway start",
26254
- "- symi gateway stop",
26255
- "- symi gateway restart",
26256
- "If unsure, ask the user to run `symi help` (or `symi gateway --help`) and paste the output.",
26257
- "",
26254
+ ...compactMode ? ["For Symi CLI commands, ask the user to run `symi help` and paste the output.", ""] : [
26255
+ "## Symi CLI Quick Reference",
26256
+ "Symi is controlled via subcommands. Do not invent commands.",
26257
+ "To manage the Gateway daemon service (start/stop/restart):",
26258
+ "- symi gateway status",
26259
+ "- symi gateway start",
26260
+ "- symi gateway stop",
26261
+ "- symi gateway restart",
26262
+ "If unsure, ask the user to run `symi help` (or `symi gateway --help`) and paste the output.",
26263
+ ""
26264
+ ],
26258
26265
  ...skillsSection,
26259
26266
  ...memorySection,
26260
- hasGateway && !isMinimal && !isCoding ? "## Symi Self-Update" : "",
26261
- hasGateway && !isMinimal && !isCoding ? [
26267
+ hasGateway && !isMinimal && !isCoding && !compactMode ? "## Symi Self-Update" : "",
26268
+ hasGateway && !isMinimal && !isCoding && !compactMode ? [
26262
26269
  "Get Updates (self-update) is ONLY allowed when the user explicitly asks for it.",
26263
26270
  "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.",
26264
26271
  "Actions: config.get, config.schema, config.apply (validate + write full config, then restart), update.run (update deps or git, then restart).",
26265
26272
  "After restart, Symi pings the last active session automatically."
26266
- ].join("\n") : "",
26273
+ ].join("\n") : hasGateway && !isMinimal && !isCoding && compactMode ? "Gateway destructive actions (config.apply, config.patch, update.run) require explicit user authorization via userRequestAcknowledgment — never invoke speculatively." : "",
26267
26274
  hasGateway && !isMinimal && !isCoding ? "" : "",
26268
26275
  "",
26269
26276
  params.modelAliasLines && params.modelAliasLines.length > 0 && !isMinimal && !isCoding ? "## Model Aliases" : "",
@@ -26280,7 +26287,8 @@ function buildAgentSystemPrompt(params) {
26280
26287
  ...buildVerifyYourWorkSection({
26281
26288
  isMinimal,
26282
26289
  execToolName,
26283
- readToolName
26290
+ readToolName,
26291
+ compactMode
26284
26292
  }),
26285
26293
  params.sandboxInfo?.enabled ? "## Sandbox" : "",
26286
26294
  params.sandboxInfo?.enabled ? [
@@ -26326,23 +26334,26 @@ function buildAgentSystemPrompt(params) {
26326
26334
  }
26327
26335
  if (params.reactionGuidance) {
26328
26336
  const { level, channel } = params.reactionGuidance;
26329
- const guidanceText = level === "minimal" ? [
26330
- `Reactions are enabled for ${channel} in MINIMAL mode.`,
26331
- "React ONLY when truly relevant:",
26332
- "- Acknowledge important user requests or confirmations",
26333
- "- Express genuine sentiment (humor, appreciation) sparingly",
26334
- "- Avoid reacting to routine messages or your own replies",
26335
- "Guideline: at most 1 reaction per 5-10 exchanges."
26336
- ].join("\n") : [
26337
- `Reactions are enabled for ${channel} in EXTENSIVE mode.`,
26338
- "Feel free to react liberally:",
26339
- "- Acknowledge messages with appropriate emojis",
26340
- "- Express sentiment and personality through reactions",
26341
- "- React to interesting content, humor, or notable events",
26342
- "- Use reactions to confirm understanding or agreement",
26343
- "Guideline: react whenever it feels natural."
26344
- ].join("\n");
26345
- lines.push("## Reactions", guidanceText, "");
26337
+ if (compactMode) lines.push("## Reactions", `Reactions for ${channel} are in ${level.toUpperCase()} mode — see the reactions-${level} skill (auto-loaded).`, "");
26338
+ else {
26339
+ const guidanceText = level === "minimal" ? [
26340
+ `Reactions are enabled for ${channel} in MINIMAL mode.`,
26341
+ "React ONLY when truly relevant:",
26342
+ "- Acknowledge important user requests or confirmations",
26343
+ "- Express genuine sentiment (humor, appreciation) sparingly",
26344
+ "- Avoid reacting to routine messages or your own replies",
26345
+ "Guideline: at most 1 reaction per 5-10 exchanges."
26346
+ ].join("\n") : [
26347
+ `Reactions are enabled for ${channel} in EXTENSIVE mode.`,
26348
+ "Feel free to react liberally:",
26349
+ "- Acknowledge messages with appropriate emojis",
26350
+ "- Express sentiment and personality through reactions",
26351
+ "- React to interesting content, humor, or notable events",
26352
+ "- Use reactions to confirm understanding or agreement",
26353
+ "Guideline: react whenever it feels natural."
26354
+ ].join("\n");
26355
+ lines.push("## Reactions", guidanceText, "");
26356
+ }
26346
26357
  }
26347
26358
  if (reasoningHint) lines.push("## Reasoning Format", reasoningHint, "");
26348
26359
  const validContextFiles = (params.contextFiles ?? []).filter((file) => typeof file.path === "string" && file.path.trim().length > 0);
@@ -34189,10 +34200,10 @@ async function prepareSessionManagerForRun(params) {
34189
34200
  //#endregion
34190
34201
  //#region src/agents/system-prompt-skills-autoload.ts
34191
34202
  const FRONTMATTER_RE = /^---\s*\n[\s\S]*?\n---\s*\n?/;
34192
- let cachedPackageRoot;
34193
- function getPackageRoot() {
34194
- if (cachedPackageRoot === void 0) cachedPackageRoot = resolveSymiPackageRootSync({});
34195
- return cachedPackageRoot;
34203
+ let cachedPackageRoot$1;
34204
+ function getPackageRoot$1() {
34205
+ if (cachedPackageRoot$1 === void 0) cachedPackageRoot$1 = resolveSymiPackageRootSync({});
34206
+ return cachedPackageRoot$1;
34196
34207
  }
34197
34208
  function safeSkillName(name) {
34198
34209
  return /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/.test(name);
@@ -34221,7 +34232,7 @@ function buildAutoLoadedSkillsBlock(opts) {
34221
34232
  if (opts.minimalMode) return "";
34222
34233
  const names = opts.skillNames.filter((n) => typeof n === "string" && n.trim().length > 0);
34223
34234
  if (names.length === 0) return "";
34224
- const packageRoot = getPackageRoot();
34235
+ const packageRoot = getPackageRoot$1();
34225
34236
  const loaded = [];
34226
34237
  for (const rawName of names) {
34227
34238
  const name = rawName.trim();
@@ -34266,6 +34277,296 @@ function buildAutoLoadedSkillsBlock(opts) {
34266
34277
  ].join("\n");
34267
34278
  }
34268
34279
 
34280
+ //#endregion
34281
+ //#region src/agents/skills/triggers.ts
34282
+ const QUOTE_RE = /^["'`](.*)["'`]$/;
34283
+ const ARRAY_FORM_RE = /^\[(.*)\]$/s;
34284
+ function stripWrappingQuotes(s) {
34285
+ const m = s.trim().match(QUOTE_RE);
34286
+ return m ? m[1] : s.trim();
34287
+ }
34288
+ /** Parse a single trigger value, dropping empty / whitespace-only entries. */
34289
+ function cleanTrigger(raw) {
34290
+ const trimmed = stripWrappingQuotes(raw).toLowerCase();
34291
+ return trimmed.length > 0 ? trimmed : null;
34292
+ }
34293
+ /**
34294
+ * Parse the value of a `triggers:` frontmatter field into a string[].
34295
+ * Accepts both inline-array form `[a, b, "c d"]` and YAML-list form
34296
+ * (multiline with leading hyphens). Returns deduped lowercased trigger
34297
+ * strings, or empty array on unparseable / missing input.
34298
+ */
34299
+ function parseTriggersValue(raw) {
34300
+ if (typeof raw !== "string") return [];
34301
+ const trimmed = raw.trim();
34302
+ if (!trimmed) return [];
34303
+ const items = [];
34304
+ const arrayMatch = trimmed.match(ARRAY_FORM_RE);
34305
+ if (arrayMatch) {
34306
+ const inner = arrayMatch[1];
34307
+ let buf = "";
34308
+ let inQuote = null;
34309
+ for (const ch of inner) {
34310
+ if (inQuote) {
34311
+ if (ch === inQuote) inQuote = null;
34312
+ else buf += ch;
34313
+ continue;
34314
+ }
34315
+ if (ch === "\"" || ch === "'") {
34316
+ inQuote = ch;
34317
+ continue;
34318
+ }
34319
+ if (ch === ",") {
34320
+ const cleaned = cleanTrigger(buf);
34321
+ if (cleaned) items.push(cleaned);
34322
+ buf = "";
34323
+ continue;
34324
+ }
34325
+ buf += ch;
34326
+ }
34327
+ const cleaned = cleanTrigger(buf);
34328
+ if (cleaned) items.push(cleaned);
34329
+ } else for (const line of trimmed.split("\n")) {
34330
+ const ltrim = line.trimStart();
34331
+ if (ltrim.startsWith("- ")) {
34332
+ const cleaned = cleanTrigger(ltrim.slice(2));
34333
+ if (cleaned) items.push(cleaned);
34334
+ } else if (ltrim && !ltrim.startsWith("#")) {
34335
+ const cleaned = cleanTrigger(ltrim);
34336
+ if (cleaned) items.push(cleaned);
34337
+ }
34338
+ }
34339
+ const seen = /* @__PURE__ */ new Set();
34340
+ const out = [];
34341
+ for (const t of items) if (!seen.has(t)) {
34342
+ seen.add(t);
34343
+ out.push(t);
34344
+ }
34345
+ return out;
34346
+ }
34347
+ /**
34348
+ * Extract triggers from a parsed frontmatter record. Returns empty array
34349
+ * when the field is absent or unparseable.
34350
+ */
34351
+ function getSkillTriggers(frontmatter) {
34352
+ return parseTriggersValue(frontmatter.triggers);
34353
+ }
34354
+
34355
+ //#endregion
34356
+ //#region src/agents/tools/skill-search-tool.ts
34357
+ const SkillSearchToolSchema = Type.Object({
34358
+ query: Type.String({
34359
+ minLength: 1,
34360
+ description: "Intent description (2-8 words). Match by trigger keywords first, then description text."
34361
+ }),
34362
+ limit: Type.Optional(Type.Number({
34363
+ minimum: 1,
34364
+ maximum: 10,
34365
+ description: "Max results to return (default 5, capped at 10)."
34366
+ }))
34367
+ });
34368
+ const CACHE_TTL_MS = 6e4;
34369
+ const SAFE_NAME_RE = /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/;
34370
+ function loadSkillFromDir(dir, source) {
34371
+ const name = path.basename(dir);
34372
+ if (!SAFE_NAME_RE.test(name)) return null;
34373
+ const file = path.join(dir, "SKILL.md");
34374
+ let raw;
34375
+ try {
34376
+ if (!fs.statSync(file).isFile()) return null;
34377
+ raw = fs.readFileSync(file, "utf8");
34378
+ } catch {
34379
+ return null;
34380
+ }
34381
+ const fm = parseFrontmatterBlock(raw);
34382
+ return {
34383
+ name,
34384
+ description: (fm.description ?? "").trim(),
34385
+ path: file,
34386
+ triggers: getSkillTriggers(fm),
34387
+ source
34388
+ };
34389
+ }
34390
+ function listSkillDirs(root) {
34391
+ const skillsDir = path.join(root, "skills");
34392
+ let entries;
34393
+ try {
34394
+ entries = fs.readdirSync(skillsDir, { withFileTypes: true });
34395
+ } catch {
34396
+ return [];
34397
+ }
34398
+ return entries.filter((e) => e.isDirectory()).map((e) => path.join(skillsDir, e.name));
34399
+ }
34400
+ let cachedPackageRoot;
34401
+ const cachePerWorkspace = /* @__PURE__ */ new Map();
34402
+ function getPackageRoot() {
34403
+ if (cachedPackageRoot === void 0) cachedPackageRoot = resolveSymiPackageRootSync({});
34404
+ return cachedPackageRoot;
34405
+ }
34406
+ function loadAllSkills(workspaceDir) {
34407
+ const cacheKey = workspaceDir ?? "";
34408
+ const now = Date.now();
34409
+ const existing = cachePerWorkspace.get(cacheKey);
34410
+ if (existing && now - existing.loadedAt < CACHE_TTL_MS) return existing.skills;
34411
+ const seen = /* @__PURE__ */ new Map();
34412
+ if (workspaceDir) for (const dir of listSkillDirs(workspaceDir)) {
34413
+ const skill = loadSkillFromDir(dir, "workspace");
34414
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
34415
+ }
34416
+ const packageRoot = getPackageRoot();
34417
+ if (packageRoot) for (const dir of listSkillDirs(packageRoot)) {
34418
+ const skill = loadSkillFromDir(dir, "bundled");
34419
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
34420
+ }
34421
+ const skills = [...seen.values()];
34422
+ cachePerWorkspace.set(cacheKey, {
34423
+ skills,
34424
+ loadedAt: now
34425
+ });
34426
+ return skills;
34427
+ }
34428
+ const TOKEN_SPLIT_RE = /[^\w/]+/;
34429
+ function tokenizeQuery(raw) {
34430
+ return raw.toLowerCase().split(TOKEN_SPLIT_RE).filter((t) => t.length >= 2);
34431
+ }
34432
+ /**
34433
+ * Score a query against one skill's triggers + description.
34434
+ * - Trigger score: ratio of query tokens that appear in the trigger set.
34435
+ * - FTS score: 0.4 × ratio of query tokens that appear in the description
34436
+ * (case-insensitive substring match).
34437
+ * - Final = max(trigger, fts) so trigger matches always beat descriptions.
34438
+ * - Returns 0 for "no signal at all" (caller should drop these).
34439
+ */
34440
+ function scoreSkillMatch(skill, queryTokens) {
34441
+ if (queryTokens.length === 0) return 0;
34442
+ const triggerSet = new Set(skill.triggers.map((t) => t.toLowerCase()));
34443
+ const description = skill.description.toLowerCase();
34444
+ let triggerHits = 0;
34445
+ let ftsHits = 0;
34446
+ for (const token of queryTokens) if (triggerSet.has(token)) triggerHits += 1;
34447
+ else if (description.includes(token)) ftsHits += 1;
34448
+ const triggerScore = triggerHits / queryTokens.length;
34449
+ const ftsScore = ftsHits / queryTokens.length * .4;
34450
+ return Math.max(triggerScore, ftsScore);
34451
+ }
34452
+ /**
34453
+ * Pure-function search; exported for testing without going through the
34454
+ * tool execute wrapper.
34455
+ */
34456
+ function searchSkills(query, limit, workspaceDir) {
34457
+ const tokens = tokenizeQuery(query);
34458
+ if (tokens.length === 0) return [];
34459
+ const all = loadAllSkills(workspaceDir);
34460
+ const scored = [];
34461
+ for (const skill of all) {
34462
+ const score = scoreSkillMatch(skill, tokens);
34463
+ if (score > 0) scored.push({
34464
+ name: skill.name,
34465
+ description: skill.description,
34466
+ path: skill.path,
34467
+ score
34468
+ });
34469
+ }
34470
+ scored.sort((a, b) => b.score - a.score || a.name.localeCompare(b.name));
34471
+ return scored.slice(0, limit);
34472
+ }
34473
+ function createSkillSearchTool(opts) {
34474
+ return {
34475
+ name: "skill_search",
34476
+ label: "skill_search",
34477
+ 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.",
34478
+ parameters: SkillSearchToolSchema,
34479
+ execute: async (_toolCallId, args) => {
34480
+ const params = args;
34481
+ const query = typeof params.query === "string" ? params.query.trim() : "";
34482
+ if (!query) return jsonResult({
34483
+ ok: false,
34484
+ error: "skill_search requires a non-empty `query` string."
34485
+ });
34486
+ const limit = typeof params.limit === "number" && Number.isFinite(params.limit) ? Math.min(10, Math.max(1, Math.floor(params.limit))) : 5;
34487
+ try {
34488
+ return jsonResult({
34489
+ ok: true,
34490
+ query,
34491
+ matches: searchSkills(query, limit, opts?.workspaceDir)
34492
+ });
34493
+ } catch (err) {
34494
+ const message = err instanceof Error ? err.message : String(err);
34495
+ logWarn(`skill_search failed: ${message}`);
34496
+ return jsonResult({
34497
+ ok: false,
34498
+ error: message
34499
+ });
34500
+ }
34501
+ }
34502
+ };
34503
+ }
34504
+
34505
+ //#endregion
34506
+ //#region src/agents/system-prompt-skills-jit.ts
34507
+ const MAX_ANCHOR_DESCRIPTION_CHARS = 100;
34508
+ const MAX_AUTO_INJECT_RESULTS = 3;
34509
+ const MAX_AUTO_INJECT_TOTAL_CHARS = 600;
34510
+ /**
34511
+ * Build the anchor list block. Returns "" when no anchor list configured
34512
+ * or in preload mode (anchor list adds value only in jit/hybrid).
34513
+ */
34514
+ function buildAnchorListBlock(opts) {
34515
+ if (opts.minimalMode) return "";
34516
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
34517
+ const names = (opts.anchorList ?? []).filter((n) => typeof n === "string" && n.trim().length > 0);
34518
+ if (names.length === 0) return "";
34519
+ const lines = [];
34520
+ for (const name of names) {
34521
+ const description = searchSkills(name, 1, opts.workspaceDir)[0]?.description.trim() ?? "";
34522
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
34523
+ lines.push(truncated ? `- ${name}: ${truncated}` : `- ${name}`);
34524
+ }
34525
+ return [
34526
+ "",
34527
+ "## Anchor Skills",
34528
+ "These skills are always available. Read their SKILL.md via `read` if relevant. For full discovery use the `skill_search` tool.",
34529
+ lines.join("\n"),
34530
+ ""
34531
+ ].join("\n");
34532
+ }
34533
+ /**
34534
+ * Build the auto-injected matches block based on the user message triggers.
34535
+ * Returns "" when discoveryMode doesn't ask for it, no message available,
34536
+ * no matches found, or in minimal mode.
34537
+ */
34538
+ function buildAutoInjectBlock(opts) {
34539
+ if (opts.minimalMode) return "";
34540
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
34541
+ const message = (opts.userMessage ?? "").trim();
34542
+ if (!message) return "";
34543
+ const matches = searchSkills(message, MAX_AUTO_INJECT_RESULTS, opts.workspaceDir);
34544
+ if (matches.length === 0) return "";
34545
+ const lines = [];
34546
+ let total = 0;
34547
+ for (const match of matches) {
34548
+ const description = match.description.trim();
34549
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
34550
+ const skillRef = path.basename(path.dirname(match.path));
34551
+ const line = truncated ? `- ${skillRef}: ${truncated}` : `- ${skillRef}`;
34552
+ if (total + line.length > MAX_AUTO_INJECT_TOTAL_CHARS) break;
34553
+ lines.push(line);
34554
+ total += line.length + 1;
34555
+ }
34556
+ if (lines.length === 0) return "";
34557
+ return [
34558
+ "",
34559
+ "## Possibly Relevant Skills (auto-suggested for this request)",
34560
+ "These skills' triggers matched keywords in your message. Read the SKILL.md if it applies; otherwise ignore and proceed.",
34561
+ lines.join("\n"),
34562
+ ""
34563
+ ].join("\n");
34564
+ }
34565
+ /** Convenience: build both blocks concatenated. */
34566
+ function buildSkillsJitBlocks(opts) {
34567
+ return `${buildAnchorListBlock(opts)}${buildAutoInjectBlock(opts)}`;
34568
+ }
34569
+
34269
34570
  //#endregion
34270
34571
  //#region src/agents/tool-summaries.ts
34271
34572
  function buildToolSummaryMap(tools) {
@@ -34307,16 +34608,23 @@ function buildEmbeddedSystemPrompt(params) {
34307
34608
  userTime: params.userTime,
34308
34609
  userTimeFormat: params.userTimeFormat,
34309
34610
  contextFiles: params.contextFiles,
34310
- memoryCitationsMode: params.memoryCitationsMode
34611
+ memoryCitationsMode: params.memoryCitationsMode,
34612
+ compactMode: params.compactMode,
34613
+ skillsDiscoveryMode: params.skillsDiscoveryMode
34311
34614
  });
34312
34615
  const promptMode = params.promptMode ?? "full";
34313
34616
  const isMinimal = promptMode === "minimal" || promptMode === "none";
34314
- const skillsBlock = buildAutoLoadedSkillsBlock({
34617
+ return `${corePrompt}${buildAutoLoadedSkillsBlock({
34315
34618
  skillNames: params.autoLoadInlineSkills ?? [],
34316
34619
  workspaceDir: params.workspaceDir,
34317
34620
  minimalMode: isMinimal
34318
- });
34319
- return skillsBlock ? `${corePrompt}${skillsBlock}` : corePrompt;
34621
+ })}${buildSkillsJitBlocks({
34622
+ discoveryMode: params.skillsDiscoveryMode,
34623
+ anchorList: params.skillsAnchorList,
34624
+ userMessage: params.currentUserMessage,
34625
+ workspaceDir: params.workspaceDir,
34626
+ minimalMode: isMinimal
34627
+ })}`;
34320
34628
  }
34321
34629
  function createSystemPromptOverride(systemPrompt) {
34322
34630
  const override = systemPrompt.trim();
@@ -35105,7 +35413,11 @@ async function runEmbeddedAttempt(params) {
35105
35413
  userTimeFormat,
35106
35414
  contextFiles,
35107
35415
  memoryCitationsMode: params.config?.memory?.citations,
35108
- autoLoadInlineSkills: params.config?.skills?.autoLoadInline
35416
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
35417
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
35418
+ skillsAnchorList: params.config?.skills?.anchorList,
35419
+ currentUserMessage: params.prompt,
35420
+ compactMode: params.config?.prompt?.compactMode
35109
35421
  });
35110
35422
  const systemPromptReport = buildSystemPromptReport({
35111
35423
  source: "run",
@@ -36985,27 +37297,27 @@ async function runAgentTurn(params) {
36985
37297
  function createDefaultDeps() {
36986
37298
  return {
36987
37299
  sendMessageWhatsApp: async (...args) => {
36988
- const { sendMessageWhatsApp } = await import("./web-C3YuHiih.js");
37300
+ const { sendMessageWhatsApp } = await import("./web-DU4xaLZf.js");
36989
37301
  return await sendMessageWhatsApp(...args);
36990
37302
  },
36991
37303
  sendMessageTelegram: async (...args) => {
36992
- const { sendMessageTelegram } = await import("./send-Do_qdBr_.js").then((n) => n.l);
37304
+ const { sendMessageTelegram } = await import("./send-BAzimHH-.js").then((n) => n.l);
36993
37305
  return await sendMessageTelegram(...args);
36994
37306
  },
36995
37307
  sendMessageDiscord: async (...args) => {
36996
- const { sendMessageDiscord } = await import("./send-Cxr9NnOd.js").then((n) => n.t);
37308
+ const { sendMessageDiscord } = await import("./send-CF7BhO8B.js").then((n) => n.t);
36997
37309
  return await sendMessageDiscord(...args);
36998
37310
  },
36999
37311
  sendMessageSlack: async (...args) => {
37000
- const { sendMessageSlack } = await import("./send-Dd71o3sZ.js").then((n) => n.n);
37312
+ const { sendMessageSlack } = await import("./send-DDpZS9jb.js").then((n) => n.n);
37001
37313
  return await sendMessageSlack(...args);
37002
37314
  },
37003
37315
  sendMessageSignal: async (...args) => {
37004
- const { sendMessageSignal } = await import("./send-DxXXcQ_o.js").then((n) => n.i);
37316
+ const { sendMessageSignal } = await import("./send-BfqyNBU1.js").then((n) => n.i);
37005
37317
  return await sendMessageSignal(...args);
37006
37318
  },
37007
37319
  sendMessageIMessage: async (...args) => {
37008
- const { sendMessageIMessage } = await import("./send-SRQweHTE.js").then((n) => n.n);
37320
+ const { sendMessageIMessage } = await import("./send-CJIEYVXL.js").then((n) => n.n);
37009
37321
  return await sendMessageIMessage(...args);
37010
37322
  }
37011
37323
  };
@@ -47560,7 +47872,7 @@ async function registerSlackMonitorSlashCommands(params) {
47560
47872
  });
47561
47873
  const deliverSlashPayloads = async (replies) => {
47562
47874
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
47563
- import("./replies-DD0EJRXx.js").then((n) => n.r),
47875
+ import("./replies-B4fizDsZ.js").then((n) => n.r),
47564
47876
  import("./chunk-jvk9axTQ.js").then((n) => n.s),
47565
47877
  import("./markdown-tables-Dfaqilz6.js").then((n) => n.t)
47566
47878
  ]);
@@ -47615,7 +47927,7 @@ async function registerSlackMonitorSlashCommands(params) {
47615
47927
  let nativeCommands = [];
47616
47928
  if (nativeEnabled) {
47617
47929
  reg = await getCommandsRegistry();
47618
- const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-DEfqC_kJ.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
47930
+ const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-C70yD9PL.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
47619
47931
  nativeCommands = reg.listNativeCommandSpecsForConfig(cfg, {
47620
47932
  skillCommands,
47621
47933
  provider: "slack"
@@ -52266,7 +52578,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
52266
52578
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
52267
52579
  let preflightTranscript;
52268
52580
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
52269
- const { transcribeFirstAudio } = await import("./audio-preflight-CwMsvdv8.js");
52581
+ const { transcribeFirstAudio } = await import("./audio-preflight-CoKYDdd4.js");
52270
52582
  preflightTranscript = await transcribeFirstAudio({
52271
52583
  ctx: {
52272
52584
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -54411,23 +54723,23 @@ let webLoginQrPromise = null;
54411
54723
  let webChannelPromise = null;
54412
54724
  let whatsappActionsPromise = null;
54413
54725
  function loadWebOutbound() {
54414
- webOutboundPromise ??= import("./outbound-T0XdUo-H.js").then((n) => n.t);
54726
+ webOutboundPromise ??= import("./outbound-D7yJKgEX.js").then((n) => n.t);
54415
54727
  return webOutboundPromise;
54416
54728
  }
54417
54729
  function loadWebLogin() {
54418
- webLoginPromise ??= import("./login-WuhOM4Dg.js").then((n) => n.n);
54730
+ webLoginPromise ??= import("./login-BhLw-aw1.js").then((n) => n.n);
54419
54731
  return webLoginPromise;
54420
54732
  }
54421
54733
  function loadWebLoginQr() {
54422
- webLoginQrPromise ??= import("./login-qr-C87Q7LuN.js");
54734
+ webLoginQrPromise ??= import("./login-qr-B4dxH543.js");
54423
54735
  return webLoginQrPromise;
54424
54736
  }
54425
54737
  function loadWebChannel() {
54426
- webChannelPromise ??= import("./web-C3YuHiih.js");
54738
+ webChannelPromise ??= import("./web-DU4xaLZf.js");
54427
54739
  return webChannelPromise;
54428
54740
  }
54429
54741
  function loadWhatsAppActions() {
54430
- whatsappActionsPromise ??= import("./whatsapp-actions-ClWxTG5S.js");
54742
+ whatsappActionsPromise ??= import("./whatsapp-actions-B_3do0s7.js");
54431
54743
  return whatsappActionsPromise;
54432
54744
  }
54433
54745
  function createPluginRuntime() {
@@ -70547,6 +70859,7 @@ function createSymiTools(options) {
70547
70859
  createCronTool({ agentSessionKey: options?.agentSessionKey }),
70548
70860
  createTaskListTool({ workspaceDir }),
70549
70861
  createTaskCancelTool({ workspaceDir }),
70862
+ createSkillSearchTool({ workspaceDir }),
70550
70863
  ...messageTool ? [messageTool] : [],
70551
70864
  createTtsTool({
70552
70865
  agentChannel: options?.agentChannel,
@@ -71294,7 +71607,11 @@ async function compactEmbeddedPiSessionDirect(params) {
71294
71607
  userTimeFormat,
71295
71608
  contextFiles,
71296
71609
  memoryCitationsMode: params.config?.memory?.citations,
71297
- autoLoadInlineSkills: params.config?.skills?.autoLoadInline
71610
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
71611
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
71612
+ skillsAnchorList: params.config?.skills?.anchorList,
71613
+ currentUserMessage: void 0,
71614
+ compactMode: params.config?.prompt?.compactMode
71298
71615
  }));
71299
71616
  const sessionLock = await acquireSessionWriteLock({
71300
71617
  sessionFile: params.sessionFile,
@@ -79356,7 +79673,7 @@ async function deliverSessionMaintenanceWarning(params) {
79356
79673
  return;
79357
79674
  }
79358
79675
  try {
79359
- const { deliverOutboundPayloads } = await import("./deliver-OVx3XKTy.js").then((n) => n.n);
79676
+ const { deliverOutboundPayloads } = await import("./deliver-hjUeDZ7e.js").then((n) => n.n);
79360
79677
  await deliverOutboundPayloads({
79361
79678
  cfg: params.cfg,
79362
79679
  channel,