@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
@@ -11,32 +11,33 @@ import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-po
11
11
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-CnvkCEt-.js";
12
12
  import { a as buildModelAliasLines, n as resolveModel } from "./model-yI45t1OQ.js";
13
13
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-Do3xMEtM.js";
14
+ import { l as parseFrontmatterBlock } from "./frontmatter-B8duUx_6.js";
14
15
  import { r as isPathInsideWithRealpath } from "./scan-paths-ppKrtZ9U.js";
15
16
  import { a as resolveSkillsPromptForRun, d as resolveSandboxInputPath, h as applySkillEnvOverridesFromSnapshot, i as loadWorkspaceSkillEntries, l as assertMediaNotDataUrl, m as applySkillEnvOverrides, p as resolveSandboxedMediaSource, r as buildWorkspaceSkillSnapshot, u as assertSandboxPath } from "./skills-D_oCiaQn.js";
16
17
  import { a as safeStatSync, c as applyTestPluginDefaults, d as resolveEnableState, f as resolveMemorySlotDecision, h as isDangerousHostEnvVarName, i as isPathInside, n as loadPluginManifestRegistry, r as discoverSymiPlugins, u as normalizePluginsConfig } from "./manifest-registry-D5bnO5uA.js";
17
- import { A as parseConfigPath, B as resolveAgentMaxConcurrent, C as parseDurationMs, D as setConfigOverride, E as resetConfigOverrides, H as VERSION, M as unsetConfigValueAtPath, O as unsetConfigOverride, T as getConfigOverrides, _ as isInboundPathAllowed, b as resolveIMessageRemoteAttachmentRoots, c as resolveConfigSnapshotHash, h as resolveTelegramCustomCommands, i as loadConfig, j as setConfigValueAtPath, k as getConfigValueAtPath, l as writeConfigFile, m as normalizeTelegramCommandName, o as readConfigFileSnapshot, p as TELEGRAM_COMMAND_NAME_PATTERN, u as validateConfigObjectWithPlugins, w as validateJsonSchemaValue, x as normalizeScpRemoteHost, y as resolveIMessageAttachmentRoots, z as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "./config-DE6JXMtt.js";
18
+ import { A as parseConfigPath, B as resolveAgentMaxConcurrent, C as parseDurationMs, D as setConfigOverride, E as resetConfigOverrides, H as VERSION, M as unsetConfigValueAtPath, O as unsetConfigOverride, T as getConfigOverrides, _ as isInboundPathAllowed, b as resolveIMessageRemoteAttachmentRoots, c as resolveConfigSnapshotHash, h as resolveTelegramCustomCommands, i as loadConfig, j as setConfigValueAtPath, k as getConfigValueAtPath, l as writeConfigFile, m as normalizeTelegramCommandName, o as readConfigFileSnapshot, p as TELEGRAM_COMMAND_NAME_PATTERN, u as validateConfigObjectWithPlugins, w as validateJsonSchemaValue, x as normalizeScpRemoteHost, y as resolveIMessageAttachmentRoots, z as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "./config-Gfhqs66L.js";
18
19
  import { Rt as SESSION_LABEL_MAX_LENGTH, t as GatewayClient } from "./client-CJIMV1WD.js";
19
- import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege, t as buildGatewayConnectionDetails } from "./call-X_vwo309.js";
20
+ import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege, t as buildGatewayConnectionDetails } from "./call-BCTAmPye.js";
20
21
  import { a as isInternalMessageChannel, c as listDeliverableMessageChannels, d as resolveMessageChannel, h as GATEWAY_CLIENT_NAMES, i as isGatewayMessageChannel, l as normalizeMessageChannel, m as GATEWAY_CLIENT_MODES, n as isDeliverableMessageChannel, o as isMarkdownCapableMessageChannel, p as GATEWAY_CLIENT_IDS, t as INTERNAL_MESSAGE_CHANNEL, u as resolveGatewayMessageChannel } from "./message-channel-C9dERklz.js";
21
22
  import { i as normalizeInputProvenance, n as applyInputProvenanceToUserMessage, r as hasInterSessionUserProvenance } from "./input-provenance-D0lNkCf6.js";
22
- import { A as DEFAULT_RESET_TRIGGERS, B as resolveGroupSessionKey, D as resolveSessionResetPolicy, E as resolveChannelResetConfig, F as resolveMainSessionKey, G as deliveryContextKey, J as normalizeSessionDeliveryFields, K as mergeDeliveryContext, L as deriveSessionMetaPatch, O as resolveSessionResetType, P as resolveExplicitAgentSessionKey, T as evaluateSessionFreshness, U as resolveSessionLockMaxHoldFromTimeout, V as acquireSessionWriteLock, W as deliveryContextFromSession, Y as normalizeAccountId$3, _ as capArrayByJsonBytes, a as resolveAndPersistSessionFile, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as archiveSessionTranscripts, j as resolveFreshSessionTotalTokens, k as resolveThreadFlag, m as resolveCacheTtlMs$1, n as parseSessionThreadInfo, o as loadSessionStore, p as isCacheEnabled, q as normalizeDeliveryContext, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, w as resolveSessionKey } from "./sessions-DCr5nAOw.js";
23
+ import { A as DEFAULT_RESET_TRIGGERS, B as resolveGroupSessionKey, D as resolveSessionResetPolicy, E as resolveChannelResetConfig, F as resolveMainSessionKey, G as deliveryContextKey, J as normalizeSessionDeliveryFields, K as mergeDeliveryContext, L as deriveSessionMetaPatch, O as resolveSessionResetType, P as resolveExplicitAgentSessionKey, T as evaluateSessionFreshness, U as resolveSessionLockMaxHoldFromTimeout, V as acquireSessionWriteLock, W as deliveryContextFromSession, Y as normalizeAccountId$3, _ as capArrayByJsonBytes, a as resolveAndPersistSessionFile, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as archiveSessionTranscripts, j as resolveFreshSessionTotalTokens, k as resolveThreadFlag, m as resolveCacheTtlMs$1, n as parseSessionThreadInfo, o as loadSessionStore, p as isCacheEnabled, q as normalizeDeliveryContext, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, w as resolveSessionKey } from "./sessions-CpDbQNFu.js";
23
24
  import { a as isSilentReplyText, i as isSilentReplyPrefixText, n as SILENT_REPLY_TOKEN, r as SYMIPULSE_TOKEN, t as HEARTBEAT_TOKEN } from "./tokens-Csntmwwn.js";
