remoteclaw 0.1.0-next.da482d8 → 0.1.0-next.db8a792

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 (1020) hide show
  1. package/dist/accounts-BZ2kR_Ij.js +47 -0
  2. package/dist/accounts-Bi4rFQG5.js +272 -0
  3. package/dist/accounts-Bpk-loA6.js +47 -0
  4. package/dist/accounts-D1CBpsaa.js +32 -0
  5. package/dist/accounts-DAdUdbPk.js +36 -0
  6. package/dist/accounts-WYyfAiie.js +270 -0
  7. package/dist/accounts-zQKMwnvt.js +36 -0
  8. package/dist/ack-reactions-B1l-vKPr.js +621 -0
  9. package/dist/ack-reactions-BnG0DLMu.js +621 -0
  10. package/dist/acp-cli-Btx71t69.js +1319 -0
  11. package/dist/acp-cli-DVQMjl0p.js +1324 -0
  12. package/dist/active-listener-BfN4RKlA.js +37 -0
  13. package/dist/active-listener-Bq7ckjOV.js +37 -0
  14. package/dist/agent-D2IwuL6g.js +688 -0
  15. package/dist/agent-WaE2mXI1.js +687 -0
  16. package/dist/agent-helpers-BcaiJFiG.js +400 -0
  17. package/dist/agent-scope-DVvX_nkQ.js +116 -0
  18. package/dist/agents-BwnT7jca.js +760 -0
  19. package/dist/agents.config-Dorm30BQ.js +116 -0
  20. package/dist/audio-B1lTyRqS.js +43 -0
  21. package/dist/audio-e0dFnrn8.js +43 -0
  22. package/dist/audit-DZvqycbG.js +3150 -0
  23. package/dist/audit-Mit73dYD.js +3150 -0
  24. package/dist/auth-C-XX0Tdt.js +314 -0
  25. package/dist/auth-D8--b01l.js +315 -0
  26. package/dist/auth-DJ7XEBDO.js +448 -0
  27. package/dist/auth-otyjXf9l.js +448 -0
  28. package/dist/banner-DSE-i7gH.js +294 -0
  29. package/dist/binaries-BSjilwX-.js +13 -0
  30. package/dist/bindings-DFTxQj8x.js +69 -0
  31. package/dist/bonjour-discovery-BnxTMHRd.js +378 -0
  32. package/dist/bonjour-discovery-CVJYHT3g.js +378 -0
  33. package/dist/boot/handler.js +28 -44
  34. package/dist/browser-cli-BR2pZWTC.js +1694 -0
  35. package/dist/browser-cli-I0kfR7FV.js +1690 -0
  36. package/dist/build-info.json +3 -3
  37. package/dist/call-Ck7ysmEl.js +517 -0
  38. package/dist/call-MN6mCJEB.js +518 -0
  39. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  40. package/dist/catalog-Bt9EM4sK.js +185 -0
  41. package/dist/catalog-BtUvWKd9.js +185 -0
  42. package/dist/channel-account-context-BLQq9NKz.js +133 -0
  43. package/dist/channel-account-context-CaCzVa76.js +133 -0
  44. package/dist/channel-activity-BatlvP_U.js +292 -0
  45. package/dist/channel-activity-DHVMMb2x.js +94 -0
  46. package/dist/channel-activity-DtRx3b0W.js +94 -0
  47. package/dist/channel-options-C6kT3nXB.js +32 -0
  48. package/dist/channel-options-CbgR_vsp.js +33 -0
  49. package/dist/channel-selection-CzbrpDPd.js +51 -0
  50. package/dist/channel-selection-Xv5UFxOx.js +51 -0
  51. package/dist/channel-web-DfDokU69.js +2134 -0
  52. package/dist/channel-web-DtvksSuY.js +2132 -0
  53. package/dist/channels-cli-BmdCVX6O.js +1435 -0
  54. package/dist/channels-cli-CrAZpaiN.js +1439 -0
  55. package/dist/channels-status-issues-B77y-TLr.js +18 -0
  56. package/dist/channels-status-issues-COECL8nx.js +18 -0
  57. package/dist/chrome-Cr5wmMk8.js +1733 -0
  58. package/dist/chrome-YBrnJN-g.js +1732 -0
  59. package/dist/chunk-CrfQ_O--.js +341 -0
  60. package/dist/chunk-DFBUmlXU.js +341 -0
  61. package/dist/clack-prompter-CFNKgQXx.js +122 -0
  62. package/dist/clack-prompter-DDlR2e34.js +121 -0
  63. package/dist/cli/daemon-cli.js +1 -1
  64. package/dist/cli-BbOinSy6.js +130 -0
  65. package/dist/cli-DuvHXQ5h.js +134 -0
  66. package/dist/client-BZeatr3g.js +2316 -0
  67. package/dist/client-Bc9JFAwL.js +2316 -0
  68. package/dist/clipboard-Com-8GBg.js +31 -0
  69. package/dist/clipboard-J_9AABIu.js +31 -0
  70. package/dist/command-format-CMAQa4dB.js +32 -0
  71. package/dist/command-format-KkslAzwV.js +18 -0
  72. package/dist/command-logger/handler.js +1 -1
  73. package/dist/command-registry-BJnVtHo0.js +215 -0
  74. package/dist/commands-ijxtne0J.js +41 -0
  75. package/dist/commands-kZtQfqDl.js +41 -0
  76. package/dist/commands-registry-BrBtH2_B.js +891 -0
  77. package/dist/commands-registry-xZoSouba.js +892 -0
  78. package/dist/common-6D7nhDP-.js +156 -0
  79. package/dist/common-B4cjsvqP.js +156 -0
  80. package/dist/completion-cli-CpUq9QC3.js +452 -0
  81. package/dist/completion-cli-De4umD_N.js +452 -0
  82. package/dist/config-C_WcTz_O.js +4231 -0
  83. package/dist/config-DfcqHTH-.js +4229 -0
  84. package/dist/config-cli-C7rq2n_m.js +243 -0
  85. package/dist/config-cli-VToCKln2.js +247 -0
  86. package/dist/config-guard-BlAcGEao.js +75 -0
  87. package/dist/config-guard-C-h_KIeI.js +99 -0
  88. package/dist/config-validation-C0YXR2dY.js +18 -0
  89. package/dist/config-validation-DDYBTmxT.js +18 -0
  90. package/dist/configure-Bkre1zEB.js +891 -0
  91. package/dist/configure-ifuEamRQ.js +889 -0
  92. package/dist/control-auth-DK6cIBzl.js +397 -0
  93. package/dist/control-auth-DQ8bfDMk.js +397 -0
  94. package/dist/control-ui-assets-DLEWfed6.js +186 -0
  95. package/dist/control-ui-assets-DVhkAyhv.js +186 -0
  96. package/dist/conversation-label-HuHoShPF.js +36 -0
  97. package/dist/conversation-label-L0QTtKji.js +36 -0
  98. package/dist/cron-cli-DnxnTi83.js +498 -0
  99. package/dist/cron-cli-yqcBkqZT.js +494 -0
  100. package/dist/daemon-cli-CmQYq8uO.js +735 -0
  101. package/dist/daemon-cli-_OIRoswC.js +737 -0
  102. package/dist/daemon-cli.js +34 -69
  103. package/dist/daemon-install-BEgffqDj.js +56 -0
  104. package/dist/daemon-install-DAorzotp.js +60 -0
  105. package/dist/daemon-install-helpers-B82uvJjJ.js +504 -0
  106. package/dist/daemon-install-helpers-BhL2Gh4l.js +504 -0
  107. package/dist/deliver-CCvDBk5c.js +481 -0
  108. package/dist/deliver-CqKw0wFi.js +481 -0
  109. package/dist/delivery-queue-CK7VnUJf.js +244 -0
  110. package/dist/delivery-queue-DMeQchpT.js +244 -0
  111. package/dist/devices-cli-C6UAfRV_.js +323 -0
  112. package/dist/devices-cli-Le-isdZB.js +319 -0
  113. package/dist/diagnostics-BhFwk6F3.js +35 -0
  114. package/dist/diagnostics-BtaQtaVR.js +35 -0
  115. package/dist/directory-cli-BqMfX5og.js +220 -0
  116. package/dist/directory-cli-DD72TTD4.js +224 -0
  117. package/dist/dispatcher-BLC2WYZv.js +173 -0
  118. package/dist/dispatcher-Cm2FAG_D.js +174 -0
  119. package/dist/dm-policy-shared-DOzpxMHC.js +22 -0
  120. package/dist/dm-policy-shared-DZY0f1bR.js +22 -0
  121. package/dist/dns-cli-BgsNg-bn.js +203 -0
  122. package/dist/dns-cli-CdMU5yuG.js +199 -0
  123. package/dist/dock-ByrYnLiz.js +929 -0
  124. package/dist/dock-CpNmmysM.js +928 -0
  125. package/dist/doctor-completion-BPeaRbmd.js +92 -0
  126. package/dist/doctor-completion-CfOyGJd3.js +92 -0
  127. package/dist/doctor-config-flow-DMyTycn7.js +1935 -0
  128. package/dist/doctor-config-flow-DoMu-pTm.js +1934 -0
  129. package/dist/enable-D5KetMo7.js +59 -0
  130. package/dist/entry.js +61 -1
  131. package/dist/env-BJ36dSrx.js +60 -0
  132. package/dist/errors-BfONuT95.js +35 -0
  133. package/dist/errors-_DSePI1C.js +35 -0
  134. package/dist/exec-DkFE7lqU.js +164 -0
  135. package/dist/exec-mY96dhIg.js +164 -0
  136. package/dist/extensionAPI.js +112 -76
  137. package/dist/fetch-B3EQXbTa.js +67 -0
  138. package/dist/fetch-BPeSHPvr.js +281 -0
  139. package/dist/fetch-BQ7HvRwe.js +67 -0
  140. package/dist/fetch-CbGTzJ8L.js +281 -0
  141. package/dist/fetch-CfIaWynF.js +67 -0
  142. package/dist/file-lock-BHfqppLm.js +107 -0
  143. package/dist/file-lock-CCBpdPM_.js +107 -0
  144. package/dist/fs-safe-BcEpbVjc.js +88 -0
  145. package/dist/fs-safe-S3Zvbabd.js +98 -0
  146. package/dist/gateway-cli-BXipRcsU.js +24602 -0
  147. package/dist/gateway-cli-Bv2K3rXx.js +24606 -0
  148. package/dist/gateway-rpc-BHnd7P1q.js +28 -0
  149. package/dist/gateway-rpc-COEQDswS.js +28 -0
  150. package/dist/gmail-setup-utils-BpdKFe3P.js +423 -0
  151. package/dist/gmail-setup-utils-CqbWr0Kq.js +422 -0
  152. package/dist/health-1ero5j64.js +1414 -0
  153. package/dist/health-ioP2au7j.js +1417 -0
  154. package/dist/heartbeat-visibility-C88L-_f2.js +125 -0
  155. package/dist/heartbeat-visibility-Dk_Q02qX.js +125 -0
  156. package/dist/hook-runner-global-BztoD8lu.js +527 -0
  157. package/dist/hooks-cli-B8D9DzRR.js +1226 -0
  158. package/dist/hooks-cli-rZ3GOXag.js +1222 -0
  159. package/dist/image-ops-Cx1ym2Hi.js +354 -0
  160. package/dist/image-ops-DWytvdh_.js +354 -0
  161. package/dist/import-CTUBsy7D.js +604 -0
  162. package/dist/import-cBp4f62k.js +606 -0
  163. package/dist/inbound-context-COwswi8z.js +68 -0
  164. package/dist/inbound-context-ChcNR30g.js +68 -0
  165. package/dist/index.js +127 -102
  166. package/dist/inspect-BsS3_z-x.js +286 -0
  167. package/dist/inspect-drfsUSIW.js +286 -0
  168. package/dist/installs-BFmmM5Zd.js +325 -0
  169. package/dist/installs-DA7SG0Tx.js +325 -0
  170. package/dist/ipv4-BZGSwnH4.js +46 -0
  171. package/dist/ipv4-DsOgHE0B.js +46 -0
  172. package/dist/ir-R3Pk8Cv8.js +972 -0
  173. package/dist/lifecycle-core-BZMeOT7u.js +474 -0
  174. package/dist/lifecycle-core-C6-_Gts0.js +476 -0
  175. package/dist/loader-CJ2UHqV7.js +22414 -0
  176. package/dist/loader-dEFvmwXu.js +22411 -0
  177. package/dist/logger-9I2fg5mr.js +49 -0
  178. package/dist/login-D9uJTyEv.js +62 -0
  179. package/dist/login-DTh702_w.js +61 -0
  180. package/dist/login-qr-BKsmW6XI.js +325 -0
  181. package/dist/login-qr-SOXdIR58.js +329 -0
  182. package/dist/logs-cli-BshJBHZQ.js +236 -0
  183. package/dist/logs-cli-Ckh-BBTT.js +240 -0
  184. package/dist/markdown-tables-Cfz7zDXI.js +29 -0
  185. package/dist/markdown-tables-DeFSK6aY.js +29 -0
  186. package/dist/media-BD2cZGXT.js +971 -0
  187. package/dist/media-CjvpnJmQ.js +10388 -0
  188. package/dist/message-action-names-CZHrHMRE.js +2520 -0
  189. package/dist/message-action-names-CiZ-0Smk.js +2520 -0
  190. package/dist/message-channel-EMCYRaxk.js +91 -0
  191. package/dist/mime-1E7nn9IU.js +146 -0
  192. package/dist/mime-mSgQeDnC.js +146 -0
  193. package/dist/net-Cg8AQeke.js +225 -0
  194. package/dist/net-DMh1m8AZ.js +225 -0
  195. package/dist/node-cli-BJ5CCbqx.js +1462 -0
  196. package/dist/node-cli-wYYhAs8x.js +1458 -0
  197. package/dist/node-service-CkwVlcey.js +67 -0
  198. package/dist/node-service-DTVW9YJh.js +67 -0
  199. package/dist/nodes-cli-CMFYLD1o.js +1346 -0
  200. package/dist/nodes-cli-DC2zUx3f.js +1350 -0
  201. package/dist/nodes-screen-6pXv1lYa.js +250 -0
  202. package/dist/nodes-screen-CTIZKksn.js +250 -0
  203. package/dist/note-CMELkPJN.js +92 -0
  204. package/dist/npm-registry-spec-BiJI7Rkr.js +786 -0
  205. package/dist/npm-registry-spec-Dza35Ig4.js +786 -0
  206. package/dist/npm-resolution-CUQGDty4.js +86 -0
  207. package/dist/npm-resolution-CwbZK9AI.js +86 -0
  208. package/dist/onboard-8Qd9lU8x.js +649 -0
  209. package/dist/onboard-Q3cY65m8.js +647 -0
  210. package/dist/onboard-auth-BUzYDEqf.js +211 -0
  211. package/dist/onboard-auth-DcVXyd-Z.js +207 -0
  212. package/dist/onboard-channels-BFHuA-AU.js +2548 -0
  213. package/dist/onboard-channels-DVrPP_ie.js +2547 -0
  214. package/dist/onboard-helpers-B-bBSsyR.js +363 -0
  215. package/dist/onboard-helpers-YsCa-sAt.js +364 -0
  216. package/dist/onboard-remote-BWFcuEOD.js +127 -0
  217. package/dist/onboard-remote-C0THuDTK.js +127 -0
  218. package/dist/onboarding-B31lnOPp.js +586 -0
  219. package/dist/onboarding-DmN_qC8e.js +588 -0
  220. package/dist/onboarding.finalize-DGD0PA-D.js +402 -0
  221. package/dist/onboarding.finalize-DNIb3meE.js +404 -0
  222. package/dist/onboarding.gateway-config-BaeIuA62.js +195 -0
  223. package/dist/onboarding.gateway-config-DMV2Odzr.js +201 -0
  224. package/dist/outbound-BdxBHDax.js +220 -0
  225. package/dist/outbound-D-Y9rMgB.js +221 -0
  226. package/dist/outbound-attachment-CvZ04r5k.js +18 -0
  227. package/dist/outbound-attachment-DYa1asB5.js +18 -0
  228. package/dist/outbound-attachment-DgUpk7Uh.js +18 -0
  229. package/dist/pairing-cli-BxTv78V7.js +125 -0
  230. package/dist/pairing-cli-CxUCzNUc.js +129 -0
  231. package/dist/pairing-labels-DVO6NJr0.js +9 -0
  232. package/dist/pairing-labels-D_pD8Cag.js +9 -0
  233. package/dist/pairing-store-Bu9pVlkO.js +459 -0
  234. package/dist/pairing-store-CWaGbAGi.js +460 -0
  235. package/dist/path-env-RsuO6yO-.js +89 -0
  236. package/dist/path-env-_my-d_iR.js +89 -0
  237. package/dist/path-safety-CfiVyVz7.js +14 -0
  238. package/dist/path-safety-D-wLK4pV.js +14 -0
  239. package/dist/plugin-auto-enable-CW01H36W.js +301 -0
  240. package/dist/plugin-auto-enable-CeHhBLCU.js +302 -0
  241. package/dist/plugin-registry-CWL37HnB.js +33 -0
  242. package/dist/plugin-registry-ELliiumZ.js +33 -0
  243. package/dist/plugin-sdk/auth/provider-auth.d.ts +0 -6
  244. package/dist/plugin-sdk/auto-reply/reply/agent-runner-utils.d.ts +9 -29
  245. package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +0 -2
  246. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/shared.d.ts +1 -1
  247. package/dist/plugin-sdk/auto-reply/reply/queue/types.d.ts +0 -2
  248. package/dist/plugin-sdk/auto-reply/status.d.ts +0 -4
  249. package/dist/plugin-sdk/auto-reply/templating.d.ts +0 -4
  250. package/dist/plugin-sdk/config/sessions/types.d.ts +0 -2
  251. package/dist/plugin-sdk/config/types.tools.d.ts +1 -59
  252. package/dist/plugin-sdk/config/types.tts.d.ts +2 -1
  253. package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +0 -177
  254. package/dist/plugin-sdk/config/zod-schema.core.d.ts +2 -230
  255. package/dist/plugin-sdk/config/zod-schema.d.ts +3 -192
  256. package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +3 -15
  257. package/dist/plugin-sdk/config/zod-schema.providers.d.ts +2 -10
  258. package/dist/plugin-sdk/config/zod-schema.session.d.ts +1 -5
  259. package/dist/plugin-sdk/gateway/protocol/index.d.ts +5 -5
  260. package/dist/plugin-sdk/index.js +72 -142
  261. package/dist/plugin-sdk/middleware/cli-runtime-base.d.ts +6 -0
  262. package/dist/plugin-sdk/middleware/runtimes/claude.d.ts +6 -0
  263. package/dist/plugin-sdk/middleware/runtimes/codex.d.ts +2 -2
  264. package/dist/plugin-sdk/plugin-sdk/index.d.ts +2 -0
  265. package/dist/plugin-sdk/plugins/manifest-registry.d.ts +2 -0
  266. package/dist/plugin-sdk/plugins/manifest.d.ts +2 -0
  267. package/dist/plugin-sdk/plugins/registry.d.ts +18 -0
  268. package/dist/plugin-sdk/plugins/types.d.ts +4 -0
  269. package/dist/plugin-sdk/stt/preflight.d.ts +2 -4
  270. package/dist/plugin-sdk/stt/providers/index.d.ts +1 -1
  271. package/dist/plugin-sdk/stt/providers/shared.d.ts +20 -1
  272. package/dist/plugin-sdk/tts/providers/edge.d.ts +2 -0
  273. package/dist/plugin-sdk/tts/providers/elevenlabs.d.ts +2 -0
  274. package/dist/plugin-sdk/tts/providers/index.d.ts +4 -0
  275. package/dist/plugin-sdk/tts/providers/openai.d.ts +2 -0
  276. package/dist/plugin-sdk/tts/tts.d.ts +13 -5
  277. package/dist/plugin-sdk/tts/types.d.ts +21 -0
  278. package/dist/plugins-DExsdlTp.js +455 -0
  279. package/dist/plugins-DdMgSc_b.js +453 -0
  280. package/dist/plugins-cli-DqBWiT_G.js +806 -0
  281. package/dist/plugins-cli-KQEzhU6P.js +802 -0
  282. package/dist/ports-CL0pXAXO.js +96 -0
  283. package/dist/ports-CRI-HSZx.js +370 -0
  284. package/dist/ports-DiQFcKUB.js +316 -0
  285. package/dist/ports-HRurfPIr.js +96 -0
  286. package/dist/preflight-6QRqxWh7.js +667 -0
  287. package/dist/preflight-DDZjr5KD.js +667 -0
  288. package/dist/program-DmhbOJj3.js +249 -0
  289. package/dist/program-context-PPMzZ6Gu.js +474 -0
  290. package/dist/prompt-select-styled-CmSWunD8.js +1669 -0
  291. package/dist/prompt-select-styled-PfxT9zl9.js +1672 -0
  292. package/dist/provider-auth-CfdnLqh3.js +187 -0
  293. package/dist/provider-auth-gpHOMUBP.js +187 -0
  294. package/dist/provider-dispatcher-D4eY8LZW.js +659 -0
  295. package/dist/provider-dispatcher-D5Q7M15D.js +660 -0
  296. package/dist/push-apns-BNwVMXX9.js +713 -0
  297. package/dist/push-apns-BszVkcZK.js +711 -0
  298. package/dist/pw-ai-Bdb3zrBM.js +1911 -0
  299. package/dist/pw-ai-BvcvEdGs.js +1908 -0
  300. package/dist/qr-cli-BBgk2ci1.js +349 -0
  301. package/dist/qr-cli-BLzVrhia.js +353 -0
  302. package/dist/redact-snapshot-CyBDcb_a.js +1966 -0
  303. package/dist/redact-snapshot-D9oPMqA-.js +1966 -0
  304. package/dist/register.agent-CAhKX3Ft.js +1019 -0
  305. package/dist/register.agent-RKHXtLLm.js +291 -0
  306. package/dist/register.configure-CW6XRGxV.js +129 -0
  307. package/dist/register.configure-dvrKc0j7.js +134 -0
  308. package/dist/register.import-CRLOolHv.js +31 -0
  309. package/dist/register.import-dhDEj7Om.js +29 -0
  310. package/dist/register.maintenance-EAhr1tJ9.js +500 -0
  311. package/dist/register.maintenance-lWz4v90u.js +502 -0
  312. package/dist/register.message-DyWkwUIU.js +690 -0
  313. package/dist/register.message-bl2Khz6c.js +686 -0
  314. package/dist/register.onboard-BAozmeei.js +97 -0
  315. package/dist/register.onboard-Da9hWQR1.js +93 -0
  316. package/dist/register.setup-DVrQWLoF.js +117 -0
  317. package/dist/register.setup-DbiLuuqg.js +113 -0
  318. package/dist/register.status-health-sessions-CA8ApUkH.js +668 -0
  319. package/dist/register.status-health-sessions-lGszs-NJ.js +428 -0
  320. package/dist/register.subclis-C-lqMygb.js +267 -0
  321. package/dist/replies-BTC1z8j0.js +136 -0
  322. package/dist/replies-BhlnuFp0.js +136 -0
  323. package/dist/reply-DZMooMoq.js +12880 -0
  324. package/dist/reply-directives-C0-hYyAt.js +182 -0
  325. package/dist/reply-directives-C_CGXLBJ.js +182 -0
  326. package/dist/reply-payloads-BospFSPI.js +527 -0
  327. package/dist/reply-prefix-DDgh77yy.js +37 -0
  328. package/dist/reply-prefix-DwKZPZyG.js +37 -0
  329. package/dist/reply-yGEQ0UW4.js +12877 -0
  330. package/dist/resolve-route-B73QhBIl.js +249 -0
  331. package/dist/resolve-route-DckdRbW8.js +249 -0
  332. package/dist/response-prefix-template-x5RBQnEy.js +134 -0
  333. package/dist/retry-CDrH81GP.js +77 -0
  334. package/dist/run-main-D869n5qf.js +307 -0
  335. package/dist/secure-random-CxzxAnMS.js +44 -0
  336. package/dist/security-cli-CfqosyUf.js +487 -0
  337. package/dist/security-cli-DMZun6gO.js +482 -0
  338. package/dist/send-3wvngctD.js +547 -0
  339. package/dist/send-AY7Fs5ky.js +374 -0
  340. package/dist/send-BSWD4Kr_.js +2245 -0
  341. package/dist/send-BT4HhTLm.js +349 -0
  342. package/dist/send-BvuxToC8.js +2245 -0
  343. package/dist/send-CaUxFvu0.js +492 -0
  344. package/dist/send-CiBRE4OY.js +1178 -0
  345. package/dist/send-Cidd4lQn.js +11 -0
  346. package/dist/send-Cq_Db9wG.js +1779 -0
  347. package/dist/send-DBFcxDPm.js +1776 -0
  348. package/dist/send-DUha0nIz.js +492 -0
  349. package/dist/send-DgYBI05s.js +332 -0
  350. package/dist/send-Dnf5bISH.js +426 -0
  351. package/dist/send-NcQk6UH1.js +547 -0
  352. package/dist/send-Og0-IMee.js +29 -0
  353. package/dist/send-oCN80Pl2.js +349 -0
  354. package/dist/server-DoGGLeP3.js +202 -0
  355. package/dist/server-V7G9FG2A.js +206 -0
  356. package/dist/server-lifecycle-CSWpSlvn.js +2437 -0
  357. package/dist/server-lifecycle-Cal8hBP1.js +2437 -0
  358. package/dist/server-node-events-DSee6jSG.js +394 -0
  359. package/dist/server-node-events-DbQWkU3M.js +390 -0
  360. package/dist/service-Duw0xMJX.js +670 -0
  361. package/dist/service-SRcnA1Am.js +670 -0
  362. package/dist/session-BLcfWX5_.js +170 -0
  363. package/dist/session-CQwkaAs-.js +170 -0
  364. package/dist/session-cost-usage-C-UcrvL4.js +627 -0
  365. package/dist/session-cost-usage-Dg3dzS0E.js +627 -0
  366. package/dist/session-dirs-D6mFEF90.js +318 -0
  367. package/dist/session-dirs-DVsG6e7L.js +318 -0
  368. package/dist/session-utils-C6522g3D.js +622 -0
  369. package/dist/session-utils-Dq2BJyVy.js +622 -0
  370. package/dist/sessions-CNkj4Eq8.js +247 -0
  371. package/dist/sessions-DDIoP7Rl.js +2569 -0
  372. package/dist/shell-env-D8nXPDbP.js +163 -0
  373. package/dist/ssrf-7I3FUHpm.js +183 -0
  374. package/dist/ssrf-DZi4qw5c.js +183 -0
  375. package/dist/status-CrAe8ZYt.js +1983 -0
  376. package/dist/status-DetRJxvZ.js +1979 -0
  377. package/dist/status.update-DquSK3p7.js +449 -0
  378. package/dist/status.update-iABAY3iW.js +449 -0
  379. package/dist/store-Bnm6zwaq.js +2571 -0
  380. package/dist/store-CVkGKjWm.js +64 -0
  381. package/dist/store-D_gpBpAW.js +64 -0
  382. package/dist/store-mxh63FBa.js +53 -0
  383. package/dist/subagent-registry-DNAz7Heu.js +4856 -0
  384. package/dist/subagent-registry-Dhz6HC4Z.js +4854 -0
  385. package/dist/subsystem-DGSHVL8I.js +1081 -0
  386. package/dist/subsystem-m7RSGQoR.js +1196 -0
  387. package/dist/system-cli-ByVDF6p8.js +77 -0
  388. package/dist/system-cli-CERb89Bl.js +73 -0
  389. package/dist/systemd-CSUtfsJx.js +547 -0
  390. package/dist/systemd-hints-BCxkQemJ.js +278 -0
  391. package/dist/systemd-hints-ef7m-7ZH.js +278 -0
  392. package/dist/systemd-linger-CWLgT0Wr.js +75 -0
  393. package/dist/systemd-linger-DT0E7YET.js +75 -0
  394. package/dist/systemd-tS61V4ao.js +547 -0
  395. package/dist/tables-DED01JNI.js +55 -0
  396. package/dist/tables-K3rOiGaJ.js +55 -0
  397. package/dist/tables-NcsXz3r_.js +55 -0
  398. package/dist/tailnet-CEudzG0i.js +40 -0
  399. package/dist/tailnet-D66Y5zC7.js +40 -0
  400. package/dist/tailscale-DjSRjPA-.js +230 -0
  401. package/dist/tailscale-DngZHD9L.js +230 -0
  402. package/dist/targets-BOpYPsGM.js +2545 -0
  403. package/dist/targets-BVsxzQh1.js +220 -0
  404. package/dist/targets-C99szk_e.js +114 -0
  405. package/dist/targets-CA4zx5G4.js +650 -0
  406. package/dist/targets-CTNm3bJ8.js +2544 -0
  407. package/dist/targets-DpmQjetK.js +53 -0
  408. package/dist/targets-Q-YGeAqu.js +650 -0
  409. package/dist/targets-rdWlC6Y-.js +53 -0
  410. package/dist/tool-display-Br6mwaJc.js +785 -0
  411. package/dist/tool-display-CLBf5cRa.js +785 -0
  412. package/dist/tool-images-DB4f57XK.js +263 -0
  413. package/dist/tool-images-kloBqxqK.js +263 -0
  414. package/dist/trash-B32LfX0l.js +125 -0
  415. package/dist/trash-SlUJxKO7.js +125 -0
  416. package/dist/tui-CHOtFK6k.js +3282 -0
  417. package/dist/tui-D4yiSpop.js +3282 -0
  418. package/dist/tui-cli-CzrjmAMZ.js +66 -0
  419. package/dist/tui-cli-Dpbs2QW_.js +62 -0
  420. package/dist/update-B5nYVxpc.js +349 -0
  421. package/dist/update-Bs3HhSnE.js +349 -0
  422. package/dist/update-cli-D_yz9Kyz.js +1147 -0
  423. package/dist/update-cli-DdfwNAsA.js +1149 -0
  424. package/dist/usage-BVyabt5E.js +5421 -0
  425. package/dist/voice-credentials-CI4VgB6u.js +46 -0
  426. package/dist/voice-credentials-l_d_gZiG.js +46 -0
  427. package/dist/web-B5xSAAH2.js +74 -0
  428. package/dist/web-Cc4tDVO9.js +3067 -0
  429. package/dist/web-Cdp9_IUk.js +79 -0
  430. package/dist/webhooks-cli-BDPcBkZL.js +330 -0
  431. package/dist/webhooks-cli-sRfsNesg.js +334 -0
  432. package/dist/whatsapp-actions-BGZXdWiP.js +125 -0
  433. package/dist/whatsapp-actions-HdmZu8oU.js +130 -0
  434. package/dist/workspace-D5LAl41l.js +449 -0
  435. package/dist/workspace-DRYGbrDM.js +447 -0
  436. package/dist/zod-schema-C8gEV0uz.js +2739 -0
  437. package/dist/zod-schema-CCUbW_Si.js +2739 -0
  438. package/package.json +1 -1
  439. package/dist/accounts-Aqbb2_Fn.js +0 -270
  440. package/dist/accounts-Bo2bX8jP.js +0 -272
  441. package/dist/accounts-D3fAPVzU.js +0 -36
  442. package/dist/accounts-DUEDngp6.js +0 -32
  443. package/dist/accounts-DZmv4bXS.js +0 -47
  444. package/dist/accounts-DmB4SVPK.js +0 -47
  445. package/dist/accounts-DtkyfvwR.js +0 -36
  446. package/dist/ack-reactions-Bvfy17SM.js +0 -446
  447. package/dist/ack-reactions-DYU8uhcz.js +0 -446
  448. package/dist/acp-cli-DVXhDMc6.js +0 -1324
  449. package/dist/acp-cli-QBL4_qcW.js +0 -1319
  450. package/dist/active-listener-CwxZ24bZ.js +0 -37
  451. package/dist/active-listener-v2sItamh.js +0 -37
  452. package/dist/agent-BisC5WZ6.js +0 -704
  453. package/dist/agent-Bqdrc0AK.js +0 -703
  454. package/dist/agent-helpers-BSGqeJr-.js +0 -400
  455. package/dist/agent-scope-_ND_-bJy.js +0 -116
  456. package/dist/agents-khSbraAA.js +0 -760
  457. package/dist/agents.config-D8gLHPWo.js +0 -116
  458. package/dist/audio-BIvUsncf.js +0 -43
  459. package/dist/audio-CQ8TfmVN.js +0 -43
  460. package/dist/audit-C0x7Cm6K.js +0 -3150
  461. package/dist/audit-CAY-uzWP.js +0 -3150
  462. package/dist/auth-DGqCLaQq.js +0 -448
  463. package/dist/auth-DLTRySEi.js +0 -314
  464. package/dist/auth-Drf91ntw.js +0 -315
  465. package/dist/auth-ku2khJyQ.js +0 -448
  466. package/dist/banner-txHC40UW.js +0 -294
  467. package/dist/binaries-BTvHIrCr.js +0 -13
  468. package/dist/bindings-DsWJQVKh.js +0 -69
  469. package/dist/bonjour-discovery-BElR62fH.js +0 -378
  470. package/dist/bonjour-discovery-C8XyVsjb.js +0 -378
  471. package/dist/browser-cli-DxJew43l.js +0 -1694
  472. package/dist/browser-cli-p0nakrjO.js +0 -1690
  473. package/dist/call-BrTmlOx3.js +0 -518
  474. package/dist/call-ChdUdwb4.js +0 -517
  475. package/dist/catalog-DTlcfTT9.js +0 -185
  476. package/dist/catalog-PixZqhZK.js +0 -185
  477. package/dist/channel-account-context-BO245Tcn.js +0 -133
  478. package/dist/channel-account-context-BgK0hm-I.js +0 -133
  479. package/dist/channel-activity-B0qlUR5e.js +0 -292
  480. package/dist/channel-activity-C-L6rDrQ.js +0 -94
  481. package/dist/channel-activity-DdgLBZ7M.js +0 -94
  482. package/dist/channel-options-CjlvAHSH.js +0 -32
  483. package/dist/channel-options-DpjP7qQf.js +0 -33
  484. package/dist/channel-selection-DW21dXB1.js +0 -51
  485. package/dist/channel-selection-wK_6S2Ku.js +0 -51
  486. package/dist/channel-web-COTkzJBt.js +0 -2136
  487. package/dist/channel-web-DUz5bn9h.js +0 -2134
  488. package/dist/channels-cli-D8RS8g2Q.js +0 -1438
  489. package/dist/channels-cli-X_8rENR6.js +0 -1434
  490. package/dist/channels-status-issues-B6I2l7Sm.js +0 -18
  491. package/dist/channels-status-issues-DhDH2fWp.js +0 -18
  492. package/dist/chrome-Dqtq7zCc.js +0 -1733
  493. package/dist/chrome-XeSY99Z_.js +0 -1732
  494. package/dist/chunk-CWD_zrz_.js +0 -341
  495. package/dist/chunk-LUabyS9k.js +0 -341
  496. package/dist/clack-prompter-fAgbvPW4.js +0 -122
  497. package/dist/clack-prompter-kf9qTN5p.js +0 -121
  498. package/dist/cli-BjPLpuZR.js +0 -133
  499. package/dist/cli-fFyOTtkD.js +0 -129
  500. package/dist/client-B9u3JdT_.js +0 -2316
  501. package/dist/client-DEEOhx0w.js +0 -2316
  502. package/dist/clipboard-B2nstLx7.js +0 -31
  503. package/dist/clipboard-C8QI9fes.js +0 -31
  504. package/dist/command-format-D0vKipG9.js +0 -32
  505. package/dist/command-format-LFmgWzKJ.js +0 -18
  506. package/dist/command-registry-BsPaMI53.js +0 -215
  507. package/dist/commands-BAYwlS3d.js +0 -41
  508. package/dist/commands-D842kCjj.js +0 -41
  509. package/dist/commands-registry-Cg2GTT2J.js +0 -892
  510. package/dist/commands-registry-Yz-uV5oG.js +0 -891
  511. package/dist/common-B67cBSew.js +0 -156
  512. package/dist/common-DEoiTqOr.js +0 -156
  513. package/dist/completion-cli-BO5mIPLa.js +0 -452
  514. package/dist/completion-cli-z9a6MVgr.js +0 -452
  515. package/dist/config-CAa0rZSx.js +0 -4225
  516. package/dist/config-W0w-gi2j.js +0 -4223
  517. package/dist/config-cli-DdRue35G.js +0 -243
  518. package/dist/config-cli-uOwxu5AC.js +0 -247
  519. package/dist/config-guard-BI85dxHR.js +0 -99
  520. package/dist/config-guard-DQqnigKh.js +0 -75
  521. package/dist/config-validation-D-h4LHyA.js +0 -18
  522. package/dist/config-validation-Df_kroIQ.js +0 -18
  523. package/dist/configure-B7ChPbXv.js +0 -891
  524. package/dist/configure-QspkIXME.js +0 -889
  525. package/dist/control-auth-BrBr2xb8.js +0 -397
  526. package/dist/control-auth-CehjYKnL.js +0 -397
  527. package/dist/control-ui-assets-D8F383Mo.js +0 -186
  528. package/dist/control-ui-assets-DYKtRIm0.js +0 -186
  529. package/dist/conversation-label-Bn5j3lUT.js +0 -36
  530. package/dist/conversation-label-CDH4rKMG.js +0 -36
  531. package/dist/cron-cli-DVzDHzAX.js +0 -494
  532. package/dist/cron-cli-gkH2qKM4.js +0 -498
  533. package/dist/daemon-cli-BTdNO1vH.js +0 -737
  534. package/dist/daemon-cli-DNNqI2LD.js +0 -735
  535. package/dist/daemon-install-CaEHG92p.js +0 -56
  536. package/dist/daemon-install-DbpDSDfW.js +0 -60
  537. package/dist/daemon-install-helpers-DjE_WnlY.js +0 -504
  538. package/dist/daemon-install-helpers-DocTUxqQ.js +0 -504
  539. package/dist/deliver-CDcL8ok6.js +0 -481
  540. package/dist/deliver-CS8JsevV.js +0 -481
  541. package/dist/delivery-queue-CTaYZQ_8.js +0 -244
  542. package/dist/delivery-queue-DMZ7mH8P.js +0 -244
  543. package/dist/devices-cli-BBJ4His-.js +0 -319
  544. package/dist/devices-cli-DHSJSFW1.js +0 -323
  545. package/dist/diagnostics-BSvCaLNs.js +0 -35
  546. package/dist/diagnostics-mWFAsFeo.js +0 -35
  547. package/dist/directory-cli-C-oHD_XE.js +0 -224
  548. package/dist/directory-cli-Cw99VGvr.js +0 -220
  549. package/dist/dispatcher-C8d1NNLZ.js +0 -174
  550. package/dist/dispatcher-DY6Ga60j.js +0 -173
  551. package/dist/dm-policy-shared-CRQ-Wr5g.js +0 -22
  552. package/dist/dm-policy-shared-CXXf2ltd.js +0 -22
  553. package/dist/dns-cli-BOqx9qo1.js +0 -199
  554. package/dist/dns-cli-WfqSC3JU.js +0 -203
  555. package/dist/dock-Big-J2VN.js +0 -929
  556. package/dist/dock-Cj4PKiUh.js +0 -928
  557. package/dist/doctor-completion-hYqcZ7IE.js +0 -92
  558. package/dist/doctor-completion-nxQQ5bEw.js +0 -92
  559. package/dist/doctor-config-flow-BUuADMDa.js +0 -1935
  560. package/dist/doctor-config-flow-yOUpQC2B.js +0 -1934
  561. package/dist/enable-DC9V0nTO.js +0 -59
  562. package/dist/env-B3zr72vQ.js +0 -60
  563. package/dist/errors-CdmXrBic.js +0 -35
  564. package/dist/errors-Cr_NbOb4.js +0 -35
  565. package/dist/exec-D_s-zAtY.js +0 -164
  566. package/dist/exec-Zz6eJ6YU.js +0 -164
  567. package/dist/fetch-BIZkXB5i.js +0 -67
  568. package/dist/fetch-DRVdxxEj.js +0 -67
  569. package/dist/fetch-DTR2MlOk.js +0 -67
  570. package/dist/file-lock-6NXMPZTT.js +0 -107
  571. package/dist/file-lock-C_KRlR7M.js +0 -107
  572. package/dist/fs-safe-DZHpH7TI.js +0 -98
  573. package/dist/fs-safe-vm3JMUkq.js +0 -88
  574. package/dist/gateway-cli-DEW-Ukmc.js +0 -24351
  575. package/dist/gateway-cli-DQYcZCOV.js +0 -24347
  576. package/dist/gateway-rpc-BCFkQPa2.js +0 -28
  577. package/dist/gateway-rpc-DOgYbsOG.js +0 -28
  578. package/dist/gmail-setup-utils-DMeA1UM1.js +0 -423
  579. package/dist/gmail-setup-utils-FHWSAur3.js +0 -422
  580. package/dist/health-BrLNGkZV.js +0 -1414
  581. package/dist/health-C8p9mnfl.js +0 -1417
  582. package/dist/heartbeat-visibility-CJVdaMZF.js +0 -125
  583. package/dist/heartbeat-visibility-DwK1UL0t.js +0 -125
  584. package/dist/hook-runner-global-C0DFQmQw.js +0 -527
  585. package/dist/hooks-cli-DEKi-tbA.js +0 -1221
  586. package/dist/hooks-cli-FndXPMD3.js +0 -1225
  587. package/dist/image-ops-B9ofmzSq.js +0 -354
  588. package/dist/image-ops-CMuvRsMY.js +0 -354
  589. package/dist/import-BH13F5mT.js +0 -606
  590. package/dist/import-D8HVcDqO.js +0 -604
  591. package/dist/inbound-context-BLy-G2Eq.js +0 -68
  592. package/dist/inbound-context-CmmmT8IP.js +0 -68
  593. package/dist/inbound-path-policy-BdmTOUka.js +0 -90
  594. package/dist/inbound-path-policy-BurOAu44.js +0 -90
  595. package/dist/inspect-nW8LAukU.js +0 -286
  596. package/dist/inspect-xy2EHy8G.js +0 -286
  597. package/dist/installs-CpfHmKY1.js +0 -325
  598. package/dist/installs-DebiMrGj.js +0 -325
  599. package/dist/ipv4-ysiNGssl.js +0 -46
  600. package/dist/ipv4-zc_Hfvbp.js +0 -46
  601. package/dist/ir-CaxTklDC.js +0 -940
  602. package/dist/lifecycle-core-Z5SScMlU.js +0 -476
  603. package/dist/lifecycle-core-pPwYSt7m.js +0 -474
  604. package/dist/loader-BapIdJyx.js +0 -22404
  605. package/dist/loader-BdAToyDH.js +0 -22401
  606. package/dist/local-roots-CrJ_Jv_G.js +0 -314
  607. package/dist/local-roots-n_Y4iYwb.js +0 -313
  608. package/dist/logger-B8yHnzPl.js +0 -49
  609. package/dist/login-C99fsB0N.js +0 -61
  610. package/dist/login-cLvGPjeO.js +0 -62
  611. package/dist/login-qr-CGqRFwgl.js +0 -329
  612. package/dist/login-qr-dnY5DC2C.js +0 -325
  613. package/dist/logs-cli-Bda7xY4N.js +0 -236
  614. package/dist/logs-cli-HzR-vnpD.js +0 -240
  615. package/dist/markdown-tables-58Hq__7K.js +0 -29
  616. package/dist/markdown-tables-GFEX0OR6.js +0 -29
  617. package/dist/media-CFsyXs3H.js +0 -940
  618. package/dist/media-Du5SHtnp.js +0 -10452
  619. package/dist/message-action-names-BfuEvR6j.js +0 -2521
  620. package/dist/message-action-names-CVBkpOLt.js +0 -2521
  621. package/dist/message-channel-FMNRI5Ax.js +0 -91
  622. package/dist/mime-AuIDUZPG.js +0 -149
  623. package/dist/mime-Cqg1jjia.js +0 -149
  624. package/dist/net-BEFkF-nI.js +0 -225
  625. package/dist/net-CNsUGiSw.js +0 -225
  626. package/dist/node-cli-Bu-InsO9.js +0 -1462
  627. package/dist/node-cli-DE7Pm7Fr.js +0 -1458
  628. package/dist/node-service-CumFZc9L.js +0 -67
  629. package/dist/node-service-DY1gG06I.js +0 -67
  630. package/dist/nodes-cli-B5aAExN0.js +0 -1350
  631. package/dist/nodes-cli-eKRqlKuO.js +0 -1346
  632. package/dist/nodes-screen-B3Sij1uT.js +0 -250
  633. package/dist/nodes-screen-DEvpoFmH.js +0 -250
  634. package/dist/note-CPFJCWJJ.js +0 -92
  635. package/dist/npm-registry-spec-BgMtTHvq.js +0 -786
  636. package/dist/npm-registry-spec-Dz3z1Zpd.js +0 -786
  637. package/dist/npm-resolution-Buio63BQ.js +0 -86
  638. package/dist/npm-resolution-gH1zHW2a.js +0 -86
  639. package/dist/onboard-BSf6qJWk.js +0 -647
  640. package/dist/onboard-V-SsZRk-.js +0 -649
  641. package/dist/onboard-auth-C_wHkop1.js +0 -207
  642. package/dist/onboard-auth-CkCBLvTg.js +0 -211
  643. package/dist/onboard-channels-DQTGPC18.js +0 -2548
  644. package/dist/onboard-channels-DSDQfR0u.js +0 -2547
  645. package/dist/onboard-helpers-Q7M6vdzh.js +0 -363
  646. package/dist/onboard-helpers-SCO3k5Y8.js +0 -364
  647. package/dist/onboard-remote-Co2hv1AD.js +0 -127
  648. package/dist/onboard-remote-Dl3BFSg2.js +0 -127
  649. package/dist/onboarding-B0bJfZ20.js +0 -588
  650. package/dist/onboarding-CeBR9OBi.js +0 -586
  651. package/dist/onboarding.finalize-BPgfWPB9.js +0 -404
  652. package/dist/onboarding.finalize-BmfLvNPJ.js +0 -402
  653. package/dist/onboarding.gateway-config-BL0Q7Wpg.js +0 -201
  654. package/dist/onboarding.gateway-config-D2QsXMYO.js +0 -195
  655. package/dist/outbound-CcaPcetn.js +0 -220
  656. package/dist/outbound-CeiW8z3a.js +0 -221
  657. package/dist/outbound-attachment-BIvFb3Is.js +0 -18
  658. package/dist/outbound-attachment-Bfm5-JYe.js +0 -18
  659. package/dist/outbound-attachment-CZ7zoYxB.js +0 -18
  660. package/dist/pairing-cli-CgX79ujL.js +0 -125
  661. package/dist/pairing-cli-DvbbXFgC.js +0 -129
  662. package/dist/pairing-labels-3wDxaApH.js +0 -9
  663. package/dist/pairing-labels-DCbWnbWk.js +0 -9
  664. package/dist/pairing-store-CdY7iRS0.js +0 -459
  665. package/dist/pairing-store-DykkYpQ7.js +0 -460
  666. package/dist/path-env-Cqo5LZmw.js +0 -89
  667. package/dist/path-env-GTM4HXCN.js +0 -89
  668. package/dist/path-safety-CXKAVpMp.js +0 -14
  669. package/dist/path-safety-DGB91qBk.js +0 -14
  670. package/dist/plugin-auto-enable-C6FPGg_-.js +0 -301
  671. package/dist/plugin-auto-enable-L8eOc8iC.js +0 -302
  672. package/dist/plugin-registry-CHlaWZD7.js +0 -33
  673. package/dist/plugin-registry-DQdMze4z.js +0 -33
  674. package/dist/plugin-sdk/auth/session-override.d.ts +0 -17
  675. package/dist/plugin-sdk/auto-reply/reply/directive-handling.auth.d.ts +0 -18
  676. package/dist/plugin-sdk/link-understanding/apply.d.ts +0 -10
  677. package/dist/plugin-sdk/link-understanding/defaults.d.ts +0 -2
  678. package/dist/plugin-sdk/link-understanding/detect.d.ts +0 -3
  679. package/dist/plugin-sdk/link-understanding/format.d.ts +0 -4
  680. package/dist/plugin-sdk/link-understanding/runner.d.ts +0 -11
  681. package/dist/plugin-sdk/media/input-files.d.ts +0 -95
  682. package/dist/plugin-sdk/media-understanding/apply.d.ts +0 -19
  683. package/dist/plugin-sdk/media-understanding/attachments.d.ts +0 -49
  684. package/dist/plugin-sdk/media-understanding/concurrency.d.ts +0 -1
  685. package/dist/plugin-sdk/media-understanding/defaults.d.ts +0 -11
  686. package/dist/plugin-sdk/media-understanding/errors.d.ts +0 -6
  687. package/dist/plugin-sdk/media-understanding/format.d.ts +0 -7
  688. package/dist/plugin-sdk/media-understanding/fs.d.ts +0 -1
  689. package/dist/plugin-sdk/media-understanding/output-extract.d.ts +0 -2
  690. package/dist/plugin-sdk/media-understanding/providers/anthropic/index.d.ts +0 -2
  691. package/dist/plugin-sdk/media-understanding/providers/deepgram/audio.d.ts +0 -1
  692. package/dist/plugin-sdk/media-understanding/providers/deepgram/index.d.ts +0 -2
  693. package/dist/plugin-sdk/media-understanding/providers/google/audio.d.ts +0 -1
  694. package/dist/plugin-sdk/media-understanding/providers/google/index.d.ts +0 -2
  695. package/dist/plugin-sdk/media-understanding/providers/google/video.d.ts +0 -3
  696. package/dist/plugin-sdk/media-understanding/providers/groq/index.d.ts +0 -2
  697. package/dist/plugin-sdk/media-understanding/providers/index.d.ts +0 -4
  698. package/dist/plugin-sdk/media-understanding/providers/minimax/index.d.ts +0 -2
  699. package/dist/plugin-sdk/media-understanding/providers/mistral/index.d.ts +0 -2
  700. package/dist/plugin-sdk/media-understanding/providers/moonshot/index.d.ts +0 -2
  701. package/dist/plugin-sdk/media-understanding/providers/moonshot/video.d.ts +0 -3
  702. package/dist/plugin-sdk/media-understanding/providers/openai/audio.d.ts +0 -1
  703. package/dist/plugin-sdk/media-understanding/providers/openai/index.d.ts +0 -2
  704. package/dist/plugin-sdk/media-understanding/providers/shared.d.ts +0 -20
  705. package/dist/plugin-sdk/media-understanding/providers/zai/index.d.ts +0 -2
  706. package/dist/plugin-sdk/media-understanding/resolve.d.ts +0 -44
  707. package/dist/plugin-sdk/media-understanding/runner.d.ts +0 -34
  708. package/dist/plugin-sdk/media-understanding/runner.entries.d.ts +0 -33
  709. package/dist/plugin-sdk/media-understanding/scope.d.ts +0 -9
  710. package/dist/plugin-sdk/media-understanding/types.d.ts +0 -59
  711. package/dist/plugin-sdk/media-understanding/video.d.ts +0 -2
  712. package/dist/plugin-sdk/utils/mask-api-key.d.ts +0 -1
  713. package/dist/plugin-sdk/utils/run-with-concurrency.d.ts +0 -11
  714. package/dist/plugins-7B167wIj.js +0 -453
  715. package/dist/plugins-BRHOfy1Z.js +0 -455
  716. package/dist/plugins-cli--I43zIaS.js +0 -797
  717. package/dist/plugins-cli-DIxMbY9I.js +0 -801
  718. package/dist/ports-BS8kQkd9.js +0 -96
  719. package/dist/ports-CAqyeQYZ.js +0 -316
  720. package/dist/ports-CTUgXF2d.js +0 -96
  721. package/dist/ports-DqfnVnCw.js +0 -370
  722. package/dist/preflight-CaRJtknt.js +0 -64
  723. package/dist/preflight-DeDRKMx4.js +0 -68
  724. package/dist/program-context-9dv7ClZz.js +0 -474
  725. package/dist/program-wVSvyiD-.js +0 -248
  726. package/dist/prompt-select-styled-BE_4W66Z.js +0 -1672
  727. package/dist/prompt-select-styled-BTPf06Os.js +0 -1669
  728. package/dist/provider-dispatcher-VZWITjmt.js +0 -660
  729. package/dist/provider-dispatcher-zYYGo00g.js +0 -659
  730. package/dist/push-apns-Cj0Ryn18.js +0 -713
  731. package/dist/push-apns-fFfYCqda.js +0 -711
  732. package/dist/pw-ai-CnN2sITD.js +0 -1908
  733. package/dist/pw-ai-fnX3cecw.js +0 -1911
  734. package/dist/qr-cli-CriPg41m.js +0 -349
  735. package/dist/qr-cli-DSURqD0D.js +0 -353
  736. package/dist/redact-snapshot-BecRL_h6.js +0 -2016
  737. package/dist/redact-snapshot-pTdzSrex.js +0 -2016
  738. package/dist/register.agent-B5_1XatO.js +0 -290
  739. package/dist/register.agent-Dba3CYyo.js +0 -1018
  740. package/dist/register.configure-DmwHGsPG.js +0 -128
  741. package/dist/register.configure-DrPlgBqB.js +0 -133
  742. package/dist/register.import-CPQqqdje.js +0 -31
  743. package/dist/register.import-D1UaH1QV.js +0 -29
  744. package/dist/register.maintenance-D76tiF4W.js +0 -501
  745. package/dist/register.maintenance-hUriFBfi.js +0 -499
  746. package/dist/register.message--VzmF3u4.js +0 -685
  747. package/dist/register.message-itNWUdvP.js +0 -689
  748. package/dist/register.onboard-Co8D908b.js +0 -93
  749. package/dist/register.onboard-q8JzWtuv.js +0 -97
  750. package/dist/register.setup-Djc6jZTc.js +0 -113
  751. package/dist/register.setup-hhPii4O7.js +0 -117
  752. package/dist/register.status-health-sessions-C1FhACQB.js +0 -668
  753. package/dist/register.status-health-sessions-DcUegHcH.js +0 -428
  754. package/dist/register.subclis-DAfihpBz.js +0 -267
  755. package/dist/replies-IpiCq1Ht.js +0 -136
  756. package/dist/replies-LSx_XhsP.js +0 -136
  757. package/dist/reply-D0CLqcBY.js +0 -13718
  758. package/dist/reply-Djq8ghfI.js +0 -13715
  759. package/dist/reply-directives-Cz7622Qx.js +0 -182
  760. package/dist/reply-directives-ssnaPNiU.js +0 -182
  761. package/dist/reply-payloads-CQMtrphw.js +0 -527
  762. package/dist/reply-prefix-CWcAZKhE.js +0 -37
  763. package/dist/reply-prefix-Drq7Pf3A.js +0 -37
  764. package/dist/resolve-route-B8uIc2H3.js +0 -249
  765. package/dist/resolve-route-C8ooNlI4.js +0 -249
  766. package/dist/response-prefix-template-DPOggmPO.js +0 -134
  767. package/dist/retry-BdhJlZQI.js +0 -77
  768. package/dist/run-main-B-Cb62fC.js +0 -306
  769. package/dist/runner-DUnmgjJ8.js +0 -2394
  770. package/dist/runner-EobZIrDt.js +0 -2394
  771. package/dist/secure-random-B5qmFc3N.js +0 -44
  772. package/dist/security-cli-05blEYyC.js +0 -482
  773. package/dist/security-cli-DYbt8duB.js +0 -487
  774. package/dist/send-7O3-bRtl.js +0 -547
  775. package/dist/send-9Huf62k3.js +0 -2245
  776. package/dist/send-B9mIJdUo.js +0 -547
  777. package/dist/send-Bj0RXr-a.js +0 -492
  778. package/dist/send-BzkAsn7K.js +0 -29
  779. package/dist/send-CXFhFLP9.js +0 -11
  780. package/dist/send-Ce_BDa8P.js +0 -349
  781. package/dist/send-ChvasRSh.js +0 -1779
  782. package/dist/send-Cl5BhbnF.js +0 -426
  783. package/dist/send-CpebTvM6.js +0 -374
  784. package/dist/send-DWf7BCPe.js +0 -492
  785. package/dist/send-DX8QSuSI.js +0 -1174
  786. package/dist/send-DZRn6PT2.js +0 -332
  787. package/dist/send-Dd2_MykI.js +0 -2245
  788. package/dist/send-IJaUAa8H.js +0 -1776
  789. package/dist/send-vvZXksNU.js +0 -349
  790. package/dist/server-BrzR9JmX.js +0 -206
  791. package/dist/server-_h27-uP_.js +0 -202
  792. package/dist/server-lifecycle-CUdA6Far.js +0 -2437
  793. package/dist/server-lifecycle-DQZWL8iP.js +0 -2437
  794. package/dist/server-node-events-DgB1z2Cx.js +0 -392
  795. package/dist/server-node-events-DtvPfM1I.js +0 -396
  796. package/dist/service-9le8AnC-.js +0 -670
  797. package/dist/service-Drb0kx6I.js +0 -670
  798. package/dist/session-BIAOl5QR.js +0 -170
  799. package/dist/session-Wu00pCn_.js +0 -170
  800. package/dist/session-cost-usage-7plmOKbs.js +0 -627
  801. package/dist/session-cost-usage-CPFxBFUg.js +0 -627
  802. package/dist/session-dirs-CfIrIJxG.js +0 -318
  803. package/dist/session-dirs-DlPpWt5Q.js +0 -318
  804. package/dist/session-utils-Sd9w4vc1.js +0 -622
  805. package/dist/session-utils-iL47hYmZ.js +0 -622
  806. package/dist/sessions-6pKQ3gN3.js +0 -247
  807. package/dist/sessions-ZRmCDdj1.js +0 -2569
  808. package/dist/shell-env-DYZq9PqC.js +0 -163
  809. package/dist/ssrf-B-rF_tZB.js +0 -183
  810. package/dist/ssrf-DJW14Wkh.js +0 -183
  811. package/dist/status-CTRQCXRj.js +0 -1979
  812. package/dist/status-Y67xsH93.js +0 -1983
  813. package/dist/status.update-DlBReI5-.js +0 -449
  814. package/dist/status.update-v7fEQ7R9.js +0 -449
  815. package/dist/store-B5989JkX.js +0 -64
  816. package/dist/store-BgtgYJoX.js +0 -53
  817. package/dist/store-DCrrxHyS.js +0 -2571
  818. package/dist/store-Ql6vAcsg.js +0 -64
  819. package/dist/subagent-registry-BGknZEUI.js +0 -4856
  820. package/dist/subagent-registry-CWeRBjfn.js +0 -4854
  821. package/dist/subsystem-Ct6qOOqZ.js +0 -1079
  822. package/dist/subsystem-PQ64_nsu.js +0 -1136
  823. package/dist/system-cli-CmO-4Rju.js +0 -77
  824. package/dist/system-cli-VBsa18K6.js +0 -73
  825. package/dist/systemd-CqFpK30Y.js +0 -547
  826. package/dist/systemd-fK9AV5bP.js +0 -547
  827. package/dist/systemd-hints-D3rr0j14.js +0 -278
  828. package/dist/systemd-hints-DNOSRaqA.js +0 -278
  829. package/dist/systemd-linger-B907NVVy.js +0 -75
  830. package/dist/systemd-linger-wYksBbM7.js +0 -75
  831. package/dist/tables-Boxa9MJH.js +0 -55
  832. package/dist/tables-CO_kxD0e.js +0 -55
  833. package/dist/tables-WZp8Vt9n.js +0 -55
  834. package/dist/tailnet-CfZhpSnt.js +0 -40
  835. package/dist/tailnet-D0NV0tRJ.js +0 -40
  836. package/dist/tailscale-B__xvMjA.js +0 -230
  837. package/dist/tailscale-q_ZrxUCc.js +0 -230
  838. package/dist/targets-B4rMyQFJ.js +0 -53
  839. package/dist/targets-BHYLCv06.js +0 -2534
  840. package/dist/targets-BjWhDMJM.js +0 -650
  841. package/dist/targets-BnpMZZC_.js +0 -120
  842. package/dist/targets-CHwGDIgO.js +0 -650
  843. package/dist/targets-DIDKlfKI.js +0 -220
  844. package/dist/targets-bqjVeCnF.js +0 -2535
  845. package/dist/targets-mqj9GNg1.js +0 -53
  846. package/dist/tool-display-C0hpLmkw.js +0 -785
  847. package/dist/tool-display-CQTRHo3Z.js +0 -785
  848. package/dist/tool-images-BYY11Gw3.js +0 -263
  849. package/dist/tool-images-CnJ0R8Fo.js +0 -263
  850. package/dist/trash-C0mjnHuW.js +0 -125
  851. package/dist/trash-Cgwc9mLD.js +0 -125
  852. package/dist/tui-9cJnR1dN.js +0 -3282
  853. package/dist/tui-BR3egaFJ.js +0 -3282
  854. package/dist/tui-cli-BYpkhE6J.js +0 -66
  855. package/dist/tui-cli-DndeZyup.js +0 -62
  856. package/dist/update-BJVdkzk7.js +0 -349
  857. package/dist/update-DjI6KTA5.js +0 -349
  858. package/dist/update-cli-B7Rl2Qr2.js +0 -1146
  859. package/dist/update-cli-CFk_jqUm.js +0 -1148
  860. package/dist/usage-CFv4a1Nf.js +0 -5448
  861. package/dist/voice-credentials-D59RcLbl.js +0 -45
  862. package/dist/voice-credentials-fjA7GShF.js +0 -45
  863. package/dist/web-Bs1td8Qw.js +0 -79
  864. package/dist/web-CSiw--Px.js +0 -3070
  865. package/dist/web-jRTtDiNf.js +0 -74
  866. package/dist/webhooks-cli-0yQha2yj.js +0 -334
  867. package/dist/webhooks-cli-ula0bTX-.js +0 -330
  868. package/dist/whatsapp-actions-3NdzsNg1.js +0 -130
  869. package/dist/whatsapp-actions-y_1vjkYY.js +0 -125
  870. package/dist/workspace-BT3X-qCZ.js +0 -449
  871. package/dist/workspace-D5hHXubL.js +0 -447
  872. package/dist/zod-schema-CbqZAIYy.js +0 -2696
  873. package/dist/zod-schema-YGQJEcnj.js +0 -2696
  874. /package/dist/{account-lookup-BOCzCnir.js → account-lookup-CIY_RKhi.js} +0 -0
  875. /package/dist/{account-lookup-C0ndrpt-.js → account-lookup-DGscKBsr.js} +0 -0
  876. /package/dist/{agent-helpers-eEHy5uX2.js → agent-helpers-D83kfcF9.js} +0 -0
  877. /package/dist/{agents.config-BgDBcY4h.js → agents.config-BPe_hkMn.js} +0 -0
  878. /package/dist/{api-Cd_7aESj.js → api-D8QQo5bc.js} +0 -0
  879. /package/dist/{api-DJ_oWYus.js → api-GywrnwRm.js} +0 -0
  880. /package/dist/{argv-BY8EVMTP.js → argv-DW4MYBdJ.js} +0 -0
  881. /package/dist/{bindings-Dr0bGRst.js → bindings-BpL4pISF.js} +0 -0
  882. /package/dist/{brew-CmTYeZk1.js → brew-CBsS-Vq1.js} +0 -0
  883. /package/dist/{brew-V4lMBeE3.js → brew-Clw9vXhE.js} +0 -0
  884. /package/dist/{chat-envelope-CrM0X4sl.js → chat-envelope-CY1yvCc-.js} +0 -0
  885. /package/dist/{chat-envelope-BIujl9Cj.js → chat-envelope-DUMcMMB2.js} +0 -0
  886. /package/dist/{chat-type-CH3W-zKy.js → chat-type-BKe459rw.js} +0 -0
  887. /package/dist/{chat-type-DyovJwCt.js → chat-type-CE6cJOyt.js} +0 -0
  888. /package/dist/{cleanup-utils-CNwlTKyR.js → cleanup-utils-365rf8YN.js} +0 -0
  889. /package/dist/{cleanup-utils-gNzIs9yk.js → cleanup-utils-rqUXvR3Z.js} +0 -0
  890. /package/dist/{cli-name-3MdfbvIR.js → cli-name-7Gb97Vyl.js} +0 -0
  891. /package/dist/{cli-name-CRLBidNP.js → cli-name-Yv30OygA.js} +0 -0
  892. /package/dist/{cli-utils-5ZIfXAfM.js → cli-utils-5W6ugvN5.js} +0 -0
  893. /package/dist/{cli-utils-BUOtyfnU.js → cli-utils-CZJacPS2.js} +0 -0
  894. /package/dist/{client-D5m46AuY.js → client-DQ-Nh-rV.js} +0 -0
  895. /package/dist/{client-DFyI5I0n.js → client-Fi2k2G9Z.js} +0 -0
  896. /package/dist/{command-options-Cn2fc1Of.js → command-options-CXHYeogR.js} +0 -0
  897. /package/dist/{command-options-D2nN4AXX.js → command-options-Cx6evn0x.js} +0 -0
  898. /package/dist/{config-eval-CU2G7a83.js → config-eval-DU_v_3lY.js} +0 -0
  899. /package/dist/{config-eval-BCKpAS_K.js → config-eval-V26Gl6eZ.js} +0 -0
  900. /package/dist/{constants-CRGAZ2ow.js → constants-C7gkSGRE.js} +0 -0
  901. /package/dist/{constants-BAZuhSRm.js → constants-DAiBiWlI.js} +0 -0
  902. /package/dist/{constants-DoYLsBmv.js → constants-DOnQraOP.js} +0 -0
  903. /package/dist/{constants-BBVTjb1j.js → constants-DQxqJVLu.js} +0 -0
  904. /package/dist/{credentials-DMAWNZdV.js → credentials-BHWUBHMd.js} +0 -0
  905. /package/dist/{credentials-Dmc3H-jd.js → credentials-DG0tD6-e.js} +0 -0
  906. /package/dist/{daemon-runtime-CzFI2dPw.js → daemon-runtime-B7Tmba31.js} +0 -0
  907. /package/dist/{daemon-runtime-aQhinwSL.js → daemon-runtime-KyXiP2ib.js} +0 -0
  908. /package/dist/{dangerous-name-matching-BlTBBZns.js → dangerous-name-matching-B4MRPcn-.js} +0 -0
  909. /package/dist/{dangerous-tools-BRmbBvRf.js → dangerous-tools-CIPZZJoN.js} +0 -0
  910. /package/dist/{dangerous-tools-E1i3IoxZ.js → dangerous-tools-D-GNbdpV.js} +0 -0
  911. /package/dist/{fetch-timeout-DBRRPNBi.js → fetch-timeout-CPe2rPLq.js} +0 -0
  912. /package/dist/{fetch-timeout-l_6RdoMw.js → fetch-timeout-DkT3EnRA.js} +0 -0
  913. /package/dist/{file-identity-BnGA6wyc.js → file-identity-C8MIb5lb.js} +0 -0
  914. /package/dist/{format-duration-B-Uv5nOi.js → format-duration-Cd7SCued.js} +0 -0
  915. /package/dist/{format-duration-D1M3Zxu6.js → format-duration-Oj8pTbYL.js} +0 -0
  916. /package/dist/{format-relative-Cywx6ldk.js → format-relative-8dpVUfzZ.js} +0 -0
  917. /package/dist/{format-relative-DcQZUAYl.js → format-relative-BMNeqaxW.js} +0 -0
  918. /package/dist/{health-format-CL2Xq92A.js → health-format-CwLlmYSK.js} +0 -0
  919. /package/dist/{health-format-CVgQD-z9.js → health-format-CycFH5Sj.js} +0 -0
  920. /package/dist/{heartbeat-wake-DLxQm6-U.js → heartbeat-wake-D6Lt5YUk.js} +0 -0
  921. /package/dist/{heartbeat-wake-DjsTDzF3.js → heartbeat-wake-uZkAP-tP.js} +0 -0
  922. /package/dist/{help-format-DM6-OBt-.js → help-format-B0YIbosn.js} +0 -0
  923. /package/dist/{help-format-CJQ7APRn.js → help-format-GeOPYD_A.js} +0 -0
  924. /package/dist/{helpers-BER76F_2.js → helpers-6_MYSJEW.js} +0 -0
  925. /package/dist/{helpers-DSMIGYx2.js → helpers-703bXVlF.js} +0 -0
  926. /package/dist/{helpers-D-r6yhnI.js → helpers-p_u0Gnj_.js} +0 -0
  927. /package/dist/{input-provenance-BgfeDgck.js → input-provenance-C4nlFv5Y.js} +0 -0
  928. /package/dist/{input-provenance-xUsSMOsz.js → input-provenance-duDehu0D.js} +0 -0
  929. /package/dist/{ip-BAhS4rY2.js → ip-BFJnbRh9.js} +0 -0
  930. /package/dist/{ip-BUhsZdJu.js → ip-D0zgNmBV.js} +0 -0
  931. /package/dist/{is-main-BmHYGRhd.js → is-main-BE1Jih91.js} +0 -0
  932. /package/dist/{json-file-B5WEJJye.js → json-file-CsV03dh-.js} +0 -0
  933. /package/dist/{json-file-Dbg7nZg1.js → json-file-CtQKYRLl.js} +0 -0
  934. /package/dist/{json-files-BFGbyEzL.js → json-files-B2yMsppu.js} +0 -0
  935. /package/dist/{json-files-CfhnuGaC.js → json-files-BYH8U7Mx.js} +0 -0
  936. /package/dist/{lanes-4FoQemog.js → lanes-BWL_LwXG.js} +0 -0
  937. /package/dist/{lanes-BhdzrAIa.js → lanes-cHJ5arWg.js} +0 -0
  938. /package/dist/{links-CwTlzaPe.js → links-BFtUmGLH.js} +0 -0
  939. /package/dist/{links-D5vtq30Q.js → links-BNjLUJ9U.js} +0 -0
  940. /package/dist/{location-50gaJF5Z.js → location-BC45kOxc.js} +0 -0
  941. /package/dist/{location-Qo8Ii1zo.js → location-BUhzov-a.js} +0 -0
  942. /package/dist/{logger-IA_Dr_BT.js → logger-1QWMF9Hc.js} +0 -0
  943. /package/dist/{logger-nEdVxm5D.js → logger-BWMPnILd.js} +0 -0
  944. /package/dist/{logger-O6JX52kK.js → logger-Liu31nEU.js} +0 -0
  945. /package/dist/{logging-FctZEleJ.js → logging-CtbzyUjs.js} +0 -0
  946. /package/dist/{logging-BiuZwq5D.js → logging-DJFQvfGD.js} +0 -0
  947. /package/dist/{logging-Bs1VqVFL.js → logging-JiRrQn2_.js} +0 -0
  948. /package/dist/{logging-JZEg5nDp.js → logging-kuFzZMsG.js} +0 -0
  949. /package/dist/{message-channel-tuc9CdEw.js → message-channel-DOyKgFu8.js} +0 -0
  950. /package/dist/{mutable-allowlist-detectors-CtKavajp.js → mutable-allowlist-detectors-4m-Kc8Kn.js} +0 -0
  951. /package/dist/{mutable-allowlist-detectors-TCG6mnbz.js → mutable-allowlist-detectors-BECxOoKX.js} +0 -0
  952. /package/dist/{onboard-config-BxfgUqk6.js → onboard-config-C9so5ggC.js} +0 -0
  953. /package/dist/{onboard-config-DNzlo8Cg.js → onboard-config-oXID97rS.js} +0 -0
  954. /package/dist/{parse-log-line-CT0H1-oQ.js → parse-log-line-BtFI563v.js} +0 -0
  955. /package/dist/{parse-log-line-pij_xhtE.js → parse-log-line-COptqka7.js} +0 -0
  956. /package/dist/{parse-timeout-CvODy9RC.js → parse-timeout-BpphuwYl.js} +0 -0
  957. /package/dist/{path-guards-DOpzcMXz.js → path-guards-DJteVA0d.js} +0 -0
  958. /package/dist/{path-guards-DipYoPVw.js → path-guards-DVRUJZVN.js} +0 -0
  959. /package/dist/plugin-sdk/{media-understanding → stt}/providers/google/inline-data.d.ts +0 -0
  960. /package/dist/{plugins-allowlist-Bcqe9Gd8.js → plugins-allowlist-Clt6dsY6.js} +0 -0
  961. /package/dist/{polls-DQrR-qT3.js → polls-C5xr-8pM.js} +0 -0
  962. /package/dist/{polls-ybwcqkWt.js → polls-DXd67TD8.js} +0 -0
  963. /package/dist/{ports-lsof-CDyv5GJd.js → ports-lsof-xWMTWvMQ.js} +0 -0
  964. /package/dist/{process-scoped-map-BwUkYFQV.js → process-scoped-map-C7KeadUK.js} +0 -0
  965. /package/dist/{process-scoped-map-_zxf_kLz.js → process-scoped-map-CQ1C5MbT.js} +0 -0
  966. /package/dist/{program-context-CG-t6Yp-.js → program-context-LuBAPt4y.js} +0 -0
  967. /package/dist/{progress-DRLmcFiG.js → progress-C-hTn2yV.js} +0 -0
  968. /package/dist/{progress-BOdRbOHD.js → progress-ChmZpgvt.js} +0 -0
  969. /package/dist/{prompt-WEkXwIMT.js → prompt-BXeXEH0o.js} +0 -0
  970. /package/dist/{prompt-BRGfic91.js → prompt-C31r0R5I.js} +0 -0
  971. /package/dist/{prompt-style-B4Cq4PyQ.js → prompt-style-BcM-VSMx.js} +0 -0
  972. /package/dist/{proxy-BMJL0Qog.js → proxy-dRhp8Ykw.js} +0 -0
  973. /package/dist/{pw-ai-state-CwXeO5d0.js → pw-ai-state-CjfcKQoO.js} +0 -0
  974. /package/dist/{pw-ai-state-DaISdsXY.js → pw-ai-state-DfjyEttO.js} +0 -0
  975. /package/dist/{redact-gXuh8MFk.js → redact-D975G-N6.js} +0 -0
  976. /package/dist/{redact-CqWx9rpK.js → redact-Dx1Fue21.js} +0 -0
  977. /package/dist/{redact-identifier-BJOQDEj0.js → redact-identifier-Bqj_YiPd.js} +0 -0
  978. /package/dist/{redact-identifier-DR54qsoT.js → redact-identifier-HyK89Sod.js} +0 -0
  979. /package/dist/{remoteclaw-root-CgNyrbxc.js → remoteclaw-root-B1iQBmbi.js} +0 -0
  980. /package/dist/{remoteclaw-root-u8dAeHID.js → remoteclaw-root-BmYwCzQN.js} +0 -0
  981. /package/dist/{render-CDCvpfhh.js → render-BvFSFJZW.js} +0 -0
  982. /package/dist/{render-CJl4GK1B.js → render-flG67HhW.js} +0 -0
  983. /package/dist/{response-prefix-template-D3ZcJP4E.js → response-prefix-template-DDvbVpx6.js} +0 -0
  984. /package/dist/{retry-cXXk2j6_.js → retry-CByUYDAZ.js} +0 -0
  985. /package/dist/{retry-B19gMxS7.js → retry-oNE3cBeG.js} +0 -0
  986. /package/dist/{runtime-guard-BS55uiSW.js → runtime-guard-CqNug-FG.js} +0 -0
  987. /package/dist/{runtime-guard-CK80eucm.js → runtime-guard-DAHXelsb.js} +0 -0
  988. /package/dist/{runtime-status-BhW7hP_U.js → runtime-status-CM4rzyfO.js} +0 -0
  989. /package/dist/{runtime-status-hFVEC3wO.js → runtime-status-DJYthOLz.js} +0 -0
  990. /package/dist/{secret-equal-CJzes24Z.js → secret-equal-1-dwi8DL.js} +0 -0
  991. /package/dist/{secret-equal-CQAmGfGc.js → secret-equal-CXJEZiWb.js} +0 -0
  992. /package/dist/{secure-random-B3f7Ri2X.js → secure-random-Ba4Y5xG5.js} +0 -0
  993. /package/dist/{secure-random-BkZFG9cd.js → secure-random-C6AVByhV.js} +0 -0
  994. /package/dist/{stagger-B-_Wnofy.js → stagger-CjeisVRF.js} +0 -0
  995. /package/dist/{stagger-B2ORDHsP.js → stagger-vkvpUmOz.js} +0 -0
  996. /package/dist/{status-C6YNwimj.js → status-DNLnVQZ4.js} +0 -0
  997. /package/dist/{status-yrDGXYZM.js → status-DZhl73dM.js} +0 -0
  998. /package/dist/{strip-inbound-meta-0cvL6itU.js → strip-inbound-meta-C3Cwe_ZO.js} +0 -0
  999. /package/dist/{strip-inbound-meta-DjKcSFaW.js → strip-inbound-meta-DuDjnGjC.js} +0 -0
  1000. /package/dist/{table-ByMyHTh_.js → table-B9zSN_7D.js} +0 -0
  1001. /package/dist/{table-C-dba-5-.js → table-j8Ayarot.js} +0 -0
  1002. /package/dist/{target-errors-DJVRKFcU.js → target-errors-ChjvOMuV.js} +0 -0
  1003. /package/dist/{target-errors-GZXDqlUu.js → target-errors-Dn4aykSV.js} +0 -0
  1004. /package/dist/{targets-B_d_1z3N.js → targets-BtGRUQMa.js} +0 -0
  1005. /package/dist/{targets-DOJXjN1U.js → targets-CE4AYRI9.js} +0 -0
  1006. /package/dist/{targets-D01MJGnh.js → targets-DlufWCmy.js} +0 -0
  1007. /package/dist/{targets-WSwPflb6.js → targets-akvAerZF.js} +0 -0
  1008. /package/dist/{text-format-DarxU3JH.js → text-format-VSogn9Yq.js} +0 -0
  1009. /package/dist/{text-format-mr5bZq0f.js → text-format-xeHt9ywT.js} +0 -0
  1010. /package/dist/{thinking-BqJmU6Zp.js → thinking-B171Rc3-.js} +0 -0
  1011. /package/dist/{tokens-C8yGxAcR.js → tokens-B-jmvNR9.js} +0 -0
  1012. /package/dist/{tokens-DAFBx5qr.js → tokens-kTLGxaAF.js} +0 -0
  1013. /package/dist/{usage-BXi79Rq6.js → usage-CRJFqYf8.js} +0 -0
  1014. /package/dist/{usage-C1lHaofV.js → usage-Txvb0Iq2.js} +0 -0
  1015. /package/dist/{usage-format-CD5jsZY1.js → usage-format-70DvrseE.js} +0 -0
  1016. /package/dist/{usage-format-CRVpDVj1.js → usage-format-Bs8DkQtr.js} +0 -0
  1017. /package/dist/{widearea-dns-C-0P7TRi.js → widearea-dns-BOgHvO4O.js} +0 -0
  1018. /package/dist/{widearea-dns-DFZMcfLf.js → widearea-dns-CGhfClCr.js} +0 -0
  1019. /package/dist/{workspace-BJCKO8Ns.js → workspace-DhUqtMK_.js} +0 -0
  1020. /package/dist/{wsl-kFaeW76c.js → wsl-Cs-gowFJ.js} +0 -0
