squidclaw 3.0.19 → 3.0.21

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 (407) hide show
  1. package/dist/{accounts-s5e9zidf.js → accounts-C7pGQPcS.js} +2 -2
  2. package/dist/{accounts-Bkb-J8V6.js → accounts-DjhBQg_8.js} +2 -2
  3. package/dist/{accounts-B6F_XCgS.js → accounts-DwGoZKGm.js} +17 -17
  4. package/dist/{active-listener-6-Svu8Dx.js → active-listener-DPc_PGsA.js} +2 -2
  5. package/dist/{agents-DL8uYsUq.js → agents-DXKtU4Il.js} +4 -4
  6. package/dist/{agents.config-B4KAAVvR.js → agents.config-BM-2SLCh.js} +1 -1
  7. package/dist/{agents.config-D93fF1eJ.js → agents.config-eMSUW-iw.js} +1 -1
  8. package/dist/{plugin-sdk/api-key-rotation-DyjMI2n3.js → api-key-rotation-DVyYtQxC.js} +2 -2
  9. package/dist/{audio-preflight-DZ1LNMJp.js → audio-preflight-BUCBED7N.js} +32 -32
  10. package/dist/{audio-preflight-Bzo_zN4j.js → audio-preflight-lT9iRnYi.js} +4 -4
  11. package/dist/{audio-transcription-runner-B3u2x_ja.js → audio-transcription-runner-Cv0Q47cM.js} +12 -12
  12. package/dist/{audio-transcription-runner-Cp_lkLCv.js → audio-transcription-runner-YiR1ym3a.js} +1 -1
  13. package/dist/{audit-membership-runtime-w23FnNAN.js → audit-membership-runtime-DyLj-uhz.js} +4 -4
  14. package/dist/{auth-choice-Ba4AEm_k.js → auth-choice-CXepQc7c.js} +1 -1
  15. package/dist/{auth-choice-ziFj5bXd.js → auth-choice-D2JrMJn-.js} +1 -1
  16. package/dist/{banner-DDih2slD.js → banner-DMfuBV69.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 +687 -51
  22. package/dist/canvas-host/a2ui/a2ui.bundle.js +1 -17815
  23. package/dist/{channel-activity-CxJbx4sD.js → channel-activity-CPpt4XaL.js} +3 -3
  24. package/dist/{channel-options-DTDfU0R6.js → channel-options-CQ-gER0J.js} +1 -1
  25. package/dist/{channel-options-BBSsevyl.js → channel-options-SijIkAlT.js} +1 -1
  26. package/dist/{channel-web-BXl9jCKV.js → channel-web-7t1a2N13.js} +1 -1
  27. package/dist/{channel-web-SF18oYqo.js → channel-web-LLzBxZrT.js} +1 -1
  28. package/dist/{channels-cli-BiuWJpJu.js → channels-cli-D4xUEYYC.js} +6 -6
  29. package/dist/{channels-cli-BDLabpWH.js → channels-cli-DYaFNMme.js} +6 -6
  30. package/dist/{chrome-CZQnp4VH.js → chrome-CuBHInKC.js} +8 -8
  31. package/dist/{chrome-Dxm25ptH.js → chrome-OgCChbC_.js} +26 -26
  32. package/dist/{cli-CfgDCCuC.js → cli-CAID9zkL.js} +1 -1
  33. package/dist/{cli-DAZ1MKrJ.js → cli-Dlc9IFWZ.js} +1 -1
  34. package/dist/{command-registry-DkjNuW8w.js → command-registry-AHS8_9da.js} +9 -9
  35. package/dist/{commands-registry-B44COZFz.js → commands-registry-BJjv8_oR.js} +4 -4
  36. package/dist/{completion-cli-DbNma3J9.js → completion-cli-B8xjpHDs.js} +1 -1
  37. package/dist/{completion-cli-Du8H92bM.js → completion-cli-BR1r9_h4.js} +2 -2
  38. package/dist/{config-cli-CQhQ8Bcc.js → config-cli-D0A8Awoo.js} +1 -1
  39. package/dist/{config-cli-D16tlTWa.js → config-cli-D4Rxoozg.js} +1 -1
  40. package/dist/{configure-B9b3cQTC.js → configure-DOiI8_8c.js} +3 -3
  41. package/dist/{configure-B4TiK50K.js → configure-XmOqwwy9.js} +3 -3
  42. package/dist/control-ui/assets/{index-cM5P_3w7.js → index-BqxuPQOl.js} +2 -2
  43. package/dist/control-ui/assets/{index-cM5P_3w7.js.map → index-BqxuPQOl.js.map} +1 -1
  44. package/dist/control-ui/index.html +1 -1
  45. package/dist/{deliver-B4WWPQvt.js → deliver-6zfT7daI.js} +1 -1
  46. package/dist/{deliver-BcnsjbAB.js → deliver-DMTUTpTM.js} +21 -21
  47. package/dist/deliver-runtime-B80olQwJ.js +36 -0
  48. package/dist/{deliver-runtime-CeE1X9si.js → deliver-runtime-MBexxUuG.js} +3 -3
  49. package/dist/deps-send-discord.runtime-GIuvX7Xw.js +26 -0
  50. package/dist/deps-send-imessage.runtime-B3TC7G80.js +25 -0
  51. package/dist/deps-send-signal.runtime-CuVJyw7n.js +24 -0
  52. package/dist/deps-send-slack.runtime-cbfFoLZ4.js +22 -0
  53. package/dist/deps-send-telegram.runtime-CRyP-xDQ.js +27 -0
  54. package/dist/deps-send-whatsapp.runtime-4aOUBP2J.js +60 -0
  55. package/dist/{deps-send-whatsapp.runtime-B9uivfkM.js → deps-send-whatsapp.runtime-CETLGt-t.js} +3 -3
  56. package/dist/{deps-send-whatsapp.runtime-miTfQkK9.js → deps-send-whatsapp.runtime-CrxkfP31.js} +7 -7
  57. package/dist/{deps-send-whatsapp.runtime-CFnZsKW0.js → deps-send-whatsapp.runtime-__ogpmJj.js} +3 -3
  58. package/dist/{diagnostic-C2lklhkn.js → diagnostic-CnVwZNbm.js} +2 -2
  59. package/dist/{doctor-completion-ujZ_JdIz.js → doctor-completion-CZoEdMS-.js} +1 -1
  60. package/dist/{doctor-completion-CEiVFPte.js → doctor-completion-DhLEFUhN.js} +1 -1
  61. package/dist/entry.js +2 -2
  62. package/dist/{plugin-sdk/errors-B8oJXuCF.js → errors-kkRuS2Cs.js} +1 -1
  63. package/dist/extensionAPI.js +6 -6
  64. package/dist/{fetch-b8tSR7_e.js → fetch-DP-JjB6Z.js} +5 -5
  65. package/dist/{fetch-guard-D16tjNsZ.js → fetch-guard-BDy975wP.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-NXeo-J8r.js → gateway-cli-BJHBChfI.js} +8 -8
  69. package/dist/{gateway-cli-2jaWM_Ci.js → gateway-cli-BpHskeDd.js} +8 -8
  70. package/dist/{github-copilot-token-Cw3tAXM9.js → github-copilot-token-B5cPlwaz.js} +7 -7
  71. package/dist/{health-BPZALM__.js → health-TmpUGSqu.js} +1 -1
  72. package/dist/{health-DFZKMrW2.js → health-XFKFZ7ZJ.js} +1 -1
  73. package/dist/{hooks-cli-B3rkhWcT.js → hooks-cli-CXsZK8H9.js} +2 -2
  74. package/dist/{hooks-cli-BO_gZJVD.js → hooks-cli-DsDV-Pxz.js} +2 -2
  75. package/dist/{image-DKkuLtZ4.js → image-VgwN31FZ.js} +1 -1
  76. package/dist/{image-C-8Kd2Mh.js → image-kKMG59st.js} +6 -6
  77. package/dist/{image-ops-BoN1E_WZ.js → image-ops-Dg8iraUV.js} +2 -2
  78. package/dist/image-runtime-BqIv7p_K.js +29 -0
  79. package/dist/{image-runtime-BMavqm9n.js → image-runtime-CwMuTYvd.js} +3 -3
  80. package/dist/index.js +6 -6
  81. package/dist/{ir-Dut0zXyS.js → ir-CKK03mBV.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-DJ357UQV.js → login-CeKDrz6_.js} +5 -5
  86. package/dist/{login-qr-C0fDBnpM.js → login-qr-KbOpR0GQ.js} +10 -10
  87. package/dist/{manager-BPGhs30n.js → manager-DINhLnMi.js} +13 -13
  88. package/dist/manager-runtime-D6ckUNSs.js +18 -0
  89. package/dist/{model-selection-CHnojCCK.js → model-selection-DuNLFQPR.js} +43 -43
  90. package/dist/{models-Bb-GYqHr.js → models-5VXwJBU2.js} +2 -2
  91. package/dist/{models-cli-DffAz0ji.js → models-cli-Br56IHfy.js} +3 -3
  92. package/dist/{models-cli-CAIJM1Wh.js → models-cli-CrR1RN3j.js} +2 -2
  93. package/dist/{npm-resolution-D2_zGJM-.js → npm-resolution-CKtyq4FH.js} +1 -1
  94. package/dist/{npm-resolution-D5pBCkUw.js → npm-resolution-CPk7dS7F.js} +1 -1
  95. package/dist/{onboard-DcVsL9Jx.js → onboard-DUnBamC0.js} +2 -2
  96. package/dist/{onboard-channels-mNXKTvFs.js → onboard-channels-D45grihx.js} +1 -1
  97. package/dist/{onboard-channels-C-cQFUBH.js → onboard-channels-_kVo3Apf.js} +1 -1
  98. package/dist/{onboard-dhG2YBez.js → onboard-lFwpCpC3.js} +2 -2
  99. package/dist/{onboarding-B3-IwkNi.js → onboarding-CyCSQ__q.js} +3 -3
  100. package/dist/{onboarding-Cl6kW_iq.js → onboarding-EEd_g8Zg.js} +3 -3
  101. package/dist/{onboarding.finalize-CCU-ykTR.js → onboarding.finalize-CbMq7C4K.js} +5 -5
  102. package/dist/{onboarding.finalize-BZqsNG2H.js → onboarding.finalize-Cs1ukjFN.js} +6 -6
  103. package/dist/{outbound-qTioiTJg.js → outbound-C9svt6RH.js} +6 -6
  104. package/dist/{outbound-attachment-rlW7G5df.js → outbound-attachment-DwupUxYF.js} +2 -2
  105. package/dist/{path-alias-guards-Cpsiv2KL.js → path-alias-guards-DORgbZ1w.js} +1 -1
  106. package/dist/{paths-CSdAWKDO.js → paths-DA5srn0U.js} +5 -5
  107. package/dist/{paths-CXClY8zC.js → paths-DSd911Oe.js} +4 -4
  108. package/dist/{pi-embedded-B79nZERv.js → pi-embedded-BN8fghaF.js} +123 -26
  109. package/dist/{pi-embedded-C5U8Qxn6.js → pi-embedded-BiC4tIJ8.js} +266 -169
  110. package/dist/{pi-embedded-helpers-CEHpGDRs.js → pi-embedded-helpers-A9VYPVCH.js} +3 -3
  111. package/dist/{pi-embedded-helpers-DQ7IaeOi.js → pi-embedded-helpers-Di58J7Eh.js} +52 -52
  112. package/dist/{pi-model-discovery-o-WX5w2t.js → pi-model-discovery-V-InbjOM.js} +7 -7
  113. package/dist/pi-model-discovery-runtime--t6tAlar.js +11 -0
  114. package/dist/{pi-tools.before-tool-call.runtime-B_LUttg1.js → pi-tools.before-tool-call.runtime-Bpk4qTgV.js} +9 -9
  115. package/dist/{plugin-registry-CB47SSz1.js → plugin-registry-CXm125Uz.js} +1 -1
  116. package/dist/{plugin-registry-Gy_VByyf.js → plugin-registry-D3PnPE1D.js} +1 -1
  117. package/dist/plugin-sdk/{accounts-0kF5cxkn.js → accounts-C5PAuCTj.js} +2 -2
  118. package/dist/plugin-sdk/{accounts-u0-JAHzj.js → accounts-DC5cbH9r.js} +2 -2
  119. package/dist/plugin-sdk/{accounts-xZOA23tQ.js → accounts-DncG0Hx9.js} +3 -3
  120. package/dist/plugin-sdk/{active-listener-BO7eBEG_.js → active-listener-Bd3HH2km.js} +2 -2
  121. package/dist/plugin-sdk/agents/agent-tier.d.ts +22 -2
  122. package/dist/plugin-sdk/{api-key-rotation-C4C_mDsg.js → api-key-rotation-BAZ0GD26.js} +2 -2
  123. package/dist/plugin-sdk/{audio-preflight-C0q7lu6y.js → audio-preflight-tpVm-t9O.js} +26 -26
  124. package/dist/plugin-sdk/{audio-transcription-runner-Ced47O1H.js → audio-transcription-runner-DSScb434.js} +11 -11
  125. package/dist/plugin-sdk/{audit-membership-runtime-Xl20kCBe.js → audit-membership-runtime-DHQDvH4u.js} +2 -2
  126. package/dist/plugin-sdk/{channel-activity-CNffKOEQ.js → channel-activity-cYEaofTH.js} +3 -3
  127. package/dist/plugin-sdk/{channel-web-vB3Dcd8-.js → channel-web-CbeCrQ4C.js} +18 -18
  128. package/dist/plugin-sdk/{channel-web-BrhP6FQO.js → channel-web-CqiSEc52.js} +1 -1
  129. package/dist/plugin-sdk/{chrome-DJQWo149.js → chrome-DB2h0uN0.js} +6 -6
  130. package/dist/plugin-sdk/{commands-registry-_kBPE22q.js → commands-registry-DGZ1oFXJ.js} +4 -4
  131. package/dist/plugin-sdk/{common-J8vIST9Q.js → common-D5lLWoCW.js} +2 -2
  132. package/dist/plugin-sdk/compat.js +50 -50
  133. package/dist/plugin-sdk/{config-CnZ1TlEw.js → config-Bt-c7PWF.js} +7 -7
  134. package/dist/plugin-sdk/{deliver-Xh6voz9H.js → deliver-MvrkIeKJ.js} +10 -10
  135. package/dist/plugin-sdk/deliver-runtime-i50kjcNM.js +32 -0
  136. package/dist/plugin-sdk/deps-send-discord.runtime-hOYq9ov0.js +23 -0
  137. package/dist/plugin-sdk/deps-send-imessage.runtime-D5n9DXyL.js +22 -0
  138. package/dist/plugin-sdk/deps-send-signal.runtime-CwEaRyJU.js +21 -0
  139. package/dist/plugin-sdk/deps-send-slack.runtime-DOZeLIaC.js +19 -0
  140. package/dist/plugin-sdk/deps-send-telegram.runtime-BW1hSPKh.js +24 -0
  141. package/dist/plugin-sdk/{deps-send-whatsapp.runtime-Ce4Gzz-J.js → deps-send-whatsapp.runtime-DvxhnHR_.js} +3 -3
  142. package/dist/plugin-sdk/deps-send-whatsapp.runtime-JKmTtCFM.js +57 -0
  143. package/dist/plugin-sdk/{diagnostic-DKsyROPi.js → diagnostic-B6F3BtCX.js} +2 -2
  144. package/dist/plugin-sdk/{errors-CgRPdp3o.js → errors-9oVz7reJ.js} +1 -1
  145. package/dist/plugin-sdk/{fetch-guard-BBAT8G-1.js → fetch-guard-cfPCfkrw.js} +2 -2
  146. package/dist/plugin-sdk/{fs-safe-DqCO1D4C.js → fs-safe-DFbwq9CS.js} +3 -3
  147. package/dist/plugin-sdk/{image-4ay2cw7G.js → image-FK5xhY5u.js} +6 -6
  148. package/dist/plugin-sdk/{image-ops-G8KoEfY8.js → image-ops-BSYgrL7E.js} +2 -2
  149. package/dist/plugin-sdk/image-runtime-B95EPFpg.js +25 -0
  150. package/dist/plugin-sdk/index.js +2 -2
  151. package/dist/plugin-sdk/{ir-DXj1KGnL.js → ir-CWmryq5f.js} +7 -7
  152. package/dist/plugin-sdk/{local-roots-ovKHgVSP.js → local-roots-U25IdeDH.js} +4 -4
  153. package/dist/plugin-sdk/{logger-DIb2cGHp.js → logger-Bg4vIUJn.js} +2 -2
  154. package/dist/plugin-sdk/{login-Cgtm70by.js → login-8qzl2H7G.js} +4 -4
  155. package/dist/plugin-sdk/{login-qr-BrixqhMx.js → login-qr-kalCTJEw.js} +5 -5
  156. package/dist/plugin-sdk/{manager-PEQ_cPYF.js → manager-ijYHktIt.js} +8 -8
  157. package/dist/plugin-sdk/manager-runtime--JrLQE03.js +15 -0
  158. package/dist/plugin-sdk/{outbound-BK75h9CQ.js → outbound-BIVf0aPq.js} +5 -5
  159. package/dist/plugin-sdk/{outbound-attachment-BI1QngTS.js → outbound-attachment-F5tzeNUD.js} +2 -2
  160. package/dist/plugin-sdk/{path-alias-guards-TnxupPQC.js → path-alias-guards-DA0MhfkG.js} +1 -1
  161. package/dist/plugin-sdk/{paths-B7_75Pdr.js → paths-CP67O8eN.js} +1 -1
  162. package/dist/plugin-sdk/{pi-embedded-helpers-BioULNev.js → pi-embedded-helpers-CxMnPQ37.js} +16 -16
  163. package/dist/plugin-sdk/{pi-model-discovery-BMmAbnil.js → pi-model-discovery-8OL77kCh.js} +1 -1
  164. package/dist/plugin-sdk/pi-model-discovery-runtime-DGRFpUfd.js +8 -0
  165. package/dist/plugin-sdk/{pi-tools.before-tool-call.runtime-rdRqZ9lk.js → pi-tools.before-tool-call.runtime-B7FW36KX.js} +4 -4
  166. package/dist/plugin-sdk/{plugins-BqKpJkqt.js → plugins-D3mrhffi.js} +4 -4
  167. package/dist/plugin-sdk/{proxy-env-C4s12rr8.js → proxy-env-CUUXO6rv.js} +1 -1
  168. package/dist/plugin-sdk/{proxy-fetch-ZPEvp58f.js → proxy-fetch-Cf3IUSDw.js} +1 -1
  169. package/dist/plugin-sdk/{pw-ai-Cb0ZDSq4.js → pw-ai-dPmKdw_w.js} +9 -9
  170. package/dist/plugin-sdk/{qmd-manager-Bei6TaFq.js → qmd-manager-Ov9ElEfG.js} +7 -7
  171. package/dist/plugin-sdk/{query-expansion-POz2za8a.js → query-expansion-CzjwW461.js} +4 -4
  172. package/dist/plugin-sdk/{redact-9WsNyb7S.js → redact-DfACyt0X.js} +1 -1
  173. package/dist/plugin-sdk/{reply-DxvpiQBp.js → reply-BczXGzC_.js} +137 -40
  174. package/dist/plugin-sdk/{reply-sFKB3ofA.js → reply-Dfjh1YtV.js} +206 -109
  175. package/dist/plugin-sdk/{resolve-outbound-target-DL1adXpk.js → resolve-outbound-target-BeIB_jm0.js} +2 -2
  176. package/dist/plugin-sdk/{run-with-concurrency-DmTrN5JG.js → run-with-concurrency-kVooFCVo.js} +1 -1
  177. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-B6EcC22F.js +10 -0
  178. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-DH8J0Ie7.js +19 -0
  179. package/dist/plugin-sdk/{send-BCVXt-3e.js → send-CgkNzAhS.js} +8 -8
  180. package/dist/plugin-sdk/{send-CAG0Or0G.js → send-CuENGOhq.js} +7 -7
  181. package/dist/plugin-sdk/{send-X6QuS7x0.js → send-D6Uh2D1D.js} +5 -5
  182. package/dist/plugin-sdk/{send-BNePC8CO.js → send-DV5kR0Hg.js} +6 -6
  183. package/dist/plugin-sdk/{send-DhGDAZnT.js → send-DtA6ngBJ.js} +13 -13
  184. package/dist/plugin-sdk/{session-CAqYQVhe.js → session-CnlZn-bR.js} +3 -3
  185. package/dist/plugin-sdk/{skill-commands-Bk-IFyNw.js → skill-commands-Ckfii7h8.js} +4 -4
  186. package/dist/plugin-sdk/{skills-C5bT9-q4.js → skills-v0WQqKTa.js} +6 -6
  187. package/dist/plugin-sdk/slash-commands.runtime-BYoxsxkX.js +13 -0
  188. package/dist/plugin-sdk/{slash-dispatch.runtime-Dyb_EkUt.js → slash-dispatch.runtime-DOo1IzuY.js} +1 -1
  189. package/dist/plugin-sdk/slash-dispatch.runtime-JfFr7bNy.js +52 -0
  190. package/dist/plugin-sdk/slash-skill-commands.runtime-D0399tia.js +16 -0
  191. package/dist/plugin-sdk/{store-D3lgWnS2.js → store-C_UrNuM3.js} +2 -2
  192. package/dist/plugin-sdk/{subagent-registry-runtime-hdnabonI.js → subagent-registry-runtime-DLvup9ph.js} +1 -1
  193. package/dist/plugin-sdk/subagent-registry-runtime-DVl5xKOW.js +52 -0
  194. package/dist/plugin-sdk/{tables-Dmlu4_q_.js → tables-CJP05iMa.js} +1 -1
  195. package/dist/plugin-sdk/{thinking-DRNOh5Xx.js → thinking-BhP3vn1l.js} +7 -7
  196. package/dist/plugin-sdk/{tokens-CTIYTLWu.js → tokens-DAL_5WHL.js} +1 -1
  197. package/dist/plugin-sdk/{tool-images-GSlvf6RP.js → tool-images-ZE5G5UM0.js} +2 -2
  198. package/dist/plugin-sdk/{web-D9LAdsuU.js → web-C2Sj2WW0.js} +2 -2
  199. package/dist/plugin-sdk/web-CNY_ky8h.js +56 -0
  200. package/dist/plugin-sdk/{whatsapp-actions-BCJYmWCB.js → whatsapp-actions-DJmx6ihj.js} +17 -17
  201. package/dist/plugin-sdk/whatsapp.js +50 -50
  202. package/dist/{plugins-AqsVZZk3.js → plugins-DvejjZnJ.js} +11 -11
  203. package/dist/{plugins-cli-BYnoJwF1.js → plugins-cli-BA_2daJe.js} +2 -2
  204. package/dist/{plugins-cli-gtgkmDcv.js → plugins-cli-C0WKWrZo.js} +2 -2
  205. package/dist/{program-BGlgDpHI.js → program-D_xdLzmM.js} +7 -7
  206. package/dist/{program-context-M4FTWqqg.js → program-context-DfmCIQ91.js} +17 -17
  207. package/dist/{prompt-select-styled-AL5Tm3yO.js → prompt-select-styled-ApPSadr5.js} +4 -4
  208. package/dist/{prompt-select-styled-BVC2byQV.js → prompt-select-styled-BsheNEnh.js} +4 -4
  209. package/dist/{provider-auth-helpers-DDgrFku5.js → provider-auth-helpers-B5kD4Lt6.js} +1 -1
  210. package/dist/{provider-auth-helpers-Q7aIhDgv.js → provider-auth-helpers-DpOFkV28.js} +1 -1
  211. package/dist/{proxy-env-DXXfs2WL.js → proxy-env-D-fike7s.js} +1 -1
  212. package/dist/{plugin-sdk/proxy-fetch-Dt5BedH8.js → proxy-fetch-lH6RsRTE.js} +1 -1
  213. package/dist/{push-apns-Ga8xvhkh.js → push-apns-BbenjEX4.js} +1 -1
  214. package/dist/{push-apns-FyGbUyh2.js → push-apns-Ci2sdIKf.js} +1 -1
  215. package/dist/{pw-ai-GOBxzChI.js → pw-ai-B8ymIYub.js} +14 -14
  216. package/dist/{pw-ai-Du22SYoO.js → pw-ai-CM87tQwG.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-koAXw1ay.js → register.agent-CY6R-7fn.js} +6 -6
  221. package/dist/{register.agent-zP8a-sNB.js → register.agent-Dk_5V5oA.js} +7 -7
  222. package/dist/{register.configure-CUuP5J8W.js → register.configure-C8OFfGln.js} +7 -7
  223. package/dist/{register.configure-CYrmyjlf.js → register.configure-DT1RLeTR.js} +7 -7
  224. package/dist/{register.maintenance-BZuEljPU.js → register.maintenance-CluQOq8b.js} +8 -8
  225. package/dist/{register.maintenance-ByEQ2CVH.js → register.maintenance-YHXmOQzf.js} +7 -7
  226. package/dist/{register.message-BkSXhv9I.js → register.message-BCTXT5yK.js} +2 -2
  227. package/dist/{register.message-CgHfmDHm.js → register.message-BuoFjRqA.js} +2 -2
  228. package/dist/{register.onboard-HcQwPAEK.js → register.onboard-BJaRMtxU.js} +2 -2
  229. package/dist/{register.onboard-4ke40MNP.js → register.onboard-C64oXnvq.js} +2 -2
  230. package/dist/{register.setup-B41xZb1r.js → register.setup-Dl3nk2Ui.js} +2 -2
  231. package/dist/{register.setup-xAb7Cvzy.js → register.setup-Drc55K_w.js} +2 -2
  232. package/dist/{register.status-health-sessions-CcOVL0x8.js → register.status-health-sessions-BHtbPeCO.js} +3 -3
  233. package/dist/{register.status-health-sessions-BbHAAKwv.js → register.status-health-sessions-xgC_gtEM.js} +3 -3
  234. package/dist/{register.subclis-_uSASnfC.js → register.subclis-CDMFyaKR.js} +9 -9
  235. package/dist/{reply-BFTOdZcK.js → reply-DwjHsBuj.js} +137 -40
  236. package/dist/{run-main-C1eZrW-5.js → run-main-BcA22Ipv.js} +14 -14
  237. package/dist/{run-with-concurrency-FczpX8ng.js → run-with-concurrency-BFR3ReeF.js} +4 -4
  238. package/dist/runtime-whatsapp-login.runtime-DxV9iv6l.js +13 -0
  239. package/dist/runtime-whatsapp-outbound.runtime-DQqIlwhS.js +22 -0
  240. package/dist/{send-Bx9CqcZr.js → send-4nRsZJXH.js} +7 -7
  241. package/dist/{send-D5D0ZGht.js → send-BGlcHjUD.js} +26 -26
  242. package/dist/{send-DtHQ7_6Z.js → send-BTUU1jWM.js} +8 -8
  243. package/dist/{send-B9H0BkfO.js → send-DdBbRpTP.js} +6 -6
  244. package/dist/{send-B5QEmMJ4.js → send-dTQd-IyJ.js} +5 -5
  245. package/dist/{server-node-events-pYrJmi9w.js → server-node-events-Q0cT2ifj.js} +2 -2
  246. package/dist/{server-node-events-DbS1jJ5j.js → server-node-events-YN5eJeHa.js} +2 -2
  247. package/dist/{session-DLTCuoUD.js → session-CnCwDJke.js} +8 -8
  248. package/dist/{skill-commands-BwTLQRR8.js → skill-commands-Cz45_nme.js} +9 -9
  249. package/dist/{skills-B9N2bqKU.js → skills-CdCS1HeL.js} +22 -22
  250. package/dist/slash-commands.runtime-CZz6v6b3.js +16 -0
  251. package/dist/{slash-dispatch.runtime-PX9_08Hm.js → slash-dispatch.runtime-BOMEVFk0.js} +1 -1
  252. package/dist/{slash-dispatch.runtime-DmFVOi3w.js → slash-dispatch.runtime-DB1QsBRc.js} +1 -1
  253. package/dist/slash-dispatch.runtime-SO7HOe8q.js +56 -0
  254. package/dist/{slash-dispatch.runtime-BGXbtMX6.js → slash-dispatch.runtime-sXaUYn4v.js} +6 -6
  255. package/dist/slash-skill-commands.runtime-Bawt7j0r.js +20 -0
  256. package/dist/{status-DtiapFqq.js → status-Bh5x6DsW.js} +2 -2
  257. package/dist/{status-B4eVRJcO.js → status-cU9cJReo.js} +2 -2
  258. package/dist/{store-CvQ41zCV.js → store-D9z0dn7D.js} +2 -2
  259. package/dist/{subagent-registry-Ctrhw4X-.js → subagent-registry-CIgFD2oi.js} +103 -6
  260. package/dist/{subagent-registry-runtime-CezPaX9P.js → subagent-registry-runtime-232sNNT6.js} +6 -6
  261. package/dist/subagent-registry-runtime-D2rUxU5J.js +56 -0
  262. package/dist/{subagent-registry-runtime-Cy7dsGqF.js → subagent-registry-runtime-D7ubAnDZ.js} +1 -1
  263. package/dist/{subagent-registry-runtime-CTjx4TK5.js → subagent-registry-runtime-DGTjU9Lb.js} +1 -1
  264. package/dist/{subsystem-BaLYRf7D.js → subsystem-6v7sWnAD.js} +14 -14
  265. package/dist/{tables-BRYYxYs7.js → tables-BTFiZyRU.js} +1 -1
  266. package/dist/{target-errors-D0ZJUbbf.js → target-errors-DgNRx3Nr.js} +2 -2
  267. package/dist/{thinking-B-A99X3F.js → thinking-B75CXkTT.js} +7 -7
  268. package/dist/{tokens-D2XhLqIz.js → tokens-DfbMVF9y.js} +1 -1
  269. package/dist/{tool-images-Zn6jVmkX.js → tool-images-Dp5OiXeA.js} +2 -2
  270. package/dist/{update-cli-_FsTRdQZ.js → update-cli-CktBOXZF.js} +7 -7
  271. package/dist/{update-cli-DLOWRdjv.js → update-cli-DM_dUip_.js} +8 -8
  272. package/dist/{update-runner-BY3l7ytB.js → update-runner-BBJZmfZ4.js} +1 -1
  273. package/dist/{update-runner-BKWHnVYI.js → update-runner-BYGPkHXG.js} +1 -1
  274. package/dist/{web-BdZ3mX3p.js → web-CZhZC1EA.js} +2 -2
  275. package/dist/{web-B46aOGK0.js → web-Chw1dtKA.js} +6 -6
  276. package/dist/{web-BNfDYvlW.js → web-DWRZAXj9.js} +2 -2
  277. package/dist/{web-1D0d1RHD.js → web-QsxgXbNK.js} +55 -55
  278. package/dist/{whatsapp-actions-Cuy0qeQK.js → whatsapp-actions-CzqsuSGx.js} +21 -21
  279. package/dist/{workspace-TqfVSQuO.js → workspace-kVMIaBrV.js} +20 -20
  280. package/extensions/acpx/node_modules/.bin/acpx +2 -2
  281. package/extensions/diagnostics-otel/node_modules/.bin/acorn +2 -2
  282. package/extensions/diffs/node_modules/.bin/playwright-core +2 -2
  283. package/extensions/googlechat/node_modules/.bin/squidclaw +2 -2
  284. package/extensions/matrix/node_modules/.bin/markdown-it +2 -2
  285. package/extensions/memory-core/node_modules/.bin/squidclaw +2 -2
  286. package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +2 -2
  287. package/extensions/memory-lancedb/node_modules/.bin/openai +2 -2
  288. package/extensions/nostr/node_modules/.bin/tsc +2 -2
  289. package/extensions/nostr/node_modules/.bin/tsserver +2 -2
  290. package/extensions/tlon/node_modules/.bin/tlon +2 -2
  291. package/package.json +1 -1
  292. package/dist/api-key-rotation-TRwuCWbu.js +0 -181
  293. package/dist/canvas-host/a2ui/.bundle.hash +0 -1
  294. package/dist/deliver-runtime-_mBfV_4S.js +0 -36
  295. package/dist/deps-send-discord.runtime-CUTAK2hy.js +0 -26
  296. package/dist/deps-send-imessage.runtime-CQOiEIuA.js +0 -25
  297. package/dist/deps-send-signal.runtime-wN7MkzLw.js +0 -24
  298. package/dist/deps-send-slack.runtime-HEEwW4uU.js +0 -22
  299. package/dist/deps-send-telegram.runtime-DHlcnjQO.js +0 -27
  300. package/dist/deps-send-whatsapp.runtime-Cw7U9orE.js +0 -60
  301. package/dist/errors-DfgAh2Ml.js +0 -54
  302. package/dist/export-html/vendor/highlight.min.js +0 -1213
  303. package/dist/export-html/vendor/marked.min.js +0 -6
  304. package/dist/image-runtime-D11wBIC8.js +0 -29
  305. package/dist/manager-runtime-BB9lcoFR.js +0 -18
  306. package/dist/pi-model-discovery-runtime-DBkQoIJw.js +0 -11
  307. package/dist/plugin-sdk/accounts-CUEuUR3C.js +0 -46
  308. package/dist/plugin-sdk/accounts-D0W2pELU.js +0 -288
  309. package/dist/plugin-sdk/accounts-ucj0odJq.js +0 -35
  310. package/dist/plugin-sdk/active-listener-C5xPUSTb.js +0 -50
  311. package/dist/plugin-sdk/audio-preflight-Cqdo0JKm.js +0 -69
  312. package/dist/plugin-sdk/audio-transcription-runner-DnEooIyE.js +0 -2176
  313. package/dist/plugin-sdk/audit-membership-runtime-B9b-zRwg.js +0 -58
  314. package/dist/plugin-sdk/channel-activity-BMWLw4o2.js +0 -94
  315. package/dist/plugin-sdk/channel-web-D9WdAFlv.js +0 -2256
  316. package/dist/plugin-sdk/chrome-CV-q0Lmc.js +0 -2415
  317. package/dist/plugin-sdk/commands-registry-e7YoqrbP.js +0 -1125
  318. package/dist/plugin-sdk/config-B2B64aX0.js +0 -17911
  319. package/dist/plugin-sdk/deliver-BkyBtcLR.js +0 -1694
  320. package/dist/plugin-sdk/deliver-runtime-5UVcSskg.js +0 -32
  321. package/dist/plugin-sdk/deliver-runtime-O4lwAWMw.js +0 -32
  322. package/dist/plugin-sdk/deps-send-discord.runtime-BAeeBldY.js +0 -23
  323. package/dist/plugin-sdk/deps-send-discord.runtime-DTspXSCt.js +0 -23
  324. package/dist/plugin-sdk/deps-send-imessage.runtime-EL-CfikZ.js +0 -22
  325. package/dist/plugin-sdk/deps-send-imessage.runtime-qThAwDEe.js +0 -22
  326. package/dist/plugin-sdk/deps-send-signal.runtime-BeemHeUu.js +0 -21
  327. package/dist/plugin-sdk/deps-send-signal.runtime-DnjnVzZF.js +0 -21
  328. package/dist/plugin-sdk/deps-send-slack.runtime-CbKevLnv.js +0 -19
  329. package/dist/plugin-sdk/deps-send-slack.runtime-DTttkC0N.js +0 -19
  330. package/dist/plugin-sdk/deps-send-telegram.runtime-C6y29O9E.js +0 -24
  331. package/dist/plugin-sdk/deps-send-telegram.runtime-Dsf9Cnka.js +0 -24
  332. package/dist/plugin-sdk/deps-send-whatsapp.runtime-CCS71r77.js +0 -57
  333. package/dist/plugin-sdk/deps-send-whatsapp.runtime-CuxKhIE0.js +0 -57
  334. package/dist/plugin-sdk/diagnostic-DPRVoKTk.js +0 -319
  335. package/dist/plugin-sdk/fetch-guard-F0Fnqisy.js +0 -156
  336. package/dist/plugin-sdk/fs-safe-Dqmpk-Fr.js +0 -352
  337. package/dist/plugin-sdk/image-cBW8L8pp.js +0 -2310
  338. package/dist/plugin-sdk/image-ops-BP8ix1GC.js +0 -584
  339. package/dist/plugin-sdk/image-runtime-9xkgSlNz.js +0 -25
  340. package/dist/plugin-sdk/image-runtime-CpfepTDc.js +0 -25
  341. package/dist/plugin-sdk/ir-DWEc6zOp.js +0 -1296
  342. package/dist/plugin-sdk/local-roots-BIPT8uAO.js +0 -186
  343. package/dist/plugin-sdk/logger-DDdrdbDu.js +0 -1163
  344. package/dist/plugin-sdk/login-BMTiGutN.js +0 -57
  345. package/dist/plugin-sdk/login-qr-BFxqYUkc.js +0 -320
  346. package/dist/plugin-sdk/manager-BD-aYaZ8.js +0 -3917
  347. package/dist/plugin-sdk/manager-runtime-BmgTeb5G.js +0 -15
  348. package/dist/plugin-sdk/manager-runtime-C5bRwUlz.js +0 -15
  349. package/dist/plugin-sdk/outbound-Bm07xvO6.js +0 -212
  350. package/dist/plugin-sdk/outbound-attachment-DLsaxDsc.js +0 -19
  351. package/dist/plugin-sdk/path-alias-guards-gBhrAn14.js +0 -43
  352. package/dist/plugin-sdk/paths-C6W4VHoa.js +0 -166
  353. package/dist/plugin-sdk/pi-embedded-helpers-BExwPvTh.js +0 -9627
  354. package/dist/plugin-sdk/pi-model-discovery-DdctvBeX.js +0 -134
  355. package/dist/plugin-sdk/pi-model-discovery-runtime-COnuGwZt.js +0 -8
  356. package/dist/plugin-sdk/pi-model-discovery-runtime-DrtpLJjk.js +0 -8
  357. package/dist/plugin-sdk/pi-tools.before-tool-call.runtime-rgTz3FBl.js +0 -354
  358. package/dist/plugin-sdk/plugins-BN64HHZA.js +0 -864
  359. package/dist/plugin-sdk/pw-ai-DBm3RdBK.js +0 -1938
  360. package/dist/plugin-sdk/qmd-manager-6bozlfFg.js +0 -1448
  361. package/dist/plugin-sdk/query-expansion-eeVz_aEm.js +0 -1011
  362. package/dist/plugin-sdk/redact-BoNEjbpF.js +0 -319
  363. package/dist/plugin-sdk/reply-CqXMy3Yd.js +0 -98731
  364. package/dist/plugin-sdk/resolve-outbound-target-DXfjGlZQ.js +0 -40
  365. package/dist/plugin-sdk/run-with-concurrency-5DMu9szx.js +0 -1994
  366. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-99sCh8RG.js +0 -10
  367. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-D2hkJBa-.js +0 -10
  368. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-C06I4adi.js +0 -19
  369. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-dTkDaXHl.js +0 -19
  370. package/dist/plugin-sdk/send-B9xnwtQ-.js +0 -540
  371. package/dist/plugin-sdk/send-BxySs-Cu.js +0 -2587
  372. package/dist/plugin-sdk/send-D9THKp_J.js +0 -414
  373. package/dist/plugin-sdk/send-DCuaaP2w.js +0 -503
  374. package/dist/plugin-sdk/send-Dm_-_xje.js +0 -3135
  375. package/dist/plugin-sdk/session-DDzIZHxt.js +0 -169
  376. package/dist/plugin-sdk/skill-commands-DRvqtuFC.js +0 -342
  377. package/dist/plugin-sdk/skills-BWwlfbVj.js +0 -1428
  378. package/dist/plugin-sdk/slash-commands.runtime-BzYsaTST.js +0 -13
  379. package/dist/plugin-sdk/slash-commands.runtime-EAZKpRKq.js +0 -13
  380. package/dist/plugin-sdk/slash-dispatch.runtime-BC3IAF-I.js +0 -52
  381. package/dist/plugin-sdk/slash-dispatch.runtime-C7u7mlny.js +0 -52
  382. package/dist/plugin-sdk/slash-skill-commands.runtime-DGd_JSWX.js +0 -16
  383. package/dist/plugin-sdk/slash-skill-commands.runtime-sg98L8BK.js +0 -16
  384. package/dist/plugin-sdk/ssrf-DOBwjFow.js +0 -202
  385. package/dist/plugin-sdk/store-BKDR_-Qk.js +0 -81
  386. package/dist/plugin-sdk/subagent-registry-runtime-B6l6PxqP.js +0 -52
  387. package/dist/plugin-sdk/subagent-registry-runtime-Ceu7AzWi.js +0 -52
  388. package/dist/plugin-sdk/tables-GIj79us5.js +0 -55
  389. package/dist/plugin-sdk/target-errors-jlLHihbX.js +0 -195
  390. package/dist/plugin-sdk/thinking-BgdUnMZ2.js +0 -1206
  391. package/dist/plugin-sdk/tokens-CLE20fRI.js +0 -52
  392. package/dist/plugin-sdk/tool-images-BY1gsRyE.js +0 -274
  393. package/dist/plugin-sdk/web-BK2-uaOo.js +0 -56
  394. package/dist/plugin-sdk/web-Bnn82S4u.js +0 -56
  395. package/dist/plugin-sdk/whatsapp-actions-DQpK_5Ds.js +0 -80
  396. package/dist/proxy-fetch-C2v-Utgg.js +0 -38
  397. package/dist/runtime-whatsapp-login.runtime-DumUjKRz.js +0 -13
  398. package/dist/runtime-whatsapp-outbound.runtime-Cgu2MfqR.js +0 -22
  399. package/dist/slash-commands.runtime-CjBXruwG.js +0 -16
  400. package/dist/slash-dispatch.runtime-DqZVfX4H.js +0 -56
  401. package/dist/slash-skill-commands.runtime-DYK20Lxf.js +0 -20
  402. package/dist/subagent-registry-runtime-BIKGAzgI.js +0 -56
  403. package/docs/reference/templates/IDENTITY.md +0 -29
  404. package/docs/reference/templates/USER.md +0 -23
  405. package/docs/zh-CN/reference/templates/IDENTITY.md +0 -36
  406. package/docs/zh-CN/reference/templates/USER.md +0 -30
  407. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +0 -178
@@ -1,864 +0,0 @@
1
- import { $ as normalizeAgentId, at as DEFAULT_ACCOUNT_ID, l as resolveDefaultAgentId, ot as normalizeAccountId, st as normalizeOptionalAccountId } from "./run-with-concurrency-5DMu9szx.js";
2
- import { i as resolveWhatsAppAccount, v as resolveAccountEntry, y as createAccountListHelpers } from "./accounts-D0W2pELU.js";
3
- import { Ct as normalizeChatChannelId, Dt as requireActivePluginRegistry, Et as getActivePluginRegistryVersion, Ur as normalizeResolvedSecretInputString, ei as isTruthyEnvValue, vt as CHAT_CHANNEL_ORDER, xt as normalizeAnyChannelId } from "./config-B2B64aX0.js";
4
- import { S as normalizeE164, a as createSubsystemLogger } from "./logger-DDdrdbDu.js";
5
- import fs from "node:fs";
6
- import util from "node:util";
7
-
8
- //#region src/channels/chat-type.ts
9
- function normalizeChatType(raw) {
10
- const value = raw?.trim().toLowerCase();
11
- if (!value) return;
12
- if (value === "direct" || value === "dm") return "direct";
13
- if (value === "group") return "group";
14
- if (value === "channel") return "channel";
15
- }
16
-
17
- //#endregion
18
- //#region src/channels/plugins/account-action-gate.ts
19
- function createAccountActionGate(params) {
20
- return (key, defaultValue = true) => {
21
- const accountValue = params.accountActions?.[key];
22
- if (accountValue !== void 0) return accountValue;
23
- const baseValue = params.baseActions?.[key];
24
- if (baseValue !== void 0) return baseValue;
25
- return defaultValue;
26
- };
27
- }
28
-
29
- //#endregion
30
- //#region src/discord/token.ts
31
- function normalizeDiscordToken(raw, path) {
32
- const trimmed = normalizeResolvedSecretInputString({
33
- value: raw,
34
- path
35
- });
36
- if (!trimmed) return;
37
- return trimmed.replace(/^Bot\s+/i, "");
38
- }
39
- function resolveDiscordToken(cfg, opts = {}) {
40
- const accountId = normalizeAccountId(opts.accountId);
41
- const discordCfg = cfg?.channels?.discord;
42
- const resolveAccountCfg = (id) => {
43
- const accounts = discordCfg?.accounts;
44
- if (!accounts || typeof accounts !== "object" || Array.isArray(accounts)) return;
45
- const direct = accounts[id];
46
- if (direct) return direct;
47
- const matchKey = Object.keys(accounts).find((key) => normalizeAccountId(key) === id);
48
- return matchKey ? accounts[matchKey] : void 0;
49
- };
50
- const accountCfg = resolveAccountCfg(accountId);
51
- const hasAccountToken = Boolean(accountCfg && Object.prototype.hasOwnProperty.call(accountCfg, "token"));
52
- const accountToken = normalizeDiscordToken(accountCfg?.token ?? void 0, `channels.discord.accounts.${accountId}.token`);
53
- if (accountToken) return {
54
- token: accountToken,
55
- source: "config"
56
- };
57
- if (hasAccountToken) return {
58
- token: "",
59
- source: "none"
60
- };
61
- const configToken = normalizeDiscordToken(discordCfg?.token ?? void 0, "channels.discord.token");
62
- if (configToken) return {
63
- token: configToken,
64
- source: "config"
65
- };
66
- const envToken = accountId === DEFAULT_ACCOUNT_ID ? normalizeDiscordToken(opts.envToken ?? process.env.DISCORD_BOT_TOKEN, "DISCORD_BOT_TOKEN") : void 0;
67
- if (envToken) return {
68
- token: envToken,
69
- source: "env"
70
- };
71
- return {
72
- token: "",
73
- source: "none"
74
- };
75
- }
76
-
77
- //#endregion
78
- //#region src/discord/accounts.ts
79
- const { listAccountIds: listAccountIds$1, resolveDefaultAccountId: resolveDefaultAccountId$1 } = createAccountListHelpers("discord");
80
- const listDiscordAccountIds = listAccountIds$1;
81
- const resolveDefaultDiscordAccountId = resolveDefaultAccountId$1;
82
- function resolveAccountConfig$2(cfg, accountId) {
83
- return resolveAccountEntry(cfg.channels?.discord?.accounts, accountId);
84
- }
85
- function mergeDiscordAccountConfig(cfg, accountId) {
86
- const { accounts: _ignored, ...base } = cfg.channels?.discord ?? {};
87
- const account = resolveAccountConfig$2(cfg, accountId) ?? {};
88
- return {
89
- ...base,
90
- ...account
91
- };
92
- }
93
- function createDiscordActionGate(params) {
94
- const accountId = normalizeAccountId(params.accountId);
95
- return createAccountActionGate({
96
- baseActions: params.cfg.channels?.discord?.actions,
97
- accountActions: resolveAccountConfig$2(params.cfg, accountId)?.actions
98
- });
99
- }
100
- function resolveDiscordAccount(params) {
101
- const accountId = normalizeAccountId(params.accountId);
102
- const baseEnabled = params.cfg.channels?.discord?.enabled !== false;
103
- const merged = mergeDiscordAccountConfig(params.cfg, accountId);
104
- const accountEnabled = merged.enabled !== false;
105
- const enabled = baseEnabled && accountEnabled;
106
- const tokenResolution = resolveDiscordToken(params.cfg, { accountId });
107
- return {
108
- accountId,
109
- enabled,
110
- name: merged.name?.trim() || void 0,
111
- token: tokenResolution.token,
112
- tokenSource: tokenResolution.source,
113
- config: merged
114
- };
115
- }
116
- function listEnabledDiscordAccounts(cfg) {
117
- return listDiscordAccountIds(cfg).map((accountId) => resolveDiscordAccount({
118
- cfg,
119
- accountId
120
- })).filter((account) => account.enabled);
121
- }
122
-
123
- //#endregion
124
- //#region src/whatsapp/normalize.ts
125
- const WHATSAPP_USER_JID_RE = /^(\d+)(?::\d+)?@s\.whatsapp\.net$/i;
126
- const WHATSAPP_LID_RE = /^(\d+)@lid$/i;
127
- function stripWhatsAppTargetPrefixes(value) {
128
- let candidate = value.trim();
129
- for (;;) {
130
- const before = candidate;
131
- candidate = candidate.replace(/^whatsapp:/i, "").trim();
132
- if (candidate === before) return candidate;
133
- }
134
- }
135
- function isWhatsAppGroupJid(value) {
136
- const candidate = stripWhatsAppTargetPrefixes(value);
137
- if (!candidate.toLowerCase().endsWith("@g.us")) return false;
138
- const localPart = candidate.slice(0, candidate.length - 5);
139
- if (!localPart || localPart.includes("@")) return false;
140
- return /^[0-9]+(-[0-9]+)*$/.test(localPart);
141
- }
142
- /**
143
- * Check if value looks like a WhatsApp user target (e.g. "41796666864:0@s.whatsapp.net" or "123@lid").
144
- */
145
- function isWhatsAppUserTarget(value) {
146
- const candidate = stripWhatsAppTargetPrefixes(value);
147
- return WHATSAPP_USER_JID_RE.test(candidate) || WHATSAPP_LID_RE.test(candidate);
148
- }
149
- /**
150
- * Extract the phone number from a WhatsApp user JID.
151
- * "41796666864:0@s.whatsapp.net" -> "41796666864"
152
- * "123456@lid" -> "123456"
153
- */
154
- function extractUserJidPhone(jid) {
155
- const userMatch = jid.match(WHATSAPP_USER_JID_RE);
156
- if (userMatch) return userMatch[1];
157
- const lidMatch = jid.match(WHATSAPP_LID_RE);
158
- if (lidMatch) return lidMatch[1];
159
- return null;
160
- }
161
- function normalizeWhatsAppTarget(value) {
162
- const candidate = stripWhatsAppTargetPrefixes(value);
163
- if (!candidate) return null;
164
- if (isWhatsAppGroupJid(candidate)) return `${candidate.slice(0, candidate.length - 5)}@g.us`;
165
- if (isWhatsAppUserTarget(candidate)) {
166
- const phone = extractUserJidPhone(candidate);
167
- if (!phone) return null;
168
- const normalized = normalizeE164(phone);
169
- return normalized.length > 1 ? normalized : null;
170
- }
171
- if (candidate.includes("@")) return null;
172
- const normalized = normalizeE164(candidate);
173
- return normalized.length > 1 ? normalized : null;
174
- }
175
-
176
- //#endregion
177
- //#region src/slack/token.ts
178
- function resolveSlackBotToken(raw, path = "channels.slack.botToken") {
179
- return normalizeResolvedSecretInputString({
180
- value: raw,
181
- path
182
- });
183
- }
184
- function resolveSlackAppToken(raw, path = "channels.slack.appToken") {
185
- return normalizeResolvedSecretInputString({
186
- value: raw,
187
- path
188
- });
189
- }
190
- function resolveSlackUserToken(raw, path = "channels.slack.userToken") {
191
- return normalizeResolvedSecretInputString({
192
- value: raw,
193
- path
194
- });
195
- }
196
-
197
- //#endregion
198
- //#region src/slack/accounts.ts
199
- const { listAccountIds, resolveDefaultAccountId } = createAccountListHelpers("slack");
200
- const listSlackAccountIds = listAccountIds;
201
- const resolveDefaultSlackAccountId = resolveDefaultAccountId;
202
- function resolveAccountConfig$1(cfg, accountId) {
203
- return resolveAccountEntry(cfg.channels?.slack?.accounts, accountId);
204
- }
205
- function mergeSlackAccountConfig(cfg, accountId) {
206
- const { accounts: _ignored, ...base } = cfg.channels?.slack ?? {};
207
- const account = resolveAccountConfig$1(cfg, accountId) ?? {};
208
- return {
209
- ...base,
210
- ...account
211
- };
212
- }
213
- function resolveSlackAccount(params) {
214
- const accountId = normalizeAccountId(params.accountId);
215
- const baseEnabled = params.cfg.channels?.slack?.enabled !== false;
216
- const merged = mergeSlackAccountConfig(params.cfg, accountId);
217
- const accountEnabled = merged.enabled !== false;
218
- const enabled = baseEnabled && accountEnabled;
219
- const allowEnv = accountId === DEFAULT_ACCOUNT_ID;
220
- const envBot = allowEnv ? resolveSlackBotToken(process.env.SLACK_BOT_TOKEN) : void 0;
221
- const envApp = allowEnv ? resolveSlackAppToken(process.env.SLACK_APP_TOKEN) : void 0;
222
- const envUser = allowEnv ? resolveSlackUserToken(process.env.SLACK_USER_TOKEN) : void 0;
223
- const configBot = resolveSlackBotToken(merged.botToken, `channels.slack.accounts.${accountId}.botToken`);
224
- const configApp = resolveSlackAppToken(merged.appToken, `channels.slack.accounts.${accountId}.appToken`);
225
- const configUser = resolveSlackUserToken(merged.userToken, `channels.slack.accounts.${accountId}.userToken`);
226
- const botToken = configBot ?? envBot;
227
- const appToken = configApp ?? envApp;
228
- const userToken = configUser ?? envUser;
229
- const botTokenSource = configBot ? "config" : envBot ? "env" : "none";
230
- const appTokenSource = configApp ? "config" : envApp ? "env" : "none";
231
- const userTokenSource = configUser ? "config" : envUser ? "env" : "none";
232
- return {
233
- accountId,
234
- enabled,
235
- name: merged.name?.trim() || void 0,
236
- botToken,
237
- appToken,
238
- userToken,
239
- botTokenSource,
240
- appTokenSource,
241
- userTokenSource,
242
- config: merged,
243
- groupPolicy: merged.groupPolicy,
244
- textChunkLimit: merged.textChunkLimit,
245
- mediaMaxMb: merged.mediaMaxMb,
246
- reactionNotifications: merged.reactionNotifications,
247
- reactionAllowlist: merged.reactionAllowlist,
248
- replyToMode: merged.replyToMode,
249
- replyToModeByChatType: merged.replyToModeByChatType,
250
- actions: merged.actions,
251
- slashCommand: merged.slashCommand,
252
- dm: merged.dm,
253
- channels: merged.channels
254
- };
255
- }
256
- function listEnabledSlackAccounts(cfg) {
257
- return listSlackAccountIds(cfg).map((accountId) => resolveSlackAccount({
258
- cfg,
259
- accountId
260
- })).filter((account) => account.enabled);
261
- }
262
- function resolveSlackReplyToMode(account, chatType) {
263
- const normalized = normalizeChatType(chatType ?? void 0);
264
- if (normalized && account.replyToModeByChatType?.[normalized] !== void 0) return account.replyToModeByChatType[normalized] ?? "off";
265
- if (normalized === "direct" && account.dm?.replyToMode !== void 0) return account.dm.replyToMode;
266
- return account.replyToMode ?? "off";
267
- }
268
-
269
- //#endregion
270
- //#region src/plugin-sdk/account-resolution.ts
271
- function resolveAccountWithDefaultFallback(params) {
272
- const hasExplicitAccountId = Boolean(params.accountId?.trim());
273
- const normalizedAccountId = params.normalizeAccountId(params.accountId);
274
- const primary = params.resolvePrimary(normalizedAccountId);
275
- if (hasExplicitAccountId || params.hasCredential(primary)) return primary;
276
- const fallbackId = params.resolveDefaultAccountId();
277
- if (fallbackId === normalizedAccountId) return primary;
278
- const fallback = params.resolvePrimary(fallbackId);
279
- if (!params.hasCredential(fallback)) return primary;
280
- return fallback;
281
- }
282
- function listConfiguredAccountIds$1(params) {
283
- if (!params.accounts) return [];
284
- const ids = /* @__PURE__ */ new Set();
285
- for (const key of Object.keys(params.accounts)) {
286
- if (!key) continue;
287
- ids.add(params.normalizeAccountId(key));
288
- }
289
- return [...ids];
290
- }
291
-
292
- //#endregion
293
- //#region src/routing/bindings.ts
294
- function normalizeBindingChannelId(raw) {
295
- const normalized = normalizeChatChannelId(raw);
296
- if (normalized) return normalized;
297
- return (raw ?? "").trim().toLowerCase() || null;
298
- }
299
- function listBindings(cfg) {
300
- return Array.isArray(cfg.bindings) ? cfg.bindings : [];
301
- }
302
- function resolveNormalizedBindingMatch(binding) {
303
- if (!binding || typeof binding !== "object") return null;
304
- const match = binding.match;
305
- if (!match || typeof match !== "object") return null;
306
- const channelId = normalizeBindingChannelId(match.channel);
307
- if (!channelId) return null;
308
- const accountId = typeof match.accountId === "string" ? match.accountId.trim() : "";
309
- if (!accountId || accountId === "*") return null;
310
- return {
311
- agentId: normalizeAgentId(binding.agentId),
312
- accountId: normalizeAccountId(accountId),
313
- channelId
314
- };
315
- }
316
- function listBoundAccountIds(cfg, channelId) {
317
- const normalizedChannel = normalizeBindingChannelId(channelId);
318
- if (!normalizedChannel) return [];
319
- const ids = /* @__PURE__ */ new Set();
320
- for (const binding of listBindings(cfg)) {
321
- const resolved = resolveNormalizedBindingMatch(binding);
322
- if (!resolved || resolved.channelId !== normalizedChannel) continue;
323
- ids.add(resolved.accountId);
324
- }
325
- return Array.from(ids).toSorted((a, b) => a.localeCompare(b));
326
- }
327
- function resolveDefaultAgentBoundAccountId(cfg, channelId) {
328
- const normalizedChannel = normalizeBindingChannelId(channelId);
329
- if (!normalizedChannel) return null;
330
- const defaultAgentId = normalizeAgentId(resolveDefaultAgentId(cfg));
331
- for (const binding of listBindings(cfg)) {
332
- const resolved = resolveNormalizedBindingMatch(binding);
333
- if (!resolved || resolved.channelId !== normalizedChannel || resolved.agentId !== defaultAgentId) continue;
334
- return resolved.accountId;
335
- }
336
- return null;
337
- }
338
- function buildChannelAccountBindings(cfg) {
339
- const map = /* @__PURE__ */ new Map();
340
- for (const binding of listBindings(cfg)) {
341
- const resolved = resolveNormalizedBindingMatch(binding);
342
- if (!resolved) continue;
343
- const byAgent = map.get(resolved.channelId) ?? /* @__PURE__ */ new Map();
344
- const list = byAgent.get(resolved.agentId) ?? [];
345
- if (!list.includes(resolved.accountId)) list.push(resolved.accountId);
346
- byAgent.set(resolved.agentId, list);
347
- map.set(resolved.channelId, byAgent);
348
- }
349
- return map;
350
- }
351
-
352
- //#endregion
353
- //#region src/routing/default-account-warnings.ts
354
- function formatChannelDefaultAccountPath(channelKey) {
355
- return `channels.${channelKey}.defaultAccount`;
356
- }
357
- function formatChannelAccountsDefaultPath(channelKey) {
358
- return `channels.${channelKey}.accounts.default`;
359
- }
360
- function formatSetExplicitDefaultInstruction(channelKey) {
361
- return `Set ${formatChannelDefaultAccountPath(channelKey)} or add ${formatChannelAccountsDefaultPath(channelKey)}`;
362
- }
363
-
364
- //#endregion
365
- //#region src/telegram/token.ts
366
- function resolveTelegramToken(cfg, opts = {}) {
367
- const accountId = normalizeAccountId(opts.accountId);
368
- const telegramCfg = cfg?.channels?.telegram;
369
- const resolveAccountCfg = (id) => {
370
- const accounts = telegramCfg?.accounts;
371
- if (!accounts || typeof accounts !== "object" || Array.isArray(accounts)) return;
372
- const direct = accounts[id];
373
- if (direct) return direct;
374
- const matchKey = Object.keys(accounts).find((key) => normalizeAccountId(key) === id);
375
- return matchKey ? accounts[matchKey] : void 0;
376
- };
377
- const accountCfg = resolveAccountCfg(accountId !== DEFAULT_ACCOUNT_ID ? accountId : DEFAULT_ACCOUNT_ID);
378
- const accountTokenFile = accountCfg?.tokenFile?.trim();
379
- if (accountTokenFile) {
380
- if (!fs.existsSync(accountTokenFile)) {
381
- opts.logMissingFile?.(`channels.telegram.accounts.${accountId}.tokenFile not found: ${accountTokenFile}`);
382
- return {
383
- token: "",
384
- source: "none"
385
- };
386
- }
387
- try {
388
- const token = fs.readFileSync(accountTokenFile, "utf-8").trim();
389
- if (token) return {
390
- token,
391
- source: "tokenFile"
392
- };
393
- } catch (err) {
394
- opts.logMissingFile?.(`channels.telegram.accounts.${accountId}.tokenFile read failed: ${String(err)}`);
395
- return {
396
- token: "",
397
- source: "none"
398
- };
399
- }
400
- return {
401
- token: "",
402
- source: "none"
403
- };
404
- }
405
- const accountToken = normalizeResolvedSecretInputString({
406
- value: accountCfg?.botToken,
407
- path: `channels.telegram.accounts.${accountId}.botToken`
408
- });
409
- if (accountToken) return {
410
- token: accountToken,
411
- source: "config"
412
- };
413
- const allowEnv = accountId === DEFAULT_ACCOUNT_ID;
414
- const tokenFile = telegramCfg?.tokenFile?.trim();
415
- if (tokenFile) {
416
- if (!fs.existsSync(tokenFile)) {
417
- opts.logMissingFile?.(`channels.telegram.tokenFile not found: ${tokenFile}`);
418
- return {
419
- token: "",
420
- source: "none"
421
- };
422
- }
423
- try {
424
- const token = fs.readFileSync(tokenFile, "utf-8").trim();
425
- if (token) return {
426
- token,
427
- source: "tokenFile"
428
- };
429
- } catch (err) {
430
- opts.logMissingFile?.(`channels.telegram.tokenFile read failed: ${String(err)}`);
431
- return {
432
- token: "",
433
- source: "none"
434
- };
435
- }
436
- }
437
- const configToken = normalizeResolvedSecretInputString({
438
- value: telegramCfg?.botToken,
439
- path: "channels.telegram.botToken"
440
- });
441
- if (configToken) return {
442
- token: configToken,
443
- source: "config"
444
- };
445
- const envToken = allowEnv ? (opts.envToken ?? process.env.TELEGRAM_BOT_TOKEN)?.trim() : "";
446
- if (envToken) return {
447
- token: envToken,
448
- source: "env"
449
- };
450
- return {
451
- token: "",
452
- source: "none"
453
- };
454
- }
455
-
456
- //#endregion
457
- //#region src/telegram/accounts.ts
458
- const log = createSubsystemLogger("telegram/accounts");
459
- function formatDebugArg(value) {
460
- if (typeof value === "string") return value;
461
- if (value instanceof Error) return value.stack ?? value.message;
462
- return util.inspect(value, {
463
- colors: false,
464
- depth: null,
465
- compact: true,
466
- breakLength: Infinity
467
- });
468
- }
469
- const debugAccounts = (...args) => {
470
- if (isTruthyEnvValue(process.env.SQUIDCLAW_DEBUG_TELEGRAM_ACCOUNTS)) {
471
- const parts = args.map((arg) => formatDebugArg(arg));
472
- log.warn(parts.join(" ").trim());
473
- }
474
- };
475
- function listConfiguredAccountIds(cfg) {
476
- return listConfiguredAccountIds$1({
477
- accounts: cfg.channels?.telegram?.accounts,
478
- normalizeAccountId
479
- });
480
- }
481
- function listTelegramAccountIds(cfg) {
482
- const ids = Array.from(new Set([...listConfiguredAccountIds(cfg), ...listBoundAccountIds(cfg, "telegram")]));
483
- debugAccounts("listTelegramAccountIds", ids);
484
- if (ids.length === 0) return [DEFAULT_ACCOUNT_ID];
485
- return ids.toSorted((a, b) => a.localeCompare(b));
486
- }
487
- let emittedMissingDefaultWarn = false;
488
- function resolveDefaultTelegramAccountId(cfg) {
489
- const boundDefault = resolveDefaultAgentBoundAccountId(cfg, "telegram");
490
- if (boundDefault) return boundDefault;
491
- const preferred = normalizeOptionalAccountId(cfg.channels?.telegram?.defaultAccount);
492
- if (preferred && listTelegramAccountIds(cfg).some((accountId) => normalizeAccountId(accountId) === preferred)) return preferred;
493
- const ids = listTelegramAccountIds(cfg);
494
- if (ids.includes(DEFAULT_ACCOUNT_ID)) return DEFAULT_ACCOUNT_ID;
495
- if (ids.length > 1 && !emittedMissingDefaultWarn) {
496
- emittedMissingDefaultWarn = true;
497
- log.warn(`channels.telegram: accounts.default is missing; falling back to "${ids[0]}". ${formatSetExplicitDefaultInstruction("telegram")} to avoid routing surprises in multi-account setups.`);
498
- }
499
- return ids[0] ?? DEFAULT_ACCOUNT_ID;
500
- }
501
- function resolveAccountConfig(cfg, accountId) {
502
- const normalized = normalizeAccountId(accountId);
503
- return resolveAccountEntry(cfg.channels?.telegram?.accounts, normalized);
504
- }
505
- function mergeTelegramAccountConfig(cfg, accountId) {
506
- const { accounts: _ignored, defaultAccount: _ignoredDefaultAccount, groups: channelGroups, ...base } = cfg.channels?.telegram ?? {};
507
- const account = resolveAccountConfig(cfg, accountId) ?? {};
508
- const isMultiAccount = Object.keys(cfg.channels?.telegram?.accounts ?? {}).length > 1;
509
- const groups = account.groups ?? (isMultiAccount ? void 0 : channelGroups);
510
- return {
511
- ...base,
512
- ...account,
513
- groups
514
- };
515
- }
516
- function createTelegramActionGate(params) {
517
- const accountId = normalizeAccountId(params.accountId);
518
- return createAccountActionGate({
519
- baseActions: params.cfg.channels?.telegram?.actions,
520
- accountActions: resolveAccountConfig(params.cfg, accountId)?.actions
521
- });
522
- }
523
- function resolveTelegramAccount(params) {
524
- const baseEnabled = params.cfg.channels?.telegram?.enabled !== false;
525
- const resolve = (accountId) => {
526
- const merged = mergeTelegramAccountConfig(params.cfg, accountId);
527
- const accountEnabled = merged.enabled !== false;
528
- const enabled = baseEnabled && accountEnabled;
529
- const tokenResolution = resolveTelegramToken(params.cfg, { accountId });
530
- debugAccounts("resolve", {
531
- accountId,
532
- enabled,
533
- tokenSource: tokenResolution.source
534
- });
535
- return {
536
- accountId,
537
- enabled,
538
- name: merged.name?.trim() || void 0,
539
- token: tokenResolution.token,
540
- tokenSource: tokenResolution.source,
541
- config: merged
542
- };
543
- };
544
- return resolveAccountWithDefaultFallback({
545
- accountId: params.accountId,
546
- normalizeAccountId,
547
- resolvePrimary: resolve,
548
- hasCredential: (account) => account.tokenSource !== "none",
549
- resolveDefaultAccountId: () => resolveDefaultTelegramAccountId(params.cfg)
550
- });
551
- }
552
- function listEnabledTelegramAccounts(cfg) {
553
- return listTelegramAccountIds(cfg).map((accountId) => resolveTelegramAccount({
554
- cfg,
555
- accountId
556
- })).filter((account) => account.enabled);
557
- }
558
-
559
- //#endregion
560
- //#region src/channels/targets.ts
561
- function normalizeTargetId(kind, id) {
562
- return `${kind}:${id}`.toLowerCase();
563
- }
564
- function buildMessagingTarget(kind, id, raw) {
565
- return {
566
- kind,
567
- id,
568
- raw,
569
- normalized: normalizeTargetId(kind, id)
570
- };
571
- }
572
- function ensureTargetId(params) {
573
- if (!params.pattern.test(params.candidate)) throw new Error(params.errorMessage);
574
- return params.candidate;
575
- }
576
- function parseTargetMention(params) {
577
- const match = params.raw.match(params.mentionPattern);
578
- if (!match?.[1]) return;
579
- return buildMessagingTarget(params.kind, match[1], params.raw);
580
- }
581
- function parseTargetPrefix(params) {
582
- if (!params.raw.startsWith(params.prefix)) return;
583
- const id = params.raw.slice(params.prefix.length).trim();
584
- return id ? buildMessagingTarget(params.kind, id, params.raw) : void 0;
585
- }
586
- function parseTargetPrefixes(params) {
587
- for (const entry of params.prefixes) {
588
- const parsed = parseTargetPrefix({
589
- raw: params.raw,
590
- prefix: entry.prefix,
591
- kind: entry.kind
592
- });
593
- if (parsed) return parsed;
594
- }
595
- }
596
- function parseAtUserTarget(params) {
597
- if (!params.raw.startsWith("@")) return;
598
- return buildMessagingTarget("user", ensureTargetId({
599
- candidate: params.raw.slice(1).trim(),
600
- pattern: params.pattern,
601
- errorMessage: params.errorMessage
602
- }), params.raw);
603
- }
604
- function parseMentionPrefixOrAtUserTarget(params) {
605
- const mentionTarget = parseTargetMention({
606
- raw: params.raw,
607
- mentionPattern: params.mentionPattern,
608
- kind: "user"
609
- });
610
- if (mentionTarget) return mentionTarget;
611
- const prefixedTarget = parseTargetPrefixes({
612
- raw: params.raw,
613
- prefixes: params.prefixes
614
- });
615
- if (prefixedTarget) return prefixedTarget;
616
- return parseAtUserTarget({
617
- raw: params.raw,
618
- pattern: params.atUserPattern,
619
- errorMessage: params.atUserErrorMessage
620
- });
621
- }
622
- function requireTargetKind(params) {
623
- const kindLabel = params.kind;
624
- if (!params.target) throw new Error(`${params.platform} ${kindLabel} id is required.`);
625
- if (params.target.kind !== params.kind) throw new Error(`${params.platform} ${kindLabel} id is required (use ${kindLabel}:<id>).`);
626
- return params.target.id;
627
- }
628
-
629
- //#endregion
630
- //#region src/slack/targets.ts
631
- function parseSlackTarget(raw, options = {}) {
632
- const trimmed = raw.trim();
633
- if (!trimmed) return;
634
- const userTarget = parseMentionPrefixOrAtUserTarget({
635
- raw: trimmed,
636
- mentionPattern: /^<@([A-Z0-9]+)>$/i,
637
- prefixes: [
638
- {
639
- prefix: "user:",
640
- kind: "user"
641
- },
642
- {
643
- prefix: "channel:",
644
- kind: "channel"
645
- },
646
- {
647
- prefix: "slack:",
648
- kind: "user"
649
- }
650
- ],
651
- atUserPattern: /^[A-Z0-9]+$/i,
652
- atUserErrorMessage: "Slack DMs require a user id (use user:<id> or <@id>)"
653
- });
654
- if (userTarget) return userTarget;
655
- if (trimmed.startsWith("#")) return buildMessagingTarget("channel", ensureTargetId({
656
- candidate: trimmed.slice(1).trim(),
657
- pattern: /^[A-Z0-9]+$/i,
658
- errorMessage: "Slack channels require a channel id (use channel:<id>)"
659
- }), trimmed);
660
- if (options.defaultKind) return buildMessagingTarget(options.defaultKind, trimmed, trimmed);
661
- return buildMessagingTarget("channel", trimmed, trimmed);
662
- }
663
- function resolveSlackChannelId(raw) {
664
- return requireTargetKind({
665
- platform: "Slack",
666
- target: parseSlackTarget(raw, { defaultKind: "channel" }),
667
- kind: "channel"
668
- });
669
- }
670
-
671
- //#endregion
672
- //#region src/channels/plugins/normalize/slack.ts
673
- function normalizeSlackMessagingTarget(raw) {
674
- return parseSlackTarget(raw, { defaultKind: "channel" })?.normalized;
675
- }
676
- function looksLikeSlackTargetId(raw) {
677
- const trimmed = raw.trim();
678
- if (!trimmed) return false;
679
- if (/^<@([A-Z0-9]+)>$/i.test(trimmed)) return true;
680
- if (/^(user|channel):/i.test(trimmed)) return true;
681
- if (/^slack:/i.test(trimmed)) return true;
682
- if (/^[@#]/.test(trimmed)) return true;
683
- return /^[CUWGD][A-Z0-9]{8,}$/i.test(trimmed);
684
- }
685
-
686
- //#endregion
687
- //#region src/channels/plugins/directory-config.ts
688
- function addAllowFromAndDmsIds(ids, allowFrom, dms) {
689
- for (const entry of allowFrom ?? []) {
690
- const raw = String(entry).trim();
691
- if (!raw || raw === "*") continue;
692
- ids.add(raw);
693
- }
694
- addTrimmedEntries(ids, Object.keys(dms ?? {}));
695
- }
696
- function addTrimmedId(ids, value) {
697
- const trimmed = String(value).trim();
698
- if (trimmed) ids.add(trimmed);
699
- }
700
- function addTrimmedEntries(ids, values) {
701
- for (const value of values) addTrimmedId(ids, value);
702
- }
703
- function normalizeTrimmedSet(ids, normalize) {
704
- return Array.from(ids).map((raw) => raw.trim()).filter(Boolean).map((raw) => normalize(raw)).filter((id) => Boolean(id));
705
- }
706
- function resolveDirectoryQuery(query) {
707
- return query?.trim().toLowerCase() || "";
708
- }
709
- function resolveDirectoryLimit(limit) {
710
- return typeof limit === "number" && limit > 0 ? limit : void 0;
711
- }
712
- function applyDirectoryQueryAndLimit(ids, params) {
713
- const q = resolveDirectoryQuery(params.query);
714
- const limit = resolveDirectoryLimit(params.limit);
715
- const filtered = ids.filter((id) => q ? id.toLowerCase().includes(q) : true);
716
- return typeof limit === "number" ? filtered.slice(0, limit) : filtered;
717
- }
718
- function toDirectoryEntries(kind, ids) {
719
- return ids.map((id) => ({
720
- kind,
721
- id
722
- }));
723
- }
724
- async function listSlackDirectoryPeersFromConfig(params) {
725
- const account = resolveSlackAccount({
726
- cfg: params.cfg,
727
- accountId: params.accountId
728
- });
729
- const ids = /* @__PURE__ */ new Set();
730
- addAllowFromAndDmsIds(ids, account.config.allowFrom ?? account.dm?.allowFrom, account.config.dms);
731
- for (const channel of Object.values(account.config.channels ?? {})) addTrimmedEntries(ids, channel.users ?? []);
732
- return toDirectoryEntries("user", applyDirectoryQueryAndLimit(normalizeTrimmedSet(ids, (raw) => {
733
- const normalizedUserId = (raw.match(/^<@([A-Z0-9]+)>$/i)?.[1] ?? raw).replace(/^(slack|user):/i, "").trim();
734
- if (!normalizedUserId) return null;
735
- const target = `user:${normalizedUserId}`;
736
- return normalizeSlackMessagingTarget(target) ?? target.toLowerCase();
737
- }).filter((id) => id.startsWith("user:")), params));
738
- }
739
- async function listSlackDirectoryGroupsFromConfig(params) {
740
- const account = resolveSlackAccount({
741
- cfg: params.cfg,
742
- accountId: params.accountId
743
- });
744
- return toDirectoryEntries("group", applyDirectoryQueryAndLimit(Object.keys(account.config.channels ?? {}).map((raw) => raw.trim()).filter(Boolean).map((raw) => normalizeSlackMessagingTarget(raw) ?? raw.toLowerCase()).filter((id) => id.startsWith("channel:")), params));
745
- }
746
- async function listDiscordDirectoryPeersFromConfig(params) {
747
- const account = resolveDiscordAccount({
748
- cfg: params.cfg,
749
- accountId: params.accountId
750
- });
751
- const ids = /* @__PURE__ */ new Set();
752
- addAllowFromAndDmsIds(ids, account.config.allowFrom ?? account.config.dm?.allowFrom, account.config.dms);
753
- for (const guild of Object.values(account.config.guilds ?? {})) {
754
- addTrimmedEntries(ids, guild.users ?? []);
755
- for (const channel of Object.values(guild.channels ?? {})) addTrimmedEntries(ids, channel.users ?? []);
756
- }
757
- return toDirectoryEntries("user", applyDirectoryQueryAndLimit(normalizeTrimmedSet(ids, (raw) => {
758
- const cleaned = (raw.match(/^<@!?(\d+)>$/)?.[1] ?? raw).replace(/^(discord|user):/i, "").trim();
759
- if (!/^\d+$/.test(cleaned)) return null;
760
- return `user:${cleaned}`;
761
- }), params));
762
- }
763
- async function listDiscordDirectoryGroupsFromConfig(params) {
764
- const account = resolveDiscordAccount({
765
- cfg: params.cfg,
766
- accountId: params.accountId
767
- });
768
- const ids = /* @__PURE__ */ new Set();
769
- for (const guild of Object.values(account.config.guilds ?? {})) addTrimmedEntries(ids, Object.keys(guild.channels ?? {}));
770
- return toDirectoryEntries("group", applyDirectoryQueryAndLimit(normalizeTrimmedSet(ids, (raw) => {
771
- const cleaned = (raw.match(/^<#(\d+)>$/)?.[1] ?? raw).replace(/^(discord|channel|group):/i, "").trim();
772
- if (!/^\d+$/.test(cleaned)) return null;
773
- return `channel:${cleaned}`;
774
- }), params));
775
- }
776
- async function listTelegramDirectoryPeersFromConfig(params) {
777
- const account = resolveTelegramAccount({
778
- cfg: params.cfg,
779
- accountId: params.accountId
780
- });
781
- const raw = [...(account.config.allowFrom ?? []).map((entry) => String(entry)), ...Object.keys(account.config.dms ?? {})];
782
- return toDirectoryEntries("user", applyDirectoryQueryAndLimit(Array.from(new Set(raw.map((entry) => entry.trim()).filter(Boolean).map((entry) => entry.replace(/^(telegram|tg):/i, "")))).map((entry) => {
783
- const trimmed = entry.trim();
784
- if (!trimmed) return null;
785
- if (/^-?\d+$/.test(trimmed)) return trimmed;
786
- return trimmed.startsWith("@") ? trimmed : `@${trimmed}`;
787
- }).filter((id) => Boolean(id)), params));
788
- }
789
- async function listTelegramDirectoryGroupsFromConfig(params) {
790
- const account = resolveTelegramAccount({
791
- cfg: params.cfg,
792
- accountId: params.accountId
793
- });
794
- return toDirectoryEntries("group", applyDirectoryQueryAndLimit(Object.keys(account.config.groups ?? {}).map((id) => id.trim()).filter((id) => Boolean(id) && id !== "*"), params));
795
- }
796
- async function listWhatsAppDirectoryPeersFromConfig(params) {
797
- return toDirectoryEntries("user", applyDirectoryQueryAndLimit((resolveWhatsAppAccount({
798
- cfg: params.cfg,
799
- accountId: params.accountId
800
- }).allowFrom ?? []).map((entry) => String(entry).trim()).filter((entry) => Boolean(entry) && entry !== "*").map((entry) => normalizeWhatsAppTarget(entry) ?? "").filter(Boolean).filter((id) => !isWhatsAppGroupJid(id)), params));
801
- }
802
- async function listWhatsAppDirectoryGroupsFromConfig(params) {
803
- const account = resolveWhatsAppAccount({
804
- cfg: params.cfg,
805
- accountId: params.accountId
806
- });
807
- return toDirectoryEntries("group", applyDirectoryQueryAndLimit(Object.keys(account.groups ?? {}).map((id) => id.trim()).filter((id) => Boolean(id) && id !== "*"), params));
808
- }
809
-
810
- //#endregion
811
- //#region src/channels/plugins/index.ts
812
- function dedupeChannels(channels) {
813
- const seen = /* @__PURE__ */ new Set();
814
- const resolved = [];
815
- for (const plugin of channels) {
816
- const id = String(plugin.id).trim();
817
- if (!id || seen.has(id)) continue;
818
- seen.add(id);
819
- resolved.push(plugin);
820
- }
821
- return resolved;
822
- }
823
- let cachedChannelPlugins = {
824
- registryVersion: -1,
825
- sorted: [],
826
- byId: /* @__PURE__ */ new Map()
827
- };
828
- function resolveCachedChannelPlugins() {
829
- const registry = requireActivePluginRegistry();
830
- const registryVersion = getActivePluginRegistryVersion();
831
- const cached = cachedChannelPlugins;
832
- if (cached.registryVersion === registryVersion) return cached;
833
- const sorted = dedupeChannels(registry.channels.map((entry) => entry.plugin)).toSorted((a, b) => {
834
- const indexA = CHAT_CHANNEL_ORDER.indexOf(a.id);
835
- const indexB = CHAT_CHANNEL_ORDER.indexOf(b.id);
836
- const orderA = a.meta.order ?? (indexA === -1 ? 999 : indexA);
837
- const orderB = b.meta.order ?? (indexB === -1 ? 999 : indexB);
838
- if (orderA !== orderB) return orderA - orderB;
839
- return a.id.localeCompare(b.id);
840
- });
841
- const byId = /* @__PURE__ */ new Map();
842
- for (const plugin of sorted) byId.set(plugin.id, plugin);
843
- const next = {
844
- registryVersion,
845
- sorted,
846
- byId
847
- };
848
- cachedChannelPlugins = next;
849
- return next;
850
- }
851
- function listChannelPlugins() {
852
- return resolveCachedChannelPlugins().sorted.slice();
853
- }
854
- function getChannelPlugin(id) {
855
- const resolvedId = String(id).trim();
856
- if (!resolvedId) return;
857
- return resolveCachedChannelPlugins().byId.get(resolvedId);
858
- }
859
- function normalizeChannelId(raw) {
860
- return normalizeAnyChannelId(raw);
861
- }
862
-
863
- //#endregion
864
- export { listSlackAccountIds as A, listEnabledDiscordAccounts as B, resolveTelegramAccount as C, listConfiguredAccountIds$1 as D, listBindings as E, resolveSlackBotToken as F, resolveDiscordAccount as H, isWhatsAppGroupJid as I, normalizeWhatsAppTarget as L, resolveSlackAccount as M, resolveSlackReplyToMode as N, resolveAccountWithDefaultFallback as O, resolveSlackAppToken as P, createDiscordActionGate as R, resolveDefaultTelegramAccountId as S, buildChannelAccountBindings as T, normalizeDiscordToken as U, resolveDefaultDiscordAccountId as V, normalizeChatType as W, parseMentionPrefixOrAtUserTarget as _, listDiscordDirectoryPeersFromConfig as a, listEnabledTelegramAccounts as b, listTelegramDirectoryGroupsFromConfig as c, listWhatsAppDirectoryPeersFromConfig as d, looksLikeSlackTargetId as f, buildMessagingTarget as g, resolveSlackChannelId as h, listDiscordDirectoryGroupsFromConfig as i, resolveDefaultSlackAccountId as j, listEnabledSlackAccounts as k, listTelegramDirectoryPeersFromConfig as l, parseSlackTarget as m, listChannelPlugins as n, listSlackDirectoryGroupsFromConfig as o, normalizeSlackMessagingTarget as p, normalizeChannelId as r, listSlackDirectoryPeersFromConfig as s, getChannelPlugin as t, listWhatsAppDirectoryGroupsFromConfig as u, requireTargetKind as v, resolveTelegramToken as w, listTelegramAccountIds as x, createTelegramActionGate as y, listDiscordAccountIds as z };