24
25
  import { _ as listEnabledDiscordAccounts, a as isWhatsAppGroupJid, c as listEnabledTelegramAccounts, d as resolveTelegramToken, f as resolveSlackAccount, g as createDiscordActionGate, h as resolveSlackBotToken, l as listTelegramAccountIds, m as resolveSlackAppToken, n as listChannelPlugins, o as normalizeWhatsAppTarget, r as normalizeChannelId$1, s as createTelegramActionGate, t as getChannelPlugin, u as resolveTelegramAccount, v as resolveDiscordAccount, y as normalizeDiscordToken } from "./plugins-CwSlLxM8.js";
25
26
  import { a as logWebSelfId, i as getWebAuthAgeMs, m as webAuthExists, n as resolveWhatsAppAccount, o as logoutWeb, u as readWebSelfId } from "./accounts-D9ITgITj.js";
26
27
  import { t as normalizeChatType } from "./chat-type-CeFzWU-6.js";
27
- import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-CoSPwGiI.js";
28
- import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-CcD9S5so.js";
29
- import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$4 } from "./with-timeout-C1vsg3IF.js";
30
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-CeNdvQJ3.js";
28
+ import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-t_DoGd2Y.js";
29
+ import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-8Gw3YmOh.js";
30
+ import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$4 } from "./with-timeout-BWETfI9T.js";
31
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-DaRQn5Ai.js";
31
32
  import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-Ci8Xsc_Y.js";
32
33
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-CIjIGxEE.js";
33
34
  import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-D1eLj5t8.js";