@@ -1,2521 +0,0 @@
1
- import { i as defaultRuntime } from "./ansi-DtaiOnt1.js";
2
- import { u as resolveThreadSessionKeys } from "./session-key-CgKWfjoZ.js";
3
- import { l as resolveSessionAgentId } from "./agent-scope-_ND_-bJy.js";
4
- import { c as normalizeMessageChannel, f as GATEWAY_CLIENT_MODES, n as isDeliverableMessageChannel, p as GATEWAY_CLIENT_NAMES } from "./message-channel-FMNRI5Ax.js";
5
- import { t as parseDiscordTarget } from "./targets-BjWhDMJM.js";
6
- import { i as loadConfig } from "./config-CAa0rZSx.js";
7
- import { t as getAgentScopedMediaLocalRoots } from "./local-roots-CrJ_Jv_G.js";
8
- import { n as extensionForMime } from "./mime-Cqg1jjia.js";
9
- import { C as resolveDiscordAccount, a as isWhatsAppGroupJid, h as resolveSlackAccount, n as listChannelPlugins, o as normalizeWhatsAppTarget, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-BRHOfy1Z.js";
10
- import { d as normalizeChannelTargetInput, f as normalizeTargetForProvider, u as buildTargetResolverSignature } from "./reply-payloads-CQMtrphw.js";
11
- import { r as resolveOutboundTarget } from "./targets-bqjVeCnF.js";
12
- import { t as parseSlackTarget } from "./targets-B4rMyQFJ.js";
13
- import { c as resolveSignalRecipient, l as resolveSignalSender, o as looksLikeUuid, r as normalizeAllowListLower, s as resolveSignalPeerId } from "./loader-BapIdJyx.js";
14
- import { t as createSlackWebClient } from "./client-D5m46AuY.js";
15
- import { m as resolveStorePath } from "./chat-envelope-BIujl9Cj.js";
16
- import { N as appendAssistantMessageToSessionTranscript, a as recordSessionMetaFromInbound } from "./store-DCrrxHyS.js";
17
- import { a as randomIdempotencyKey, r as callGatewayLeastPrivilege } from "./call-BrTmlOx3.js";
18
- import { n as normalizePollInput } from "./polls-DQrR-qT3.js";
19
- import { i as loadWebMedia } from "./ir-CaxTklDC.js";
20
- import { d as readStringParam, l as readStringArrayParam, s as readNumberParam } from "./common-B67cBSew.js";
21
- import { t as parseReplyDirectives } from "./reply-directives-ssnaPNiU.js";
22
- import { i as resolveTelegramTargetChatType, r as parseTelegramTarget } from "./targets-B_d_1z3N.js";
23
- import { r as unknownTargetError, t as ambiguousTargetError } from "./target-errors-DJVRKFcU.js";
24
- import { t as buildAgentSessionKey } from "./resolve-route-C8ooNlI4.js";
25
- import { E as buildTelegramGroupPeerId } from "./send-ChvasRSh.js";
26
- import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-DW21dXB1.js";
27
- import { o as normalizeReplyPayloadsForDelivery, s as throwIfAborted, t as deliverOutboundPayloads } from "./deliver-CDcL8ok6.js";
28
- import { a as normalizeIMessageHandle, o as parseIMessageTarget } from "./send-DWf7BCPe.js";
29
- import { fileURLToPath } from "node:url";
30
- import path from "node:path";
31
- import fs from "node:fs/promises";
32
- import { Container, Separator, TextDisplay } from "@buape/carbon";
33
-
34
- //#region src/infra/outbound/directory-cache.ts
35
- function buildDirectoryCacheKey(key) {
36
- const signature = key.signature ?? "default";
37
- return `${key.channel}:${key.accountId ?? "default"}:${key.kind}:${key.source}:${signature}`;
38
- }
39
- var DirectoryCache = class {
40
- constructor(ttlMs, maxSize = 2e3) {
41
- this.ttlMs = ttlMs;
42
- this.cache = /* @__PURE__ */ new Map();
43
- this.lastConfigRef = null;
44
- this.maxSize = Math.max(1, Math.floor(maxSize));
45
- }
46
- get(key, cfg) {
47
- this.resetIfConfigChanged(cfg);
48
- this.pruneExpired(Date.now());
49
- const entry = this.cache.get(key);
50
- if (!entry) return;
51
- return entry.value;
52
- }
53
- set(key, value, cfg) {
54
- this.resetIfConfigChanged(cfg);
55
- const now = Date.now();
56
- this.pruneExpired(now);
57
- if (this.cache.has(key)) this.cache.delete(key);
58
- this.cache.set(key, {
59
- value,
60
- fetchedAt: now
61
- });
62
- this.evictToMaxSize();
63
- }
64
- clearMatching(match) {
65
- for (const key of this.cache.keys()) if (match(key)) this.cache.delete(key);
66
- }
67
- clear(cfg) {
68
- this.cache.clear();
69
- if (cfg) this.lastConfigRef = cfg;
70
- }
71
- resetIfConfigChanged(cfg) {
72
- if (this.lastConfigRef && this.lastConfigRef !== cfg) this.cache.clear();
73
- this.lastConfigRef = cfg;
74
- }
75
- pruneExpired(now) {
76
- if (this.ttlMs <= 0) return;
77
- for (const [cacheKey, entry] of this.cache.entries()) if (now - entry.fetchedAt > this.ttlMs) this.cache.delete(cacheKey);
78
- }
79
- evictToMaxSize() {
80
- while (this.cache.size > this.maxSize) {
81
- const oldestKey = this.cache.keys().next().value;
82
- if (typeof oldestKey !== "string") break;
83
- this.cache.delete(oldestKey);
84
- }
85
- }
86
- };
87
-
88
- //#endregion
89
- //#region src/infra/outbound/target-resolver.ts
90
- async function resolveChannelTarget(params) {
91
- return resolveMessagingTarget(params);
92
- }
93
- const directoryCache = new DirectoryCache(1800 * 1e3);
94
- function resetDirectoryCache(params) {
95
- if (!params?.channel) {
96
- directoryCache.clear();
97
- return;
98
- }
99
- const channelKey = params.channel;
100
- const accountKey = params.accountId ?? "default";
101
- directoryCache.clearMatching((key) => {
102
- if (!key.startsWith(`${channelKey}:`)) return false;
103
- if (!params.accountId) return true;
104
- return key.startsWith(`${channelKey}:${accountKey}:`);
105
- });
106
- }
107
- function normalizeQuery(value) {
108
- return value.trim().toLowerCase();
109
- }
110
- function stripTargetPrefixes(value) {
111
- return value.replace(/^(channel|user):/i, "").replace(/^[@#]/, "").trim();
112
- }
113
- function formatTargetDisplay(params) {
114
- const plugin = getChannelPlugin(params.channel);
115
- if (plugin?.messaging?.formatTargetDisplay) return plugin.messaging.formatTargetDisplay({
116
- target: params.target,
117
- display: params.display,
118
- kind: params.kind
119
- });
120
- const trimmedTarget = params.target.trim();
121
- const lowered = trimmedTarget.toLowerCase();
122
- const display = params.display?.trim();
123
- const kind = params.kind ?? (lowered.startsWith("user:") ? "user" : lowered.startsWith("channel:") ? "group" : void 0);
124
- if (display) {
125
- if (display.startsWith("#") || display.startsWith("@")) return display;
126
- if (kind === "user") return `@${display}`;
127
- if (kind === "group" || kind === "channel") return `#${display}`;
128
- return display;
129
- }
130
- if (!trimmedTarget) return trimmedTarget;
131
- if (trimmedTarget.startsWith("#") || trimmedTarget.startsWith("@")) return trimmedTarget;
132
- const channelPrefix = `${params.channel}:`;
133
- const withoutPrefix = (trimmedTarget.toLowerCase().startsWith(channelPrefix) ? trimmedTarget.slice(channelPrefix.length) : trimmedTarget).replace(/^telegram:/i, "");
134
- if (/^channel:/i.test(withoutPrefix)) return `#${withoutPrefix.replace(/^channel:/i, "")}`;
135
- if (/^user:/i.test(withoutPrefix)) return `@${withoutPrefix.replace(/^user:/i, "")}`;
136
- return withoutPrefix;
137
- }
138
- function preserveTargetCase(channel, raw, normalized) {
139
- if (channel !== "slack") return normalized;
140
- const trimmed = raw.trim();
141
- if (/^channel:/i.test(trimmed) || /^user:/i.test(trimmed)) return trimmed;
142
- if (trimmed.startsWith("#")) return `channel:${trimmed.slice(1).trim()}`;
143
- if (trimmed.startsWith("@")) return `user:${trimmed.slice(1).trim()}`;
144
- return trimmed;
145
- }
146
- function detectTargetKind(channel, raw, preferred) {
147
- if (preferred) return preferred;
148
- const trimmed = raw.trim();
149
- if (!trimmed) return "group";
150
- if (trimmed.startsWith("@") || /^<@!?/.test(trimmed) || /^user:/i.test(trimmed)) return "user";
151
- if (trimmed.startsWith("#") || /^channel:/i.test(trimmed)) return "group";
152
- if ((channel === "bluebubbles" || channel === "imessage") && /^\+?\d{6,}$/.test(trimmed)) return "user";
153
- return "group";
154
- }
155
- function normalizeDirectoryEntryId(channel, entry) {
156
- return normalizeTargetForProvider(channel, entry.id) ?? entry.id.trim();
157
- }
158
- function matchesDirectoryEntry(params) {
159
- const query = normalizeQuery(params.query);
160
- if (!query) return false;
161
- return [
162
- stripTargetPrefixes(normalizeDirectoryEntryId(params.channel, params.entry)),
163
- params.entry.name ? stripTargetPrefixes(params.entry.name) : "",
164
- params.entry.handle ? stripTargetPrefixes(params.entry.handle) : ""
165
- ].map((value) => normalizeQuery(value)).filter(Boolean).some((value) => value === query || value.includes(query));
166
- }
167
- function resolveMatch(params) {
168
- const matches = params.entries.filter((entry) => matchesDirectoryEntry({
169
- channel: params.channel,
170
- entry,
171
- query: params.query
172
- }));
173
- if (matches.length === 0) return { kind: "none" };
174
- if (matches.length === 1) return {
175
- kind: "single",
176
- entry: matches[0]
177
- };
178
- return {
179
- kind: "ambiguous",
180
- entries: matches
181
- };
182
- }
183
- async function listDirectoryEntries(params) {
184
- const directory = getChannelPlugin(params.channel)?.directory;
185
- if (!directory) return [];
186
- const runtime = params.runtime ?? defaultRuntime;
187
- const useLive = params.source === "live";
188
- const fn = params.kind === "user" ? useLive ? directory.listPeersLive ?? directory.listPeers : directory.listPeers : useLive ? directory.listGroupsLive ?? directory.listGroups : directory.listGroups;
189
- if (!fn) return [];
190
- return await fn({
191
- cfg: params.cfg,
192
- accountId: params.accountId ?? void 0,
193
- query: params.query ?? void 0,
194
- limit: void 0,
195
- runtime
196
- });
197
- }
198
- async function getDirectoryEntries(params) {
199
- const signature = buildTargetResolverSignature(params.channel);
200
- const cacheKey = buildDirectoryCacheKey({
201
- channel: params.channel,
202
- accountId: params.accountId,
203
- kind: params.kind,
204
- source: "cache",
205
- signature
206
- });
207
- const cached = directoryCache.get(cacheKey, params.cfg);
208
- if (cached) return cached;
209
- const entries = await listDirectoryEntries({
210
- cfg: params.cfg,
211
- channel: params.channel,
212
- accountId: params.accountId,
213
- kind: params.kind,
214
- query: params.query,
215
- runtime: params.runtime,
216
- source: "cache"
217
- });
218
- if (entries.length > 0 || !params.preferLiveOnMiss) {
219
- directoryCache.set(cacheKey, entries, params.cfg);
220
- return entries;
221
- }
222
- const liveKey = buildDirectoryCacheKey({
223
- channel: params.channel,
224
- accountId: params.accountId,
225
- kind: params.kind,
226
- source: "live",
227
- signature
228
- });
229
- const liveEntries = await listDirectoryEntries({
230
- cfg: params.cfg,
231
- channel: params.channel,
232
- accountId: params.accountId,
233
- kind: params.kind,
234
- query: params.query,
235
- runtime: params.runtime,
236
- source: "live"
237
- });
238
- directoryCache.set(liveKey, liveEntries, params.cfg);
239
- directoryCache.set(cacheKey, liveEntries, params.cfg);
240
- return liveEntries;
241
- }
242
- function pickAmbiguousMatch(entries, mode) {
243
- if (entries.length === 0) return null;
244
- if (mode === "first") return entries[0] ?? null;
245
- const ranked = entries.map((entry) => ({
246
- entry,
247
- rank: typeof entry.rank === "number" ? entry.rank : 0
248
- }));
249
- const bestRank = Math.max(...ranked.map((item) => item.rank));
250
- return ranked.find((item) => item.rank === bestRank)?.entry ?? entries[0] ?? null;
251
- }
252
- async function resolveMessagingTarget(params) {
253
- const raw = normalizeChannelTargetInput(params.input);
254
- if (!raw) return {
255
- ok: false,
256
- error: /* @__PURE__ */ new Error("Target is required")
257
- };
258
- const plugin = getChannelPlugin(params.channel);
259
- const providerLabel = plugin?.meta?.label ?? params.channel;
260
- const hint = plugin?.messaging?.targetResolver?.hint;
261
- const kind = detectTargetKind(params.channel, raw, params.preferredKind);
262
- const normalized = normalizeTargetForProvider(params.channel, raw) ?? raw;
263
- const looksLikeTargetId = () => {
264
- const trimmed = raw.trim();
265
- if (!trimmed) return false;
266
- const lookup = plugin?.messaging?.targetResolver?.looksLikeId;
267
- if (lookup) return lookup(trimmed, normalized);
268
- if (/^(channel|group|user):/i.test(trimmed)) return true;
269
- if (/^[@#]/.test(trimmed)) return true;
270
- if (/^\+?\d{6,}$/.test(trimmed)) {
271
- if (params.channel === "bluebubbles" || params.channel === "imessage") return false;
272
- return true;
273
- }
274
- if (trimmed.includes("@thread")) return true;
275
- if (/^(conversation|user):/i.test(trimmed)) return true;
276
- return false;
277
- };
278
- if (looksLikeTargetId()) return {
279
- ok: true,
280
- target: {
281
- to: preserveTargetCase(params.channel, raw, normalized),
282
- kind,
283
- display: stripTargetPrefixes(raw),
284
- source: "normalized"
285
- }
286
- };
287
- const query = stripTargetPrefixes(raw);
288
- const entries = await getDirectoryEntries({
289
- cfg: params.cfg,
290
- channel: params.channel,
291
- accountId: params.accountId,
292
- kind: kind === "user" ? "user" : "group",
293
- query,
294
- runtime: params.runtime,
295
- preferLiveOnMiss: true
296
- });
297
- const match = resolveMatch({
298
- channel: params.channel,
299
- entries,
300
- query
301
- });
302
- if (match.kind === "single") {
303
- const entry = match.entry;
304
- return {
305
- ok: true,
306
- target: {
307
- to: normalizeDirectoryEntryId(params.channel, entry),
308
- kind,
309
- display: entry.name ?? entry.handle ?? stripTargetPrefixes(entry.id),
310
- source: "directory"
311
- }
312
- };
313
- }
314
- if (match.kind === "ambiguous") {
315
- const mode = params.resolveAmbiguous ?? "error";
316
- if (mode !== "error") {
317
- const best = pickAmbiguousMatch(match.entries, mode);
318
- if (best) return {
319
- ok: true,
320
- target: {
321
- to: normalizeDirectoryEntryId(params.channel, best),
322
- kind,
323
- display: best.name ?? best.handle ?? stripTargetPrefixes(best.id),
324
- source: "directory"
325
- }
326
- };
327
- }
328
- return {
329
- ok: false,
330
- error: ambiguousTargetError(providerLabel, raw, hint),
331
- candidates: match.entries
332
- };
333
- }
334
- if ((params.channel === "bluebubbles" || params.channel === "imessage") && /^\+?\d{6,}$/.test(query)) return {
335
- ok: true,
336
- target: {
337
- to: preserveTargetCase(params.channel, raw, normalized),
338
- kind,
339
- display: stripTargetPrefixes(raw),
340
- source: "normalized"
341
- }
342
- };
343
- return {
344
- ok: false,
345
- error: unknownTargetError(providerLabel, raw, hint)
346
- };
347
- }
348
- async function lookupDirectoryDisplay(params) {
349
- const normalized = normalizeTargetForProvider(params.channel, params.targetId) ?? params.targetId;
350
- const [groups, users] = await Promise.all([getDirectoryEntries({
351
- cfg: params.cfg,
352
- channel: params.channel,
353
- accountId: params.accountId,
354
- kind: "group",
355
- runtime: params.runtime,
356
- preferLiveOnMiss: false
357
- }), getDirectoryEntries({
358
- cfg: params.cfg,
359
- channel: params.channel,
360
- accountId: params.accountId,
361
- kind: "user",
362
- runtime: params.runtime,
363
- preferLiveOnMiss: false
364
- })]);
365
- const findMatch = (candidates) => candidates.find((candidate) => normalizeDirectoryEntryId(params.channel, candidate) === normalized);
366
- const entry = findMatch(groups) ?? findMatch(users);
367
- return entry?.name ?? entry?.handle ?? void 0;
368
- }
369
-
370
- //#endregion
371
- //#region src/infra/outbound/outbound-session.ts
372
- const SLACK_CHANNEL_TYPE_CACHE = /* @__PURE__ */ new Map();
373
- function normalizeThreadId(value) {
374
- if (value == null) return;
375
- if (typeof value === "number") {
376
- if (!Number.isFinite(value)) return;
377
- return String(Math.trunc(value));
378
- }
379
- const trimmed = value.trim();
380
- return trimmed ? trimmed : void 0;
381
- }
382
- function stripProviderPrefix(raw, channel) {
383
- const trimmed = raw.trim();
384
- const lower = trimmed.toLowerCase();
385
- const prefix = `${channel.toLowerCase()}:`;
386
- if (lower.startsWith(prefix)) return trimmed.slice(prefix.length).trim();
387
- return trimmed;
388
- }
389
- function stripKindPrefix(raw) {
390
- return raw.replace(/^(user|channel|group|conversation|room|dm):/i, "").trim();
391
- }
392
- function inferPeerKind(params) {
393
- const resolvedKind = params.resolvedTarget?.kind;
394
- if (resolvedKind === "user") return "direct";
395
- if (resolvedKind === "channel") return "channel";
396
- if (resolvedKind === "group") {
397
- const chatTypes = getChannelPlugin(params.channel)?.capabilities?.chatTypes ?? [];
398
- const supportsChannel = chatTypes.includes("channel");
399
- const supportsGroup = chatTypes.includes("group");
400
- if (supportsChannel && !supportsGroup) return "channel";
401
- return "group";
402
- }
403
- return "direct";
404
- }
405
- function buildBaseSessionKey(params) {
406
- return buildAgentSessionKey({
407
- agentId: params.agentId,
408
- channel: params.channel,
409
- accountId: params.accountId,
410
- peer: params.peer,
411
- dmScope: params.cfg.session?.dmScope ?? "main",
412
- identityLinks: params.cfg.session?.identityLinks
413
- });
414
- }
415
- async function resolveSlackChannelType(params) {
416
- const channelId = params.channelId.trim();
417
- if (!channelId) return "unknown";
418
- const cached = SLACK_CHANNEL_TYPE_CACHE.get(`${params.accountId ?? "default"}:${channelId}`);
419
- if (cached) return cached;
420
- const account = resolveSlackAccount({
421
- cfg: params.cfg,
422
- accountId: params.accountId
423
- });
424
- const groupChannels = normalizeAllowListLower(account.dm?.groupChannels);
425
- const channelIdLower = channelId.toLowerCase();
426
- if (groupChannels.includes(channelIdLower) || groupChannels.includes(`slack:${channelIdLower}`) || groupChannels.includes(`channel:${channelIdLower}`) || groupChannels.includes(`group:${channelIdLower}`) || groupChannels.includes(`mpim:${channelIdLower}`)) {
427
- SLACK_CHANNEL_TYPE_CACHE.set(`${account.accountId}:${channelId}`, "group");
428
- return "group";
429
- }
430
- if (Object.keys(account.channels ?? {}).some((key) => {
431
- const normalized = key.trim().toLowerCase();
432
- return normalized === channelIdLower || normalized === `channel:${channelIdLower}` || normalized.replace(/^#/, "") === channelIdLower;
433
- })) {
434
- SLACK_CHANNEL_TYPE_CACHE.set(`${account.accountId}:${channelId}`, "channel");
435
- return "channel";
436
- }
437
- const token = account.botToken?.trim() || (typeof account.config.userToken === "string" ? account.config.userToken.trim() : "");
438
- if (!token) {
439
- SLACK_CHANNEL_TYPE_CACHE.set(`${account.accountId}:${channelId}`, "unknown");
440
- return "unknown";
441
- }
442
- try {
443
- const channel = (await createSlackWebClient(token).conversations.info({ channel: channelId })).channel;
444
- const type = channel?.is_im ? "dm" : channel?.is_mpim ? "group" : "channel";
445
- SLACK_CHANNEL_TYPE_CACHE.set(`${account.accountId}:${channelId}`, type);
446
- return type;
447
- } catch {
448
- SLACK_CHANNEL_TYPE_CACHE.set(`${account.accountId}:${channelId}`, "unknown");
449
- return "unknown";
450
- }
451
- }
452
- async function resolveSlackSession(params) {
453
- const parsed = parseSlackTarget(params.target, { defaultKind: "channel" });
454
- if (!parsed) return null;
455
- const isDm = parsed.kind === "user";
456
- let peerKind = isDm ? "direct" : "channel";
457
- if (!isDm && /^G/i.test(parsed.id)) {
458
- const channelType = await resolveSlackChannelType({
459
- cfg: params.cfg,
460
- accountId: params.accountId,
461
- channelId: parsed.id
462
- });
463
- if (channelType === "group") peerKind = "group";
464
- if (channelType === "dm") peerKind = "direct";
465
- }
466
- const peer = {
467
- kind: peerKind,
468
- id: parsed.id
469
- };
470
- const baseSessionKey = buildBaseSessionKey({
471
- cfg: params.cfg,
472
- agentId: params.agentId,
473
- channel: "slack",
474
- accountId: params.accountId,
475
- peer
476
- });
477
- const threadId = normalizeThreadId(params.threadId ?? params.replyToId);
478
- return {
479
- sessionKey: resolveThreadSessionKeys({
480
- baseSessionKey,
481
- threadId
482
- }).sessionKey,
483
- baseSessionKey,
484
- peer,
485
- chatType: peerKind === "direct" ? "direct" : "channel",
486
- from: peerKind === "direct" ? `slack:${parsed.id}` : peerKind === "group" ? `slack:group:${parsed.id}` : `slack:channel:${parsed.id}`,
487
- to: peerKind === "direct" ? `user:${parsed.id}` : `channel:${parsed.id}`,
488
- threadId
489
- };
490
- }
491
- function resolveDiscordSession(params) {
492
- const parsed = parseDiscordTarget(params.target, { defaultKind: "channel" });
493
- if (!parsed) return null;
494
- const isDm = parsed.kind === "user";
495
- const peer = {
496
- kind: isDm ? "direct" : "channel",
497
- id: parsed.id
498
- };
499
- const baseSessionKey = buildBaseSessionKey({
500
- cfg: params.cfg,
501
- agentId: params.agentId,
502
- channel: "discord",
503
- accountId: params.accountId,
504
- peer
505
- });
506
- const explicitThreadId = normalizeThreadId(params.threadId);
507
- return {
508
- sessionKey: resolveThreadSessionKeys({
509
- baseSessionKey,
510
- threadId: explicitThreadId ?? normalizeThreadId(params.replyToId),
511
- useSuffix: false
512
- }).sessionKey,
513
- baseSessionKey,
514
- peer,
515
- chatType: isDm ? "direct" : "channel",
516
- from: isDm ? `discord:${parsed.id}` : `discord:channel:${parsed.id}`,
517
- to: isDm ? `user:${parsed.id}` : `channel:${parsed.id}`,
518
- threadId: explicitThreadId ?? void 0
519
- };
520
- }
521
- function resolveTelegramSession(params) {
522
- const parsed = parseTelegramTarget(params.target);
523
- const chatId = parsed.chatId.trim();
524
- if (!chatId) return null;
525
- const parsedThreadId = parsed.messageThreadId;
526
- const fallbackThreadId = normalizeThreadId(params.threadId);
527
- const resolvedThreadId = parsedThreadId ?? (fallbackThreadId ? Number.parseInt(fallbackThreadId, 10) : void 0);
528
- const chatType = resolveTelegramTargetChatType(params.target);
529
- const isGroup = chatType === "group" || chatType === "unknown" && params.resolvedTarget?.kind && params.resolvedTarget.kind !== "user";
530
- const peerId = isGroup ? buildTelegramGroupPeerId(chatId, resolvedThreadId) : chatId;
531
- const peer = {
532
- kind: isGroup ? "group" : "direct",
533
- id: peerId
534
- };
535
- const baseSessionKey = buildBaseSessionKey({
536
- cfg: params.cfg,
537
- agentId: params.agentId,
538
- channel: "telegram",
539
- accountId: params.accountId,
540
- peer
541
- });
542
- return {
543
- sessionKey: baseSessionKey,
544
- baseSessionKey,
545
- peer,
546
- chatType: isGroup ? "group" : "direct",
547
- from: isGroup ? `telegram:group:${peerId}` : `telegram:${chatId}`,
548
- to: `telegram:${chatId}`,
549
- threadId: resolvedThreadId
550
- };
551
- }
552
- function resolveWhatsAppSession(params) {
553
- const normalized = normalizeWhatsAppTarget(params.target);
554
- if (!normalized) return null;
555
- const isGroup = isWhatsAppGroupJid(normalized);
556
- const peer = {
557
- kind: isGroup ? "group" : "direct",
558
- id: normalized
559
- };
560
- const baseSessionKey = buildBaseSessionKey({
561
- cfg: params.cfg,
562
- agentId: params.agentId,
563
- channel: "whatsapp",
564
- accountId: params.accountId,
565
- peer
566
- });
567
- return {
568
- sessionKey: baseSessionKey,
569
- baseSessionKey,
570
- peer,
571
- chatType: isGroup ? "group" : "direct",
572
- from: normalized,
573
- to: normalized
574
- };
575
- }
576
- function resolveSignalSession(params) {
577
- const stripped = stripProviderPrefix(params.target, "signal");
578
- const lowered = stripped.toLowerCase();
579
- if (lowered.startsWith("group:")) {
580
- const groupId = stripped.slice(6).trim();
581
- if (!groupId) return null;
582
- const peer = {
583
- kind: "group",
584
- id: groupId
585
- };
586
- const baseSessionKey = buildBaseSessionKey({
587
- cfg: params.cfg,
588
- agentId: params.agentId,
589
- channel: "signal",
590
- accountId: params.accountId,
591
- peer
592
- });
593
- return {
594
- sessionKey: baseSessionKey,
595
- baseSessionKey,
596
- peer,
597
- chatType: "group",
598
- from: `group:${groupId}`,
599
- to: `group:${groupId}`
600
- };
601
- }
602
- let recipient = stripped.trim();
603
- if (lowered.startsWith("username:")) recipient = stripped.slice(9).trim();
604
- else if (lowered.startsWith("u:")) recipient = stripped.slice(2).trim();
605
- if (!recipient) return null;
606
- const uuidCandidate = recipient.toLowerCase().startsWith("uuid:") ? recipient.slice(5) : recipient;
607
- const sender = resolveSignalSender({
608
- sourceUuid: looksLikeUuid(uuidCandidate) ? uuidCandidate : null,
609
- sourceNumber: looksLikeUuid(uuidCandidate) ? null : recipient
610
- });
611
- const peerId = sender ? resolveSignalPeerId(sender) : recipient;
612
- const displayRecipient = sender ? resolveSignalRecipient(sender) : recipient;
613
- const peer = {
614
- kind: "direct",
615
- id: peerId
616
- };
617
- const baseSessionKey = buildBaseSessionKey({
618
- cfg: params.cfg,
619
- agentId: params.agentId,
620
- channel: "signal",
621
- accountId: params.accountId,
622
- peer
623
- });
624
- return {
625
- sessionKey: baseSessionKey,
626
- baseSessionKey,
627
- peer,
628
- chatType: "direct",
629
- from: `signal:${displayRecipient}`,
630
- to: `signal:${displayRecipient}`
631
- };
632
- }
633
- function resolveIMessageSession(params) {
634
- const parsed = parseIMessageTarget(params.target);
635
- if (parsed.kind === "handle") {
636
- const handle = normalizeIMessageHandle(parsed.to);
637
- if (!handle) return null;
638
- const peer = {
639
- kind: "direct",
640
- id: handle
641
- };
642
- const baseSessionKey = buildBaseSessionKey({
643
- cfg: params.cfg,
644
- agentId: params.agentId,
645
- channel: "imessage",
646
- accountId: params.accountId,
647
- peer
648
- });
649
- return {
650
- sessionKey: baseSessionKey,
651
- baseSessionKey,
652
- peer,
653
- chatType: "direct",
654
- from: `imessage:${handle}`,
655
- to: `imessage:${handle}`
656
- };
657
- }
658
- const peerId = parsed.kind === "chat_id" ? String(parsed.chatId) : parsed.kind === "chat_guid" ? parsed.chatGuid : parsed.chatIdentifier;
659
- if (!peerId) return null;
660
- const peer = {
661
- kind: "group",
662
- id: peerId
663
- };
664
- const baseSessionKey = buildBaseSessionKey({
665
- cfg: params.cfg,
666
- agentId: params.agentId,
667
- channel: "imessage",
668
- accountId: params.accountId,
669
- peer
670
- });
671
- const toPrefix = parsed.kind === "chat_id" ? "chat_id" : parsed.kind === "chat_guid" ? "chat_guid" : "chat_identifier";
672
- return {
673
- sessionKey: baseSessionKey,
674
- baseSessionKey,
675
- peer,
676
- chatType: "group",
677
- from: `imessage:group:${peerId}`,
678
- to: `${toPrefix}:${peerId}`
679
- };
680
- }
681
- function resolveMatrixSession(params) {
682
- const stripped = stripProviderPrefix(params.target, "matrix");
683
- const isUser = params.resolvedTarget?.kind === "user" || stripped.startsWith("@") || /^user:/i.test(stripped);
684
- const rawId = stripKindPrefix(stripped);
685
- if (!rawId) return null;
686
- const peer = {
687
- kind: isUser ? "direct" : "channel",
688
- id: rawId
689
- };
690
- const baseSessionKey = buildBaseSessionKey({
691
- cfg: params.cfg,
692
- agentId: params.agentId,
693
- channel: "matrix",
694
- accountId: params.accountId,
695
- peer
696
- });
697
- return {
698
- sessionKey: baseSessionKey,
699
- baseSessionKey,
700
- peer,
701
- chatType: isUser ? "direct" : "channel",
702
- from: isUser ? `matrix:${rawId}` : `matrix:channel:${rawId}`,
703
- to: `room:${rawId}`
704
- };
705
- }
706
- function resolveMSTeamsSession(params) {
707
- let trimmed = params.target.trim();
708
- if (!trimmed) return null;
709
- trimmed = trimmed.replace(/^(msteams|teams):/i, "").trim();
710
- const isUser = trimmed.toLowerCase().startsWith("user:");
711
- const rawId = stripKindPrefix(trimmed);
712
- if (!rawId) return null;
713
- const conversationId = rawId.split(";")[0] ?? rawId;
714
- const isChannel = !isUser && /@thread\.tacv2/i.test(conversationId);
715
- const peer = {
716
- kind: isUser ? "direct" : isChannel ? "channel" : "group",
717
- id: conversationId
718
- };
719
- const baseSessionKey = buildBaseSessionKey({
720
- cfg: params.cfg,
721
- agentId: params.agentId,
722
- channel: "msteams",
723
- accountId: params.accountId,
724
- peer
725
- });
726
- return {
727
- sessionKey: baseSessionKey,
728
- baseSessionKey,
729
- peer,
730
- chatType: isUser ? "direct" : isChannel ? "channel" : "group",
731
- from: isUser ? `msteams:${conversationId}` : isChannel ? `msteams:channel:${conversationId}` : `msteams:group:${conversationId}`,
732
- to: isUser ? `user:${conversationId}` : `conversation:${conversationId}`
733
- };
734
- }
735
- function resolveMattermostSession(params) {
736
- let trimmed = params.target.trim();
737
- if (!trimmed) return null;
738
- trimmed = trimmed.replace(/^mattermost:/i, "").trim();
739
- const isUser = trimmed.toLowerCase().startsWith("user:") || trimmed.startsWith("@");
740
- if (trimmed.startsWith("@")) trimmed = trimmed.slice(1).trim();
741
- const rawId = stripKindPrefix(trimmed);
742
- if (!rawId) return null;
743
- const peer = {
744
- kind: isUser ? "direct" : "channel",
745
- id: rawId
746
- };
747
- const baseSessionKey = buildBaseSessionKey({
748
- cfg: params.cfg,
749
- agentId: params.agentId,
750
- channel: "mattermost",
751
- accountId: params.accountId,
752
- peer
753
- });
754
- const threadId = normalizeThreadId(params.replyToId ?? params.threadId);
755
- return {
756
- sessionKey: resolveThreadSessionKeys({
757
- baseSessionKey,
758
- threadId
759
- }).sessionKey,
760
- baseSessionKey,
761
- peer,
762
- chatType: isUser ? "direct" : "channel",
763
- from: isUser ? `mattermost:${rawId}` : `mattermost:channel:${rawId}`,
764
- to: isUser ? `user:${rawId}` : `channel:${rawId}`,
765
- threadId
766
- };
767
- }
768
- function resolveBlueBubblesSession(params) {
769
- const stripped = stripProviderPrefix(params.target, "bluebubbles");
770
- const lower = stripped.toLowerCase();
771
- const isGroup = lower.startsWith("chat_id:") || lower.startsWith("chat_guid:") || lower.startsWith("chat_identifier:") || lower.startsWith("group:");
772
- const rawPeerId = isGroup ? stripKindPrefix(stripped) : stripped.replace(/^(imessage|sms|auto):/i, "");
773
- const peerId = isGroup ? rawPeerId.replace(/^(chat_id|chat_guid|chat_identifier):/i, "") : rawPeerId;
774
- if (!peerId) return null;
775
- const peer = {
776
- kind: isGroup ? "group" : "direct",
777
- id: peerId
778
- };
779
- const baseSessionKey = buildBaseSessionKey({
780
- cfg: params.cfg,
781
- agentId: params.agentId,
782
- channel: "bluebubbles",
783
- accountId: params.accountId,
784
- peer
785
- });
786
- return {
787
- sessionKey: baseSessionKey,
788
- baseSessionKey,
789
- peer,
790
- chatType: isGroup ? "group" : "direct",
791
- from: isGroup ? `group:${peerId}` : `bluebubbles:${peerId}`,
792
- to: `bluebubbles:${stripped}`
793
- };
794
- }
795
- function resolveNextcloudTalkSession(params) {
796
- let trimmed = params.target.trim();
797
- if (!trimmed) return null;
798
- trimmed = trimmed.replace(/^(nextcloud-talk|nc-talk|nc):/i, "").trim();
799
- trimmed = trimmed.replace(/^room:/i, "").trim();
800
- if (!trimmed) return null;
801
- const peer = {
802
- kind: "group",
803
- id: trimmed
804
- };
805
- const baseSessionKey = buildBaseSessionKey({
806
- cfg: params.cfg,
807
- agentId: params.agentId,
808
- channel: "nextcloud-talk",
809
- accountId: params.accountId,
810
- peer
811
- });
812
- return {
813
- sessionKey: baseSessionKey,
814
- baseSessionKey,
815
- peer,
816
- chatType: "group",
817
- from: `nextcloud-talk:room:${trimmed}`,
818
- to: `nextcloud-talk:${trimmed}`
819
- };
820
- }
821
- function resolveZaloSession(params) {
822
- return resolveZaloLikeSession(params, "zalo", /^(zl):/i);
823
- }
824
- function resolveZaloLikeSession(params, channel, aliasPrefix) {
825
- const trimmed = stripProviderPrefix(params.target, channel).replace(aliasPrefix, "").trim();
826
- if (!trimmed) return null;
827
- const isGroup = trimmed.toLowerCase().startsWith("group:");
828
- const peerId = stripKindPrefix(trimmed);
829
- const peer = {
830
- kind: isGroup ? "group" : "direct",
831
- id: peerId
832
- };
833
- const baseSessionKey = buildBaseSessionKey({
834
- cfg: params.cfg,
835
- agentId: params.agentId,
836
- channel,
837
- accountId: params.accountId,
838
- peer
839
- });
840
- return {
841
- sessionKey: baseSessionKey,
842
- baseSessionKey,
843
- peer,
844
- chatType: isGroup ? "group" : "direct",
845
- from: isGroup ? `${channel}:group:${peerId}` : `${channel}:${peerId}`,
846
- to: `${channel}:${peerId}`
847
- };
848
- }
849
- function resolveZalouserSession(params) {
850
- return resolveZaloLikeSession(params, "zalouser", /^(zlu):/i);
851
- }
852
- function resolveNostrSession(params) {
853
- const trimmed = stripProviderPrefix(params.target, "nostr").trim();
854
- if (!trimmed) return null;
855
- const peer = {
856
- kind: "direct",
857
- id: trimmed
858
- };
859
- const baseSessionKey = buildBaseSessionKey({
860
- cfg: params.cfg,
861
- agentId: params.agentId,
862
- channel: "nostr",
863
- accountId: params.accountId,
864
- peer
865
- });
866
- return {
867
- sessionKey: baseSessionKey,
868
- baseSessionKey,
869
- peer,
870
- chatType: "direct",
871
- from: `nostr:${trimmed}`,
872
- to: `nostr:${trimmed}`
873
- };
874
- }
875
- function normalizeTlonShip(raw) {
876
- const trimmed = raw.trim();
877
- if (!trimmed) return trimmed;
878
- return trimmed.startsWith("~") ? trimmed : `~${trimmed}`;
879
- }
880
- function resolveTlonSession(params) {
881
- let trimmed = stripProviderPrefix(params.target, "tlon");
882
- trimmed = trimmed.trim();
883
- if (!trimmed) return null;
884
- const lower = trimmed.toLowerCase();
885
- let isGroup = lower.startsWith("group:") || lower.startsWith("room:") || lower.startsWith("chat/");
886
- let peerId = trimmed;
887
- if (lower.startsWith("group:") || lower.startsWith("room:")) {
888
- peerId = trimmed.replace(/^(group|room):/i, "").trim();
889
- if (!peerId.startsWith("chat/")) {
890
- const parts = peerId.split("/").filter(Boolean);
891
- if (parts.length === 2) peerId = `chat/${normalizeTlonShip(parts[0])}/${parts[1]}`;
892
- }
893
- isGroup = true;
894
- } else if (lower.startsWith("dm:")) {
895
- peerId = normalizeTlonShip(trimmed.slice(3));
896
- isGroup = false;
897
- } else if (lower.startsWith("chat/")) {
898
- peerId = trimmed;
899
- isGroup = true;
900
- } else if (trimmed.includes("/")) {
901
- const parts = trimmed.split("/").filter(Boolean);
902
- if (parts.length === 2) {
903
- peerId = `chat/${normalizeTlonShip(parts[0])}/${parts[1]}`;
904
- isGroup = true;
905
- }
906
- } else peerId = normalizeTlonShip(trimmed);
907
- const peer = {
908
- kind: isGroup ? "group" : "direct",
909
- id: peerId
910
- };
911
- const baseSessionKey = buildBaseSessionKey({
912
- cfg: params.cfg,
913
- agentId: params.agentId,
914
- channel: "tlon",
915
- accountId: params.accountId,
916
- peer
917
- });
918
- return {
919
- sessionKey: baseSessionKey,
920
- baseSessionKey,
921
- peer,
922
- chatType: isGroup ? "group" : "direct",
923
- from: isGroup ? `tlon:group:${peerId}` : `tlon:${peerId}`,
924
- to: `tlon:${peerId}`
925
- };
926
- }
927
- /**
928
- * Feishu ID formats:
929
- * - oc_xxx: chat_id (group chat)
930
- * - ou_xxx: user open_id (DM)
931
- * - on_xxx: user union_id (DM)
932
- * - cli_xxx: app_id (not a valid send target)
933
- */
934
- function resolveFeishuSession(params) {
935
- let trimmed = stripProviderPrefix(params.target, "feishu");
936
- trimmed = stripProviderPrefix(trimmed, "lark").trim();
937
- if (!trimmed) return null;
938
- const lower = trimmed.toLowerCase();
939
- let isGroup = false;
940
- if (lower.startsWith("group:") || lower.startsWith("chat:")) {
941
- trimmed = trimmed.replace(/^(group|chat):/i, "").trim();
942
- isGroup = true;
943
- } else if (lower.startsWith("user:") || lower.startsWith("dm:")) {
944
- trimmed = trimmed.replace(/^(user|dm):/i, "").trim();
945
- isGroup = false;
946
- }
947
- const idLower = trimmed.toLowerCase();
948
- if (idLower.startsWith("oc_")) isGroup = true;
949
- else if (idLower.startsWith("ou_") || idLower.startsWith("on_")) isGroup = false;
950
- const peer = {
951
- kind: isGroup ? "group" : "direct",
952
- id: trimmed
953
- };
954
- const baseSessionKey = buildBaseSessionKey({
955
- cfg: params.cfg,
956
- agentId: params.agentId,
957
- channel: "feishu",
958
- accountId: params.accountId,
959
- peer
960
- });
961
- return {
962
- sessionKey: baseSessionKey,
963
- baseSessionKey,
964
- peer,
965
- chatType: isGroup ? "group" : "direct",
966
- from: isGroup ? `feishu:group:${trimmed}` : `feishu:${trimmed}`,
967
- to: trimmed
968
- };
969
- }
970
- function resolveFallbackSession(params) {
971
- const trimmed = stripProviderPrefix(params.target, params.channel).trim();
972
- if (!trimmed) return null;
973
- const peerKind = inferPeerKind({
974
- channel: params.channel,
975
- resolvedTarget: params.resolvedTarget
976
- });
977
- const peerId = stripKindPrefix(trimmed);
978
- if (!peerId) return null;
979
- const peer = {
980
- kind: peerKind,
981
- id: peerId
982
- };
983
- const baseSessionKey = buildBaseSessionKey({
984
- cfg: params.cfg,
985
- agentId: params.agentId,
986
- channel: params.channel,
987
- peer
988
- });
989
- return {
990
- sessionKey: baseSessionKey,
991
- baseSessionKey,
992
- peer,
993
- chatType: peerKind === "direct" ? "direct" : peerKind === "channel" ? "channel" : "group",
994
- from: peerKind === "direct" ? `${params.channel}:${peerId}` : `${params.channel}:${peerKind}:${peerId}`,
995
- to: `${peerKind === "direct" ? "user" : "channel"}:${peerId}`
996
- };
997
- }
998
- async function resolveOutboundSessionRoute(params) {
999
- const target = params.target.trim();
1000
- if (!target) return null;
1001
- switch (params.channel) {
1002
- case "slack": return await resolveSlackSession({
1003
- ...params,
1004
- target
1005
- });
1006
- case "discord": return resolveDiscordSession({
1007
- ...params,
1008
- target
1009
- });
1010
- case "telegram": return resolveTelegramSession({
1011
- ...params,
1012
- target
1013
- });
1014
- case "whatsapp": return resolveWhatsAppSession({
1015
- ...params,
1016
- target
1017
- });
1018
- case "signal": return resolveSignalSession({
1019
- ...params,
1020
- target
1021
- });
1022
- case "imessage": return resolveIMessageSession({
1023
- ...params,
1024
- target
1025
- });
1026
- case "matrix": return resolveMatrixSession({
1027
- ...params,
1028
- target
1029
- });
1030
- case "msteams": return resolveMSTeamsSession({
1031
- ...params,
1032
- target
1033
- });
1034
- case "mattermost": return resolveMattermostSession({
1035
- ...params,
1036
- target
1037
- });
1038
- case "bluebubbles": return resolveBlueBubblesSession({
1039
- ...params,
1040
- target
1041
- });
1042
- case "nextcloud-talk": return resolveNextcloudTalkSession({
1043
- ...params,
1044
- target
1045
- });
1046
- case "zalo": return resolveZaloSession({
1047
- ...params,
1048
- target
1049
- });
1050
- case "zalouser": return resolveZalouserSession({
1051
- ...params,
1052
- target
1053
- });
1054
- case "nostr": return resolveNostrSession({
1055
- ...params,
1056
- target
1057
- });
1058
- case "tlon": return resolveTlonSession({
1059
- ...params,
1060
- target
1061
- });
1062
- case "feishu": return resolveFeishuSession({
1063
- ...params,
1064
- target
1065
- });
1066
- default: return resolveFallbackSession({
1067
- ...params,
1068
- target
1069
- });
1070
- }
1071
- }
1072
- async function ensureOutboundSessionEntry(params) {
1073
- const storePath = resolveStorePath(params.cfg.session?.store, { agentId: params.agentId });
1074
- const ctx = {
1075
- From: params.route.from,
1076
- To: params.route.to,
1077
- SessionKey: params.route.sessionKey,
1078
- AccountId: params.accountId ?? void 0,
1079
- ChatType: params.route.chatType,
1080
- Provider: params.channel,
1081
- Surface: params.channel,
1082
- MessageThreadId: params.route.threadId,
1083
- OriginatingChannel: params.channel,
1084
- OriginatingTo: params.route.to
1085
- };
1086
- try {
1087
- await recordSessionMetaFromInbound({
1088
- storePath,
1089
- sessionKey: params.route.sessionKey,
1090
- ctx
1091
- });
1092
- } catch {}
1093
- }
1094
-
1095
- //#endregion
1096
- //#region src/channels/plugins/message-actions.ts
1097
- const trustedRequesterRequiredByChannel = { discord: new Set([
1098
- "timeout",
1099
- "kick",
1100
- "ban"
1101
- ]) };
1102
- function requiresTrustedRequesterSender(ctx) {
1103
- const actions = trustedRequesterRequiredByChannel[ctx.channel];
1104
- return Boolean(actions?.has(ctx.action) && ctx.toolContext);
1105
- }
1106
- function listChannelMessageActions(cfg) {
1107
- const actions = new Set(["send", "broadcast"]);
1108
- for (const plugin of listChannelPlugins()) {
1109
- const list = plugin.actions?.listActions?.({ cfg });
1110
- if (!list) continue;
1111
- for (const action of list) actions.add(action);
1112
- }
1113
- return Array.from(actions);
1114
- }
1115
- function supportsChannelMessageButtons(cfg) {
1116
- return supportsMessageFeature(cfg, (actions) => actions?.supportsButtons?.({ cfg }) === true);
1117
- }
1118
- function supportsChannelMessageButtonsForChannel(params) {
1119
- return supportsMessageFeatureForChannel(params, (actions) => actions.supportsButtons?.(params) === true);
1120
- }
1121
- function supportsChannelMessageCards(cfg) {
1122
- return supportsMessageFeature(cfg, (actions) => actions?.supportsCards?.({ cfg }) === true);
1123
- }
1124
- function supportsChannelMessageCardsForChannel(params) {
1125
- return supportsMessageFeatureForChannel(params, (actions) => actions.supportsCards?.(params) === true);
1126
- }
1127
- function supportsMessageFeature(cfg, check) {
1128
- for (const plugin of listChannelPlugins()) if (plugin.actions && check(plugin.actions)) return true;
1129
- return false;
1130
- }
1131
- function supportsMessageFeatureForChannel(params, check) {
1132
- if (!params.channel) return false;
1133
- const plugin = getChannelPlugin(params.channel);
1134
- return plugin?.actions ? check(plugin.actions) : false;
1135
- }
1136
- async function dispatchChannelMessageAction(ctx) {
1137
- if (requiresTrustedRequesterSender(ctx) && !ctx.requesterSenderId?.trim()) throw new Error(`Trusted sender identity is required for ${ctx.channel}:${ctx.action} in tool-driven contexts.`);
1138
- const plugin = getChannelPlugin(ctx.channel);
1139
- if (!plugin?.actions?.handleAction) return null;
1140
- if (plugin.actions.supportsAction && !plugin.actions.supportsAction({ action: ctx.action })) return null;
1141
- return await plugin.actions.handleAction(ctx);
1142
- }
1143
-
1144
- //#endregion
1145
- //#region src/infra/outbound/message-action-spec.ts
1146
- const MESSAGE_ACTION_TARGET_MODE = {
1147
- send: "to",
1148
- broadcast: "none",
1149
- poll: "to",
1150
- react: "to",
1151
- reactions: "to",
1152
- read: "to",
1153
- edit: "to",
1154
- unsend: "to",
1155
- reply: "to",
1156
- sendWithEffect: "to",
1157
- renameGroup: "to",
1158
- setGroupIcon: "to",
1159
- addParticipant: "to",
1160
- removeParticipant: "to",
1161
- leaveGroup: "to",
1162
- sendAttachment: "to",
1163
- delete: "to",
1164
- pin: "to",
1165
- unpin: "to",
1166
- "list-pins": "to",
1167
- permissions: "to",
1168
- "thread-create": "to",
1169
- "thread-list": "none",
1170
- "thread-reply": "to",
1171
- search: "none",
1172
- sticker: "to",
1173
- "sticker-search": "none",
1174
- "member-info": "none",
1175
- "role-info": "none",
1176
- "emoji-list": "none",
1177
- "emoji-upload": "none",
1178
- "sticker-upload": "none",
1179
- "role-add": "none",
1180
- "role-remove": "none",
1181
- "channel-info": "channelId",
1182
- "channel-list": "none",
1183
- "channel-create": "none",
1184
- "channel-edit": "channelId",
1185
- "channel-delete": "channelId",
1186
- "channel-move": "channelId",
1187
- "category-create": "none",
1188
- "category-edit": "none",
1189
- "category-delete": "none",
1190
- "topic-create": "to",
1191
- "voice-status": "none",
1192
- "event-list": "none",
1193
- "event-create": "none",
1194
- timeout: "none",
1195
- kick: "none",
1196
- ban: "none",
1197
- "set-presence": "none"
1198
- };
1199
- const ACTION_TARGET_ALIASES = {
1200
- unsend: ["messageId"],
1201
- edit: ["messageId"],
1202
- react: [
1203
- "chatGuid",
1204
- "chatIdentifier",
1205
- "chatId"
1206
- ],
1207
- renameGroup: [
1208
- "chatGuid",
1209
- "chatIdentifier",
1210
- "chatId"
1211
- ],
1212
- setGroupIcon: [
1213
- "chatGuid",
1214
- "chatIdentifier",
1215
- "chatId"
1216
- ],
1217
- addParticipant: [
1218
- "chatGuid",
1219
- "chatIdentifier",
1220
- "chatId"
1221
- ],
1222
- removeParticipant: [
1223
- "chatGuid",
1224
- "chatIdentifier",
1225
- "chatId"
1226
- ],
1227
- leaveGroup: [
1228
- "chatGuid",
1229
- "chatIdentifier",
1230
- "chatId"
1231
- ]
1232
- };
1233
- function actionRequiresTarget(action) {
1234
- return MESSAGE_ACTION_TARGET_MODE[action] !== "none";
1235
- }
1236
- function actionHasTarget(action, params) {
1237
- if (typeof params.to === "string" ? params.to.trim() : "") return true;
1238
- if (typeof params.channelId === "string" ? params.channelId.trim() : "") return true;
1239
- const aliases = ACTION_TARGET_ALIASES[action];
1240
- if (!aliases) return false;
1241
- return aliases.some((alias) => {
1242
- const value = params[alias];
1243
- if (typeof value === "string") return value.trim().length > 0;
1244
- if (typeof value === "number") return Number.isFinite(value);
1245
- return false;
1246
- });
1247
- }
1248
-
1249
- //#endregion
1250
- //#region src/infra/outbound/channel-target.ts
1251
- const CHANNEL_TARGET_DESCRIPTION = "Recipient/channel: E.164 for WhatsApp/Signal, Telegram chat id/@username, Discord/Slack channel/user, or iMessage handle/chat_id";
1252
- const CHANNEL_TARGETS_DESCRIPTION = "Recipient/channel targets (same format as --target); accepts ids or names when the directory is available.";
1253
- function applyTargetToParams(params) {
1254
- const target = typeof params.args.target === "string" ? params.args.target.trim() : "";
1255
- const hasLegacyTo = typeof params.args.to === "string";
1256
- const hasLegacyChannelId = typeof params.args.channelId === "string";
1257
- const mode = MESSAGE_ACTION_TARGET_MODE[params.action] ?? "none";
1258
- if (mode !== "none") {
1259
- if (hasLegacyTo || hasLegacyChannelId) throw new Error("Use `target` instead of `to`/`channelId`.");
1260
- } else if (hasLegacyTo) throw new Error("Use `target` for actions that accept a destination.");
1261
- if (!target) return;
1262
- if (mode === "channelId") {
1263
- params.args.channelId = target;
1264
- return;
1265
- }
1266
- if (mode === "to") {
1267
- params.args.to = target;
1268
- return;
1269
- }
1270
- throw new Error(`Action ${params.action} does not accept a target.`);
1271
- }
1272
-
1273
- //#endregion
1274
- //#region src/infra/outbound/message-action-params.ts
1275
- function readBooleanParam(params, key) {
1276
- const raw = params[key];
1277
- if (typeof raw === "boolean") return raw;
1278
- if (typeof raw === "string") {
1279
- const trimmed = raw.trim().toLowerCase();
1280
- if (trimmed === "true") return true;
1281
- if (trimmed === "false") return false;
1282
- }
1283
- }
1284
- function resolveSlackAutoThreadId(params) {
1285
- const context = params.toolContext;
1286
- if (!context?.currentThreadTs || !context.currentChannelId) return;
1287
- if (context.replyToMode !== "all" && context.replyToMode !== "first") return;
1288
- const parsedTarget = parseSlackTarget(params.to, { defaultKind: "channel" });
1289
- if (!parsedTarget || parsedTarget.kind !== "channel") return;
1290
- if (parsedTarget.id.toLowerCase() !== context.currentChannelId.toLowerCase()) return;
1291
- if (context.replyToMode === "first" && context.hasRepliedRef?.value) return;
1292
- return context.currentThreadTs;
1293
- }
1294
- /**
1295
- * Auto-inject Telegram forum topic thread ID when the message tool targets
1296
- * the same chat the session originated from. Mirrors the Slack auto-threading
1297
- * pattern so media, buttons, and other tool-sent messages land in the correct
1298
- * topic instead of the General Topic.
1299
- *
1300
- * Unlike Slack, we do not gate on `replyToMode` here: Telegram forum topics
1301
- * are persistent sub-channels (not ephemeral reply threads), so auto-injection
1302
- * should always apply when the target chat matches.
1303
- */
1304
- function resolveTelegramAutoThreadId(params) {
1305
- const context = params.toolContext;
1306
- if (!context?.currentThreadTs || !context.currentChannelId) return;
1307
- const parsedTo = parseTelegramTarget(params.to);
1308
- const parsedChannel = parseTelegramTarget(context.currentChannelId);
1309
- if (parsedTo.chatId.toLowerCase() !== parsedChannel.chatId.toLowerCase()) return;
1310
- return context.currentThreadTs;
1311
- }
1312
- function resolveAttachmentMaxBytes(params) {
1313
- const accountId = typeof params.accountId === "string" ? params.accountId.trim() : "";
1314
- const channelCfg = params.cfg.channels?.[params.channel];
1315
- const channelObj = channelCfg && typeof channelCfg === "object" ? channelCfg : void 0;
1316
- const channelMediaMax = typeof channelObj?.mediaMaxMb === "number" ? channelObj.mediaMaxMb : void 0;
1317
- const accountsObj = channelObj?.accounts && typeof channelObj.accounts === "object" ? channelObj.accounts : void 0;
1318
- const accountCfg = accountId && accountsObj ? accountsObj[accountId] : void 0;
1319
- const accountMediaMax = accountCfg && typeof accountCfg === "object" ? accountCfg.mediaMaxMb : void 0;
1320
- const limitMb = (typeof accountMediaMax === "number" ? accountMediaMax : void 0) ?? channelMediaMax ?? params.cfg.agents?.defaults?.mediaMaxMb;
1321
- return typeof limitMb === "number" ? limitMb * 1024 * 1024 : void 0;
1322
- }
1323
- function inferAttachmentFilename(params) {
1324
- const mediaHint = params.mediaHint?.trim();
1325
- if (mediaHint) try {
1326
- if (mediaHint.startsWith("file://")) {
1327
- const filePath = fileURLToPath(mediaHint);
1328
- const base = path.basename(filePath);
1329
- if (base) return base;
1330
- } else if (/^https?:\/\//i.test(mediaHint)) {
1331
- const url = new URL(mediaHint);
1332
- const base = path.basename(url.pathname);
1333
- if (base) return base;
1334
- } else {
1335
- const base = path.basename(mediaHint);
1336
- if (base) return base;
1337
- }
1338
- } catch {}
1339
- const ext = params.contentType ? extensionForMime(params.contentType) : void 0;
1340
- return ext ? `attachment${ext}` : "attachment";
1341
- }
1342
- function normalizeBase64Payload(params) {
1343
- if (!params.base64) return {
1344
- base64: params.base64,
1345
- contentType: params.contentType
1346
- };
1347
- const match = /^data:([^;]+);base64,(.*)$/i.exec(params.base64.trim());
1348
- if (!match) return {
1349
- base64: params.base64,
1350
- contentType: params.contentType
1351
- };
1352
- const [, mime, payload] = match;
1353
- return {
1354
- base64: payload,
1355
- contentType: params.contentType ?? mime
1356
- };
1357
- }
1358
- function resolveAttachmentMediaPolicy(params) {
1359
- const sandboxRoot = params.sandboxRoot?.trim();
1360
- if (sandboxRoot) return {
1361
- mode: "sandbox",
1362
- sandboxRoot
1363
- };
1364
- return {
1365
- mode: "host",
1366
- localRoots: params.mediaLocalRoots
1367
- };
1368
- }
1369
- function buildAttachmentMediaLoadOptions(params) {
1370
- if (params.policy.mode === "sandbox") return {
1371
- maxBytes: params.maxBytes,
1372
- sandboxValidated: true,
1373
- readFile: (filePath) => fs.readFile(filePath)
1374
- };
1375
- return {
1376
- maxBytes: params.maxBytes,
1377
- localRoots: params.policy.localRoots
1378
- };
1379
- }
1380
- async function hydrateAttachmentPayload(params) {
1381
- const contentTypeParam = params.contentTypeParam ?? void 0;
1382
- const rawBuffer = readStringParam(params.args, "buffer", { trim: false });
1383
- const normalized = normalizeBase64Payload({
1384
- base64: rawBuffer,
1385
- contentType: contentTypeParam ?? void 0
1386
- });
1387
- if (normalized.base64 !== rawBuffer && normalized.base64) {
1388
- params.args.buffer = normalized.base64;
1389
- if (normalized.contentType && !contentTypeParam) params.args.contentType = normalized.contentType;
1390
- }
1391
- const filename = readStringParam(params.args, "filename");
1392
- const mediaSource = (params.mediaHint ?? void 0) || (params.fileHint ?? void 0);
1393
- if (!params.dryRun && !readStringParam(params.args, "buffer", { trim: false }) && mediaSource) {
1394
- const maxBytes = resolveAttachmentMaxBytes({
1395
- cfg: params.cfg,
1396
- channel: params.channel,
1397
- accountId: params.accountId
1398
- });
1399
- const media = await loadWebMedia(mediaSource, buildAttachmentMediaLoadOptions({
1400
- policy: params.mediaPolicy,
1401
- maxBytes
1402
- }));
1403
- params.args.buffer = media.buffer.toString("base64");
1404
- if (!contentTypeParam && media.contentType) params.args.contentType = media.contentType;
1405
- if (!filename) params.args.filename = inferAttachmentFilename({
1406
- mediaHint: media.fileName ?? mediaSource,
1407
- contentType: media.contentType ?? contentTypeParam ?? void 0
1408
- });
1409
- } else if (!filename) params.args.filename = inferAttachmentFilename({
1410
- mediaHint: mediaSource,
1411
- contentType: contentTypeParam ?? void 0
1412
- });
1413
- }
1414
- async function normalizeSandboxMediaList(params) {
1415
- const normalized = [];
1416
- const seen = /* @__PURE__ */ new Set();
1417
- for (const value of params.values) {
1418
- const raw = value?.trim();
1419
- if (!raw) continue;
1420
- if (seen.has(raw)) continue;
1421
- seen.add(raw);
1422
- normalized.push(raw);
1423
- }
1424
- return normalized;
1425
- }
1426
- async function hydrateAttachmentActionPayload(params) {
1427
- const mediaHint = readStringParam(params.args, "media", { trim: false });
1428
- const fileHint = readStringParam(params.args, "path", { trim: false }) ?? readStringParam(params.args, "filePath", { trim: false });
1429
- const contentTypeParam = readStringParam(params.args, "contentType") ?? readStringParam(params.args, "mimeType");
1430
- if (params.allowMessageCaptionFallback) {
1431
- const caption = readStringParam(params.args, "caption", { allowEmpty: true })?.trim();
1432
- const message = readStringParam(params.args, "message", { allowEmpty: true })?.trim();
1433
- if (!caption && message) params.args.caption = message;
1434
- }
1435
- await hydrateAttachmentPayload({
1436
- cfg: params.cfg,
1437
- channel: params.channel,
1438
- accountId: params.accountId,
1439
- args: params.args,
1440
- dryRun: params.dryRun,
1441
- contentTypeParam,
1442
- mediaHint,
1443
- fileHint,
1444
- mediaPolicy: params.mediaPolicy
1445
- });
1446
- }
1447
- async function hydrateAttachmentParamsForAction(params) {
1448
- if (params.action !== "sendAttachment" && params.action !== "setGroupIcon") return;
1449
- await hydrateAttachmentActionPayload({
1450
- cfg: params.cfg,
1451
- channel: params.channel,
1452
- accountId: params.accountId,
1453
- args: params.args,
1454
- dryRun: params.dryRun,
1455
- mediaPolicy: params.mediaPolicy,
1456
- allowMessageCaptionFallback: params.action === "sendAttachment"
1457
- });
1458
- }
1459
- function parseButtonsParam(params) {
1460
- const raw = params.buttons;
1461
- if (typeof raw !== "string") return;
1462
- const trimmed = raw.trim();
1463
- if (!trimmed) {
1464
- delete params.buttons;
1465
- return;
1466
- }
1467
- try {
1468
- params.buttons = JSON.parse(trimmed);
1469
- } catch {
1470
- throw new Error("--buttons must be valid JSON");
1471
- }
1472
- }
1473
- function parseCardParam(params) {
1474
- const raw = params.card;
1475
- if (typeof raw !== "string") return;
1476
- const trimmed = raw.trim();
1477
- if (!trimmed) {
1478
- delete params.card;
1479
- return;
1480
- }
1481
- try {
1482
- params.card = JSON.parse(trimmed);
1483
- } catch {
1484
- throw new Error("--card must be valid JSON");
1485
- }
1486
- }
1487
- function parseComponentsParam(params) {
1488
- const raw = params.components;
1489
- if (typeof raw !== "string") return;
1490
- const trimmed = raw.trim();
1491
- if (!trimmed) {
1492
- delete params.components;
1493
- return;
1494
- }
1495
- try {
1496
- params.components = JSON.parse(trimmed);
1497
- } catch {
1498
- throw new Error("--components must be valid JSON");
1499
- }
1500
- }
1501
-
1502
- //#endregion
1503
- //#region src/discord/ui.ts
1504
- const DEFAULT_DISCORD_ACCENT_COLOR = "#5865F2";
1505
- function normalizeDiscordAccentColor(raw) {
1506
- const trimmed = (raw ?? "").trim();
1507
- if (!trimmed) return null;
1508
- const normalized = trimmed.startsWith("#") ? trimmed : `#${trimmed}`;
1509
- if (!/^#[0-9a-fA-F]{6}$/.test(normalized)) return null;
1510
- return normalized.toUpperCase();
1511
- }
1512
- function resolveDiscordAccentColor(params) {
1513
- return normalizeDiscordAccentColor(resolveDiscordAccount({
1514
- cfg: params.cfg,
1515
- accountId: params.accountId
1516
- }).config.ui?.components?.accentColor) ?? DEFAULT_DISCORD_ACCENT_COLOR;
1517
- }
1518
- var DiscordUiContainer = class extends Container {
1519
- constructor(params) {
1520
- const accentColor = normalizeDiscordAccentColor(params.accentColor) ?? resolveDiscordAccentColor({
1521
- cfg: params.cfg,
1522
- accountId: params.accountId
1523
- });
1524
- super(params.components, {
1525
- accentColor,
1526
- spoiler: params.spoiler
1527
- });
1528
- }
1529
- };
1530
-
1531
- //#endregion
1532
- //#region src/infra/outbound/channel-adapters.ts
1533
- var CrossContextContainer = class extends DiscordUiContainer {
1534
- constructor({ originLabel, message, cfg, accountId }) {
1535
- const trimmed = message.trim();
1536
- const components = [];
1537
- if (trimmed) {
1538
- components.push(new TextDisplay(message));
1539
- components.push(new Separator({
1540
- divider: true,
1541
- spacing: "small"
1542
- }));
1543
- }
1544
- components.push(new TextDisplay(`*From ${originLabel}*`));
1545
- super({
1546
- cfg,
1547
- accountId,
1548
- components
1549
- });
1550
- }
1551
- };
1552
- const DEFAULT_ADAPTER = { supportsComponentsV2: false };
1553
- const DISCORD_ADAPTER = {
1554
- supportsComponentsV2: true,
1555
- buildCrossContextComponents: ({ originLabel, message, cfg, accountId }) => [new CrossContextContainer({
1556
- originLabel,
1557
- message,
1558
- cfg,
1559
- accountId
1560
- })]
1561
- };
1562
- function getChannelMessageAdapter(channel) {
1563
- if (channel === "discord") return DISCORD_ADAPTER;
1564
- return DEFAULT_ADAPTER;
1565
- }
1566
-
1567
- //#endregion
1568
- //#region src/infra/outbound/outbound-policy.ts
1569
- const CONTEXT_GUARDED_ACTIONS = new Set([
1570
- "send",
1571
- "poll",
1572
- "reply",
1573
- "sendWithEffect",
1574
- "sendAttachment",
1575
- "thread-create",
1576
- "thread-reply",
1577
- "sticker"
1578
- ]);
1579
- const CONTEXT_MARKER_ACTIONS = new Set([
1580
- "send",
1581
- "poll",
1582
- "reply",
1583
- "sendWithEffect",
1584
- "sendAttachment",
1585
- "thread-reply",
1586
- "sticker"
1587
- ]);
1588
- function resolveContextGuardTarget(action, params) {
1589
- if (!CONTEXT_GUARDED_ACTIONS.has(action)) return;
1590
- if (action === "thread-reply" || action === "thread-create") {
1591
- if (typeof params.channelId === "string") return params.channelId;
1592
- if (typeof params.to === "string") return params.to;
1593
- return;
1594
- }
1595
- if (typeof params.to === "string") return params.to;
1596
- if (typeof params.channelId === "string") return params.channelId;
1597
- }
1598
- function normalizeTarget(channel, raw) {
1599
- return normalizeTargetForProvider(channel, raw) ?? raw.trim();
1600
- }
1601
- function isCrossContextTarget(params) {
1602
- const currentTarget = params.toolContext?.currentChannelId?.trim();
1603
- if (!currentTarget) return false;
1604
- const normalizedTarget = normalizeTarget(params.channel, params.target);
1605
- const normalizedCurrent = normalizeTarget(params.channel, currentTarget);
1606
- if (!normalizedTarget || !normalizedCurrent) return false;
1607
- return normalizedTarget !== normalizedCurrent;
1608
- }
1609
- function enforceCrossContextPolicy(params) {
1610
- const currentTarget = params.toolContext?.currentChannelId?.trim();
1611
- if (!currentTarget) return;
1612
- if (!CONTEXT_GUARDED_ACTIONS.has(params.action)) return;
1613
- if (params.cfg.tools?.message?.allowCrossContextSend) return;
1614
- const currentProvider = params.toolContext?.currentChannelProvider;
1615
- const allowWithinProvider = params.cfg.tools?.message?.crossContext?.allowWithinProvider !== false;
1616
- const allowAcrossProviders = params.cfg.tools?.message?.crossContext?.allowAcrossProviders === true;
1617
- if (currentProvider && currentProvider !== params.channel) {
1618
- if (!allowAcrossProviders) throw new Error(`Cross-context messaging denied: action=${params.action} target provider "${params.channel}" while bound to "${currentProvider}".`);
1619
- return;
1620
- }
1621
- if (allowWithinProvider) return;
1622
- const target = resolveContextGuardTarget(params.action, params.args);
1623
- if (!target) return;
1624
- if (!isCrossContextTarget({
1625
- channel: params.channel,
1626
- target,
1627
- toolContext: params.toolContext
1628
- })) return;
1629
- throw new Error(`Cross-context messaging denied: action=${params.action} target="${target}" while bound to "${currentTarget}" (channel=${params.channel}).`);
1630
- }
1631
- async function buildCrossContextDecoration(params) {
1632
- if (!params.toolContext?.currentChannelId) return null;
1633
- if (params.toolContext.skipCrossContextDecoration) return null;
1634
- if (!isCrossContextTarget(params)) return null;
1635
- const markerConfig = params.cfg.tools?.message?.crossContext?.marker;
1636
- if (markerConfig?.enabled === false) return null;
1637
- const currentName = await lookupDirectoryDisplay({
1638
- cfg: params.cfg,
1639
- channel: params.channel,
1640
- targetId: params.toolContext.currentChannelId,
1641
- accountId: params.accountId ?? void 0
1642
- }) ?? params.toolContext.currentChannelId;
1643
- const originLabel = formatTargetDisplay({
1644
- channel: params.channel,
1645
- target: params.toolContext.currentChannelId,
1646
- display: currentName
1647
- });
1648
- const prefixTemplate = markerConfig?.prefix ?? "[from {channel}] ";
1649
- const suffixTemplate = markerConfig?.suffix ?? "";
1650
- const prefix = prefixTemplate.replaceAll("{channel}", originLabel);
1651
- const suffix = suffixTemplate.replaceAll("{channel}", originLabel);
1652
- const adapter = getChannelMessageAdapter(params.channel);
1653
- return {
1654
- prefix,
1655
- suffix,
1656
- componentsBuilder: adapter.supportsComponentsV2 ? adapter.buildCrossContextComponents ? (message) => adapter.buildCrossContextComponents({
1657
- originLabel,
1658
- message,
1659
- cfg: params.cfg,
1660
- accountId: params.accountId ?? void 0
1661
- }) : void 0 : void 0
1662
- };
1663
- }
1664
- function shouldApplyCrossContextMarker(action) {
1665
- return CONTEXT_MARKER_ACTIONS.has(action);
1666
- }
1667
- function applyCrossContextDecoration(params) {
1668
- if (params.preferComponents && params.decoration.componentsBuilder) return {
1669
- message: params.message,
1670
- componentsBuilder: params.decoration.componentsBuilder,
1671
- usedComponents: true
1672
- };
1673
- return {
1674
- message: `${params.decoration.prefix}${params.message}${params.decoration.suffix}`,
1675
- usedComponents: false
1676
- };
1677
- }
1678
-
1679
- //#endregion
1680
- //#region src/infra/outbound/message.ts
1681
- async function resolveRequiredChannel(params) {
1682
- const channel = params.channel?.trim() ? normalizeChannelId(params.channel) : (await resolveMessageChannelSelection({ cfg: params.cfg })).channel;
1683
- if (!channel) throw new Error(`Unknown channel: ${params.channel}`);
1684
- return channel;
1685
- }
1686
- function resolveRequiredPlugin(channel) {
1687
- const plugin = getChannelPlugin(channel);
1688
- if (!plugin) throw new Error(`Unknown channel: ${channel}`);
1689
- return plugin;
1690
- }
1691
- function resolveGatewayOptions(opts) {
1692
- return {
1693
- url: opts?.mode === GATEWAY_CLIENT_MODES.BACKEND || opts?.clientName === GATEWAY_CLIENT_NAMES.GATEWAY_CLIENT ? void 0 : opts?.url,
1694
- token: opts?.token,
1695
- timeoutMs: typeof opts?.timeoutMs === "number" && Number.isFinite(opts.timeoutMs) ? Math.max(1, Math.floor(opts.timeoutMs)) : 1e4,
1696
- clientName: opts?.clientName ?? GATEWAY_CLIENT_NAMES.CLI,
1697
- clientDisplayName: opts?.clientDisplayName,
1698
- mode: opts?.mode ?? GATEWAY_CLIENT_MODES.CLI
1699
- };
1700
- }
1701
- async function callMessageGateway(params) {
1702
- const gateway = resolveGatewayOptions(params.gateway);
1703
- return await callGatewayLeastPrivilege({
1704
- url: gateway.url,
1705
- token: gateway.token,
1706
- method: params.method,
1707
- params: params.params,
1708
- timeoutMs: gateway.timeoutMs,
1709
- clientName: gateway.clientName,
1710
- clientDisplayName: gateway.clientDisplayName,
1711
- mode: gateway.mode
1712
- });
1713
- }
1714
- async function sendMessage(params) {
1715
- const cfg = params.cfg ?? loadConfig();
1716
- const channel = await resolveRequiredChannel({
1717
- cfg,
1718
- channel: params.channel
1719
- });
1720
- const deliveryMode = resolveRequiredPlugin(channel).outbound?.deliveryMode ?? "direct";
1721
- const normalizedPayloads = normalizeReplyPayloadsForDelivery([{
1722
- text: params.content,
1723
- mediaUrl: params.mediaUrl,
1724
- mediaUrls: params.mediaUrls
1725
- }]);
1726
- const mirrorText = normalizedPayloads.map((payload) => payload.text).filter(Boolean).join("\n");
1727
- const mirrorMediaUrls = normalizedPayloads.flatMap((payload) => payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : []));
1728
- const primaryMediaUrl = mirrorMediaUrls[0] ?? params.mediaUrl ?? null;
1729
- if (params.dryRun) return {
1730
- channel,
1731
- to: params.to,
1732
- via: deliveryMode === "gateway" ? "gateway" : "direct",
1733
- mediaUrl: primaryMediaUrl,
1734
- mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : void 0,
1735
- dryRun: true
1736
- };
1737
- if (deliveryMode !== "gateway") {
1738
- const outboundChannel = channel;
1739
- const resolvedTarget = resolveOutboundTarget({
1740
- channel: outboundChannel,
1741
- to: params.to,
1742
- cfg,
1743
- accountId: params.accountId,
1744
- mode: "explicit"
1745
- });
1746
- if (!resolvedTarget.ok) throw resolvedTarget.error;
1747
- const results = await deliverOutboundPayloads({
1748
- cfg,
1749
- channel: outboundChannel,
1750
- to: resolvedTarget.to,
1751
- agentId: params.agentId,
1752
- accountId: params.accountId,
1753
- payloads: normalizedPayloads,
1754
- replyToId: params.replyToId,
1755
- threadId: params.threadId,
1756
- gifPlayback: params.gifPlayback,
1757
- deps: params.deps,
1758
- bestEffort: params.bestEffort,
1759
- abortSignal: params.abortSignal,
1760
- silent: params.silent,
1761
- mirror: params.mirror ? {
1762
- ...params.mirror,
1763
- text: mirrorText || params.content,
1764
- mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : void 0
1765
- } : void 0
1766
- });
1767
- return {
1768
- channel,
1769
- to: params.to,
1770
- via: "direct",
1771
- mediaUrl: primaryMediaUrl,
1772
- mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : void 0,
1773
- result: results.at(-1)
1774
- };
1775
- }
1776
- const result = await callMessageGateway({
1777
- gateway: params.gateway,
1778
- method: "send",
1779
- params: {
1780
- to: params.to,
1781
- message: params.content,
1782
- mediaUrl: params.mediaUrl,
1783
- mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : params.mediaUrls,
1784
- gifPlayback: params.gifPlayback,
1785
- accountId: params.accountId,
1786
- channel,
1787
- sessionKey: params.mirror?.sessionKey,
1788
- idempotencyKey: params.idempotencyKey ?? randomIdempotencyKey()
1789
- }
1790
- });
1791
- return {
1792
- channel,
1793
- to: params.to,
1794
- via: "gateway",
1795
- mediaUrl: primaryMediaUrl,
1796
- mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : void 0,
1797
- result
1798
- };
1799
- }
1800
- async function sendPoll(params) {
1801
- const channel = await resolveRequiredChannel({
1802
- cfg: params.cfg ?? loadConfig(),
1803
- channel: params.channel
1804
- });
1805
- const pollInput = {
1806
- question: params.question,
1807
- options: params.options,
1808
- maxSelections: params.maxSelections,
1809
- durationSeconds: params.durationSeconds,
1810
- durationHours: params.durationHours
1811
- };
1812
- const outbound = resolveRequiredPlugin(channel)?.outbound;
1813
- if (!outbound?.sendPoll) throw new Error(`Unsupported poll channel: ${channel}`);
1814
- const normalized = outbound.pollMaxOptions ? normalizePollInput(pollInput, { maxOptions: outbound.pollMaxOptions }) : normalizePollInput(pollInput);
1815
- if (params.dryRun) return {
1816
- channel,
1817
- to: params.to,
1818
- question: normalized.question,
1819
- options: normalized.options,
1820
- maxSelections: normalized.maxSelections,
1821
- durationSeconds: normalized.durationSeconds ?? null,
1822
- durationHours: normalized.durationHours ?? null,
1823
- via: "gateway",
1824
- dryRun: true
1825
- };
1826
- const result = await callMessageGateway({
1827
- gateway: params.gateway,
1828
- method: "poll",
1829
- params: {
1830
- to: params.to,
1831
- question: normalized.question,
1832
- options: normalized.options,
1833
- maxSelections: normalized.maxSelections,
1834
- durationSeconds: normalized.durationSeconds,
1835
- durationHours: normalized.durationHours,
1836
- threadId: params.threadId,
1837
- silent: params.silent,
1838
- isAnonymous: params.isAnonymous,
1839
- channel,
1840
- accountId: params.accountId,
1841
- idempotencyKey: params.idempotencyKey ?? randomIdempotencyKey()
1842
- }
1843
- });
1844
- return {
1845
- channel,
1846
- to: params.to,
1847
- question: normalized.question,
1848
- options: normalized.options,
1849
- maxSelections: normalized.maxSelections,
1850
- durationSeconds: normalized.durationSeconds ?? null,
1851
- durationHours: normalized.durationHours ?? null,
1852
- via: "gateway",
1853
- result
1854
- };
1855
- }
1856
-
1857
- //#endregion
1858
- //#region src/infra/outbound/tool-payload.ts
1859
- function extractToolPayload(result) {
1860
- if (result.details !== void 0) return result.details;
1861
- const text = (Array.isArray(result.content) ? result.content.find((block) => block && typeof block === "object" && block.type === "text" && typeof block.text === "string") : void 0)?.text;
1862
- if (text) try {
1863
- return JSON.parse(text);
1864
- } catch {
1865
- return text;
1866
- }
1867
- return result.content ?? result;
1868
- }
1869
-
1870
- //#endregion
1871
- //#region src/infra/outbound/outbound-send-service.ts
1872
- async function tryHandleWithPluginAction(params) {
1873
- if (params.ctx.dryRun) return null;
1874
- const mediaLocalRoots = getAgentScopedMediaLocalRoots(params.ctx.cfg, params.ctx.agentId ?? params.ctx.mirror?.agentId);
1875
- const handled = await dispatchChannelMessageAction({
1876
- channel: params.ctx.channel,
1877
- action: params.action,
1878
- cfg: params.ctx.cfg,
1879
- params: params.ctx.params,
1880
- mediaLocalRoots,
1881
- accountId: params.ctx.accountId ?? void 0,
1882
- gateway: params.ctx.gateway,
1883
- toolContext: params.ctx.toolContext,
1884
- dryRun: params.ctx.dryRun
1885
- });
1886
- if (!handled) return null;
1887
- await params.onHandled?.();
1888
- return {
1889
- handledBy: "plugin",
1890
- payload: extractToolPayload(handled),
1891
- toolResult: handled
1892
- };
1893
- }
1894
- async function executeSendAction(params) {
1895
- throwIfAborted(params.ctx.abortSignal);
1896
- const pluginHandled = await tryHandleWithPluginAction({
1897
- ctx: params.ctx,
1898
- action: "send",
1899
- onHandled: async () => {
1900
- if (!params.ctx.mirror) return;
1901
- const mirrorText = params.ctx.mirror.text ?? params.message;
1902
- const mirrorMediaUrls = params.ctx.mirror.mediaUrls ?? params.mediaUrls ?? (params.mediaUrl ? [params.mediaUrl] : void 0);
1903
- await appendAssistantMessageToSessionTranscript({
1904
- agentId: params.ctx.mirror.agentId,
1905
- sessionKey: params.ctx.mirror.sessionKey,
1906
- text: mirrorText,
1907
- mediaUrls: mirrorMediaUrls
1908
- });
1909
- }
1910
- });
1911
- if (pluginHandled) return pluginHandled;
1912
- throwIfAborted(params.ctx.abortSignal);
1913
- const result = await sendMessage({
1914
- cfg: params.ctx.cfg,
1915
- to: params.to,
1916
- content: params.message,
1917
- agentId: params.ctx.agentId,
1918
- mediaUrl: params.mediaUrl || void 0,
1919
- mediaUrls: params.mediaUrls,
1920
- channel: params.ctx.channel || void 0,
1921
- accountId: params.ctx.accountId ?? void 0,
1922
- replyToId: params.replyToId,
1923
- threadId: params.threadId,
1924
- gifPlayback: params.gifPlayback,
1925
- dryRun: params.ctx.dryRun,
1926
- bestEffort: params.bestEffort ?? void 0,
1927
- deps: params.ctx.deps,
1928
- gateway: params.ctx.gateway,
1929
- mirror: params.ctx.mirror,
1930
- abortSignal: params.ctx.abortSignal,
1931
- silent: params.ctx.silent
1932
- });
1933
- return {
1934
- handledBy: "core",
1935
- payload: result,
1936
- sendResult: result
1937
- };
1938
- }
1939
- async function executePollAction(params) {
1940
- const pluginHandled = await tryHandleWithPluginAction({
1941
- ctx: params.ctx,
1942
- action: "poll"
1943
- });
1944
- if (pluginHandled) return pluginHandled;
1945
- const result = await sendPoll({
1946
- cfg: params.ctx.cfg,
1947
- to: params.to,
1948
- question: params.question,
1949
- options: params.options,
1950
- maxSelections: params.maxSelections,
1951
- durationSeconds: params.durationSeconds ?? void 0,
1952
- durationHours: params.durationHours ?? void 0,
1953
- channel: params.ctx.channel,
1954
- accountId: params.ctx.accountId ?? void 0,
1955
- threadId: params.threadId ?? void 0,
1956
- silent: params.ctx.silent ?? void 0,
1957
- isAnonymous: params.isAnonymous ?? void 0,
1958
- dryRun: params.ctx.dryRun,
1959
- gateway: params.ctx.gateway
1960
- });
1961
- return {
1962
- handledBy: "core",
1963
- payload: result,
1964
- pollResult: result
1965
- };
1966
- }
1967
-
1968
- //#endregion
1969
- //#region src/infra/outbound/message-action-runner.ts
1970
- function resolveAndApplyOutboundThreadId(params, ctx) {
1971
- const threadId = readStringParam(params, "threadId");
1972
- const slackAutoThreadId = ctx.allowSlackAutoThread && ctx.channel === "slack" && !threadId ? resolveSlackAutoThreadId({
1973
- to: ctx.to,
1974
- toolContext: ctx.toolContext
1975
- }) : void 0;
1976
- const telegramAutoThreadId = ctx.channel === "telegram" && !threadId ? resolveTelegramAutoThreadId({
1977
- to: ctx.to,
1978
- toolContext: ctx.toolContext
1979
- }) : void 0;
1980
- const resolved = threadId ?? slackAutoThreadId ?? telegramAutoThreadId;
1981
- if (resolved && !params.threadId) params.threadId = resolved;
1982
- return resolved ?? void 0;
1983
- }
1984
- function getToolResult(result) {
1985
- return "toolResult" in result ? result.toolResult : void 0;
1986
- }
1987
- function applyCrossContextMessageDecoration({ params, message, decoration, preferComponents }) {
1988
- const applied = applyCrossContextDecoration({
1989
- message,
1990
- decoration,
1991
- preferComponents
1992
- });
1993
- params.message = applied.message;
1994
- if (applied.componentsBuilder) params.components = applied.componentsBuilder;
1995
- return applied.message;
1996
- }
1997
- async function maybeApplyCrossContextMarker(params) {
1998
- if (!shouldApplyCrossContextMarker(params.action) || !params.toolContext) return params.message;
1999
- const decoration = await buildCrossContextDecoration({
2000
- cfg: params.cfg,
2001
- channel: params.channel,
2002
- target: params.target,
2003
- toolContext: params.toolContext,
2004
- accountId: params.accountId ?? void 0
2005
- });
2006
- if (!decoration) return params.message;
2007
- return applyCrossContextMessageDecoration({
2008
- params: params.args,
2009
- message: params.message,
2010
- decoration,
2011
- preferComponents: params.preferComponents
2012
- });
2013
- }
2014
- async function resolveChannel(cfg, params) {
2015
- return (await resolveMessageChannelSelection({
2016
- cfg,
2017
- channel: readStringParam(params, "channel")
2018
- })).channel;
2019
- }
2020
- async function resolveActionTarget(params) {
2021
- let resolvedTarget;
2022
- const toRaw = typeof params.args.to === "string" ? params.args.to.trim() : "";
2023
- if (toRaw) {
2024
- const resolved = await resolveChannelTarget({
2025
- cfg: params.cfg,
2026
- channel: params.channel,
2027
- input: toRaw,
2028
- accountId: params.accountId ?? void 0
2029
- });
2030
- if (resolved.ok) {
2031
- params.args.to = resolved.target.to;
2032
- resolvedTarget = resolved.target;
2033
- } else throw resolved.error;
2034
- }
2035
- const channelIdRaw = typeof params.args.channelId === "string" ? params.args.channelId.trim() : "";
2036
- if (channelIdRaw) {
2037
- const resolved = await resolveChannelTarget({
2038
- cfg: params.cfg,
2039
- channel: params.channel,
2040
- input: channelIdRaw,
2041
- accountId: params.accountId ?? void 0,
2042
- preferredKind: "group"
2043
- });
2044
- if (resolved.ok) {
2045
- if (resolved.target.kind === "user") throw new Error(`Channel id "${channelIdRaw}" resolved to a user target.`);
2046
- params.args.channelId = resolved.target.to.replace(/^(channel|group):/i, "");
2047
- } else throw resolved.error;
2048
- }
2049
- return resolvedTarget;
2050
- }
2051
- function resolveGateway(input) {
2052
- if (!input.gateway) return;
2053
- return {
2054
- url: input.gateway.url,
2055
- token: input.gateway.token,
2056
- timeoutMs: input.gateway.timeoutMs,
2057
- clientName: input.gateway.clientName,
2058
- clientDisplayName: input.gateway.clientDisplayName,
2059
- mode: input.gateway.mode
2060
- };
2061
- }
2062
- async function handleBroadcastAction(input, params) {
2063
- throwIfAborted(input.abortSignal);
2064
- if (!(input.cfg.tools?.message?.broadcast?.enabled !== false)) throw new Error("Broadcast is disabled. Set tools.message.broadcast.enabled to true.");
2065
- const rawTargets = readStringArrayParam(params, "targets", { required: true }) ?? [];
2066
- if (rawTargets.length === 0) throw new Error("Broadcast requires at least one target in --targets.");
2067
- const channelHint = readStringParam(params, "channel");
2068
- const configured = await listConfiguredMessageChannels(input.cfg);
2069
- if (configured.length === 0) throw new Error("Broadcast requires at least one configured channel.");
2070
- const targetChannels = channelHint && channelHint.trim().toLowerCase() !== "all" ? [await resolveChannel(input.cfg, { channel: channelHint })] : configured;
2071
- const results = [];
2072
- const isAbortError = (err) => err instanceof Error && err.name === "AbortError";
2073
- for (const targetChannel of targetChannels) {
2074
- throwIfAborted(input.abortSignal);
2075
- for (const target of rawTargets) {
2076
- throwIfAborted(input.abortSignal);
2077
- try {
2078
- const resolved = await resolveChannelTarget({
2079
- cfg: input.cfg,
2080
- channel: targetChannel,
2081
- input: target
2082
- });
2083
- if (!resolved.ok) throw resolved.error;
2084
- const sendResult = await runMessageAction({
2085
- ...input,
2086
- action: "send",
2087
- params: {
2088
- ...params,
2089
- channel: targetChannel,
2090
- target: resolved.target.to
2091
- }
2092
- });
2093
- results.push({
2094
- channel: targetChannel,
2095
- to: resolved.target.to,
2096
- ok: true,
2097
- result: sendResult.kind === "send" ? sendResult.sendResult : void 0
2098
- });
2099
- } catch (err) {
2100
- if (isAbortError(err)) throw err;
2101
- results.push({
2102
- channel: targetChannel,
2103
- to: target,
2104
- ok: false,
2105
- error: err instanceof Error ? err.message : String(err)
2106
- });
2107
- }
2108
- }
2109
- }
2110
- return {
2111
- kind: "broadcast",
2112
- channel: targetChannels[0] ?? "discord",
2113
- action: "broadcast",
2114
- handledBy: input.dryRun ? "dry-run" : "core",
2115
- payload: { results },
2116
- dryRun: Boolean(input.dryRun)
2117
- };
2118
- }
2119
- async function handleSendAction(ctx) {
2120
- const { cfg, params, channel, accountId, dryRun, gateway, input, agentId, resolvedTarget, abortSignal } = ctx;
2121
- throwIfAborted(abortSignal);
2122
- const action = "send";
2123
- const to = readStringParam(params, "to", { required: true });
2124
- const mediaHint = readStringParam(params, "media", { trim: false }) ?? readStringParam(params, "path", { trim: false }) ?? readStringParam(params, "filePath", { trim: false });
2125
- const hasCard = params.card != null && typeof params.card === "object";
2126
- const hasComponents = params.components != null && typeof params.components === "object";
2127
- const caption = readStringParam(params, "caption", { allowEmpty: true }) ?? "";
2128
- let message = readStringParam(params, "message", {
2129
- required: !mediaHint && !hasCard && !hasComponents,
2130
- allowEmpty: true
2131
- }) ?? "";
2132
- if (message.includes("\\n")) message = message.replaceAll("\\n", "\n");
2133
- if (!message.trim() && caption.trim()) message = caption;
2134
- const parsed = parseReplyDirectives(message);
2135
- const mergedMediaUrls = [];
2136
- const seenMedia = /* @__PURE__ */ new Set();
2137
- const pushMedia = (value) => {
2138
- const trimmed = value?.trim();
2139
- if (!trimmed) return;
2140
- if (seenMedia.has(trimmed)) return;
2141
- seenMedia.add(trimmed);
2142
- mergedMediaUrls.push(trimmed);
2143
- };
2144
- pushMedia(mediaHint);
2145
- for (const url of parsed.mediaUrls ?? []) pushMedia(url);
2146
- pushMedia(parsed.mediaUrl);
2147
- const normalizedMediaUrls = await normalizeSandboxMediaList({
2148
- values: mergedMediaUrls,
2149
- sandboxRoot: input.sandboxRoot
2150
- });
2151
- mergedMediaUrls.length = 0;
2152
- mergedMediaUrls.push(...normalizedMediaUrls);
2153
- message = parsed.text;
2154
- params.message = message;
2155
- if (!params.replyTo && parsed.replyToId) params.replyTo = parsed.replyToId;
2156
- if (!params.media) params.media = mergedMediaUrls[0] || void 0;
2157
- message = await maybeApplyCrossContextMarker({
2158
- cfg,
2159
- channel,
2160
- action,
2161
- target: to,
2162
- toolContext: input.toolContext,
2163
- accountId,
2164
- args: params,
2165
- message,
2166
- preferComponents: true
2167
- });
2168
- const mediaUrl = readStringParam(params, "media", { trim: false });
2169
- if (channel === "whatsapp") {
2170
- message = message.replace(/^(?:[ \t]*\r?\n)+/, "");
2171
- if (!message.trim()) message = "";
2172
- }
2173
- if (!message.trim() && !mediaUrl && mergedMediaUrls.length === 0 && !hasCard && !hasComponents) throw new Error("send requires text or media");
2174
- params.message = message;
2175
- const gifPlayback = readBooleanParam(params, "gifPlayback") ?? false;
2176
- const bestEffort = readBooleanParam(params, "bestEffort");
2177
- const silent = readBooleanParam(params, "silent");
2178
- const replyToId = readStringParam(params, "replyTo");
2179
- const resolvedThreadId = resolveAndApplyOutboundThreadId(params, {
2180
- channel,
2181
- to,
2182
- toolContext: input.toolContext,
2183
- allowSlackAutoThread: channel === "slack" && !replyToId
2184
- });
2185
- const outboundRoute = agentId && !dryRun ? await resolveOutboundSessionRoute({
2186
- cfg,
2187
- channel,
2188
- agentId,
2189
- accountId,
2190
- target: to,
2191
- resolvedTarget,
2192
- replyToId,
2193
- threadId: resolvedThreadId
2194
- }) : null;
2195
- if (outboundRoute && agentId && !dryRun) await ensureOutboundSessionEntry({
2196
- cfg,
2197
- agentId,
2198
- channel,
2199
- accountId,
2200
- route: outboundRoute
2201
- });
2202
- if (outboundRoute && !dryRun) params.__sessionKey = outboundRoute.sessionKey;
2203
- if (agentId) params.__agentId = agentId;
2204
- const mirrorMediaUrls = mergedMediaUrls.length > 0 ? mergedMediaUrls : mediaUrl ? [mediaUrl] : void 0;
2205
- throwIfAborted(abortSignal);
2206
- const send = await executeSendAction({
2207
- ctx: {
2208
- cfg,
2209
- channel,
2210
- params,
2211
- agentId,
2212
- accountId: accountId ?? void 0,
2213
- gateway,
2214
- toolContext: input.toolContext,
2215
- deps: input.deps,
2216
- dryRun,
2217
- mirror: outboundRoute && !dryRun ? {
2218
- sessionKey: outboundRoute.sessionKey,
2219
- agentId,
2220
- text: message,
2221
- mediaUrls: mirrorMediaUrls
2222
- } : void 0,
2223
- abortSignal,
2224
- silent: silent ?? void 0
2225
- },
2226
- to,
2227
- message,
2228
- mediaUrl: mediaUrl || void 0,
2229
- mediaUrls: mergedMediaUrls.length ? mergedMediaUrls : void 0,
2230
- gifPlayback,
2231
- bestEffort: bestEffort ?? void 0,
2232
- replyToId: replyToId ?? void 0,
2233
- threadId: resolvedThreadId ?? void 0
2234
- });
2235
- return {
2236
- kind: "send",
2237
- channel,
2238
- action,
2239
- to,
2240
- handledBy: send.handledBy,
2241
- payload: send.payload,
2242
- toolResult: send.toolResult,
2243
- sendResult: send.sendResult,
2244
- dryRun
2245
- };
2246
- }
2247
- async function handlePollAction(ctx) {
2248
- const { cfg, params, channel, accountId, dryRun, gateway, input, abortSignal } = ctx;
2249
- throwIfAborted(abortSignal);
2250
- const action = "poll";
2251
- const to = readStringParam(params, "to", { required: true });
2252
- const question = readStringParam(params, "pollQuestion", { required: true });
2253
- const options = readStringArrayParam(params, "pollOption", { required: true }) ?? [];
2254
- if (options.length < 2) throw new Error("pollOption requires at least two values");
2255
- const silent = readBooleanParam(params, "silent");
2256
- const allowMultiselect = readBooleanParam(params, "pollMulti") ?? false;
2257
- const pollAnonymous = readBooleanParam(params, "pollAnonymous");
2258
- const pollPublic = readBooleanParam(params, "pollPublic");
2259
- if (pollAnonymous && pollPublic) throw new Error("pollAnonymous and pollPublic are mutually exclusive");
2260
- const isAnonymous = pollAnonymous ? true : pollPublic ? false : void 0;
2261
- const durationHours = readNumberParam(params, "pollDurationHours", { integer: true });
2262
- const durationSeconds = readNumberParam(params, "pollDurationSeconds", { integer: true });
2263
- const maxSelections = allowMultiselect ? Math.max(2, options.length) : 1;
2264
- if (durationSeconds !== void 0 && channel !== "telegram") throw new Error("pollDurationSeconds is only supported for Telegram polls");
2265
- if (isAnonymous !== void 0 && channel !== "telegram") throw new Error("pollAnonymous/pollPublic are only supported for Telegram polls");
2266
- const resolvedThreadId = resolveAndApplyOutboundThreadId(params, {
2267
- channel,
2268
- to,
2269
- toolContext: input.toolContext,
2270
- allowSlackAutoThread: channel === "slack"
2271
- });
2272
- const base = typeof params.message === "string" ? params.message : "";
2273
- await maybeApplyCrossContextMarker({
2274
- cfg,
2275
- channel,
2276
- action,
2277
- target: to,
2278
- toolContext: input.toolContext,
2279
- accountId,
2280
- args: params,
2281
- message: base,
2282
- preferComponents: false
2283
- });
2284
- const poll = await executePollAction({
2285
- ctx: {
2286
- cfg,
2287
- channel,
2288
- params,
2289
- accountId: accountId ?? void 0,
2290
- gateway,
2291
- toolContext: input.toolContext,
2292
- dryRun,
2293
- silent: silent ?? void 0
2294
- },
2295
- to,
2296
- question,
2297
- options,
2298
- maxSelections,
2299
- durationSeconds: durationSeconds ?? void 0,
2300
- durationHours: durationHours ?? void 0,
2301
- threadId: resolvedThreadId ?? void 0,
2302
- isAnonymous
2303
- });
2304
- return {
2305
- kind: "poll",
2306
- channel,
2307
- action,
2308
- to,
2309
- handledBy: poll.handledBy,
2310
- payload: poll.payload,
2311
- toolResult: poll.toolResult,
2312
- pollResult: poll.pollResult,
2313
- dryRun
2314
- };
2315
- }
2316
- async function handlePluginAction(ctx) {
2317
- const { cfg, params, channel, accountId, dryRun, gateway, input, abortSignal } = ctx;
2318
- throwIfAborted(abortSignal);
2319
- const action = input.action;
2320
- if (dryRun) return {
2321
- kind: "action",
2322
- channel,
2323
- action,
2324
- handledBy: "dry-run",
2325
- payload: {
2326
- ok: true,
2327
- dryRun: true,
2328
- channel,
2329
- action
2330
- },
2331
- dryRun: true
2332
- };
2333
- const handled = await dispatchChannelMessageAction({
2334
- channel,
2335
- action,
2336
- cfg,
2337
- params,
2338
- accountId: accountId ?? void 0,
2339
- requesterSenderId: input.requesterSenderId ?? void 0,
2340
- gateway,
2341
- toolContext: input.toolContext,
2342
- dryRun
2343
- });
2344
- if (!handled) throw new Error(`Message action ${action} not supported for channel ${channel}.`);
2345
- return {
2346
- kind: "action",
2347
- channel,
2348
- action,
2349
- handledBy: "plugin",
2350
- payload: extractToolPayload(handled),
2351
- toolResult: handled,
2352
- dryRun
2353
- };
2354
- }
2355
- async function runMessageAction(input) {
2356
- const cfg = input.cfg;
2357
- const params = { ...input.params };
2358
- const resolvedAgentId = input.agentId ?? (input.sessionKey ? resolveSessionAgentId({
2359
- sessionKey: input.sessionKey,
2360
- config: cfg
2361
- }) : void 0);
2362
- parseButtonsParam(params);
2363
- parseCardParam(params);
2364
- parseComponentsParam(params);
2365
- const action = input.action;
2366
- if (action === "broadcast") return handleBroadcastAction(input, params);
2367
- const explicitTarget = typeof params.target === "string" ? params.target.trim() : "";
2368
- const hasLegacyTarget = typeof params.to === "string" && params.to.trim().length > 0 || typeof params.channelId === "string" && params.channelId.trim().length > 0;
2369
- if (explicitTarget && hasLegacyTarget) {
2370
- delete params.to;
2371
- delete params.channelId;
2372
- }
2373
- if (!explicitTarget && !hasLegacyTarget && actionRequiresTarget(action) && !actionHasTarget(action, params)) {
2374
- const inferredTarget = input.toolContext?.currentChannelId?.trim();
2375
- if (inferredTarget) params.target = inferredTarget;
2376
- }
2377
- if (!explicitTarget && actionRequiresTarget(action) && hasLegacyTarget) {
2378
- const legacyTo = typeof params.to === "string" ? params.to.trim() : "";
2379
- const legacyChannelId = typeof params.channelId === "string" ? params.channelId.trim() : "";
2380
- const legacyTarget = legacyTo || legacyChannelId;
2381
- if (legacyTarget) {
2382
- params.target = legacyTarget;
2383
- delete params.to;
2384
- delete params.channelId;
2385
- }
2386
- }
2387
- if (!(typeof params.channel === "string" ? params.channel.trim() : "")) {
2388
- const inferredChannel = normalizeMessageChannel(input.toolContext?.currentChannelProvider);
2389
- if (inferredChannel && isDeliverableMessageChannel(inferredChannel)) params.channel = inferredChannel;
2390
- }
2391
- applyTargetToParams({
2392
- action,
2393
- args: params
2394
- });
2395
- if (actionRequiresTarget(action)) {
2396
- if (!actionHasTarget(action, params)) throw new Error(`Action ${action} requires a target.`);
2397
- }
2398
- const channel = await resolveChannel(cfg, params);
2399
- const accountId = readStringParam(params, "accountId") ?? input.defaultAccountId;
2400
- if (accountId) params.accountId = accountId;
2401
- const dryRun = Boolean(input.dryRun ?? readBooleanParam(params, "dryRun"));
2402
- const mediaLocalRoots = getAgentScopedMediaLocalRoots(cfg, resolvedAgentId);
2403
- await hydrateAttachmentParamsForAction({
2404
- cfg,
2405
- channel,
2406
- accountId,
2407
- args: params,
2408
- action,
2409
- dryRun,
2410
- mediaPolicy: resolveAttachmentMediaPolicy({
2411
- sandboxRoot: input.sandboxRoot,
2412
- mediaLocalRoots
2413
- })
2414
- });
2415
- const resolvedTarget = await resolveActionTarget({
2416
- cfg,
2417
- channel,
2418
- action,
2419
- args: params,
2420
- accountId
2421
- });
2422
- enforceCrossContextPolicy({
2423
- channel,
2424
- action,
2425
- args: params,
2426
- toolContext: input.toolContext,
2427
- cfg
2428
- });
2429
- const gateway = resolveGateway(input);
2430
- if (action === "send") return handleSendAction({
2431
- cfg,
2432
- params,
2433
- channel,
2434
- accountId,
2435
- dryRun,
2436
- gateway,
2437
- input,
2438
- agentId: resolvedAgentId,
2439
- resolvedTarget,
2440
- abortSignal: input.abortSignal
2441
- });
2442
- if (action === "poll") return handlePollAction({
2443
- cfg,
2444
- params,
2445
- channel,
2446
- accountId,
2447
- dryRun,
2448
- gateway,
2449
- input,
2450
- abortSignal: input.abortSignal
2451
- });
2452
- return handlePluginAction({
2453
- cfg,
2454
- params,
2455
- channel,
2456
- accountId,
2457
- dryRun,
2458
- gateway,
2459
- input,
2460
- abortSignal: input.abortSignal
2461
- });
2462
- }
2463
-
2464
- //#endregion
2465
- //#region src/channels/plugins/message-action-names.ts
2466
- const CHANNEL_MESSAGE_ACTION_NAMES = [
2467
- "send",
2468
- "broadcast",
2469
- "poll",
2470
- "react",
2471
- "reactions",
2472
- "read",
2473
- "edit",
2474
- "unsend",
2475
- "reply",
2476
- "sendWithEffect",
2477
- "renameGroup",
2478
- "setGroupIcon",
2479
- "addParticipant",
2480
- "removeParticipant",
2481
- "leaveGroup",
2482
- "sendAttachment",
2483
- "delete",
2484
- "pin",
2485
- "unpin",
2486
- "list-pins",
2487
- "permissions",
2488
- "thread-create",
2489
- "thread-list",
2490
- "thread-reply",
2491
- "search",
2492
- "sticker",
2493
- "sticker-search",
2494
- "member-info",
2495
- "role-info",
2496
- "emoji-list",
2497
- "emoji-upload",
2498
- "sticker-upload",
2499
- "role-add",
2500
- "role-remove",
2501
- "channel-info",
2502
- "channel-list",
2503
- "channel-create",
2504
- "channel-edit",
2505
- "channel-delete",
2506
- "channel-move",
2507
- "category-create",
2508
- "category-edit",
2509
- "category-delete",
2510
- "topic-create",
2511
- "voice-status",
2512
- "event-list",
2513
- "event-create",
2514
- "timeout",
2515
- "kick",
2516
- "ban",
2517
- "set-presence"
2518
- ];
2519
-
2520
- //#endregion
2521
- export { CHANNEL_TARGET_DESCRIPTION as a, supportsChannelMessageButtonsForChannel as c, ensureOutboundSessionEntry as d, resolveOutboundSessionRoute as f, CHANNEL_TARGETS_DESCRIPTION as i, supportsChannelMessageCards as l, resetDirectoryCache as m, getToolResult as n, listChannelMessageActions as o, formatTargetDisplay as p, runMessageAction as r, supportsChannelMessageButtons as s, CHANNEL_MESSAGE_ACTION_NAMES as t, supportsChannelMessageCardsForChannel as u };