squidclaw 3.0.2 → 3.0.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 (388) hide show
  1. package/dist/{accounts-LA308FHj.js → accounts-CK_sHUyT.js} +2 -2
  2. package/dist/{accounts-CL_NXliB.js → accounts-CkF7YwoF.js} +17 -17
  3. package/dist/{accounts-F7tGwezI.js → accounts-DbloMfwT.js} +2 -2
  4. package/dist/{active-listener-DJv1FZqf.js → active-listener-AepfNSUY.js} +2 -2
  5. package/dist/{agents-DdixSPs3.js → agents-JnnOlm2G.js} +5 -5
  6. package/dist/{agents.config-Cn_vTN1v.js → agents.config-BeGeS2jv.js} +1 -1
  7. package/dist/{agents.config-C6KTwnde.js → agents.config-DHJBQ7uA.js} +1 -1
  8. package/dist/{plugin-sdk/api-key-rotation-DE4gr5YM.js → api-key-rotation-BHFJiYbw.js} +2 -2
  9. package/dist/{audio-preflight-AEM744TY.js → audio-preflight-BTYxAJjy.js} +32 -32
  10. package/dist/{audio-preflight-DpCWFB4z.js → audio-preflight-Dkl6Z32z.js} +4 -4
  11. package/dist/{audio-transcription-runner-CItniQDZ.js → audio-transcription-runner-DBkDgluo.js} +12 -12
  12. package/dist/{audio-transcription-runner-B2BdTEps.js → audio-transcription-runner-Gi_h5HEE.js} +1 -1
  13. package/dist/{audit-membership-runtime-w23FnNAN.js → audit-membership-runtime-DyLj-uhz.js} +4 -4
  14. package/dist/{auth-choice-7WVhiM9J.js → auth-choice-DQbCl-4F.js} +2 -2
  15. package/dist/{auth-choice-17U1cGPH.js → auth-choice-xwYK6txn.js} +2 -2
  16. package/dist/{banner-CJTrU-HC.js → banner-BxibaqUz.js} +1 -1
  17. package/dist/build-info.json +3 -3
  18. package/dist/bundled/boot-md/handler.js +51 -51
  19. package/dist/bundled/bootstrap-extra-files/handler.js +6 -6
  20. package/dist/bundled/command-logger/handler.js +2 -2
  21. package/dist/bundled/session-memory/handler.js +51 -51
  22. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  23. package/dist/{channel-activity-DPrXawu4.js → channel-activity-C5kTj83_.js} +3 -3
  24. package/dist/{channel-options-x47KAgAV.js → channel-options-BKsCYdHu.js} +1 -1
  25. package/dist/{channel-options-BM7IEY5X.js → channel-options-FdCN4cFo.js} +1 -1
  26. package/dist/{channel-web-B48pVgke.js → channel-web-BFUPrpIe.js} +1 -1
  27. package/dist/{channel-web-HM1q5FP_.js → channel-web-BkYtM8H5.js} +1 -1
  28. package/dist/{channels-cli-iPiD6449.js → channels-cli-BxhfVD-R.js} +7 -7
  29. package/dist/{channels-cli-y66ZCzYf.js → channels-cli-CZzGaGvG.js} +7 -7
  30. package/dist/{chrome-BQDCalPp.js → chrome-CAd6FQEn.js} +8 -8
  31. package/dist/{chrome-BFfAGQtd.js → chrome-pBkBuWci.js} +26 -26
  32. package/dist/cli/daemon-cli.js +1 -1
  33. package/dist/{cli-C-neGkM4.js → cli-GSev2Q95.js} +2 -2
  34. package/dist/{cli-BzpBs_KI.js → cli-bXiYaLre.js} +2 -2
  35. package/dist/{command-registry-BL80-JCV.js → command-registry-CvgCFxfY.js} +9 -9
  36. package/dist/{commands-registry-C2t2bcZ6.js → commands-registry-D6ZOTo1C.js} +4 -4
  37. package/dist/{completion-cli-CJ_L_gYr.js → completion-cli-BGM1V6EN.js} +2 -2
  38. package/dist/{completion-cli-Bi2s1mq8.js → completion-cli-OrgUDc2S.js} +1 -1
  39. package/dist/{config-cli-FhKX7MOY.js → config-cli-DbBvjvpS.js} +1 -1
  40. package/dist/{config-cli-BVpzzhoY.js → config-cli-uIP4r17f.js} +1 -1
  41. package/dist/{configure-ChiLGQo6.js → configure-BGvoAfbs.js} +6 -6
  42. package/dist/{configure-t9fm4x9H.js → configure-BOsTXjBw.js} +6 -6
  43. package/dist/{daemon-cli-DK8fQgAw.js → daemon-cli-CNi-QjEX.js} +1 -1
  44. package/dist/{daemon-cli-CO09shIt.js → daemon-cli-DN2TnjHQ.js} +1 -1
  45. package/dist/{deliver-aL8yOYS1.js → deliver-BJuiq0GS.js} +1 -1
  46. package/dist/{deliver-neVJ7AU9.js → deliver-DBXe-ZmL.js} +21 -21
  47. package/dist/{deliver-runtime-ChVR6sR3.js → deliver-runtime-DHKcNQzq.js} +3 -3
  48. package/dist/deliver-runtime-GlnBJNCj.js +36 -0
  49. package/dist/deps-send-discord.runtime-BRE0s2nz.js +26 -0
  50. package/dist/deps-send-imessage.runtime-DbIRBnmD.js +25 -0
  51. package/dist/deps-send-signal.runtime-B4h6X3o4.js +24 -0
  52. package/dist/deps-send-slack.runtime-BWXOnOxS.js +22 -0
  53. package/dist/deps-send-telegram.runtime-YvauJtgv.js +27 -0
  54. package/dist/{deps-send-whatsapp.runtime-WND2o1Mr.js → deps-send-whatsapp.runtime-BcxCalPD.js} +4 -4
  55. package/dist/deps-send-whatsapp.runtime-CslTuV47.js +60 -0
  56. package/dist/{deps-send-whatsapp.runtime-CZj97m5A.js → deps-send-whatsapp.runtime-DdxKewuy.js} +7 -7
  57. package/dist/{deps-send-whatsapp.runtime-DSbrPzxG.js → deps-send-whatsapp.runtime-Dl4ro-Df.js} +4 -4
  58. package/dist/{diagnostic-DoguEiWW.js → diagnostic-ySwZga6c.js} +2 -2
  59. package/dist/{doctor-completion-CKaQEebJ.js → doctor-completion-42wcUATu.js} +1 -1
  60. package/dist/{doctor-completion-Ctqsu6Y2.js → doctor-completion-D6RGDBD5.js} +1 -1
  61. package/dist/entry.js +2 -2
  62. package/dist/{plugin-sdk/errors-9oVz7reJ.js → errors-kkRuS2Cs.js} +1 -1
  63. package/dist/extensionAPI.js +6 -6
  64. package/dist/{fetch-DdiB5_OX.js → fetch-BLS7EMnx.js} +5 -5
  65. package/dist/{fetch-guard-CEV5qBHc.js → fetch-guard-D0fXNJls.js} +2 -2
  66. package/dist/{frontmatter-CjKtFduT.js → frontmatter-Cq1TcIQ2.js} +3 -3
  67. package/dist/{fs-safe-CwHbZdFH.js → fs-safe-BoB4X3GD.js} +4 -4
  68. package/dist/{gateway-cli-CSIyrhFg.js → gateway-cli-BbPfLLT6.js} +10 -10
  69. package/dist/{gateway-cli-xX1CTw9n.js → gateway-cli-CG3mshpO.js} +10 -10
  70. package/dist/{github-copilot-token-Cw3tAXM9.js → github-copilot-token-B5cPlwaz.js} +7 -7
  71. package/dist/{health-D9Pie2kF.js → health-CJgEuWuG.js} +1 -1
  72. package/dist/{health-D7mPTab_.js → health-dZqyhpdR.js} +1 -1
  73. package/dist/{hooks-cli-C6aI9HU7.js → hooks-cli-BD4Ww1dF.js} +3 -3
  74. package/dist/{hooks-cli-_1zdKcZA.js → hooks-cli-C0wWJOBW.js} +3 -3
  75. package/dist/{image-ecaECpjT.js → image-j_UomzVG.js} +6 -6
  76. package/dist/{image-ops-bdrMTILs.js → image-ops-CdgypS_g.js} +2 -2
  77. package/dist/image-runtime-BNh3IfMj.js +29 -0
  78. package/dist/{image-runtime-poRypm-b.js → image-runtime-SUtf9jqh.js} +3 -3
  79. package/dist/{image-DKZCmkET.js → image-sRW3RpTY.js} +1 -1
  80. package/dist/index.js +7 -7
  81. package/dist/{ir-D_GD01cg.js → ir-BvisJWXv.js} +8 -8
  82. package/dist/{legacy-names-B0wgIP0Q.js → legacy-names-aGJJuzM_.js} +1 -1
  83. package/dist/llm-slug-generator.js +51 -51
  84. package/dist/{logger-oGKcCLZ5.js → logger-CnTSBL7T.js} +7 -7
  85. package/dist/{login-gJWPqN66.js → login-BMeLPUiO.js} +5 -5
  86. package/dist/{login-qr-CgmlF7zK.js → login-qr-B2B67qqQ.js} +10 -10
  87. package/dist/{manager-CD69uguS.js → manager-DdxMYEDd.js} +13 -13
  88. package/dist/manager-runtime-BMygJEz3.js +18 -0
  89. package/dist/{model-selection-DMjtmGZP.js → model-selection-ag9BmVct.js} +43 -43
  90. package/dist/{models-BviRe-_7.js → models-BXT0s4KJ.js} +3 -3
  91. package/dist/{models-cli-BM5yo_mo.js → models-cli-BtLc9uPC.js} +3 -3
  92. package/dist/{models-cli-pvYVl1i-.js → models-cli-BwPFxWK2.js} +4 -4
  93. package/dist/{npm-resolution-DMM9Hopy.js → npm-resolution-DWpNPsBF.js} +1 -1
  94. package/dist/{npm-resolution-BTFMooVS.js → npm-resolution-Djbuzx6o.js} +1 -1
  95. package/dist/{onboard-DVuhj8ub.js → onboard-1KfKwvMR.js} +3 -3
  96. package/dist/{onboard-DTsgFKIa.js → onboard-ChxvwUze.js} +3 -3
  97. package/dist/{onboard-channels-W9UHiBQg.js → onboard-channels-CHrtFmhi.js} +2 -2
  98. package/dist/{onboard-channels-B1D9LqV_.js → onboard-channels-CXjnFvP1.js} +2 -2
  99. package/dist/{onboard-helpers-DVaF21TE.js → onboard-helpers-Bvpkyuwm.js} +6 -6
  100. package/dist/{onboard-helpers-PRhg7ZY5.js → onboard-helpers-ByttGRIZ.js} +6 -6
  101. package/dist/{onboard-remote-h-aHSDJ1.js → onboard-remote-Cfx2v9OI.js} +1 -1
  102. package/dist/{onboard-remote-DkIrV4Hx.js → onboard-remote-DxBaaS6o.js} +1 -1
  103. package/dist/{onboard-skills-fFSuiv21.js → onboard-skills-B7pHg1lN.js} +1 -1
  104. package/dist/{onboard-skills-fgrVmjJP.js → onboard-skills-PCnCZ6Od.js} +1 -1
  105. package/dist/{onboarding-D1nCnc_t.js → onboarding-D6kMb3yv.js} +7 -7
  106. package/dist/{onboarding-CYWs766P.js → onboarding-DuUMPrqA.js} +7 -7
  107. package/dist/{onboarding.finalize-Bcan6_vA.js → onboarding.finalize-KTOhO1-l.js} +7 -7
  108. package/dist/{onboarding.finalize-bAiXf9D6.js → onboarding.finalize-bphDUwZy.js} +6 -6
  109. package/dist/{onboarding.gateway-config-61E9xXYF.js → onboarding.gateway-config-DDdX0W74.js} +1 -1
  110. package/dist/{onboarding.gateway-config-Dyaqc_M7.js → onboarding.gateway-config-DNUJ0seU.js} +1 -1
  111. package/dist/{outbound-Cboz5UyH.js → outbound-DHDBvGLA.js} +6 -6
  112. package/dist/{outbound-attachment-PwEbEhAL.js → outbound-attachment-CqXiWbKN.js} +2 -2
  113. package/dist/{path-alias-guards-Cpsiv2KL.js → path-alias-guards-DORgbZ1w.js} +1 -1
  114. package/dist/{paths-CSdAWKDO.js → paths-DA5srn0U.js} +5 -5
  115. package/dist/{paths-CXClY8zC.js → paths-DSd911Oe.js} +4 -4
  116. package/dist/{pi-embedded-MktS4l8v.js → pi-embedded-BGz_qdCc.js} +24 -24
  117. package/dist/{pi-embedded-CkTlmTq8.js → pi-embedded-BP2UlUm_.js} +171 -171
  118. package/dist/{pi-embedded-helpers-DYWYzEOC.js → pi-embedded-helpers-BruaFB5l.js} +3 -3
  119. package/dist/{pi-embedded-helpers-Bfm_CvEb.js → pi-embedded-helpers-CmLnmKlb.js} +52 -52
  120. package/dist/{pi-model-discovery-DEps5Exd.js → pi-model-discovery-DAzuqPoG.js} +7 -7
  121. package/dist/pi-model-discovery-runtime-Dpu7Jm2L.js +11 -0
  122. package/dist/{pi-tools.before-tool-call.runtime-4wPdP7Br.js → pi-tools.before-tool-call.runtime-2Sp1jmlg.js} +9 -9
  123. package/dist/{plugin-registry-CvMvSI8O.js → plugin-registry-CLEhrKYA.js} +1 -1
  124. package/dist/{plugin-registry-DL2ClHLQ.js → plugin-registry-DtuxmgWx.js} +1 -1
  125. package/dist/plugin-sdk/{accounts-kr-Gz1hk.js → accounts-DghIDNk2.js} +2 -2
  126. package/dist/plugin-sdk/{accounts-CxUSDHsT.js → accounts-YTdQYQFr.js} +3 -3
  127. package/dist/plugin-sdk/{accounts-PSzw-z3S.js → accounts-h__dTrLK.js} +2 -2
  128. package/dist/plugin-sdk/{active-listener-BQNrTcR3.js → active-listener-_PRYjtJv.js} +2 -2
  129. package/dist/plugin-sdk/{api-key-rotation-Bhck7wki.js → api-key-rotation-mVDSAkKQ.js} +2 -2
  130. package/dist/plugin-sdk/{audio-preflight-_xgGaeho.js → audio-preflight-BZlQM-qX.js} +26 -26
  131. package/dist/plugin-sdk/{audio-transcription-runner-Dwc0Eh-B.js → audio-transcription-runner-CrYTX8py.js} +11 -11
  132. package/dist/plugin-sdk/{audit-membership-runtime-DHQDvH4u.js → audit-membership-runtime-Xl20kCBe.js} +2 -2
  133. package/dist/plugin-sdk/{channel-activity-XajEg_DL.js → channel-activity-gwxRn4wF.js} +3 -3
  134. package/dist/plugin-sdk/{channel-web-KtqCp4mz.js → channel-web-1WF-Nabe.js} +18 -18
  135. package/dist/plugin-sdk/{chrome-diV5m81I.js → chrome-BXbYwXRH.js} +6 -6
  136. package/dist/plugin-sdk/{commands-registry-DwZAJuut.js → commands-registry-0w-aZenK.js} +4 -4
  137. package/dist/plugin-sdk/{common-CqnO92P8.js → common-DBOCt6Yv.js} +2 -2
  138. package/dist/plugin-sdk/{config-DYbtdrsT.js → config-pRtEoVyZ.js} +7 -7
  139. package/dist/plugin-sdk/{deliver-DG_7Uagn.js → deliver-FjlJrtZk.js} +10 -10
  140. package/dist/plugin-sdk/deliver-runtime-DEzvpBW1.js +32 -0
  141. package/dist/plugin-sdk/deps-send-discord.runtime-Bhusa_Hi.js +23 -0
  142. package/dist/plugin-sdk/deps-send-imessage.runtime-bmakPm5f.js +22 -0
  143. package/dist/plugin-sdk/deps-send-signal.runtime-n00sfFto.js +21 -0
  144. package/dist/plugin-sdk/deps-send-slack.runtime-BvM3Z-Mr.js +19 -0
  145. package/dist/plugin-sdk/deps-send-telegram.runtime-CPuMkcmo.js +24 -0
  146. package/dist/plugin-sdk/deps-send-whatsapp.runtime-BzO6S-KX.js +57 -0
  147. package/dist/plugin-sdk/{diagnostic-CT7v_kM2.js → diagnostic-Dt2i3afe.js} +2 -2
  148. package/dist/plugin-sdk/{errors-B8oJXuCF.js → errors-CgRPdp3o.js} +1 -1
  149. package/dist/plugin-sdk/{fetch-guard-Or5BCq0E.js → fetch-guard-DyPZh8r2.js} +2 -2
  150. package/dist/plugin-sdk/{fs-safe-DFbwq9CS.js → fs-safe-DqCO1D4C.js} +3 -3
  151. package/dist/plugin-sdk/{image-rycGCqJO.js → image-CQ9TZ9vq.js} +6 -6
  152. package/dist/plugin-sdk/{image-ops-CMsocOob.js → image-ops-sw0uZ0GN.js} +2 -2
  153. package/dist/plugin-sdk/image-runtime-17_mTqsy.js +25 -0
  154. package/dist/plugin-sdk/index.js +50 -50
  155. package/dist/plugin-sdk/{ir-DihI2SIz.js → ir-BVZ5kUMb.js} +7 -7
  156. package/dist/plugin-sdk/{local-roots-1xVosTZ4.js → local-roots-fO3ZgW3G.js} +4 -4
  157. package/dist/plugin-sdk/{logger-Bg4vIUJn.js → logger-DIb2cGHp.js} +2 -2
  158. package/dist/plugin-sdk/{login-YhFrVUWo.js → login-Dg5cxB_3.js} +4 -4
  159. package/dist/plugin-sdk/{login-qr-SpUTuwYv.js → login-qr-C3Vn30cq.js} +5 -5
  160. package/dist/plugin-sdk/{manager-DrzOPeMD.js → manager-BR-TwWTH.js} +8 -8
  161. package/dist/plugin-sdk/manager-runtime-CvI9wF8N.js +15 -0
  162. package/dist/plugin-sdk/{outbound-Cc4cUn9K.js → outbound-1a3Z_QJ2.js} +5 -5
  163. package/dist/plugin-sdk/{outbound-attachment-Dtp3hQgc.js → outbound-attachment-BTQjD4YE.js} +2 -2
  164. package/dist/plugin-sdk/{path-alias-guards-DA0MhfkG.js → path-alias-guards-TnxupPQC.js} +1 -1
  165. package/dist/plugin-sdk/{paths-CP67O8eN.js → paths-B7_75Pdr.js} +1 -1
  166. package/dist/plugin-sdk/{pi-embedded-helpers-BDJ_4Plh.js → pi-embedded-helpers-DZRNadD8.js} +16 -16
  167. package/dist/plugin-sdk/{pi-model-discovery-Mk0GTDJl.js → pi-model-discovery-DGh6xekX.js} +1 -1
  168. package/dist/plugin-sdk/pi-model-discovery-runtime-DjjBdPYt.js +8 -0
  169. package/dist/plugin-sdk/{pi-tools.before-tool-call.runtime-DV72wTDb.js → pi-tools.before-tool-call.runtime-BZ9XgG_x.js} +4 -4
  170. package/dist/plugin-sdk/{plugins-DSs2-fnK.js → plugins-B8pWVYug.js} +4 -4
  171. package/dist/plugin-sdk/{proxy-env-Ib4-LUh-.js → proxy-env-BOlkiW1-.js} +1 -1
  172. package/dist/plugin-sdk/{proxy-fetch-ZPEvp58f.js → proxy-fetch-Dt5BedH8.js} +1 -1
  173. package/dist/plugin-sdk/{pw-ai-DIx2wpkY.js → pw-ai-C17A1o4w.js} +9 -9
  174. package/dist/plugin-sdk/{qmd-manager-Ov9ElEfG.js → qmd-manager-Bei6TaFq.js} +7 -7
  175. package/dist/plugin-sdk/{query-expansion-CzjwW461.js → query-expansion-POz2za8a.js} +4 -4
  176. package/dist/plugin-sdk/{redact-BoNEjbpF.js → redact-9WsNyb7S.js} +1 -1
  177. package/dist/plugin-sdk/{reply-CWWUd_JS.js → reply-BFbijn6_.js} +73 -73
  178. package/dist/plugin-sdk/{resolve-outbound-target-BOkvxZtM.js → resolve-outbound-target-B9iFEh0y.js} +2 -2
  179. package/dist/plugin-sdk/{run-with-concurrency-kVooFCVo.js → run-with-concurrency-DmTrN5JG.js} +1 -1
  180. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-DzhkSmLi.js +10 -0
  181. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-DyILWezU.js +19 -0
  182. package/dist/plugin-sdk/{send-BP1fSEBR.js → send-BGZo6HW1.js} +5 -5
  183. package/dist/plugin-sdk/{send-D9CSOGul.js → send-BisREGBZ.js} +6 -6
  184. package/dist/plugin-sdk/{send-BeLBlAsQ.js → send-BqkUDZed.js} +13 -13
  185. package/dist/plugin-sdk/{send-DLKxJJYV.js → send-D6_nNvi0.js} +8 -8
  186. package/dist/plugin-sdk/{send-XZ6IXCtL.js → send-Dj7XEcZN.js} +7 -7
  187. package/dist/plugin-sdk/{session-DtLUYWvY.js → session-D4KDs7Hq.js} +3 -3
  188. package/dist/plugin-sdk/{skill-commands-Bv7EZypt.js → skill-commands-D_xeseiI.js} +4 -4
  189. package/dist/plugin-sdk/{skills-BzXN4uev.js → skills-Bs2b3JfV.js} +6 -6
  190. package/dist/plugin-sdk/slash-commands.runtime-CUb5sqqf.js +13 -0
  191. package/dist/plugin-sdk/slash-dispatch.runtime-DCB6bGjB.js +52 -0
  192. package/dist/plugin-sdk/slash-skill-commands.runtime-BqEweE4K.js +16 -0
  193. package/dist/plugin-sdk/{store-DnJhFFW5.js → store-B7ESm9_L.js} +2 -2
  194. package/dist/plugin-sdk/subagent-registry-runtime-CCUW4SbM.js +52 -0
  195. package/dist/plugin-sdk/{tables-CpmqssLF.js → tables-1vhBJPK_.js} +1 -1
  196. package/dist/plugin-sdk/{thinking-1UCPuD9d.js → thinking-DjaClmzi.js} +7 -7
  197. package/dist/plugin-sdk/{tokens-DAL_5WHL.js → tokens-CLE20fRI.js} +1 -1
  198. package/dist/plugin-sdk/{tool-images-RX4QTMnt.js → tool-images-B95xcwiR.js} +2 -2
  199. package/dist/plugin-sdk/web-DeRmHQ4_.js +56 -0
  200. package/dist/plugin-sdk/{whatsapp-actions-BF6ih4Gi.js → whatsapp-actions-BYpcWkTN.js} +17 -17
  201. package/dist/plugin-sdk/whatsapp.js +50 -50
  202. package/dist/{plugins-CmdmAU0K.js → plugins-DXkm70nK.js} +11 -11
  203. package/dist/{plugins-cli-DBtLtIsQ.js → plugins-cli-Cs3UUJew.js} +3 -3
  204. package/dist/{plugins-cli-BMPvpwSo.js → plugins-cli-KPz6APX0.js} +3 -3
  205. package/dist/{program-context-KSeqVkRM.js → program-context-J_FyEsaS.js} +18 -18
  206. package/dist/{program-C6sTShRB.js → program-xNEHPhT8.js} +8 -8
  207. package/dist/{prompt-select-styled-Ba5fC0g1.js → prompt-select-styled-B1LjjgQ0.js} +5 -5
  208. package/dist/{prompt-select-styled-DFhJPiqx.js → prompt-select-styled-BRiogP_P.js} +5 -5
  209. package/dist/{provider-auth-helpers-S2rdI85T.js → provider-auth-helpers-CxUWqt95.js} +1 -1
  210. package/dist/{provider-auth-helpers-BPvZ8xkJ.js → provider-auth-helpers-hhFVhZdv.js} +1 -1
  211. package/dist/{proxy-env-QUJz9VEJ.js → proxy-env-D75CWSOo.js} +1 -1
  212. package/dist/{proxy-fetch-C2v-Utgg.js → proxy-fetch-lH6RsRTE.js} +1 -1
  213. package/dist/{push-apns-BQEPMPtG.js → push-apns-BBkpZyNR.js} +1 -1
  214. package/dist/{push-apns-CGibQhps.js → push-apns-BQjV_93G.js} +1 -1
  215. package/dist/{pw-ai-SYjuzbV6.js → pw-ai-7kHgUGj0.js} +14 -14
  216. package/dist/{pw-ai-zFPBSxaL.js → pw-ai-BmGrTicP.js} +1 -1
  217. package/dist/{qmd-manager-CO-shcLU.js → qmd-manager-BN0siR2Z.js} +10 -10
  218. package/dist/{query-expansion-DlQOkf-g.js → query-expansion-Dzxt6kXo.js} +6 -6
  219. package/dist/{redact-NmPEVjIo.js → redact-DvzicBMu.js} +1 -1
  220. package/dist/{register.agent-DP_2xCaO.js → register.agent-DYq06QHS.js} +8 -8
  221. package/dist/{register.agent-BwhWwpRX.js → register.agent-reU63wQ5.js} +7 -7
  222. package/dist/{register.configure-D8TE-yQn.js → register.configure-C4p9ad2q.js} +10 -10
  223. package/dist/{register.configure-C5i661J4.js → register.configure-DezZ4Q1p.js} +10 -10
  224. package/dist/{register.maintenance-BS2i3S5V.js → register.maintenance-CTvFmkAm.js} +9 -9
  225. package/dist/{register.maintenance-BA4UOg2_.js → register.maintenance-CzMKTC2a.js} +8 -8
  226. package/dist/{register.message-oFI2Mzrd.js → register.message-BmsovYS6.js} +3 -3
  227. package/dist/{register.message-D9hVI5b6.js → register.message-Bp4SDXWk.js} +3 -3
  228. package/dist/{register.onboard-D6wqijOl.js → register.onboard-C39xhpv1.js} +3 -3
  229. package/dist/{register.onboard-OaKr3SnU.js → register.onboard-DZt2kSAg.js} +3 -3
  230. package/dist/{register.setup-DsK_7zih.js → register.setup-04L_8wfA.js} +3 -3
  231. package/dist/{register.setup-Dygx-glo.js → register.setup-DWctFmOd.js} +3 -3
  232. package/dist/{register.status-health-sessions-C6VfEhho.js → register.status-health-sessions-CBPZoj51.js} +4 -4
  233. package/dist/{register.status-health-sessions-BmWcbWPR.js → register.status-health-sessions-N6SFc-UY.js} +4 -4
  234. package/dist/{register.subclis-CLf32krW.js → register.subclis-C3TphbCF.js} +10 -10
  235. package/dist/{reply-ZWkzBiSb.js → reply-CB1p166g.js} +5 -5
  236. package/dist/{run-main-asKkGUqy.js → run-main-7tknx04F.js} +15 -15
  237. package/dist/{run-with-concurrency-FczpX8ng.js → run-with-concurrency-BFR3ReeF.js} +4 -4
  238. package/dist/runtime-whatsapp-login.runtime-DSR-m0FW.js +13 -0
  239. package/dist/runtime-whatsapp-outbound.runtime-Blywd_bv.js +22 -0
  240. package/dist/{send-oS3t6gE6.js → send-C98RfcAb.js} +5 -5
  241. package/dist/{send-DX_O1OHH.js → send-Co5Bqwuo.js} +6 -6
  242. package/dist/{send-BNsV-D2Y.js → send-DjL7KlMV.js} +8 -8
  243. package/dist/{send-C-jb8X9I.js → send-Do7hKDL9.js} +7 -7
  244. package/dist/{send-D-Rnbdzz.js → send-bW7jDv8D.js} +26 -26
  245. package/dist/{server-node-events-DV2yeAp-.js → server-node-events-Ctjzvlem.js} +3 -3
  246. package/dist/{server-node-events-BHv7a_ll.js → server-node-events-DrCKK0J4.js} +3 -3
  247. package/dist/{session-DRyURckG.js → session-QSn69XeJ.js} +8 -8
  248. package/dist/{skill-commands-BrlAf_CG.js → skill-commands-Bi_jchJn.js} +9 -9
  249. package/dist/{skills-DWrRJwa-.js → skills-CTV78w4q.js} +22 -22
  250. package/dist/slash-commands.runtime-63MUmCBt.js +16 -0
  251. package/dist/{slash-dispatch.runtime-DkcAYuyK.js → slash-dispatch.runtime-BL3qA1O3.js} +6 -6
  252. package/dist/{slash-dispatch.runtime-BJOuQOeN.js → slash-dispatch.runtime-DRGqAgwa.js} +2 -2
  253. package/dist/slash-dispatch.runtime-Dh2L_3Tg.js +56 -0
  254. package/dist/{slash-dispatch.runtime-CEAbkOCI.js → slash-dispatch.runtime-uqWhoI6q.js} +2 -2
  255. package/dist/slash-skill-commands.runtime-B3MSSAQ-.js +20 -0
  256. package/dist/{status-Ck8-aQIF.js → status-BkfSGlOi.js} +3 -3
  257. package/dist/{status-CMhW6nGs.js → status-DdW571-j.js} +3 -3
  258. package/dist/{store-BFNH5fXG.js → store-B89Hj8Ub.js} +2 -2
  259. package/dist/{subagent-registry-DQpeidFk.js → subagent-registry-DGrfQVN3.js} +5 -5
  260. package/dist/subagent-registry-runtime-BRNDawlJ.js +56 -0
  261. package/dist/{subagent-registry-runtime-C-jjppV6.js → subagent-registry-runtime-DatTO2LD.js} +2 -2
  262. package/dist/{subagent-registry-runtime-tRRyFZL8.js → subagent-registry-runtime-Dsrz3yIh.js} +2 -2
  263. package/dist/{subagent-registry-runtime-BlRAnw80.js → subagent-registry-runtime-MtjBCcgn.js} +6 -6
  264. package/dist/{subsystem-BaLYRf7D.js → subsystem-6v7sWnAD.js} +14 -14
  265. package/dist/{tables-CnlmCLb3.js → tables-DGHzaXQz.js} +1 -1
  266. package/dist/{target-errors-Df1wB-I7.js → target-errors-CweAa7L9.js} +2 -2
  267. package/dist/{thinking-CTpcVnlx.js → thinking-SdNGqtJE.js} +7 -7
  268. package/dist/{tokens-D2XhLqIz.js → tokens-DfbMVF9y.js} +1 -1
  269. package/dist/{tool-images-CElPu2en.js → tool-images-8BKrL7Bn.js} +2 -2
  270. package/dist/{update-cli-5KzuA6pa.js → update-cli-0UiUaT3q.js} +10 -10
  271. package/dist/{update-cli-CEghYBNP.js → update-cli-C-uyQcFS.js} +9 -9
  272. package/dist/{update-runner-C5XgCwj2.js → update-runner-CT9YRLtn.js} +1 -1
  273. package/dist/{update-runner-C0q8aGFd.js → update-runner-CqVLeGYA.js} +1 -1
  274. package/dist/{web-DBm_uXOl.js → web-B2qXyOb9.js} +3 -3
  275. package/dist/{web-DdrUn13G.js → web-B7kbCskR.js} +55 -55
  276. package/dist/{web-DddJa7ZT.js → web-D1ZoRVB0.js} +6 -6
  277. package/dist/{web-O2WkG3cH.js → web-FqoNMI-k.js} +3 -3
  278. package/dist/{whatsapp-actions-DPszRJ8b.js → whatsapp-actions-BDkbnZVH.js} +21 -21
  279. package/dist/{workspace-TqfVSQuO.js → workspace-kVMIaBrV.js} +20 -20
  280. package/package.json +1 -1
  281. package/dist/api-key-rotation-Dzvqp3Dc.js +0 -181
  282. package/dist/deliver-runtime-BdUlqV9E.js +0 -36
  283. package/dist/deps-send-discord.runtime-R8jUd_2I.js +0 -26
  284. package/dist/deps-send-imessage.runtime-Die0aWtU.js +0 -25
  285. package/dist/deps-send-signal.runtime-Biux_4v4.js +0 -24
  286. package/dist/deps-send-slack.runtime-CkUST2Ky.js +0 -22
  287. package/dist/deps-send-telegram.runtime-CIN5ILBe.js +0 -27
  288. package/dist/deps-send-whatsapp.runtime-DUff9bWS.js +0 -60
  289. package/dist/errors-DfgAh2Ml.js +0 -54
  290. package/dist/image-runtime-irHu11-U.js +0 -29
  291. package/dist/manager-runtime-BISxj7HK.js +0 -18
  292. package/dist/pi-model-discovery-runtime-bzJViQLK.js +0 -11
  293. package/dist/plugin-sdk/accounts-BNuRM3rG.js +0 -288
  294. package/dist/plugin-sdk/accounts-CGTYP7Rh.js +0 -46
  295. package/dist/plugin-sdk/accounts-CcS9IAhD.js +0 -35
  296. package/dist/plugin-sdk/active-listener-CTsLn1AX.js +0 -50
  297. package/dist/plugin-sdk/audio-preflight-CRGLqp-g.js +0 -69
  298. package/dist/plugin-sdk/audio-transcription-runner-RXsskMMk.js +0 -2176
  299. package/dist/plugin-sdk/audit-membership-runtime-B9b-zRwg.js +0 -58
  300. package/dist/plugin-sdk/channel-activity-gPvD1D7S.js +0 -94
  301. package/dist/plugin-sdk/channel-web-LGl1zPJt.js +0 -2256
  302. package/dist/plugin-sdk/chrome-9Y_LcUg1.js +0 -2415
  303. package/dist/plugin-sdk/commands-registry-CcdEPxVg.js +0 -1125
  304. package/dist/plugin-sdk/config-CrQ5bCrw.js +0 -17912
  305. package/dist/plugin-sdk/deliver-D3xr5AkB.js +0 -1694
  306. package/dist/plugin-sdk/deliver-runtime-B79ZQu69.js +0 -32
  307. package/dist/plugin-sdk/deliver-runtime-BdTC7uKE.js +0 -32
  308. package/dist/plugin-sdk/deps-send-discord.runtime-BOQZIqC8.js +0 -23
  309. package/dist/plugin-sdk/deps-send-discord.runtime-CObCNMt3.js +0 -23
  310. package/dist/plugin-sdk/deps-send-imessage.runtime-CuHOc9Ka.js +0 -22
  311. package/dist/plugin-sdk/deps-send-imessage.runtime-DlWgi2DH.js +0 -22
  312. package/dist/plugin-sdk/deps-send-signal.runtime-Cz7FT8J8.js +0 -21
  313. package/dist/plugin-sdk/deps-send-signal.runtime-iPynghkE.js +0 -21
  314. package/dist/plugin-sdk/deps-send-slack.runtime-D4vDoRsg.js +0 -19
  315. package/dist/plugin-sdk/deps-send-slack.runtime-DNTbE5jS.js +0 -19
  316. package/dist/plugin-sdk/deps-send-telegram.runtime-7CR-xtCF.js +0 -24
  317. package/dist/plugin-sdk/deps-send-telegram.runtime-DjTVED_m.js +0 -24
  318. package/dist/plugin-sdk/deps-send-whatsapp.runtime-CRWOIKRC.js +0 -57
  319. package/dist/plugin-sdk/deps-send-whatsapp.runtime-bUi8kghi.js +0 -57
  320. package/dist/plugin-sdk/diagnostic-BXkLYs_9.js +0 -319
  321. package/dist/plugin-sdk/fetch-guard-C55uvn27.js +0 -156
  322. package/dist/plugin-sdk/fs-safe-Dqmpk-Fr.js +0 -352
  323. package/dist/plugin-sdk/image-3xW7IJdq.js +0 -2310
  324. package/dist/plugin-sdk/image-ops-BjK2qZZn.js +0 -584
  325. package/dist/plugin-sdk/image-runtime-CZZJJqcW.js +0 -25
  326. package/dist/plugin-sdk/image-runtime-Cjz368oj.js +0 -25
  327. package/dist/plugin-sdk/ir-CS7uuQhN.js +0 -1296
  328. package/dist/plugin-sdk/local-roots-DmOKwiNW.js +0 -186
  329. package/dist/plugin-sdk/logger-DDdrdbDu.js +0 -1163
  330. package/dist/plugin-sdk/login-BSEeU27Y.js +0 -57
  331. package/dist/plugin-sdk/login-qr-BwWJsDSj.js +0 -320
  332. package/dist/plugin-sdk/manager-DiXPCubI.js +0 -3917
  333. package/dist/plugin-sdk/manager-runtime-CF55pBNe.js +0 -15
  334. package/dist/plugin-sdk/manager-runtime-Ct0m9UJC.js +0 -15
  335. package/dist/plugin-sdk/outbound-attachment-BoFx05zw.js +0 -19
  336. package/dist/plugin-sdk/outbound-cpqK1GFe.js +0 -212
  337. package/dist/plugin-sdk/path-alias-guards-gBhrAn14.js +0 -43
  338. package/dist/plugin-sdk/paths-C6W4VHoa.js +0 -166
  339. package/dist/plugin-sdk/pi-embedded-helpers-C-B9B6Sp.js +0 -9627
  340. package/dist/plugin-sdk/pi-model-discovery-BGEeoPzN.js +0 -134
  341. package/dist/plugin-sdk/pi-model-discovery-runtime-BHZ_Htob.js +0 -8
  342. package/dist/plugin-sdk/pi-model-discovery-runtime-BrwtJHPU.js +0 -8
  343. package/dist/plugin-sdk/pi-tools.before-tool-call.runtime-ByN_xThw.js +0 -354
  344. package/dist/plugin-sdk/plugins-D5cdn70e.js +0 -864
  345. package/dist/plugin-sdk/proxy-fetch-Cf3IUSDw.js +0 -38
  346. package/dist/plugin-sdk/pw-ai-C_QOIuin.js +0 -1938
  347. package/dist/plugin-sdk/qmd-manager-6bozlfFg.js +0 -1448
  348. package/dist/plugin-sdk/query-expansion-eeVz_aEm.js +0 -1011
  349. package/dist/plugin-sdk/redact-DfACyt0X.js +0 -319
  350. package/dist/plugin-sdk/reply-CQUX_haM.js +0 -98828
  351. package/dist/plugin-sdk/resolve-outbound-target-Dbz0O8cR.js +0 -40
  352. package/dist/plugin-sdk/run-with-concurrency-5DMu9szx.js +0 -1994
  353. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-DitS0I1z.js +0 -10
  354. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-OthrtsLL.js +0 -10
  355. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-CYCr6A3v.js +0 -19
  356. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-Q2HL0zL3.js +0 -19
  357. package/dist/plugin-sdk/send-BACEu1Un.js +0 -414
  358. package/dist/plugin-sdk/send-BU4OoR7u.js +0 -2587
  359. package/dist/plugin-sdk/send-DbxOJ_BC.js +0 -3135
  360. package/dist/plugin-sdk/send-n932vjT5.js +0 -540
  361. package/dist/plugin-sdk/send-uCPS53j8.js +0 -503
  362. package/dist/plugin-sdk/session-DenDKR_-.js +0 -169
  363. package/dist/plugin-sdk/skill-commands-BK1KDKmS.js +0 -342
  364. package/dist/plugin-sdk/skills-D4am-zkO.js +0 -1428
  365. package/dist/plugin-sdk/slash-commands.runtime-Bx1K1iqP.js +0 -13
  366. package/dist/plugin-sdk/slash-commands.runtime-DWfFqMZw.js +0 -13
  367. package/dist/plugin-sdk/slash-dispatch.runtime-DVn338JI.js +0 -52
  368. package/dist/plugin-sdk/slash-dispatch.runtime-pnWH5AjM.js +0 -52
  369. package/dist/plugin-sdk/slash-skill-commands.runtime-Dbi_YzPO.js +0 -16
  370. package/dist/plugin-sdk/slash-skill-commands.runtime-DxvNWv_E.js +0 -16
  371. package/dist/plugin-sdk/ssrf-2WBi1Tzx.js +0 -202
  372. package/dist/plugin-sdk/store-BKDMuvyn.js +0 -81
  373. package/dist/plugin-sdk/subagent-registry-runtime-FhP0l-Rw.js +0 -52
  374. package/dist/plugin-sdk/subagent-registry-runtime-hH9ADku1.js +0 -52
  375. package/dist/plugin-sdk/tables-CrDYcv_b.js +0 -55
  376. package/dist/plugin-sdk/target-errors-aOwE-MIU.js +0 -195
  377. package/dist/plugin-sdk/thinking-D41FMh9T.js +0 -1206
  378. package/dist/plugin-sdk/tokens-CTIYTLWu.js +0 -52
  379. package/dist/plugin-sdk/tool-images-CWc54lpI.js +0 -274
  380. package/dist/plugin-sdk/web-AtEy-48y.js +0 -56
  381. package/dist/plugin-sdk/web-DjKONHqF.js +0 -56
  382. package/dist/plugin-sdk/whatsapp-actions-DEZcm_CZ.js +0 -80
  383. package/dist/runtime-whatsapp-login.runtime-BqOsE5As.js +0 -13
  384. package/dist/runtime-whatsapp-outbound.runtime-D5S6mxFT.js +0 -22
  385. package/dist/slash-commands.runtime-JqCsKeu2.js +0 -16
  386. package/dist/slash-dispatch.runtime-h9I6EDYB.js +0 -56
  387. package/dist/slash-skill-commands.runtime-C0QZlkpu.js +0 -20
  388. package/dist/subagent-registry-runtime-BxvwRp_3.js +0 -56