34
- import { A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as parseTelegramTarget, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, Y as resolveTelegramTargetChatType, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as isVoiceCompatibleAudio, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-Bi8XhwOZ.js";
35
+ import { A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as parseTelegramTarget, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, Y as resolveTelegramTargetChatType, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as isVoiceCompatibleAudio, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-Cxr6CgGf.js";
35
36
  import { c as detectMime, d as imageMimeFromFormat, f as isAudioFileName, g as MAX_IMAGE_BYTES, i as getImageMetadata, l as extensionForMime, p as isGifMedia, s as resizeToJpeg, v as mediaKindFromMime } from "./image-ops-CUkaZz2F.js";
36
- import { A as isTransientHttpError, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as ensureSessionHeader, I as resolveBootstrapMaxChars, L as resolveBootstrapTotalMaxChars, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as buildBootstrapContextFiles, R as sanitizeGoogleTurnOrdering, S as isCompactionFailureError, T as isFailoverErrorMessage, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, b as isBillingAssistantError, c as extractToolCallsFromAssistant, d as isAntigravityClaude, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, m as classifyFailoverReason, n as validateGeminiTurns, o as normalizeTextForComparison, p as BILLING_ERROR_USER_MESSAGE, r as pickFallbackThinkingLevel, s as sanitizeSessionMessagesImages, t as validateAnthropicTurns, u as downgradeOpenAIReasoningBlocks, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError } from "./pi-embedded-helpers-BgpogTwt.js";
37
- import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, f as resolveSandboxConfigForAgent, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-T9SO3y3b.js";
38
- import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-faqXQ9f1.js";
39
- import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-BkYSrDni.js";
37
+ import { A as isTransientHttpError, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as ensureSessionHeader, I as resolveBootstrapMaxChars, L as resolveBootstrapTotalMaxChars, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as buildBootstrapContextFiles, R as sanitizeGoogleTurnOrdering, S as isCompactionFailureError, T as isFailoverErrorMessage, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, b as isBillingAssistantError, c as extractToolCallsFromAssistant, d as isAntigravityClaude, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, m as classifyFailoverReason, n as validateGeminiTurns, o as normalizeTextForComparison, p as BILLING_ERROR_USER_MESSAGE, r as pickFallbackThinkingLevel, s as sanitizeSessionMessagesImages, t as validateAnthropicTurns, u as downgradeOpenAIReasoningBlocks, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError } from "./pi-embedded-helpers-BlL08R8g.js";
38
+ import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, f as resolveSandboxConfigForAgent, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-BTziorto.js";
39
+ import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-CO5ZhkcZ.js";
40
+ import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-DQIkGNj2.js";
40
41
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-Ba_ROWsq.js";
41
42
  import { i as resolveExistingPathsWithinRoot, r as DEFAULT_UPLOAD_DIR } from "./paths-OWKu4tXF.js";
42
43
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-Ixuyn7h8.js";
@@ -48,10 +49,10 @@ import { c as resolveStorePath, i as resolveSessionTranscriptPath, n as resolveS
48
49
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-D5O01TlD.js";
49
50
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-CVLISeRT.js";
50
51
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels, u as resolveResponseUsageMode } from "./thinking-8sKPnzpp.js";
51
- import { t as ensureSymiModelsJson } from "./models-config-CHVfeRDR.js";
52
+ import { t as ensureSymiModelsJson } from "./models-config-frWb8fDT.js";
52
53
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-BUN71nd5.js";
53
- import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-BmWvHCEJ.js";
54
- import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-8N1YbbDk.js";
54
+ import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-Cuhhh4qN.js";
55
+ import { a as resolveMemorySearchConfig, t as MemoryIndexManager } from "./manager-BsfrsBPw.js";
55
56
  import { f as runTasksWithConcurrency } from "./internal-C2jxeHS9.js";
56
57
  import { n as retryAsync } from "./retry-C4Q_VPOo.js";
57
58
  import { c as imageResultFromFile, d as readNumberParam, f as readReactionParams, h as readStringParam, l as jsonResult, m as readStringOrNumberParam, n as missingTargetError, o as createActionGate, p as readStringArrayParam, r as unknownTargetError, s as imageResult, t as ambiguousTargetError, u as parseAvailableTags } from "./target-errors-Co0LcWKH.js";
@@ -63,13 +64,13 @@ import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMedia
63
64
  import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-BRlF7czi.js";
64
65
  import { a as resolveNativeSkillsEnabled, i as resolveNativeCommandsEnabled, n as isNativeCommandsExplicitlyDisabled, r as isRestartEnabled, t as isCommandFlagEnabled } from "./commands-Ee-evDmm.js";
65
66
  import { a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, i as listChatCommands, l as parseCommandArgs, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices } from "./commands-registry-CsxsFveo.js";
66
- import { _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as extractTextFromChatContent, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, y as stripReasoningTagsFromText } from "./image-Cp6qRPZ2.js";
67
+ import { _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as extractTextFromChatContent, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, y as stripReasoningTagsFromText } from "./image-dYtWZNKT.js";
67
68
  import { n as resolveToolDisplay } from "./tool-display-I4rDxv8J.js";
68
69
  import { n as formatTimeAgo } from "./format-relative-BDwAggS5.js";
69
70
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-DZozDZN-.js";
70
- import { _ as applyTemplate, a as resolveMediaAttachmentLocalRoots, c as resolveAttachmentKind, d as registerUnhandledRejectionHandler, f as resolveConcurrency, g as CLI_OUTPUT_MAX_BUFFER, h as resolveMediaUnderstandingScope, i as resolveAutoImageModel, l as buildRandomTempFilePath, m as normalizeMediaUnderstandingChatType, n as createMediaAttachmentCache, o as runCapability, p as resolveTimeoutMs, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-CiThXXY3.js";
71
- import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-FckJ4pcL.js";
72
- import { a as loadCombinedSessionStoreForGateway, u as lookupContextTokens } from "./session-utils-DQ-t0PxQ.js";
71
+ import { _ as applyTemplate, a as resolveMediaAttachmentLocalRoots, c as resolveAttachmentKind, d as registerUnhandledRejectionHandler, f as resolveConcurrency, g as CLI_OUTPUT_MAX_BUFFER, h as resolveMediaUnderstandingScope, i as resolveAutoImageModel, l as buildRandomTempFilePath, m as normalizeMediaUnderstandingChatType, n as createMediaAttachmentCache, o as runCapability, p as resolveTimeoutMs, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-CY_8vnxU.js";
72
+ import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-DRqmevpR.js";
73
+ import { a as loadCombinedSessionStoreForGateway, u as lookupContextTokens } from "./session-utils--1xVj2BC.js";
73
74
  import { b as ensureSkillsWatcher, i as resolveSkillCommandInvocation, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, r as listSkillCommandsForWorkspace, t as listReservedChatSlashCommandNames, x as getSkillsSnapshotVersion } from "./skill-commands-DrX4xCNq.js";
74
75
  import { i as readChannelAllowFromStore, l as listPairingChannels, o as removeChannelAllowFromStoreEntry, s as upsertChannelPairingRequest, t as addChannelAllowFromStoreEntry } from "./pairing-store-B2viSnRj.js";
75
76
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-Bsts3MRD.js";
@@ -83,19 +84,19 @@ import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChan
83
84
  import { n as normalizePollInput } from "./polls-Cm1-n4jF.js";
84
85
  import { t as convertMarkdownTables } from "./tables-DL_wkymg.js";
85
86
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName } from "./constants-l9TQg-aP.js";
86
- import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-B5HVCnUI.js";
87
+ import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-DnNPjFvU.js";
87
88
  import { i as parseAbsoluteTimeMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-BDqsqTKI.js";
88
89
  import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-CmPVNjnf.js";
89
- import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-CSkNKYIc.js";
90
- import { a as formatIMessageChatTarget, c as parseIMessageTarget, i as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, o as isAllowedIMessageSender, r as createIMessageRpcClient, s as normalizeIMessageHandle, t as sendMessageIMessage } from "./send-CupfdYEg.js";
90
+ import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-DbJsN7Lj.js";
91
+ 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-D4GfXudZ.js";
91
92
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-BFA2RukR.js";
92
93
  import { t as parseTimeoutMs } from "./parse-timeout-FUO1ff14.js";
93
94
  import { t as makeProxyFetch } from "./proxy-GY5xhMp0.js";
94
- import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-BxvfG7Oj.js";
95
- import { r as detectBinary } from "./onboard-helpers-CNFdWQIV.js";
95
+ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-Dk0cnpHa.js";
96
+ import { r as detectBinary } from "./onboard-helpers-Ca4KojJF.js";
96
97
  import { t as resolvePairingIdLabel } from "./pairing-labels-BHx_CdbP.js";
97
98
  import { t as getActiveWebListener } from "./active-listener-DEi7sEFa.js";
98
- import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-GxaAKOgf.js";
99
+ import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-BFsWV2pS.js";
99
100
  import { createRequire } from "node:module";
100
101
  import { execFileSync, spawn, spawnSync } from "node:child_process";
101
102
  import os, { homedir } from "node:os";
@@ -14762,6 +14763,7 @@ function sanitizeForPromptLiteral(value) {
14762
14763
  //#region src/agents/system-prompt.ts
14763
14764
  function buildSkillsSection(params) {
14764
14765
  if (params.isMinimal) return [];
14766
+ if (params.dropCatalog) return [];
14765
14767
  const trimmed = params.skillsPrompt?.trim();
14766
14768
  if (!trimmed) return [];
14767
14769
  return [
@@ -14866,7 +14868,7 @@ function buildVoiceSection(params) {
14866
14868
  ];
14867
14869
  }
14868
14870
  function buildVerifyYourWorkSection(params) {
14869
- if (params.isMinimal) return [];
14871
+ if (params.isMinimal || params.compactMode) return [];
14870
14872
  const exec = params.execToolName;
14871
14873
  const read = params.readToolName;
14872
14874
  return [
@@ -15055,6 +15057,7 @@ function buildAgentSystemPrompt(params) {
15055
15057
  const promptMode = params.promptMode ?? "full";
15056
15058
  const isMinimal = promptMode === "minimal" || promptMode === "none";
15057
15059
  const isCoding = promptMode === "coding";
15060
+ const compactMode = params.compactMode === true;
15058
15061
  const sandboxContainerWorkspace = params.sandboxInfo?.containerWorkspaceDir?.trim();
15059
15062
  const sanitizedWorkspaceDir = sanitizeForPromptLiteral(params.workspaceDir);
15060
15063
  const sanitizedSandboxContainerWorkspace = sandboxContainerWorkspace ? sanitizeForPromptLiteral(sandboxContainerWorkspace) : "";
@@ -15070,7 +15073,8 @@ function buildAgentSystemPrompt(params) {
15070
15073
  const skillsSection = buildSkillsSection({
15071
15074
  skillsPrompt,
15072
15075
  isMinimal,
15073
- readToolName
15076
+ readToolName,
15077
+ dropCatalog: compactMode && (params.skillsDiscoveryMode === "jit" || params.skillsDiscoveryMode === "hybrid")
15074
15078
  });
15075
15079
  const memorySection = buildMemorySection({
15076
15080
  isMinimal,
@@ -15113,39 +15117,43 @@ function buildAgentSystemPrompt(params) {
15113
15117
  "If a task is more complex or takes longer, spawn a sub-agent. Completion is push-based: it will auto-announce when done.",
15114
15118
  "Do not poll `subagents list` / `sessions_list` in a loop; only check status on-demand (for intervention, debugging, or when explicitly asked).",
15115
15119
  "",
15116
- "## Tool Call Style",
15117
- "Default: do not narrate routine, low-risk tool calls (just call the tool).",
15118
- "Narrate only when it helps: multi-step work, complex/challenging problems, sensitive actions (e.g., deletions), or when the user explicitly asks.",
15119
- "Keep narration brief and value-dense; avoid repeating obvious steps.",
15120
- "Use plain human language for narration unless in a technical context.",
15121
- "",
15122
- "## Edit Tool Best Practices",
15123
- "When using the edit tool, the oldText must match the file EXACTLY (whitespace, indentation, and all).",
15124
- "To avoid match failures:",
15125
- "- Use the SHORTEST unique snippet that identifies the edit location (1-3 lines). Do NOT paste large blocks.",
15126
- "- ALWAYS read the file first, then copy the exact text from the read output for oldText.",
15127
- "- 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.",
15128
- "- Prefer lines with distinctive content (function names, unique strings) over generic code (braces, blank lines).",
15129
- "",
15120
+ ...compactMode ? [] : [
15121
+ "## Tool Call Style",
15122
+ "Default: do not narrate routine, low-risk tool calls (just call the tool).",
15123
+ "Narrate only when it helps: multi-step work, complex/challenging problems, sensitive actions (e.g., deletions), or when the user explicitly asks.",
15124
+ "Keep narration brief and value-dense; avoid repeating obvious steps.",
15125
+ "Use plain human language for narration unless in a technical context.",
15126
+ "",
15127
+ "## Edit Tool Best Practices",
15128
+ "When using the edit tool, the oldText must match the file EXACTLY (whitespace, indentation, and all).",
15129
+ "To avoid match failures:",
15130
+ "- Use the SHORTEST unique snippet that identifies the edit location (1-3 lines). Do NOT paste large blocks.",
15131
+ "- ALWAYS read the file first, then copy the exact text from the read output for oldText.",
15132
+ "- 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.",
15133
+ "- Prefer lines with distinctive content (function names, unique strings) over generic code (braces, blank lines).",
15134
+ ""
15135
+ ],
15130
15136
  ...safetySection,
15131
- "## Symi CLI Quick Reference",
15132
- "Symi is controlled via subcommands. Do not invent commands.",
15133
- "To manage the Gateway daemon service (start/stop/restart):",
15134
- "- symi gateway status",
15135
- "- symi gateway start",
15136
- "- symi gateway stop",
15137
- "- symi gateway restart",
15138
- "If unsure, ask the user to run `symi help` (or `symi gateway --help`) and paste the output.",
15139
- "",
15137
+ ...compactMode ? ["For Symi CLI commands, ask the user to run `symi help` and paste the output.", ""] : [
15138
+ "## Symi CLI Quick Reference",
15139
+ "Symi is controlled via subcommands. Do not invent commands.",
15140
+ "To manage the Gateway daemon service (start/stop/restart):",
15141
+ "- symi gateway status",
15142
+ "- symi gateway start",
15143
+ "- symi gateway stop",
15144
+ "- symi gateway restart",
15145
+ "If unsure, ask the user to run `symi help` (or `symi gateway --help`) and paste the output.",
15146
+ ""
15147
+ ],
15140
15148
  ...skillsSection,
15141
15149
  ...memorySection,
15142
- hasGateway && !isMinimal && !isCoding ? "## Symi Self-Update" : "",
15143
- hasGateway && !isMinimal && !isCoding ? [
15150
+ hasGateway && !isMinimal && !isCoding && !compactMode ? "## Symi Self-Update" : "",
15151
+ hasGateway && !isMinimal && !isCoding && !compactMode ? [
15144
15152
  "Get Updates (self-update) is ONLY allowed when the user explicitly asks for it.",
15145
15153
  "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.",
15146
15154
  "Actions: config.get, config.schema, config.apply (validate + write full config, then restart), update.run (update deps or git, then restart).",
15147
15155
  "After restart, Symi pings the last active session automatically."
15148
- ].join("\n") : "",
15156
+ ].join("\n") : hasGateway && !isMinimal && !isCoding && compactMode ? "Gateway destructive actions (config.apply, config.patch, update.run) require explicit user authorization via userRequestAcknowledgment — never invoke speculatively." : "",
15149
15157
  hasGateway && !isMinimal && !isCoding ? "" : "",
15150
15158
  "",
15151
15159
  params.modelAliasLines && params.modelAliasLines.length > 0 && !isMinimal && !isCoding ? "## Model Aliases" : "",
@@ -15162,7 +15170,8 @@ function buildAgentSystemPrompt(params) {
15162
15170
  ...buildVerifyYourWorkSection({
15163
15171
  isMinimal,
15164
15172
  execToolName,
15165
- readToolName
15173
+ readToolName,
15174
+ compactMode
15166
15175
  }),
15167
15176
  params.sandboxInfo?.enabled ? "## Sandbox" : "",
15168
15177
  params.sandboxInfo?.enabled ? [
@@ -15208,23 +15217,26 @@ function buildAgentSystemPrompt(params) {
15208
15217
  }
15209
15218
  if (params.reactionGuidance) {
15210
15219
  const { level, channel } = params.reactionGuidance;
15211
- const guidanceText = level === "minimal" ? [
15212
- `Reactions are enabled for ${channel} in MINIMAL mode.`,
15213
- "React ONLY when truly relevant:",
15214
- "- Acknowledge important user requests or confirmations",
15215
- "- Express genuine sentiment (humor, appreciation) sparingly",
15216
- "- Avoid reacting to routine messages or your own replies",
15217
- "Guideline: at most 1 reaction per 5-10 exchanges."
15218
- ].join("\n") : [
15219
- `Reactions are enabled for ${channel} in EXTENSIVE mode.`,
15220
- "Feel free to react liberally:",
15221
- "- Acknowledge messages with appropriate emojis",
15222
- "- Express sentiment and personality through reactions",
15223
- "- React to interesting content, humor, or notable events",
15224
- "- Use reactions to confirm understanding or agreement",
15225
- "Guideline: react whenever it feels natural."
15226
- ].join("\n");
15227
- lines.push("## Reactions", guidanceText, "");
15220
+ if (compactMode) lines.push("## Reactions", `Reactions for ${channel} are in ${level.toUpperCase()} mode — see the reactions-${level} skill (auto-loaded).`, "");
15221
+ else {
15222
+ const guidanceText = level === "minimal" ? [
15223
+ `Reactions are enabled for ${channel} in MINIMAL mode.`,
15224
+ "React ONLY when truly relevant:",
15225
+ "- Acknowledge important user requests or confirmations",
15226
+ "- Express genuine sentiment (humor, appreciation) sparingly",
15227
+ "- Avoid reacting to routine messages or your own replies",
15228
+ "Guideline: at most 1 reaction per 5-10 exchanges."
15229
+ ].join("\n") : [
15230
+ `Reactions are enabled for ${channel} in EXTENSIVE mode.`,
15231
+ "Feel free to react liberally:",
15232
+ "- Acknowledge messages with appropriate emojis",
15233
+ "- Express sentiment and personality through reactions",
15234
+ "- React to interesting content, humor, or notable events",
15235
+ "- Use reactions to confirm understanding or agreement",
15236
+ "Guideline: react whenever it feels natural."
15237
+ ].join("\n");
15238
+ lines.push("## Reactions", guidanceText, "");
15239
+ }
15228
15240
  }
15229
15241
  if (reasoningHint) lines.push("## Reasoning Format", reasoningHint, "");
15230
15242
  const validContextFiles = (params.contextFiles ?? []).filter((file) => typeof file.path === "string" && file.path.trim().length > 0);
@@ -20470,7 +20482,7 @@ async function routeReply(params) {
20470
20482
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
20471
20483
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
20472
20484
  try {
20473
- const { deliverOutboundPayloads } = await import("./deliver-CeNdvQJ3.js").then((n) => n.n);
20485
+ const { deliverOutboundPayloads } = await import("./deliver-DaRQn5Ai.js").then((n) => n.n);
20474
20486
  return {
20475
20487
  ok: true,
20476
20488
  messageId: (await deliverOutboundPayloads({
@@ -29482,6 +29494,231 @@ function createSessionsSpawnTool(opts) {
29482
29494
  };
29483
29495
  }
29484
29496
 
29497
+ //#endregion
29498
+ //#region src/agents/skills/triggers.ts
29499
+ const QUOTE_RE = /^["'`](.*)["'`]$/;
29500
+ const ARRAY_FORM_RE = /^\[(.*)\]$/s;
29501
+ function stripWrappingQuotes(s) {
29502
+ const m = s.trim().match(QUOTE_RE);
29503
+ return m ? m[1] : s.trim();
29504
+ }
29505
+ /** Parse a single trigger value, dropping empty / whitespace-only entries. */
29506
+ function cleanTrigger(raw) {
29507
+ const trimmed = stripWrappingQuotes(raw).toLowerCase();
29508
+ return trimmed.length > 0 ? trimmed : null;
29509
+ }
29510
+ /**
29511
+ * Parse the value of a `triggers:` frontmatter field into a string[].
29512
+ * Accepts both inline-array form `[a, b, "c d"]` and YAML-list form
29513
+ * (multiline with leading hyphens). Returns deduped lowercased trigger
29514
+ * strings, or empty array on unparseable / missing input.
29515
+ */
29516
+ function parseTriggersValue(raw) {
29517
+ if (typeof raw !== "string") return [];
29518
+ const trimmed = raw.trim();
29519
+ if (!trimmed) return [];
29520
+ const items = [];
29521
+ const arrayMatch = trimmed.match(ARRAY_FORM_RE);
29522
+ if (arrayMatch) {
29523
+ const inner = arrayMatch[1];
29524
+ let buf = "";
29525
+ let inQuote = null;
29526
+ for (const ch of inner) {
29527
+ if (inQuote) {
29528
+ if (ch === inQuote) inQuote = null;
29529
+ else buf += ch;
29530
+ continue;
29531
+ }
29532
+ if (ch === "\"" || ch === "'") {
29533
+ inQuote = ch;
29534
+ continue;
29535
+ }
29536
+ if (ch === ",") {
29537
+ const cleaned = cleanTrigger(buf);
29538
+ if (cleaned) items.push(cleaned);
29539
+ buf = "";
29540
+ continue;
29541
+ }
29542
+ buf += ch;
29543
+ }
29544
+ const cleaned = cleanTrigger(buf);
29545
+ if (cleaned) items.push(cleaned);
29546
+ } else for (const line of trimmed.split("\n")) {
29547
+ const ltrim = line.trimStart();
29548
+ if (ltrim.startsWith("- ")) {
29549
+ const cleaned = cleanTrigger(ltrim.slice(2));
29550
+ if (cleaned) items.push(cleaned);
29551
+ } else if (ltrim && !ltrim.startsWith("#")) {
29552
+ const cleaned = cleanTrigger(ltrim);
29553
+ if (cleaned) items.push(cleaned);
29554
+ }
29555
+ }
29556
+ const seen = /* @__PURE__ */ new Set();
29557
+ const out = [];
29558
+ for (const t of items) if (!seen.has(t)) {
29559
+ seen.add(t);
29560
+ out.push(t);
29561
+ }
29562
+ return out;
29563
+ }
29564
+ /**
29565
+ * Extract triggers from a parsed frontmatter record. Returns empty array
29566
+ * when the field is absent or unparseable.
29567
+ */
29568
+ function getSkillTriggers(frontmatter) {
29569
+ return parseTriggersValue(frontmatter.triggers);
29570
+ }
29571
+
29572
+ //#endregion
29573
+ //#region src/agents/tools/skill-search-tool.ts
29574
+ const SkillSearchToolSchema = Type.Object({
29575
+ query: Type.String({
29576
+ minLength: 1,
29577
+ description: "Intent description (2-8 words). Match by trigger keywords first, then description text."
29578
+ }),
29579
+ limit: Type.Optional(Type.Number({
29580
+ minimum: 1,
29581
+ maximum: 10,
29582
+ description: "Max results to return (default 5, capped at 10)."
29583
+ }))
29584
+ });
29585
+ const CACHE_TTL_MS = 6e4;
29586
+ const SAFE_NAME_RE = /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/;
29587
+ function loadSkillFromDir(dir, source) {
29588
+ const name = path.basename(dir);
29589
+ if (!SAFE_NAME_RE.test(name)) return null;
29590
+ const file = path.join(dir, "SKILL.md");
29591
+ let raw;
29592
+ try {
29593
+ if (!fs.statSync(file).isFile()) return null;
29594
+ raw = fs.readFileSync(file, "utf8");
29595
+ } catch {
29596
+ return null;
29597
+ }
29598
+ const fm = parseFrontmatterBlock(raw);
29599
+ return {
29600
+ name,
29601
+ description: (fm.description ?? "").trim(),
29602
+ path: file,
29603
+ triggers: getSkillTriggers(fm),
29604
+ source
29605
+ };
29606
+ }
29607
+ function listSkillDirs(root) {
29608
+ const skillsDir = path.join(root, "skills");
29609
+ let entries;
29610
+ try {
29611
+ entries = fs.readdirSync(skillsDir, { withFileTypes: true });
29612
+ } catch {
29613
+ return [];
29614
+ }
29615
+ return entries.filter((e) => e.isDirectory()).map((e) => path.join(skillsDir, e.name));
29616
+ }
29617
+ let cachedPackageRoot$1;
29618
+ const cachePerWorkspace = /* @__PURE__ */ new Map();
29619
+ function getPackageRoot$1() {
29620
+ if (cachedPackageRoot$1 === void 0) cachedPackageRoot$1 = resolveSymiPackageRootSync({});
29621
+ return cachedPackageRoot$1;
29622
+ }
29623
+ function loadAllSkills(workspaceDir) {
29624
+ const cacheKey = workspaceDir ?? "";
29625
+ const now = Date.now();
29626
+ const existing = cachePerWorkspace.get(cacheKey);
29627
+ if (existing && now - existing.loadedAt < CACHE_TTL_MS) return existing.skills;
29628
+ const seen = /* @__PURE__ */ new Map();
29629
+ if (workspaceDir) for (const dir of listSkillDirs(workspaceDir)) {
29630
+ const skill = loadSkillFromDir(dir, "workspace");
29631
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
29632
+ }
29633
+ const packageRoot = getPackageRoot$1();
29634
+ if (packageRoot) for (const dir of listSkillDirs(packageRoot)) {
29635
+ const skill = loadSkillFromDir(dir, "bundled");
29636
+ if (skill && !seen.has(skill.name)) seen.set(skill.name, skill);
29637
+ }
29638
+ const skills = [...seen.values()];
29639
+ cachePerWorkspace.set(cacheKey, {
29640
+ skills,
29641
+ loadedAt: now
29642
+ });
29643
+ return skills;
29644
+ }
29645
+ const TOKEN_SPLIT_RE = /[^\w/]+/;
29646
+ function tokenizeQuery(raw) {
29647
+ return raw.toLowerCase().split(TOKEN_SPLIT_RE).filter((t) => t.length >= 2);
29648
+ }
29649
+ /**
29650
+ * Score a query against one skill's triggers + description.
29651
+ * - Trigger score: ratio of query tokens that appear in the trigger set.
29652
+ * - FTS score: 0.4 × ratio of query tokens that appear in the description
29653
+ * (case-insensitive substring match).
29654
+ * - Final = max(trigger, fts) so trigger matches always beat descriptions.
29655
+ * - Returns 0 for "no signal at all" (caller should drop these).
29656
+ */
29657
+ function scoreSkillMatch(skill, queryTokens) {
29658
+ if (queryTokens.length === 0) return 0;
29659
+ const triggerSet = new Set(skill.triggers.map((t) => t.toLowerCase()));
29660
+ const description = skill.description.toLowerCase();
29661
+ let triggerHits = 0;
29662
+ let ftsHits = 0;
29663
+ for (const token of queryTokens) if (triggerSet.has(token)) triggerHits += 1;
29664
+ else if (description.includes(token)) ftsHits += 1;
29665
+ const triggerScore = triggerHits / queryTokens.length;
29666
+ const ftsScore = ftsHits / queryTokens.length * .4;
29667
+ return Math.max(triggerScore, ftsScore);
29668
+ }
29669
+ /**
29670
+ * Pure-function search; exported for testing without going through the
29671
+ * tool execute wrapper.
29672
+ */
29673
+ function searchSkills(query, limit, workspaceDir) {
29674
+ const tokens = tokenizeQuery(query);
29675
+ if (tokens.length === 0) return [];
29676
+ const all = loadAllSkills(workspaceDir);
29677
+ const scored = [];
29678
+ for (const skill of all) {
29679
+ const score = scoreSkillMatch(skill, tokens);
29680
+ if (score > 0) scored.push({
29681
+ name: skill.name,
29682
+ description: skill.description,
29683
+ path: skill.path,
29684
+ score
29685
+ });
29686
+ }
29687
+ scored.sort((a, b) => b.score - a.score || a.name.localeCompare(b.name));
29688
+ return scored.slice(0, limit);
29689
+ }
29690
+ function createSkillSearchTool(opts) {
29691
+ return {
29692
+ name: "skill_search",
29693
+ label: "skill_search",
29694
+ 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.",
29695
+ parameters: SkillSearchToolSchema,
29696
+ execute: async (_toolCallId, args) => {
29697
+ const params = args;
29698
+ const query = typeof params.query === "string" ? params.query.trim() : "";
29699
+ if (!query) return jsonResult({
29700
+ ok: false,
29701
+ error: "skill_search requires a non-empty `query` string."
29702
+ });
29703
+ const limit = typeof params.limit === "number" && Number.isFinite(params.limit) ? Math.min(10, Math.max(1, Math.floor(params.limit))) : 5;
29704
+ try {
29705
+ return jsonResult({
29706
+ ok: true,
29707
+ query,
29708
+ matches: searchSkills(query, limit, opts?.workspaceDir)
29709
+ });
29710
+ } catch (err) {
29711
+ const message = err instanceof Error ? err.message : String(err);
29712
+ logWarn(`skill_search failed: ${message}`);
29713
+ return jsonResult({
29714
+ ok: false,
29715
+ error: message
29716
+ });
29717
+ }
29718
+ }
29719
+ };
29720
+ }
29721
+
29485
29722
  //#endregion
29486
29723
  //#region src/agents/tools/subagents-tool.ts
29487
29724
  const SUBAGENT_ACTIONS = [
@@ -31542,6 +31779,7 @@ function createSymiTools(options) {
31542
31779
  createCronTool({ agentSessionKey: options?.agentSessionKey }),
31543
31780
  createTaskListTool({ workspaceDir }),
31544
31781
  createTaskCancelTool({ workspaceDir }),
31782
+ createSkillSearchTool({ workspaceDir }),
31545
31783
  ...messageTool ? [messageTool] : [],
31546
31784
  createTtsTool({
31547
31785
  agentChannel: options?.agentChannel,
@@ -39646,6 +39884,71 @@ function buildAutoLoadedSkillsBlock(opts) {
39646
39884
  ].join("\n");
39647
39885
  }
39648
39886
 
39887
+ //#endregion
39888
+ //#region src/agents/system-prompt-skills-jit.ts
39889
+ const MAX_ANCHOR_DESCRIPTION_CHARS = 100;
39890
+ const MAX_AUTO_INJECT_RESULTS = 3;
39891
+ const MAX_AUTO_INJECT_TOTAL_CHARS = 600;
39892
+ /**
39893
+ * Build the anchor list block. Returns "" when no anchor list configured
39894
+ * or in preload mode (anchor list adds value only in jit/hybrid).
39895
+ */
39896
+ function buildAnchorListBlock(opts) {
39897
+ if (opts.minimalMode) return "";
39898
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
39899
+ const names = (opts.anchorList ?? []).filter((n) => typeof n === "string" && n.trim().length > 0);
39900
+ if (names.length === 0) return "";
39901
+ const lines = [];
39902
+ for (const name of names) {
39903
+ const description = searchSkills(name, 1, opts.workspaceDir)[0]?.description.trim() ?? "";
39904
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
39905
+ lines.push(truncated ? `- ${name}: ${truncated}` : `- ${name}`);
39906
+ }
39907
+ return [
39908
+ "",
39909
+ "## Anchor Skills",
39910
+ "These skills are always available. Read their SKILL.md via `read` if relevant. For full discovery use the `skill_search` tool.",
39911
+ lines.join("\n"),
39912
+ ""
39913
+ ].join("\n");
39914
+ }
39915
+ /**
39916
+ * Build the auto-injected matches block based on the user message triggers.
39917
+ * Returns "" when discoveryMode doesn't ask for it, no message available,
39918
+ * no matches found, or in minimal mode.
39919
+ */
39920
+ function buildAutoInjectBlock(opts) {
39921
+ if (opts.minimalMode) return "";
39922
+ if (opts.discoveryMode !== "jit" && opts.discoveryMode !== "hybrid") return "";
39923
+ const message = (opts.userMessage ?? "").trim();
39924
+ if (!message) return "";
39925
+ const matches = searchSkills(message, MAX_AUTO_INJECT_RESULTS, opts.workspaceDir);
39926
+ if (matches.length === 0) return "";
39927
+ const lines = [];
39928
+ let total = 0;
39929
+ for (const match of matches) {
39930
+ const description = match.description.trim();
39931
+ const truncated = description.length > MAX_ANCHOR_DESCRIPTION_CHARS ? `${description.slice(0, MAX_ANCHOR_DESCRIPTION_CHARS - 1)}…` : description;
39932
+ const skillRef = path.basename(path.dirname(match.path));
39933
+ const line = truncated ? `- ${skillRef}: ${truncated}` : `- ${skillRef}`;
39934
+ if (total + line.length > MAX_AUTO_INJECT_TOTAL_CHARS) break;
39935
+ lines.push(line);
39936
+ total += line.length + 1;
39937
+ }
39938
+ if (lines.length === 0) return "";
39939
+ return [
39940
+ "",
39941
+ "## Possibly Relevant Skills (auto-suggested for this request)",
39942
+ "These skills' triggers matched keywords in your message. Read the SKILL.md if it applies; otherwise ignore and proceed.",
39943
+ lines.join("\n"),
39944
+ ""
39945
+ ].join("\n");
39946
+ }
39947
+ /** Convenience: build both blocks concatenated. */
39948
+ function buildSkillsJitBlocks(opts) {
39949
+ return `${buildAnchorListBlock(opts)}${buildAutoInjectBlock(opts)}`;
39950
+ }
39951
+
39649
39952
  //#endregion
39650
39953
  //#region src/agents/pi-embedded-runner/system-prompt.ts
39651
39954
  function buildEmbeddedSystemPrompt(params) {
@@ -39675,16 +39978,23 @@ function buildEmbeddedSystemPrompt(params) {
39675
39978
  userTime: params.userTime,
39676
39979
  userTimeFormat: params.userTimeFormat,
39677
39980
  contextFiles: params.contextFiles,
39678
- memoryCitationsMode: params.memoryCitationsMode
39981
+ memoryCitationsMode: params.memoryCitationsMode,
39982
+ compactMode: params.compactMode,
39983
+ skillsDiscoveryMode: params.skillsDiscoveryMode
39679
39984
  });
39680
39985
  const promptMode = params.promptMode ?? "full";
39681
39986
  const isMinimal = promptMode === "minimal" || promptMode === "none";
39682
- const skillsBlock = buildAutoLoadedSkillsBlock({
39987
+ return `${corePrompt}${buildAutoLoadedSkillsBlock({
39683
39988
  skillNames: params.autoLoadInlineSkills ?? [],
39684
39989
  workspaceDir: params.workspaceDir,
39685
39990
  minimalMode: isMinimal
39686
- });
39687
- return skillsBlock ? `${corePrompt}${skillsBlock}` : corePrompt;
39991
+ })}${buildSkillsJitBlocks({
39992
+ discoveryMode: params.skillsDiscoveryMode,
39993
+ anchorList: params.skillsAnchorList,
39994
+ userMessage: params.currentUserMessage,
39995
+ workspaceDir: params.workspaceDir,
39996
+ minimalMode: isMinimal
39997
+ })}`;
39688
39998
  }
39689
39999
  function createSystemPromptOverride(systemPrompt) {
39690
40000
  const override = systemPrompt.trim();
@@ -40473,7 +40783,11 @@ async function runEmbeddedAttempt(params) {
40473
40783
  userTimeFormat,
40474
40784
  contextFiles,
40475
40785
  memoryCitationsMode: params.config?.memory?.citations,
40476
- autoLoadInlineSkills: params.config?.skills?.autoLoadInline
40786
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
40787
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
40788
+ skillsAnchorList: params.config?.skills?.anchorList,
40789
+ currentUserMessage: params.prompt,
40790
+ compactMode: params.config?.prompt?.compactMode
40477
40791
  });
40478
40792
  const systemPromptReport = buildSystemPromptReport({
40479
40793
  source: "run",
@@ -44962,7 +45276,7 @@ async function deliverSessionMaintenanceWarning(params) {
44962
45276
  return;
44963
45277
  }
44964
45278
  try {
44965
- const { deliverOutboundPayloads } = await import("./deliver-CeNdvQJ3.js").then((n) => n.n);
45279
+ const { deliverOutboundPayloads } = await import("./deliver-DaRQn5Ai.js").then((n) => n.n);
44966
45280
  await deliverOutboundPayloads({
44967
45281
  cfg: params.cfg,
44968
45282
  channel,
@@ -48416,7 +48730,7 @@ async function describeStickerImage(params) {
48416
48730
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
48417
48731
  try {
48418
48732
  const buffer = await fs$1.readFile(imagePath);
48419
- const { describeImageWithModel } = await import("./image-Cp6qRPZ2.js").then((n) => n.n);
48733
+ const { describeImageWithModel } = await import("./image-dYtWZNKT.js").then((n) => n.n);
48420
48734
  return (await describeImageWithModel({
48421
48735
  buffer,
48422
48736
  fileName: "sticker.webp",
@@ -48839,7 +49153,7 @@ function createWhatsAppLoginTool() {
48839
49153
  force: Type.Optional(Type.Boolean())
48840
49154
  }),
48841
49155
  execute: async (_toolCallId, args) => {
48842
- const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-CtELJan3.js");
49156
+ const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-Dq_hs3eJ.js");
48843
49157
  if ((args?.action ?? "start") === "wait") {
48844
49158
  const result = await waitForWebLogin({ timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0 });
48845
49159
  return {
@@ -50215,7 +50529,7 @@ async function preflightDiscordMessage(params) {
50215
50529
  let preflightTranscript;
50216
50530
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
50217
50531
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
50218
- const { transcribeFirstAudio } = await import("./audio-preflight-SaT5IcVn.js");
50532
+ const { transcribeFirstAudio } = await import("./audio-preflight-By0dnw-T.js");
50219
50533
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
50220
50534
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
50221
50535
  ctx: {
@@ -53998,27 +54312,27 @@ function isVoiceChannelType(type) {
53998
54312
  function createDefaultDeps() {
53999
54313
  return {
54000
54314
  sendMessageWhatsApp: async (...args) => {
54001
- const { sendMessageWhatsApp } = await import("./web-s9NWpUYH.js");
54315
+ const { sendMessageWhatsApp } = await import("./web-DCTvbYTy.js");
54002
54316
  return await sendMessageWhatsApp(...args);
54003
54317
  },
54004
54318
  sendMessageTelegram: async (...args) => {
54005
- const { sendMessageTelegram } = await import("./send-Bi8XhwOZ.js").then((n) => n.l);
54319
+ const { sendMessageTelegram } = await import("./send-Cxr6CgGf.js").then((n) => n.l);
54006
54320
  return await sendMessageTelegram(...args);
54007
54321
  },
54008
54322
  sendMessageDiscord: async (...args) => {
54009
- const { sendMessageDiscord } = await import("./send-CcD9S5so.js").then((n) => n.t);
54323
+ const { sendMessageDiscord } = await import("./send-8Gw3YmOh.js").then((n) => n.t);
54010
54324
  return await sendMessageDiscord(...args);
54011
54325
  },
54012
54326
  sendMessageSlack: async (...args) => {
54013
- const { sendMessageSlack } = await import("./send-CoSPwGiI.js").then((n) => n.n);
54327
+ const { sendMessageSlack } = await import("./send-t_DoGd2Y.js").then((n) => n.n);
54014
54328
  return await sendMessageSlack(...args);
54015
54329
  },
54016
54330
  sendMessageSignal: async (...args) => {
54017
- const { sendMessageSignal } = await import("./send-CSkNKYIc.js").then((n) => n.i);
54331
+ const { sendMessageSignal } = await import("./send-DbJsN7Lj.js").then((n) => n.i);
54018
54332
  return await sendMessageSignal(...args);
54019
54333
  },
54020
54334
  sendMessageIMessage: async (...args) => {
54021
- const { sendMessageIMessage } = await import("./send-CupfdYEg.js").then((n) => n.n);
54335
+ const { sendMessageIMessage } = await import("./send-D4GfXudZ.js").then((n) => n.n);
54022
54336
  return await sendMessageIMessage(...args);
54023
54337
  }
54024
54338
  };
@@ -64873,7 +65187,7 @@ async function registerSlackMonitorSlashCommands(params) {
64873
65187
  });
64874
65188
  const deliverSlashPayloads = async (replies) => {
64875
65189
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
64876
- import("./replies-BxvfG7Oj.js").then((n) => n.r),
65190
+ import("./replies-Dk0cnpHa.js").then((n) => n.r),
64877
65191
  import("./chunk-CBaqrC3-.js").then((n) => n.s),
64878
65192
  import("./markdown-tables-Xw0UrL4I.js").then((n) => n.t)
64879
65193
  ]);
@@ -67146,7 +67460,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
67146
67460
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
67147
67461
  let preflightTranscript;
67148
67462
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
67149
- const { transcribeFirstAudio } = await import("./audio-preflight-SaT5IcVn.js");
67463
+ const { transcribeFirstAudio } = await import("./audio-preflight-By0dnw-T.js");
67150
67464
  preflightTranscript = await transcribeFirstAudio({
67151
67465
  ctx: {
67152
67466
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -69300,23 +69614,23 @@ let webLoginQrPromise = null;
69300
69614
  let webChannelPromise = null;
69301
69615
  let whatsappActionsPromise = null;
69302
69616
  function loadWebOutbound() {
69303
- webOutboundPromise ??= import("./outbound-b9pVFyW7.js").then((n) => n.t);
69617
+ webOutboundPromise ??= import("./outbound-CDuo0JH3.js").then((n) => n.t);
69304
69618
  return webOutboundPromise;
69305
69619
  }
69306
69620
  function loadWebLogin() {
69307
- webLoginPromise ??= import("./login-DKeZ-sOf.js").then((n) => n.n);
69621
+ webLoginPromise ??= import("./login-D4OYfM0U.js").then((n) => n.n);
69308
69622
  return webLoginPromise;
69309
69623
  }
69310
69624
  function loadWebLoginQr() {
69311
- webLoginQrPromise ??= import("./login-qr-CtELJan3.js");
69625
+ webLoginQrPromise ??= import("./login-qr-Dq_hs3eJ.js");
69312
69626
  return webLoginQrPromise;
69313
69627
  }
69314
69628
  function loadWebChannel() {
69315
- webChannelPromise ??= import("./web-s9NWpUYH.js");
69629
+ webChannelPromise ??= import("./web-DCTvbYTy.js");
69316
69630
  return webChannelPromise;
69317
69631
  }
69318
69632
  function loadWhatsAppActions() {
69319
- whatsappActionsPromise ??= import("./whatsapp-actions-Dx8FkbIf.js");
69633
+ whatsappActionsPromise ??= import("./whatsapp-actions-B5o7eFIc.js");
69320
69634
  return whatsappActionsPromise;
69321
69635
  }
69322
69636
  function createPluginRuntime() {
@@ -71770,7 +72084,11 @@ async function compactEmbeddedPiSessionDirect(params) {
71770
72084
  userTimeFormat,
71771
72085
  contextFiles,
71772
72086
  memoryCitationsMode: params.config?.memory?.citations,
71773
- autoLoadInlineSkills: params.config?.skills?.autoLoadInline
72087
+ autoLoadInlineSkills: params.config?.skills?.autoLoadInline,
72088
+ skillsDiscoveryMode: params.config?.skills?.discoveryMode,
72089
+ skillsAnchorList: params.config?.skills?.anchorList,
72090
+ currentUserMessage: void 0,
72091
+ compactMode: params.config?.prompt?.compactMode
71774
72092
  }));
71775
72093
  const sessionLock = await acquireSessionWriteLock({
71776
72094
  sessionFile: params.sessionFile,