@@ -1,1206 +0,0 @@
1
- import { ot as normalizeAccountId } from "./run-with-concurrency-5DMu9szx.js";
2
- import { i as resolveWhatsAppAccount, v as resolveAccountEntry } from "./accounts-BNuRM3rG.js";
3
- import { Dt as requireActivePluginRegistry, vt as CHAT_CHANNEL_ORDER, yt as getChatChannelMeta } from "./config-CrQ5bCrw.js";
4
- import { S as normalizeE164, _ as escapeRegExp } from "./logger-DDdrdbDu.js";
5
- import { C as resolveTelegramAccount, H as resolveDiscordAccount, L as normalizeWhatsAppTarget, M as resolveSlackAccount, N as resolveSlackReplyToMode } from "./plugins-D5cdn70e.js";
6
- import { r as resolveIMessageAccount } from "./accounts-CcS9IAhD.js";
7
- import { i as resolveSignalAccount } from "./accounts-CGTYP7Rh.js";
8
-
9
- //#region src/config/types.tools.ts
10
- const TOOLS_BY_SENDER_KEY_TYPES = [
11
- "id",
12
- "e164",
13
- "username",
14
- "name"
15
- ];
16
- function parseToolsBySenderTypedKey(rawKey) {
17
- const trimmed = rawKey.trim();
18
- if (!trimmed) return;
19
- const lowered = trimmed.toLowerCase();
20
- for (const type of TOOLS_BY_SENDER_KEY_TYPES) {
21
- const prefix = `${type}:`;
22
- if (!lowered.startsWith(prefix)) continue;
23
- return {
24
- type,
25
- value: trimmed.slice(prefix.length)
26
- };
27
- }
28
- }
29
-
30
- //#endregion
31
- //#region src/shared/string-normalization.ts
32
- function normalizeStringEntries(list) {
33
- return (list ?? []).map((entry) => String(entry).trim()).filter(Boolean);
34
- }
35
- function normalizeStringEntriesLower(list) {
36
- return normalizeStringEntries(list).map((entry) => entry.toLowerCase());
37
- }
38
- function normalizeHyphenSlug(raw) {
39
- const trimmed = raw?.trim().toLowerCase() ?? "";
40
- if (!trimmed) return "";
41
- return trimmed.replace(/\s+/g, "-").replace(/[^a-z0-9#@._+-]+/g, "-").replace(/-{2,}/g, "-").replace(/^[-.]+|[-.]+$/g, "");
42
- }
43
- function normalizeAtHashSlug(raw) {
44
- const trimmed = raw?.trim().toLowerCase() ?? "";
45
- if (!trimmed) return "";
46
- return trimmed.replace(/^[@#]+/, "").replace(/[\s_]+/g, "-").replace(/[^a-z0-9-]+/g, "-").replace(/-{2,}/g, "-").replace(/^-+|-+$/g, "");
47
- }
48
-
49
- //#endregion
50
- //#region src/config/group-policy.ts
51
- function resolveChannelGroupConfig(groups, groupId, caseInsensitive = false) {
52
- if (!groups) return;
53
- const direct = groups[groupId];
54
- if (direct) return direct;
55
- if (!caseInsensitive) return;
56
- const target = groupId.toLowerCase();
57
- const matchedKey = Object.keys(groups).find((key) => key !== "*" && key.toLowerCase() === target);
58
- if (!matchedKey) return;
59
- return groups[matchedKey];
60
- }
61
- const warnedLegacyToolsBySenderKeys = /* @__PURE__ */ new Set();
62
- const compiledToolsBySenderCache = /* @__PURE__ */ new WeakMap();
63
- function normalizeSenderKey(value, options = {}) {
64
- const trimmed = value.trim();
65
- if (!trimmed) return "";
66
- return (options.stripLeadingAt && trimmed.startsWith("@") ? trimmed.slice(1) : trimmed).toLowerCase();
67
- }
68
- function normalizeTypedSenderKey(value, type) {
69
- return normalizeSenderKey(value, { stripLeadingAt: type === "username" });
70
- }
71
- function normalizeLegacySenderKey(value) {
72
- return normalizeSenderKey(value, { stripLeadingAt: true });
73
- }
74
- function warnLegacyToolsBySenderKey(rawKey) {
75
- const trimmed = rawKey.trim();
76
- if (!trimmed || warnedLegacyToolsBySenderKeys.has(trimmed)) return;
77
- warnedLegacyToolsBySenderKeys.add(trimmed);
78
- process.emitWarning(`toolsBySender key "${trimmed}" is deprecated. Use explicit prefixes (id:, e164:, username:, name:). Legacy unprefixed keys are matched as id only.`, {
79
- type: "DeprecationWarning",
80
- code: "SQUIDCLAW_TOOLS_BY_SENDER_UNTYPED_KEY"
81
- });
82
- }
83
- function parseSenderPolicyKey(rawKey) {
84
- const trimmed = rawKey.trim();
85
- if (!trimmed) return;
86
- if (trimmed === "*") return { kind: "wildcard" };
87
- const typed = parseToolsBySenderTypedKey(trimmed);
88
- if (typed) {
89
- const key = normalizeTypedSenderKey(typed.value, typed.type);
90
- if (!key) return;
91
- return {
92
- kind: "typed",
93
- type: typed.type,
94
- key
95
- };
96
- }
97
- warnLegacyToolsBySenderKey(trimmed);
98
- const key = normalizeLegacySenderKey(trimmed);
99
- if (!key) return;
100
- return {
101
- kind: "typed",
102
- type: "id",
103
- key
104
- };
105
- }
106
- function createSenderPolicyBuckets() {
107
- return {
108
- id: /* @__PURE__ */ new Map(),
109
- e164: /* @__PURE__ */ new Map(),
110
- username: /* @__PURE__ */ new Map(),
111
- name: /* @__PURE__ */ new Map()
112
- };
113
- }
114
- function compileToolsBySenderPolicy(toolsBySender) {
115
- const entries = Object.entries(toolsBySender);
116
- if (entries.length === 0) return;
117
- const buckets = createSenderPolicyBuckets();
118
- let wildcard;
119
- for (const [rawKey, policy] of entries) {
120
- if (!policy) continue;
121
- const parsed = parseSenderPolicyKey(rawKey);
122
- if (!parsed) continue;
123
- if (parsed.kind === "wildcard") {
124
- wildcard = policy;
125
- continue;
126
- }
127
- const bucket = buckets[parsed.type];
128
- if (!bucket.has(parsed.key)) bucket.set(parsed.key, policy);
129
- }
130
- return {
131
- buckets,
132
- wildcard
133
- };
134
- }
135
- function resolveCompiledToolsBySenderPolicy(toolsBySender) {
136
- const cached = compiledToolsBySenderCache.get(toolsBySender);
137
- if (cached) return cached;
138
- const compiled = compileToolsBySenderPolicy(toolsBySender);
139
- if (!compiled) return;
140
- compiledToolsBySenderCache.set(toolsBySender, compiled);
141
- return compiled;
142
- }
143
- function normalizeCandidate(value, type) {
144
- const trimmed = value?.trim();
145
- if (!trimmed) return "";
146
- return normalizeTypedSenderKey(trimmed, type);
147
- }
148
- function normalizeSenderIdCandidates(value) {
149
- const trimmed = value?.trim();
150
- if (!trimmed) return [];
151
- const typed = normalizeTypedSenderKey(trimmed, "id");
152
- const legacy = normalizeLegacySenderKey(trimmed);
153
- if (!typed) return legacy ? [legacy] : [];
154
- if (!legacy || legacy === typed) return [typed];
155
- return [typed, legacy];
156
- }
157
- function matchToolsBySenderPolicy(compiled, params) {
158
- for (const senderIdCandidate of normalizeSenderIdCandidates(params.senderId)) {
159
- const match = compiled.buckets.id.get(senderIdCandidate);
160
- if (match) return match;
161
- }
162
- const senderE164 = normalizeCandidate(params.senderE164, "e164");
163
- if (senderE164) {
164
- const match = compiled.buckets.e164.get(senderE164);
165
- if (match) return match;
166
- }
167
- const senderUsername = normalizeCandidate(params.senderUsername, "username");
168
- if (senderUsername) {
169
- const match = compiled.buckets.username.get(senderUsername);
170
- if (match) return match;
171
- }
172
- const senderName = normalizeCandidate(params.senderName, "name");
173
- if (senderName) {
174
- const match = compiled.buckets.name.get(senderName);
175
- if (match) return match;
176
- }
177
- return compiled.wildcard;
178
- }
179
- function resolveToolsBySender(params) {
180
- const toolsBySender = params.toolsBySender;
181
- if (!toolsBySender) return;
182
- const compiled = resolveCompiledToolsBySenderPolicy(toolsBySender);
183
- if (!compiled) return;
184
- return matchToolsBySenderPolicy(compiled, params);
185
- }
186
- function resolveChannelGroups(cfg, channel, accountId) {
187
- const normalizedAccountId = normalizeAccountId(accountId);
188
- const channelConfig = cfg.channels?.[channel];
189
- if (!channelConfig) return;
190
- return resolveAccountEntry(channelConfig.accounts, normalizedAccountId)?.groups ?? channelConfig.groups;
191
- }
192
- function resolveChannelGroupPolicyMode(cfg, channel, accountId) {
193
- const normalizedAccountId = normalizeAccountId(accountId);
194
- const channelConfig = cfg.channels?.[channel];
195
- if (!channelConfig) return;
196
- return resolveAccountEntry(channelConfig.accounts, normalizedAccountId)?.groupPolicy ?? channelConfig.groupPolicy;
197
- }
198
- function resolveChannelGroupPolicy(params) {
199
- const { cfg, channel } = params;
200
- const groups = resolveChannelGroups(cfg, channel, params.accountId);
201
- const groupPolicy = resolveChannelGroupPolicyMode(cfg, channel, params.accountId);
202
- const hasGroups = Boolean(groups && Object.keys(groups).length > 0);
203
- const allowlistEnabled = groupPolicy === "allowlist" || hasGroups;
204
- const normalizedId = params.groupId?.trim();
205
- const groupConfig = normalizedId ? resolveChannelGroupConfig(groups, normalizedId, params.groupIdCaseInsensitive) : void 0;
206
- const defaultConfig = groups?.["*"];
207
- const allowAll = allowlistEnabled && Boolean(groups && Object.hasOwn(groups, "*"));
208
- const senderFilterBypass = groupPolicy === "allowlist" && !hasGroups && Boolean(params.hasGroupAllowFrom);
209
- return {
210
- allowlistEnabled,
211
- allowed: groupPolicy === "disabled" ? false : !allowlistEnabled || allowAll || Boolean(groupConfig) || senderFilterBypass,
212
- groupConfig,
213
- defaultConfig
214
- };
215
- }
216
- function resolveChannelGroupRequireMention(params) {
217
- const { requireMentionOverride, overrideOrder = "after-config" } = params;
218
- const { groupConfig, defaultConfig } = resolveChannelGroupPolicy(params);
219
- const configMention = typeof groupConfig?.requireMention === "boolean" ? groupConfig.requireMention : typeof defaultConfig?.requireMention === "boolean" ? defaultConfig.requireMention : void 0;
220
- if (overrideOrder === "before-config" && typeof requireMentionOverride === "boolean") return requireMentionOverride;
221
- if (typeof configMention === "boolean") return configMention;
222
- if (overrideOrder !== "before-config" && typeof requireMentionOverride === "boolean") return requireMentionOverride;
223
- return true;
224
- }
225
- function resolveChannelGroupToolsPolicy(params) {
226
- const { groupConfig, defaultConfig } = resolveChannelGroupPolicy(params);
227
- const groupSenderPolicy = resolveToolsBySender({
228
- toolsBySender: groupConfig?.toolsBySender,
229
- senderId: params.senderId,
230
- senderName: params.senderName,
231
- senderUsername: params.senderUsername,
232
- senderE164: params.senderE164
233
- });
234
- if (groupSenderPolicy) return groupSenderPolicy;
235
- if (groupConfig?.tools) return groupConfig.tools;
236
- const defaultSenderPolicy = resolveToolsBySender({
237
- toolsBySender: defaultConfig?.toolsBySender,
238
- senderId: params.senderId,
239
- senderName: params.senderName,
240
- senderUsername: params.senderUsername,
241
- senderE164: params.senderE164
242
- });
243
- if (defaultSenderPolicy) return defaultSenderPolicy;
244
- if (defaultConfig?.tools) return defaultConfig.tools;
245
- }
246
-
247
- //#endregion
248
- //#region src/channels/plugins/normalize/shared.ts
249
- function trimMessagingTarget(raw) {
250
- return raw.trim() || void 0;
251
- }
252
- function looksLikeHandleOrPhoneTarget(params) {
253
- const trimmed = params.raw.trim();
254
- if (!trimmed) return false;
255
- if (params.prefixPattern.test(trimmed)) return true;
256
- if (trimmed.includes("@")) return true;
257
- return (params.phonePattern ?? /^\+?\d{3,}$/).test(trimmed);
258
- }
259
-
260
- //#endregion
261
- //#region src/channels/plugins/normalize/whatsapp.ts
262
- function normalizeWhatsAppMessagingTarget(raw) {
263
- const trimmed = trimMessagingTarget(raw);
264
- if (!trimmed) return;
265
- return normalizeWhatsAppTarget(trimmed) ?? void 0;
266
- }
267
- function normalizeWhatsAppAllowFromEntries(allowFrom) {
268
- return allowFrom.map((entry) => String(entry).trim()).filter((entry) => Boolean(entry)).map((entry) => entry === "*" ? entry : normalizeWhatsAppTarget(entry)).filter((entry) => Boolean(entry));
269
- }
270
- function looksLikeWhatsAppTargetId(raw) {
271
- return looksLikeHandleOrPhoneTarget({
272
- raw,
273
- prefixPattern: /^whatsapp:/i
274
- });
275
- }
276
-
277
- //#endregion
278
- //#region src/plugin-sdk/channel-config-helpers.ts
279
- function formatTrimmedAllowFromEntries(allowFrom) {
280
- return allowFrom.map((entry) => String(entry).trim()).filter(Boolean);
281
- }
282
- function resolveWhatsAppConfigAllowFrom(params) {
283
- return resolveWhatsAppAccount(params).allowFrom ?? [];
284
- }
285
- function formatWhatsAppConfigAllowFromEntries(allowFrom) {
286
- return normalizeWhatsAppAllowFromEntries(allowFrom);
287
- }
288
- function resolveWhatsAppConfigDefaultTo(params) {
289
- const root = params.cfg.channels?.whatsapp;
290
- const normalized = normalizeAccountId(params.accountId);
291
- return ((root?.accounts?.[normalized])?.defaultTo ?? root?.defaultTo)?.trim() || void 0;
292
- }
293
- function resolveIMessageConfigAllowFrom(params) {
294
- return (resolveIMessageAccount(params).config.allowFrom ?? []).map((entry) => String(entry));
295
- }
296
- function resolveIMessageConfigDefaultTo(params) {
297
- return resolveIMessageAccount(params).config.defaultTo?.trim() || void 0;
298
- }
299
-
300
- //#endregion
301
- //#region src/slack/threading-tool-context.ts
302
- function buildSlackThreadingToolContext(params) {
303
- const configuredReplyToMode = resolveSlackReplyToMode(resolveSlackAccount({
304
- cfg: params.cfg,
305
- accountId: params.accountId
306
- }), params.context.ChatType);
307
- const effectiveReplyToMode = params.context.MessageThreadId != null ? "all" : configuredReplyToMode;
308
- const threadId = params.context.MessageThreadId ?? params.context.ReplyToId;
309
- return {
310
- currentChannelId: params.context.To?.startsWith("channel:") ? params.context.To.slice(8) : void 0,
311
- currentThreadTs: threadId != null ? String(threadId) : void 0,
312
- replyToMode: effectiveReplyToMode,
313
- hasRepliedRef: params.hasRepliedRef
314
- };
315
- }
316
-
317
- //#endregion
318
- //#region src/channels/plugins/group-mentions.ts
319
- function normalizeDiscordSlug(value) {
320
- return normalizeAtHashSlug(value);
321
- }
322
- function parseTelegramGroupId(value) {
323
- const raw = value?.trim() ?? "";
324
- if (!raw) return {
325
- chatId: void 0,
326
- topicId: void 0
327
- };
328
- const parts = raw.split(":").filter(Boolean);
329
- if (parts.length >= 3 && parts[1] === "topic" && /^-?\d+$/.test(parts[0]) && /^\d+$/.test(parts[2])) return {
330
- chatId: parts[0],
331
- topicId: parts[2]
332
- };
333
- if (parts.length >= 2 && /^-?\d+$/.test(parts[0]) && /^\d+$/.test(parts[1])) return {
334
- chatId: parts[0],
335
- topicId: parts[1]
336
- };
337
- return {
338
- chatId: raw,
339
- topicId: void 0
340
- };
341
- }
342
- function resolveTelegramRequireMention(params) {
343
- const { cfg, chatId, topicId } = params;
344
- if (!chatId) return;
345
- const groupConfig = cfg.channels?.telegram?.groups?.[chatId];
346
- const groupDefault = cfg.channels?.telegram?.groups?.["*"];
347
- const topicConfig = topicId && groupConfig?.topics ? groupConfig.topics[topicId] : void 0;
348
- const defaultTopicConfig = topicId && groupDefault?.topics ? groupDefault.topics[topicId] : void 0;
349
- if (typeof topicConfig?.requireMention === "boolean") return topicConfig.requireMention;
350
- if (typeof defaultTopicConfig?.requireMention === "boolean") return defaultTopicConfig.requireMention;
351
- if (typeof groupConfig?.requireMention === "boolean") return groupConfig.requireMention;
352
- if (typeof groupDefault?.requireMention === "boolean") return groupDefault.requireMention;
353
- }
354
- function resolveDiscordGuildEntry(guilds, groupSpace) {
355
- if (!guilds || Object.keys(guilds).length === 0) return null;
356
- const space = groupSpace?.trim() ?? "";
357
- if (space && guilds[space]) return guilds[space];
358
- const normalized = normalizeDiscordSlug(space);
359
- if (normalized && guilds[normalized]) return guilds[normalized];
360
- if (normalized) {
361
- const match = Object.values(guilds).find((entry) => normalizeDiscordSlug(entry?.slug ?? void 0) === normalized);
362
- if (match) return match;
363
- }
364
- return guilds["*"] ?? null;
365
- }
366
- function resolveDiscordChannelEntry(channelEntries, params) {
367
- if (!channelEntries || Object.keys(channelEntries).length === 0) return;
368
- const groupChannel = params.groupChannel;
369
- const channelSlug = normalizeDiscordSlug(groupChannel);
370
- return (params.groupId ? channelEntries[params.groupId] : void 0) ?? (channelSlug ? channelEntries[channelSlug] ?? channelEntries[`#${channelSlug}`] : void 0) ?? (groupChannel ? channelEntries[normalizeDiscordSlug(groupChannel)] : void 0);
371
- }
372
- function resolveSlackChannelPolicyEntry(params) {
373
- const channels = resolveSlackAccount({
374
- cfg: params.cfg,
375
- accountId: params.accountId
376
- }).channels ?? {};
377
- if (Object.keys(channels).length === 0) return;
378
- const channelId = params.groupId?.trim();
379
- const channelName = params.groupChannel?.replace(/^#/, "");
380
- const normalizedName = normalizeHyphenSlug(channelName);
381
- const candidates = [
382
- channelId ?? "",
383
- channelName ? `#${channelName}` : "",
384
- channelName ?? "",
385
- normalizedName
386
- ].filter(Boolean);
387
- for (const candidate of candidates) if (candidate && channels[candidate]) return channels[candidate];
388
- return channels["*"];
389
- }
390
- function resolveChannelRequireMention(params, channel, groupId = params.groupId) {
391
- return resolveChannelGroupRequireMention({
392
- cfg: params.cfg,
393
- channel,
394
- groupId,
395
- accountId: params.accountId
396
- });
397
- }
398
- function resolveChannelToolPolicyForSender(params, channel, groupId = params.groupId) {
399
- return resolveChannelGroupToolsPolicy({
400
- cfg: params.cfg,
401
- channel,
402
- groupId,
403
- accountId: params.accountId,
404
- senderId: params.senderId,
405
- senderName: params.senderName,
406
- senderUsername: params.senderUsername,
407
- senderE164: params.senderE164
408
- });
409
- }
410
- function resolveSenderToolsEntry(entry, params) {
411
- if (!entry) return;
412
- const senderPolicy = resolveToolsBySender({
413
- toolsBySender: entry.toolsBySender,
414
- senderId: params.senderId,
415
- senderName: params.senderName,
416
- senderUsername: params.senderUsername,
417
- senderE164: params.senderE164
418
- });
419
- if (senderPolicy) return senderPolicy;
420
- return entry.tools;
421
- }
422
- function resolveDiscordPolicyContext(params) {
423
- const guildEntry = resolveDiscordGuildEntry(params.cfg.channels?.discord?.guilds, params.groupSpace);
424
- const channelEntries = guildEntry?.channels;
425
- return {
426
- guildEntry,
427
- channelEntry: channelEntries && Object.keys(channelEntries).length > 0 ? resolveDiscordChannelEntry(channelEntries, params) : void 0
428
- };
429
- }
430
- function resolveTelegramGroupRequireMention(params) {
431
- const { chatId, topicId } = parseTelegramGroupId(params.groupId);
432
- const requireMention = resolveTelegramRequireMention({
433
- cfg: params.cfg,
434
- chatId,
435
- topicId
436
- });
437
- if (typeof requireMention === "boolean") return requireMention;
438
- return resolveChannelGroupRequireMention({
439
- cfg: params.cfg,
440
- channel: "telegram",
441
- groupId: chatId ?? params.groupId,
442
- accountId: params.accountId
443
- });
444
- }
445
- function resolveWhatsAppGroupRequireMention(params) {
446
- return resolveChannelRequireMention(params, "whatsapp");
447
- }
448
- function resolveIMessageGroupRequireMention(params) {
449
- return resolveChannelRequireMention(params, "imessage");
450
- }
451
- function resolveDiscordGroupRequireMention(params) {
452
- const context = resolveDiscordPolicyContext(params);
453
- if (typeof context.channelEntry?.requireMention === "boolean") return context.channelEntry.requireMention;
454
- if (typeof context.guildEntry?.requireMention === "boolean") return context.guildEntry.requireMention;
455
- return true;
456
- }
457
- function resolveGoogleChatGroupRequireMention(params) {
458
- return resolveChannelRequireMention(params, "googlechat");
459
- }
460
- function resolveGoogleChatGroupToolPolicy(params) {
461
- return resolveChannelToolPolicyForSender(params, "googlechat");
462
- }
463
- function resolveSlackGroupRequireMention(params) {
464
- const resolved = resolveSlackChannelPolicyEntry(params);
465
- if (typeof resolved?.requireMention === "boolean") return resolved.requireMention;
466
- return true;
467
- }
468
- function resolveBlueBubblesGroupRequireMention(params) {
469
- return resolveChannelRequireMention(params, "bluebubbles");
470
- }
471
- function resolveTelegramGroupToolPolicy(params) {
472
- const { chatId } = parseTelegramGroupId(params.groupId);
473
- return resolveChannelToolPolicyForSender(params, "telegram", chatId ?? params.groupId);
474
- }
475
- function resolveWhatsAppGroupToolPolicy(params) {
476
- return resolveChannelToolPolicyForSender(params, "whatsapp");
477
- }
478
- function resolveIMessageGroupToolPolicy(params) {
479
- return resolveChannelToolPolicyForSender(params, "imessage");
480
- }
481
- function resolveDiscordGroupToolPolicy(params) {
482
- const context = resolveDiscordPolicyContext(params);
483
- const channelPolicy = resolveSenderToolsEntry(context.channelEntry, params);
484
- if (channelPolicy) return channelPolicy;
485
- return resolveSenderToolsEntry(context.guildEntry, params);
486
- }
487
- function resolveSlackGroupToolPolicy(params) {
488
- return resolveSenderToolsEntry(resolveSlackChannelPolicyEntry(params), params);
489
- }
490
- function resolveBlueBubblesGroupToolPolicy(params) {
491
- return resolveChannelToolPolicyForSender(params, "bluebubbles");
492
- }
493
-
494
- //#endregion
495
- //#region src/channels/plugins/normalize/signal.ts
496
- function normalizeSignalMessagingTarget(raw) {
497
- const trimmed = raw.trim();
498
- if (!trimmed) return;
499
- let normalized = trimmed;
500
- if (normalized.toLowerCase().startsWith("signal:")) normalized = normalized.slice(7).trim();
501
- if (!normalized) return;
502
- const lower = normalized.toLowerCase();
503
- if (lower.startsWith("group:")) {
504
- const id = normalized.slice(6).trim();
505
- return id ? `group:${id}` : void 0;
506
- }
507
- if (lower.startsWith("username:")) {
508
- const id = normalized.slice(9).trim();
509
- return id ? `username:${id}`.toLowerCase() : void 0;
510
- }
511
- if (lower.startsWith("u:")) {
512
- const id = normalized.slice(2).trim();
513
- return id ? `username:${id}`.toLowerCase() : void 0;
514
- }
515
- if (lower.startsWith("uuid:")) {
516
- const id = normalized.slice(5).trim();
517
- return id ? id.toLowerCase() : void 0;
518
- }
519
- return normalized.toLowerCase();
520
- }
521
- const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
522
- const UUID_COMPACT_PATTERN = /^[0-9a-f]{32}$/i;
523
- function looksLikeSignalTargetId(raw, normalized) {
524
- const candidates = [raw, normalized ?? ""].map((value) => value.trim()).filter(Boolean);
525
- for (const candidate of candidates) {
526
- if (/^(signal:)?(group:|username:|u:)/i.test(candidate)) return true;
527
- if (/^(signal:)?uuid:/i.test(candidate)) {
528
- const stripped = candidate.replace(/^signal:/i, "").replace(/^uuid:/i, "").trim();
529
- if (!stripped) continue;
530
- if (UUID_PATTERN.test(stripped) || UUID_COMPACT_PATTERN.test(stripped)) return true;
531
- continue;
532
- }
533
- const withoutSignalPrefix = candidate.replace(/^signal:/i, "").trim();
534
- if (UUID_PATTERN.test(withoutSignalPrefix) || UUID_COMPACT_PATTERN.test(withoutSignalPrefix)) return true;
535
- if (/^\+?\d{3,}$/.test(withoutSignalPrefix)) return true;
536
- }
537
- return false;
538
- }
539
-
540
- //#endregion
541
- //#region src/channels/plugins/whatsapp-shared.ts
542
- const WHATSAPP_GROUP_INTRO_HINT = "WhatsApp IDs: SenderId is the participant JID (group participant id).";
543
- function resolveWhatsAppGroupIntroHint() {
544
- return WHATSAPP_GROUP_INTRO_HINT;
545
- }
546
- function resolveWhatsAppMentionStripPatterns(ctx) {
547
- const selfE164 = (ctx.To ?? "").replace(/^whatsapp:/, "");
548
- if (!selfE164) return [];
549
- const escaped = escapeRegExp(selfE164);
550
- return [escaped, `@${escaped}`];
551
- }
552
-
553
- //#endregion
554
- //#region src/channels/dock.ts
555
- const formatLower = (allowFrom) => allowFrom.map((entry) => String(entry).trim()).filter(Boolean).map((entry) => entry.toLowerCase());
556
- const stringifyAllowFrom = (allowFrom) => allowFrom.map((entry) => String(entry));
557
- const trimAllowFromEntries = (allowFrom) => allowFrom.map((entry) => String(entry).trim()).filter(Boolean);
558
- const DEFAULT_OUTBOUND_TEXT_CHUNK_LIMIT_4000 = { textChunkLimit: 4e3 };
559
- const DEFAULT_BLOCK_STREAMING_COALESCE = { blockStreamingCoalesceDefaults: {
560
- minChars: 1500,
561
- idleMs: 1e3
562
- } };
563
- function formatAllowFromWithReplacements(allowFrom, replacements) {
564
- return trimAllowFromEntries(allowFrom).map((entry) => {
565
- let normalized = entry;
566
- for (const replacement of replacements) normalized = normalized.replace(replacement, "");
567
- return normalized.toLowerCase();
568
- });
569
- }
570
- const formatDiscordAllowFrom = (allowFrom) => allowFrom.map((entry) => String(entry).trim().replace(/^<@!?/, "").replace(/>$/, "").replace(/^discord:/i, "").replace(/^user:/i, "").replace(/^pk:/i, "").trim().toLowerCase()).filter(Boolean);
571
- function resolveDirectOrGroupChannelId(context) {
572
- return (context.ChatType?.toLowerCase() === "direct" ? context.From ?? context.To : context.To)?.trim() || void 0;
573
- }
574
- function buildSignalThreadToolContext(params) {
575
- const currentChannelIdRaw = resolveDirectOrGroupChannelId(params.context);
576
- return {
577
- currentChannelId: currentChannelIdRaw ? normalizeSignalMessagingTarget(currentChannelIdRaw) ?? currentChannelIdRaw.trim() : void 0,
578
- currentThreadTs: params.context.ReplyToId,
579
- hasRepliedRef: params.hasRepliedRef
580
- };
581
- }
582
- function buildIMessageThreadToolContext(params) {
583
- return {
584
- currentChannelId: resolveDirectOrGroupChannelId(params.context),
585
- currentThreadTs: params.context.ReplyToId,
586
- hasRepliedRef: params.hasRepliedRef
587
- };
588
- }
589
- function buildThreadToolContextFromMessageThreadOrReply(params) {
590
- const threadId = params.context.MessageThreadId ?? params.context.ReplyToId;
591
- return {
592
- currentChannelId: params.context.To?.trim() || void 0,
593
- currentThreadTs: threadId != null ? String(threadId) : void 0,
594
- hasRepliedRef: params.hasRepliedRef
595
- };
596
- }
597
- function resolveCaseInsensitiveAccount(accounts, accountId) {
598
- if (!accounts) return;
599
- const normalized = normalizeAccountId(accountId);
600
- return accounts[normalized] ?? accounts[Object.keys(accounts).find((key) => key.toLowerCase() === normalized.toLowerCase()) ?? ""];
601
- }
602
- function resolveDefaultToCaseInsensitiveAccount(params) {
603
- return (resolveCaseInsensitiveAccount(params.channel?.accounts, params.accountId)?.defaultTo ?? params.channel?.defaultTo)?.trim() || void 0;
604
- }
605
- function resolveChannelDefaultTo(channel, accountId) {
606
- return resolveDefaultToCaseInsensitiveAccount({
607
- channel,
608
- accountId
609
- });
610
- }
611
- function resolveNamedChannelDefaultTo(params) {
612
- return resolveChannelDefaultTo(params.channels?.[params.channelId], params.accountId);
613
- }
614
- const DOCKS = {
615
- telegram: {
616
- id: "telegram",
617
- capabilities: {
618
- chatTypes: [
619
- "direct",
620
- "group",
621
- "channel",
622
- "thread"
623
- ],
624
- nativeCommands: true,
625
- blockStreaming: true
626
- },
627
- outbound: DEFAULT_OUTBOUND_TEXT_CHUNK_LIMIT_4000,
628
- config: {
629
- resolveAllowFrom: ({ cfg, accountId }) => stringifyAllowFrom(resolveTelegramAccount({
630
- cfg,
631
- accountId
632
- }).config.allowFrom ?? []),
633
- formatAllowFrom: ({ allowFrom }) => trimAllowFromEntries(allowFrom).map((entry) => entry.replace(/^(telegram|tg):/i, "")).map((entry) => entry.toLowerCase()),
634
- resolveDefaultTo: ({ cfg, accountId }) => {
635
- const val = resolveTelegramAccount({
636
- cfg,
637
- accountId
638
- }).config.defaultTo;
639
- return val != null ? String(val) : void 0;
640
- }
641
- },
642
- groups: {
643
- resolveRequireMention: resolveTelegramGroupRequireMention,
644
- resolveToolPolicy: resolveTelegramGroupToolPolicy
645
- },
646
- threading: {
647
- resolveReplyToMode: ({ cfg }) => cfg.channels?.telegram?.replyToMode ?? "off",
648
- buildToolContext: ({ context, hasRepliedRef }) => {
649
- const threadId = context.MessageThreadId;
650
- const rawCurrentMessageId = context.CurrentMessageId;
651
- const currentMessageId = typeof rawCurrentMessageId === "number" ? rawCurrentMessageId : rawCurrentMessageId?.trim() || void 0;
652
- return {
653
- currentChannelId: context.To?.trim() || void 0,
654
- currentThreadTs: threadId != null ? String(threadId) : void 0,
655
- currentMessageId,
656
- hasRepliedRef
657
- };
658
- }
659
- }
660
- },
661
- whatsapp: {
662
- id: "whatsapp",
663
- capabilities: {
664
- chatTypes: ["direct", "group"],
665
- polls: true,
666
- reactions: true,
667
- media: true
668
- },
669
- commands: {
670
- enforceOwnerForCommands: true,
671
- skipWhenConfigEmpty: true
672
- },
673
- outbound: DEFAULT_OUTBOUND_TEXT_CHUNK_LIMIT_4000,
674
- config: {
675
- resolveAllowFrom: ({ cfg, accountId }) => resolveWhatsAppConfigAllowFrom({
676
- cfg,
677
- accountId
678
- }),
679
- formatAllowFrom: ({ allowFrom }) => formatWhatsAppConfigAllowFromEntries(allowFrom),
680
- resolveDefaultTo: ({ cfg, accountId }) => resolveWhatsAppConfigDefaultTo({
681
- cfg,
682
- accountId
683
- })
684
- },
685
- groups: {
686
- resolveRequireMention: resolveWhatsAppGroupRequireMention,
687
- resolveToolPolicy: resolveWhatsAppGroupToolPolicy,
688
- resolveGroupIntroHint: resolveWhatsAppGroupIntroHint
689
- },
690
- mentions: { stripPatterns: ({ ctx }) => resolveWhatsAppMentionStripPatterns(ctx) },
691
- threading: { buildToolContext: ({ context, hasRepliedRef }) => {
692
- return {
693
- currentChannelId: context.From?.trim() || context.To?.trim() || void 0,
694
- currentThreadTs: context.ReplyToId,
695
- hasRepliedRef
696
- };
697
- } }
698
- },
699
- discord: {
700
- id: "discord",
701
- capabilities: {
702
- chatTypes: [
703
- "direct",
704
- "channel",
705
- "thread"
706
- ],
707
- polls: true,
708
- reactions: true,
709
- media: true,
710
- nativeCommands: true,
711
- threads: true
712
- },
713
- outbound: { textChunkLimit: 2e3 },
714
- streaming: DEFAULT_BLOCK_STREAMING_COALESCE,
715
- elevated: { allowFromFallback: ({ cfg }) => cfg.channels?.discord?.allowFrom ?? cfg.channels?.discord?.dm?.allowFrom },
716
- config: {
717
- resolveAllowFrom: ({ cfg, accountId }) => {
718
- const account = resolveDiscordAccount({
719
- cfg,
720
- accountId
721
- });
722
- return (account.config.allowFrom ?? account.config.dm?.allowFrom ?? []).map((entry) => String(entry));
723
- },
724
- formatAllowFrom: ({ allowFrom }) => formatDiscordAllowFrom(allowFrom),
725
- resolveDefaultTo: ({ cfg, accountId }) => resolveDiscordAccount({
726
- cfg,
727
- accountId
728
- }).config.defaultTo?.trim() || void 0
729
- },
730
- groups: {
731
- resolveRequireMention: resolveDiscordGroupRequireMention,
732
- resolveToolPolicy: resolveDiscordGroupToolPolicy
733
- },
734
- mentions: { stripPatterns: () => ["<@!?\\d+>"] },
735
- threading: {
736
- resolveReplyToMode: ({ cfg }) => cfg.channels?.discord?.replyToMode ?? "off",
737
- buildToolContext: ({ context, hasRepliedRef }) => ({
738
- currentChannelId: context.To?.trim() || void 0,
739
- currentThreadTs: context.ReplyToId,
740
- hasRepliedRef
741
- })
742
- }
743
- },
744
- irc: {
745
- id: "irc",
746
- capabilities: {
747
- chatTypes: ["direct", "group"],
748
- media: true,
749
- blockStreaming: true
750
- },
751
- outbound: { textChunkLimit: 350 },
752
- streaming: { blockStreamingCoalesceDefaults: {
753
- minChars: 300,
754
- idleMs: 1e3
755
- } },
756
- config: {
757
- resolveAllowFrom: ({ cfg, accountId }) => {
758
- const channel = cfg.channels?.irc;
759
- return (resolveCaseInsensitiveAccount(channel?.accounts, accountId)?.allowFrom ?? channel?.allowFrom ?? []).map((entry) => String(entry));
760
- },
761
- formatAllowFrom: ({ allowFrom }) => formatAllowFromWithReplacements(allowFrom, [/^irc:/i, /^user:/i]),
762
- resolveDefaultTo: ({ cfg, accountId }) => resolveNamedChannelDefaultTo({
763
- channels: cfg.channels,
764
- channelId: "irc",
765
- accountId
766
- })
767
- },
768
- groups: {
769
- resolveRequireMention: ({ cfg, accountId, groupId }) => {
770
- if (!groupId) return true;
771
- return resolveChannelGroupRequireMention({
772
- cfg,
773
- channel: "irc",
774
- groupId,
775
- accountId,
776
- groupIdCaseInsensitive: true
777
- });
778
- },
779
- resolveToolPolicy: ({ cfg, accountId, groupId, senderId, senderName, senderUsername }) => {
780
- if (!groupId) return;
781
- return resolveChannelGroupToolsPolicy({
782
- cfg,
783
- channel: "irc",
784
- groupId,
785
- accountId,
786
- groupIdCaseInsensitive: true,
787
- senderId,
788
- senderName,
789
- senderUsername
790
- });
791
- }
792
- }
793
- },
794
- googlechat: {
795
- id: "googlechat",
796
- capabilities: {
797
- chatTypes: [
798
- "direct",
799
- "group",
800
- "thread"
801
- ],
802
- reactions: true,
803
- media: true,
804
- threads: true,
805
- blockStreaming: true
806
- },
807
- outbound: DEFAULT_OUTBOUND_TEXT_CHUNK_LIMIT_4000,
808
- config: {
809
- resolveAllowFrom: ({ cfg, accountId }) => {
810
- const channel = cfg.channels?.googlechat;
811
- return (resolveCaseInsensitiveAccount(channel?.accounts, accountId)?.dm?.allowFrom ?? channel?.dm?.allowFrom ?? []).map((entry) => String(entry));
812
- },
813
- formatAllowFrom: ({ allowFrom }) => formatAllowFromWithReplacements(allowFrom, [
814
- /^(googlechat|google-chat|gchat):/i,
815
- /^user:/i,
816
- /^users\//i
817
- ]),
818
- resolveDefaultTo: ({ cfg, accountId }) => resolveNamedChannelDefaultTo({
819
- channels: cfg.channels,
820
- channelId: "googlechat",
821
- accountId
822
- })
823
- },
824
- groups: {
825
- resolveRequireMention: resolveGoogleChatGroupRequireMention,
826
- resolveToolPolicy: resolveGoogleChatGroupToolPolicy
827
- },
828
- threading: {
829
- resolveReplyToMode: ({ cfg }) => cfg.channels?.googlechat?.replyToMode ?? "off",
830
- buildToolContext: ({ context, hasRepliedRef }) => buildThreadToolContextFromMessageThreadOrReply({
831
- context,
832
- hasRepliedRef
833
- })
834
- }
835
- },
836
- slack: {
837
- id: "slack",
838
- capabilities: {
839
- chatTypes: [
840
- "direct",
841
- "channel",
842
- "thread"
843
- ],
844
- reactions: true,
845
- media: true,
846
- nativeCommands: true,
847
- threads: true
848
- },
849
- outbound: DEFAULT_OUTBOUND_TEXT_CHUNK_LIMIT_4000,
850
- streaming: DEFAULT_BLOCK_STREAMING_COALESCE,
851
- config: {
852
- resolveAllowFrom: ({ cfg, accountId }) => {
853
- const account = resolveSlackAccount({
854
- cfg,
855
- accountId
856
- });
857
- return (account.config.allowFrom ?? account.dm?.allowFrom ?? []).map((entry) => String(entry));
858
- },
859
- formatAllowFrom: ({ allowFrom }) => formatLower(allowFrom),
860
- resolveDefaultTo: ({ cfg, accountId }) => resolveSlackAccount({
861
- cfg,
862
- accountId
863
- }).config.defaultTo?.trim() || void 0
864
- },
865
- groups: {
866
- resolveRequireMention: resolveSlackGroupRequireMention,
867
- resolveToolPolicy: resolveSlackGroupToolPolicy
868
- },
869
- mentions: { stripPatterns: () => ["<@[^>]+>"] },
870
- threading: {
871
- resolveReplyToMode: ({ cfg, accountId, chatType }) => resolveSlackReplyToMode(resolveSlackAccount({
872
- cfg,
873
- accountId
874
- }), chatType),
875
- allowExplicitReplyTagsWhenOff: false,
876
- buildToolContext: (params) => buildSlackThreadingToolContext(params)
877
- }
878
- },
879
- signal: {
880
- id: "signal",
881
- capabilities: {
882
- chatTypes: ["direct", "group"],
883
- reactions: true,
884
- media: true
885
- },
886
- outbound: DEFAULT_OUTBOUND_TEXT_CHUNK_LIMIT_4000,
887
- streaming: DEFAULT_BLOCK_STREAMING_COALESCE,
888
- config: {
889
- resolveAllowFrom: ({ cfg, accountId }) => stringifyAllowFrom(resolveSignalAccount({
890
- cfg,
891
- accountId
892
- }).config.allowFrom ?? []),
893
- formatAllowFrom: ({ allowFrom }) => trimAllowFromEntries(allowFrom).map((entry) => entry === "*" ? "*" : normalizeE164(entry.replace(/^signal:/i, ""))).filter(Boolean),
894
- resolveDefaultTo: ({ cfg, accountId }) => resolveSignalAccount({
895
- cfg,
896
- accountId
897
- }).config.defaultTo?.trim() || void 0
898
- },
899
- threading: { buildToolContext: ({ context, hasRepliedRef }) => buildSignalThreadToolContext({
900
- context,
901
- hasRepliedRef
902
- }) }
903
- },
904
- imessage: {
905
- id: "imessage",
906
- capabilities: {
907
- chatTypes: ["direct", "group"],
908
- reactions: true,
909
- media: true
910
- },
911
- outbound: DEFAULT_OUTBOUND_TEXT_CHUNK_LIMIT_4000,
912
- config: {
913
- resolveAllowFrom: ({ cfg, accountId }) => resolveIMessageConfigAllowFrom({
914
- cfg,
915
- accountId
916
- }),
917
- formatAllowFrom: ({ allowFrom }) => formatTrimmedAllowFromEntries(allowFrom),
918
- resolveDefaultTo: ({ cfg, accountId }) => resolveIMessageConfigDefaultTo({
919
- cfg,
920
- accountId
921
- })
922
- },
923
- groups: {
924
- resolveRequireMention: resolveIMessageGroupRequireMention,
925
- resolveToolPolicy: resolveIMessageGroupToolPolicy
926
- },
927
- threading: { buildToolContext: ({ context, hasRepliedRef }) => buildIMessageThreadToolContext({
928
- context,
929
- hasRepliedRef
930
- }) }
931
- }
932
- };
933
- function buildDockFromPlugin(plugin) {
934
- return {
935
- id: plugin.id,
936
- capabilities: plugin.capabilities,
937
- commands: plugin.commands,
938
- outbound: plugin.outbound?.textChunkLimit ? { textChunkLimit: plugin.outbound.textChunkLimit } : void 0,
939
- streaming: plugin.streaming ? { blockStreamingCoalesceDefaults: plugin.streaming.blockStreamingCoalesceDefaults } : void 0,
940
- elevated: plugin.elevated,
941
- config: plugin.config ? {
942
- resolveAllowFrom: plugin.config.resolveAllowFrom,
943
- formatAllowFrom: plugin.config.formatAllowFrom,
944
- resolveDefaultTo: plugin.config.resolveDefaultTo
945
- } : void 0,
946
- groups: plugin.groups,
947
- mentions: plugin.mentions,
948
- threading: plugin.threading,
949
- agentPrompt: plugin.agentPrompt
950
- };
951
- }
952
- function listPluginDockEntries() {
953
- const registry = requireActivePluginRegistry();
954
- const entries = [];
955
- const seen = /* @__PURE__ */ new Set();
956
- for (const entry of registry.channels) {
957
- const plugin = entry.plugin;
958
- const id = String(plugin.id).trim();
959
- if (!id || seen.has(id)) continue;
960
- seen.add(id);
961
- if (CHAT_CHANNEL_ORDER.includes(plugin.id)) continue;
962
- const dock = entry.dock ?? buildDockFromPlugin(plugin);
963
- entries.push({
964
- id: plugin.id,
965
- dock,
966
- order: plugin.meta.order
967
- });
968
- }
969
- return entries;
970
- }
971
- function listChannelDocks() {
972
- const baseEntries = CHAT_CHANNEL_ORDER.map((id) => ({
973
- id,
974
- dock: DOCKS[id],
975
- order: getChatChannelMeta(id).order
976
- }));
977
- const pluginEntries = listPluginDockEntries();
978
- const combined = [...baseEntries, ...pluginEntries];
979
- combined.sort((a, b) => {
980
- const indexA = CHAT_CHANNEL_ORDER.indexOf(a.id);
981
- const indexB = CHAT_CHANNEL_ORDER.indexOf(b.id);
982
- const orderA = a.order ?? (indexA === -1 ? 999 : indexA);
983
- const orderB = b.order ?? (indexB === -1 ? 999 : indexB);
984
- if (orderA !== orderB) return orderA - orderB;
985
- return String(a.id).localeCompare(String(b.id));
986
- });
987
- return combined.map((entry) => entry.dock);
988
- }
989
- function getChannelDock(id) {
990
- const core = DOCKS[id];
991
- if (core) return core;
992
- const pluginEntry = requireActivePluginRegistry().channels.find((entry) => entry.plugin.id === id);
993
- if (!pluginEntry) return;
994
- return pluginEntry.dock ?? buildDockFromPlugin(pluginEntry.plugin);
995
- }
996
-
997
- //#endregion
998
- //#region src/auto-reply/thinking.ts
999
- function normalizeProviderId(provider) {
1000
- if (!provider) return "";
1001
- const normalized = provider.trim().toLowerCase();
1002
- if (normalized === "z.ai" || normalized === "z-ai") return "zai";
1003
- return normalized;
1004
- }
1005
- function isBinaryThinkingProvider(provider) {
1006
- return normalizeProviderId(provider) === "zai";
1007
- }
1008
- const XHIGH_MODEL_REFS = [
1009
- "openai/gpt-5.2",
1010
- "openai-codex/gpt-5.3-codex",
1011
- "openai-codex/gpt-5.3-codex-spark",
1012
- "openai-codex/gpt-5.2-codex",
1013
- "openai-codex/gpt-5.1-codex",
1014
- "github-copilot/gpt-5.2-codex",
1015
- "github-copilot/gpt-5.2"
1016
- ];
1017
- const XHIGH_MODEL_SET = new Set(XHIGH_MODEL_REFS.map((entry) => entry.toLowerCase()));
1018
- const XHIGH_MODEL_IDS = new Set(XHIGH_MODEL_REFS.map((entry) => entry.split("/")[1]?.toLowerCase()).filter((entry) => Boolean(entry)));
1019
- function normalizeThinkLevel(raw) {
1020
- if (!raw) return;
1021
- const key = raw.trim().toLowerCase();
1022
- const collapsed = key.replace(/[\s_-]+/g, "");
1023
- if (collapsed === "adaptive" || collapsed === "auto") return "adaptive";
1024
- if (collapsed === "xhigh" || collapsed === "extrahigh") return "xhigh";
1025
- if (["off"].includes(key)) return "off";
1026
- if ([
1027
- "on",
1028
- "enable",
1029
- "enabled"
1030
- ].includes(key)) return "low";
1031
- if (["min", "minimal"].includes(key)) return "minimal";
1032
- if ([
1033
- "low",
1034
- "thinkhard",
1035
- "think-hard",
1036
- "think_hard"
1037
- ].includes(key)) return "low";
1038
- if ([
1039
- "mid",
1040
- "med",
1041
- "medium",
1042
- "thinkharder",
1043
- "think-harder",
1044
- "harder"
1045
- ].includes(key)) return "medium";
1046
- if ([
1047
- "high",
1048
- "ultra",
1049
- "ultrathink",
1050
- "think-hard",
1051
- "thinkhardest",
1052
- "highest",
1053
- "max"
1054
- ].includes(key)) return "high";
1055
- if (["think"].includes(key)) return "minimal";
1056
- }
1057
- function supportsXHighThinking(provider, model) {
1058
- const modelKey = model?.trim().toLowerCase();
1059
- if (!modelKey) return false;
1060
- const providerKey = provider?.trim().toLowerCase();
1061
- if (providerKey) return XHIGH_MODEL_SET.has(`${providerKey}/${modelKey}`);
1062
- return XHIGH_MODEL_IDS.has(modelKey);
1063
- }
1064
- function listThinkingLevels(provider, model) {
1065
- const levels = [
1066
- "off",
1067
- "minimal",
1068
- "low",
1069
- "medium",
1070
- "high"
1071
- ];
1072
- if (supportsXHighThinking(provider, model)) levels.push("xhigh");
1073
- levels.push("adaptive");
1074
- return levels;
1075
- }
1076
- function listThinkingLevelLabels(provider, model) {
1077
- if (isBinaryThinkingProvider(provider)) return ["off", "on"];
1078
- return listThinkingLevels(provider, model);
1079
- }
1080
- function formatThinkingLevels(provider, model, separator = ", ") {
1081
- return listThinkingLevelLabels(provider, model).join(separator);
1082
- }
1083
- function formatXHighModelHint() {
1084
- const refs = [...XHIGH_MODEL_REFS];
1085
- if (refs.length === 0) return "unknown model";
1086
- if (refs.length === 1) return refs[0];
1087
- if (refs.length === 2) return `${refs[0]} or ${refs[1]}`;
1088
- return `${refs.slice(0, -1).join(", ")} or ${refs[refs.length - 1]}`;
1089
- }
1090
- function normalizeOnOffFullLevel(raw) {
1091
- if (!raw) return;
1092
- const key = raw.toLowerCase();
1093
- if ([
1094
- "off",
1095
- "false",
1096
- "no",
1097
- "0"
1098
- ].includes(key)) return "off";
1099
- if ([
1100
- "full",
1101
- "all",
1102
- "everything"
1103
- ].includes(key)) return "full";
1104
- if ([
1105
- "on",
1106
- "minimal",
1107
- "true",
1108
- "yes",
1109
- "1"
1110
- ].includes(key)) return "on";
1111
- }
1112
- function normalizeVerboseLevel(raw) {
1113
- return normalizeOnOffFullLevel(raw);
1114
- }
1115
- function normalizeUsageDisplay(raw) {
1116
- if (!raw) return;
1117
- const key = raw.toLowerCase();
1118
- if ([
1119
- "off",
1120
- "false",
1121
- "no",
1122
- "0",
1123
- "disable",
1124
- "disabled"
1125
- ].includes(key)) return "off";
1126
- if ([
1127
- "on",
1128
- "true",
1129
- "yes",
1130
- "1",
1131
- "enable",
1132
- "enabled"
1133
- ].includes(key)) return "tokens";
1134
- if ([
1135
- "tokens",
1136
- "token",
1137
- "tok",
1138
- "minimal",
1139
- "min"
1140
- ].includes(key)) return "tokens";
1141
- if (["full", "session"].includes(key)) return "full";
1142
- }
1143
- function resolveResponseUsageMode(raw) {
1144
- return normalizeUsageDisplay(raw) ?? "off";
1145
- }
1146
- function normalizeElevatedLevel(raw) {
1147
- if (!raw) return;
1148
- const key = raw.toLowerCase();
1149
- if ([
1150
- "off",
1151
- "false",
1152
- "no",
1153
- "0"
1154
- ].includes(key)) return "off";
1155
- if ([
1156
- "full",
1157
- "auto",
1158
- "auto-approve",
1159
- "autoapprove"
1160
- ].includes(key)) return "full";
1161
- if ([
1162
- "ask",
1163
- "prompt",
1164
- "approval",
1165
- "approve"
1166
- ].includes(key)) return "ask";
1167
- if ([
1168
- "on",
1169
- "true",
1170
- "yes",
1171
- "1"
1172
- ].includes(key)) return "on";
1173
- }
1174
- function normalizeReasoningLevel(raw) {
1175
- if (!raw) return;
1176
- const key = raw.toLowerCase();
1177
- if ([
1178
- "off",
1179
- "false",
1180
- "no",
1181
- "0",
1182
- "hide",
1183
- "hidden",
1184
- "disable",
1185
- "disabled"
1186
- ].includes(key)) return "off";
1187
- if ([
1188
- "on",
1189
- "true",
1190
- "yes",
1191
- "1",
1192
- "show",
1193
- "visible",
1194
- "enable",
1195
- "enabled"
1196
- ].includes(key)) return "on";
1197
- if ([
1198
- "stream",
1199
- "streaming",
1200
- "draft",
1201
- "live"
1202
- ].includes(key)) return "stream";
1203
- }
1204
-
1205
- //#endregion
1206
- export { resolveWhatsAppGroupToolPolicy as A, normalizeWhatsAppMessagingTarget as B, resolveIMessageGroupRequireMention as C, resolveTelegramGroupRequireMention as D, resolveSlackGroupToolPolicy as E, resolveIMessageConfigDefaultTo as F, resolveChannelGroupToolsPolicy as G, trimMessagingTarget as H, resolveWhatsAppConfigAllowFrom as I, normalizeHyphenSlug as J, resolveToolsBySender as K, resolveWhatsAppConfigDefaultTo as L, formatTrimmedAllowFromEntries as M, formatWhatsAppConfigAllowFromEntries as N, resolveTelegramGroupToolPolicy as O, resolveIMessageConfigAllowFrom as P, looksLikeWhatsAppTargetId as R, resolveGoogleChatGroupToolPolicy as S, resolveSlackGroupRequireMention as T, resolveChannelGroupPolicy as U, looksLikeHandleOrPhoneTarget as V, resolveChannelGroupRequireMention as W, normalizeStringEntriesLower as X, normalizeStringEntries as Y, resolveBlueBubblesGroupRequireMention as _, normalizeReasoningLevel as a, resolveDiscordGroupToolPolicy as b, normalizeVerboseLevel as c, getChannelDock as d, listChannelDocks as f, normalizeSignalMessagingTarget as g, looksLikeSignalTargetId as h, normalizeElevatedLevel as i, buildSlackThreadingToolContext as j, resolveWhatsAppGroupRequireMention as k, resolveResponseUsageMode as l, resolveWhatsAppMentionStripPatterns as m, formatXHighModelHint as n, normalizeThinkLevel as o, resolveWhatsAppGroupIntroHint as p, normalizeAtHashSlug as q, listThinkingLevels as r, normalizeUsageDisplay as s, formatThinkingLevels as t, supportsXHighThinking as u, resolveBlueBubblesGroupToolPolicy as v, resolveIMessageGroupToolPolicy as w, resolveGoogleChatGroupRequireMention as x, resolveDiscordGroupRequireMention as y, normalizeWhatsAppAllowFromEntries as z };