@openclaw/discord 2026.9.5 → 2026.9.6

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 (421) hide show
  1. package/dist/.setup/{activities-api-DBwRt5ES.mjs → activities-api-COU4-0nR.mjs} +4 -4
  2. package/dist/.setup/{approval-handler.runtime-Du3n5ypX.mjs → approval-handler.runtime-CbBktBb4.mjs} +5 -5
  3. package/dist/.setup/{approval-message-updates-BN7JtScm.mjs → approval-message-updates-jf9zMaIC.mjs} +1 -1
  4. package/dist/.setup/{audit-C8uaKoa9.mjs → audit-vKbh-LFR.mjs} +3 -3
  5. package/dist/.setup/{channel-ChKdlBgH.mjs → channel-Dv4e3Jpc.mjs} +19 -16
  6. package/dist/.setup/{channel-actions.runtime-CJmiFfps.mjs → channel-actions.runtime-leZuw01r.mjs} +13 -7
  7. package/dist/.setup/{channel.setup-BlC3-Kzz.mjs → channel.setup-0NX6FFwi.mjs} +1 -1
  8. package/dist/.setup/{components-MqMWUWnE.mjs → components-yBEb75bB.mjs} +1 -2
  9. package/dist/.setup/{conversation-binding-route-_rz33QHO.mjs → conversation-binding-route-B7qImK_b.mjs} +6 -3
  10. package/dist/.setup/{doctor-DxcdkXzz.mjs → doctor-D1R-uFIu.mjs} +2 -2
  11. package/dist/.setup/{handle-action.guild-admin-DAFyh_yV.mjs → handle-action.guild-admin-DcFa8NwA.mjs} +3 -3
  12. package/dist/.setup/{message-handler-DnUrDpaU.mjs → message-handler-X6ejmbtY.mjs} +6 -5
  13. package/dist/.setup/{message-handler.preflight-CtqaF_fb.mjs → message-handler.preflight-DE_POxFc.mjs} +14 -117
  14. package/dist/.setup/message-handler.preflight-pluralkit-8Xji34AF.mjs +143 -0
  15. package/dist/.setup/{message-handler.process-Dz1xvuQU.mjs → message-handler.process-CCmIVnxy.mjs} +387 -317
  16. package/dist/.setup/{outbound-adapter-C8v79z9Z.mjs → outbound-adapter-ClIgmu4F.mjs} +5 -5
  17. package/dist/.setup/{outbound-session-route-CqWbuMOm.mjs → outbound-session-route-VulUE0yV.mjs} +7 -6
  18. package/dist/.setup/{preflight-audio-DrnqFA8U.mjs → preflight-audio-DHGIHEpv.mjs} +2 -1
  19. package/dist/.setup/{provider-72zIvN-i.mjs → provider-iOf73HW-.mjs} +425 -286
  20. package/dist/.setup/{provider-session.runtime-BW7QrF5C.mjs → provider-session.runtime-DrGAYnZv.mjs} +3 -3
  21. package/dist/.setup/provider.runtime-BmjW_pIw.mjs +2 -0
  22. package/dist/.setup/{realtime-session.runtime-DTccTgTM.mjs → realtime-session.runtime-Dz8uVutq.mjs} +338 -297
  23. package/dist/.setup/receive-recovery-DHst8WRx.mjs +517 -0
  24. package/dist/.setup/{retry-DBfcEgmO.mjs → retry-BEYkDy0P.mjs} +78 -13
  25. package/dist/.setup/{runtime-SchNfUsQ.mjs → runtime-B8lJfyrA.mjs} +30 -11
  26. package/dist/.setup/{runtime-BVoa7hhx.mjs → runtime-DisDbixd.mjs} +1 -1
  27. package/dist/.setup/{send-CKDczUNL.mjs → send-CIBzvXjS.mjs} +23 -9
  28. package/dist/.setup/{send.components-DWQjXhPV.mjs → send.components-ChY21qr-.mjs} +4 -4
  29. package/dist/.setup/{send.outbound-D0hQ7s50.mjs → send.outbound-QTyuFupn.mjs} +15 -16
  30. package/dist/.setup/{send.shared-Zwx6BxQ5.mjs → send.shared-VNvWfX2T.mjs} +2 -2
  31. package/dist/.setup/setup-plugin-api-Dvr41dyx.mjs +3 -0
  32. package/dist/.setup/{shared-CaA3Vv4n.mjs → shared-DHPDaMSx.mjs} +1 -1
  33. package/dist/.setup/{subagent-hooks-Bired9q6.mjs → subagent-hooks-CjW7r8Pe.mjs} +1 -1
  34. package/dist/.setup/{target-resolver-B6MrxbYv.mjs → target-resolver-BXpy6VT8.mjs} +1 -1
  35. package/dist/.setup/targets-CvemhN3i.mjs +3 -0
  36. package/dist/.setup/{thread-bindings-CK5272V3.mjs → thread-bindings-CEh2dhqP.mjs} +3 -3
  37. package/dist/.setup/{thread-bindings.manager-eexkKyrG.mjs → thread-bindings.manager-ve-i6oqt.mjs} +94 -45
  38. package/dist/.setup/{transcripts-source-CuWYgayu.mjs → transcripts-source-DVegW0WI.mjs} +61 -7
  39. package/dist/.setup/{voice-runtime-DHVQ2mFz.mjs → voice-runtime-elTtjEIG.mjs} +553 -901
  40. package/dist/action-runtime-api.js +1 -1
  41. package/dist/activities-api.js +1 -1
  42. package/dist/api.js +10 -10
  43. package/dist/channel-plugin-api.js +1 -1
  44. package/dist/index.js +1 -1
  45. package/dist/runtime-api.js +12 -12
  46. package/dist/setup-entry.js +1 -1
  47. package/dist/setup-plugin-api.js +1 -1
  48. package/dist/src/voice/audio-worker.runtime.js +1065 -0
  49. package/dist/subagent-hooks-api.js +1 -1
  50. package/dist/transcripts-source-api.js +1 -1
  51. package/node_modules/@napi-rs/wasm-runtime/dist/emnapi-plugins.cjs +8 -4
  52. package/node_modules/@napi-rs/wasm-runtime/dist/emnapi-plugins.js +8 -4
  53. package/node_modules/@napi-rs/wasm-runtime/dist/fs-proxy.cjs +1 -1
  54. package/node_modules/@napi-rs/wasm-runtime/dist/fs.js +770 -695
  55. package/node_modules/@napi-rs/wasm-runtime/fs-proxy.js +3 -2
  56. package/node_modules/@napi-rs/wasm-runtime/package.json +1 -1
  57. package/node_modules/@tybys/wasm-util/LICENSE +21 -0
  58. package/node_modules/@tybys/wasm-util/package.json +1 -1
  59. package/node_modules/@types/node/README.md +1 -1
  60. package/node_modules/@types/node/package.json +2 -2
  61. package/node_modules/@types/node/web-globals/streams.d.ts +4 -0
  62. package/node_modules/zod/README.md +2 -2
  63. package/node_modules/zod/compile.cjs +19 -0
  64. package/node_modules/zod/index.cjs +19 -0
  65. package/node_modules/zod/locales/index.cjs +19 -0
  66. package/node_modules/zod/mini/index.cjs +19 -0
  67. package/node_modules/zod/package.json +8 -7
  68. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  69. package/node_modules/zod/src/v4/classic/external.ts +2 -0
  70. package/node_modules/zod/src/v4/classic/from-json-schema.ts +248 -25
  71. package/node_modules/zod/src/v4/classic/schemas.ts +243 -168
  72. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +60 -9
  73. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +6 -0
  74. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
  75. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +265 -0
  76. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +112 -6
  77. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +9 -0
  78. package/node_modules/zod/src/v4/classic/tests/error.test.ts +130 -1
  79. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +157 -0
  80. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  81. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +40 -2
  82. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +27 -7
  83. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +88 -56
  84. package/node_modules/zod/src/v4/classic/tests/number.test.ts +39 -0
  85. package/node_modules/zod/src/v4/classic/tests/object.test.ts +56 -0
  86. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +3 -2
  87. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  88. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  89. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +46 -1
  90. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  91. package/node_modules/zod/src/v4/classic/tests/string.test.ts +95 -1
  92. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +33 -1
  93. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +234 -38
  94. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +569 -0
  95. package/node_modules/zod/src/v4/core/api.ts +44 -28
  96. package/node_modules/zod/src/v4/core/checks.ts +62 -102
  97. package/node_modules/zod/src/v4/core/compile.ts +218 -93
  98. package/node_modules/zod/src/v4/core/core.ts +1 -3
  99. package/node_modules/zod/src/v4/core/doc.ts +6 -2
  100. package/node_modules/zod/src/v4/core/errors.ts +3 -6
  101. package/node_modules/zod/src/v4/core/json-schema-generator.ts +2 -2
  102. package/node_modules/zod/src/v4/core/json-schema-processors.ts +185 -81
  103. package/node_modules/zod/src/v4/core/memoizer.ts +75 -28
  104. package/node_modules/zod/src/v4/core/parse.ts +37 -16
  105. package/node_modules/zod/src/v4/core/regexes.ts +14 -4
  106. package/node_modules/zod/src/v4/core/schemas.ts +296 -132
  107. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  108. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +35 -0
  109. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  110. package/node_modules/zod/src/v4/core/tests/compile.test.ts +399 -2
  111. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  112. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  113. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  114. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +118 -16
  115. package/node_modules/zod/src/v4/core/to-json-schema.ts +9 -7
  116. package/node_modules/zod/src/v4/core/util.ts +218 -147
  117. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  118. package/node_modules/zod/src/v4/locales/ar.ts +2 -0
  119. package/node_modules/zod/src/v4/locales/az.ts +2 -0
  120. package/node_modules/zod/src/v4/locales/be.ts +2 -0
  121. package/node_modules/zod/src/v4/locales/bg.ts +2 -0
  122. package/node_modules/zod/src/v4/locales/bn.ts +2 -0
  123. package/node_modules/zod/src/v4/locales/ca.ts +2 -0
  124. package/node_modules/zod/src/v4/locales/ckb.ts +2 -0
  125. package/node_modules/zod/src/v4/locales/cs.ts +2 -0
  126. package/node_modules/zod/src/v4/locales/da.ts +2 -0
  127. package/node_modules/zod/src/v4/locales/de.ts +2 -0
  128. package/node_modules/zod/src/v4/locales/el.ts +2 -0
  129. package/node_modules/zod/src/v4/locales/en.ts +2 -0
  130. package/node_modules/zod/src/v4/locales/eo.ts +2 -0
  131. package/node_modules/zod/src/v4/locales/es.ts +2 -0
  132. package/node_modules/zod/src/v4/locales/fa.ts +2 -0
  133. package/node_modules/zod/src/v4/locales/fi.ts +2 -0
  134. package/node_modules/zod/src/v4/locales/fr-CA.ts +2 -0
  135. package/node_modules/zod/src/v4/locales/fr.ts +2 -0
  136. package/node_modules/zod/src/v4/locales/gu.ts +2 -0
  137. package/node_modules/zod/src/v4/locales/he.ts +2 -0
  138. package/node_modules/zod/src/v4/locales/hi.ts +2 -0
  139. package/node_modules/zod/src/v4/locales/hr.ts +2 -0
  140. package/node_modules/zod/src/v4/locales/hu.ts +2 -0
  141. package/node_modules/zod/src/v4/locales/hy.ts +2 -0
  142. package/node_modules/zod/src/v4/locales/id.ts +2 -0
  143. package/node_modules/zod/src/v4/locales/index.ts +1 -0
  144. package/node_modules/zod/src/v4/locales/is.ts +2 -0
  145. package/node_modules/zod/src/v4/locales/it.ts +2 -0
  146. package/node_modules/zod/src/v4/locales/ja.ts +2 -0
  147. package/node_modules/zod/src/v4/locales/ka.ts +2 -0
  148. package/node_modules/zod/src/v4/locales/km.ts +2 -0
  149. package/node_modules/zod/src/v4/locales/kn.ts +2 -0
  150. package/node_modules/zod/src/v4/locales/ko.ts +2 -0
  151. package/node_modules/zod/src/v4/locales/lt.ts +2 -0
  152. package/node_modules/zod/src/v4/locales/mk.ts +2 -0
  153. package/node_modules/zod/src/v4/locales/ms.ts +2 -0
  154. package/node_modules/zod/src/v4/locales/ne.ts +2 -0
  155. package/node_modules/zod/src/v4/locales/nl.ts +2 -0
  156. package/node_modules/zod/src/v4/locales/nn.ts +2 -0
  157. package/node_modules/zod/src/v4/locales/no.ts +2 -0
  158. package/node_modules/zod/src/v4/locales/ota.ts +2 -0
  159. package/node_modules/zod/src/v4/locales/pl.ts +2 -0
  160. package/node_modules/zod/src/v4/locales/ps.ts +2 -0
  161. package/node_modules/zod/src/v4/locales/pt-BR.ts +2 -0
  162. package/node_modules/zod/src/v4/locales/pt.ts +2 -0
  163. package/node_modules/zod/src/v4/locales/ro.ts +2 -0
  164. package/node_modules/zod/src/v4/locales/ru.ts +2 -0
  165. package/node_modules/zod/src/v4/locales/sk.ts +2 -0
  166. package/node_modules/zod/src/v4/locales/sl.ts +2 -0
  167. package/node_modules/zod/src/v4/locales/sv.ts +2 -0
  168. package/node_modules/zod/src/v4/locales/ta.ts +2 -0
  169. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  170. package/node_modules/zod/src/v4/locales/th.ts +2 -0
  171. package/node_modules/zod/src/v4/locales/tk.ts +2 -0
  172. package/node_modules/zod/src/v4/locales/tr.ts +2 -0
  173. package/node_modules/zod/src/v4/locales/uk.ts +2 -0
  174. package/node_modules/zod/src/v4/locales/ur.ts +2 -0
  175. package/node_modules/zod/src/v4/locales/uz.ts +2 -0
  176. package/node_modules/zod/src/v4/locales/vi.ts +2 -0
  177. package/node_modules/zod/src/v4/locales/yo.ts +2 -0
  178. package/node_modules/zod/src/v4/locales/zh-CN.ts +2 -0
  179. package/node_modules/zod/src/v4/locales/zh-TW.ts +2 -0
  180. package/node_modules/zod/src/v4/mini/external.ts +2 -0
  181. package/node_modules/zod/src/v4/mini/schemas.ts +32 -7
  182. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +1 -1
  183. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  184. package/node_modules/zod/src/v4/mini/tests/index.test.ts +86 -0
  185. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  186. package/node_modules/zod/src/v4/mini/tests/string.test.ts +23 -0
  187. package/node_modules/zod/v3/ZodError.cjs +19 -0
  188. package/node_modules/zod/v3/errors.cjs +19 -0
  189. package/node_modules/zod/v3/external.cjs +19 -0
  190. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  191. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  192. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  193. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  194. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  195. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  196. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  197. package/node_modules/zod/v3/index.cjs +19 -0
  198. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  199. package/node_modules/zod/v3/types.cjs +19 -0
  200. package/node_modules/zod/v4/classic/checks.cjs +19 -0
  201. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  202. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  203. package/node_modules/zod/v4/classic/deep-partial.cjs +19 -0
  204. package/node_modules/zod/v4/classic/errors.cjs +19 -0
  205. package/node_modules/zod/v4/classic/external.cjs +22 -1
  206. package/node_modules/zod/v4/classic/external.d.cts +1 -1
  207. package/node_modules/zod/v4/classic/external.d.ts +1 -1
  208. package/node_modules/zod/v4/classic/external.js +1 -1
  209. package/node_modules/zod/v4/classic/from-json-schema.cjs +264 -24
  210. package/node_modules/zod/v4/classic/from-json-schema.js +245 -24
  211. package/node_modules/zod/v4/classic/in-out.cjs +19 -0
  212. package/node_modules/zod/v4/classic/index.cjs +19 -0
  213. package/node_modules/zod/v4/classic/iso.cjs +19 -0
  214. package/node_modules/zod/v4/classic/parse.cjs +19 -0
  215. package/node_modules/zod/v4/classic/schemas.cjs +100 -35
  216. package/node_modules/zod/v4/classic/schemas.d.cts +15 -1
  217. package/node_modules/zod/v4/classic/schemas.d.ts +15 -1
  218. package/node_modules/zod/v4/classic/schemas.js +77 -33
  219. package/node_modules/zod/v4/core/api.cjs +45 -22
  220. package/node_modules/zod/v4/core/api.d.cts +12 -6
  221. package/node_modules/zod/v4/core/api.d.ts +12 -6
  222. package/node_modules/zod/v4/core/api.js +25 -22
  223. package/node_modules/zod/v4/core/checks.cjs +51 -97
  224. package/node_modules/zod/v4/core/checks.d.cts +17 -1
  225. package/node_modules/zod/v4/core/checks.d.ts +17 -1
  226. package/node_modules/zod/v4/core/checks.js +31 -96
  227. package/node_modules/zod/v4/core/compile.cjs +173 -78
  228. package/node_modules/zod/v4/core/compile.d.cts +18 -4
  229. package/node_modules/zod/v4/core/compile.d.ts +18 -4
  230. package/node_modules/zod/v4/core/compile.js +154 -79
  231. package/node_modules/zod/v4/core/core.cjs +20 -1
  232. package/node_modules/zod/v4/core/core.js +1 -1
  233. package/node_modules/zod/v4/core/doc.cjs +26 -2
  234. package/node_modules/zod/v4/core/doc.js +7 -2
  235. package/node_modules/zod/v4/core/errors.cjs +21 -5
  236. package/node_modules/zod/v4/core/errors.js +2 -5
  237. package/node_modules/zod/v4/core/index.cjs +19 -0
  238. package/node_modules/zod/v4/core/json-schema-generator.cjs +20 -1
  239. package/node_modules/zod/v4/core/json-schema-generator.js +2 -2
  240. package/node_modules/zod/v4/core/json-schema-processors.cjs +188 -72
  241. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  242. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  243. package/node_modules/zod/v4/core/json-schema-processors.js +170 -74
  244. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  245. package/node_modules/zod/v4/core/memoizer.cjs +111 -23
  246. package/node_modules/zod/v4/core/memoizer.js +69 -23
  247. package/node_modules/zod/v4/core/parse.cjs +56 -16
  248. package/node_modules/zod/v4/core/parse.js +37 -16
  249. package/node_modules/zod/v4/core/regexes.cjs +31 -6
  250. package/node_modules/zod/v4/core/regexes.d.cts +3 -0
  251. package/node_modules/zod/v4/core/regexes.d.ts +3 -0
  252. package/node_modules/zod/v4/core/regexes.js +10 -4
  253. package/node_modules/zod/v4/core/registries.cjs +19 -0
  254. package/node_modules/zod/v4/core/schemas.cjs +302 -114
  255. package/node_modules/zod/v4/core/schemas.d.cts +28 -8
  256. package/node_modules/zod/v4/core/schemas.d.ts +28 -8
  257. package/node_modules/zod/v4/core/schemas.js +279 -113
  258. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  259. package/node_modules/zod/v4/core/to-json-schema.cjs +28 -7
  260. package/node_modules/zod/v4/core/to-json-schema.d.cts +4 -3
  261. package/node_modules/zod/v4/core/to-json-schema.d.ts +4 -3
  262. package/node_modules/zod/v4/core/to-json-schema.js +7 -6
  263. package/node_modules/zod/v4/core/util.cjs +177 -143
  264. package/node_modules/zod/v4/core/util.d.cts +25 -4
  265. package/node_modules/zod/v4/core/util.d.ts +25 -4
  266. package/node_modules/zod/v4/core/util.js +156 -143
  267. package/node_modules/zod/v4/core/versions.cjs +21 -2
  268. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  269. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  270. package/node_modules/zod/v4/core/versions.js +2 -2
  271. package/node_modules/zod/v4/core/visit.cjs +19 -0
  272. package/node_modules/zod/v4/index.cjs +19 -0
  273. package/node_modules/zod/v4/locales/ar.cjs +2 -0
  274. package/node_modules/zod/v4/locales/ar.js +2 -0
  275. package/node_modules/zod/v4/locales/az.cjs +2 -0
  276. package/node_modules/zod/v4/locales/az.js +2 -0
  277. package/node_modules/zod/v4/locales/be.cjs +2 -0
  278. package/node_modules/zod/v4/locales/be.js +2 -0
  279. package/node_modules/zod/v4/locales/bg.cjs +2 -0
  280. package/node_modules/zod/v4/locales/bg.js +2 -0
  281. package/node_modules/zod/v4/locales/bn.cjs +2 -0
  282. package/node_modules/zod/v4/locales/bn.js +2 -0
  283. package/node_modules/zod/v4/locales/ca.cjs +2 -0
  284. package/node_modules/zod/v4/locales/ca.js +2 -0
  285. package/node_modules/zod/v4/locales/ckb.cjs +2 -0
  286. package/node_modules/zod/v4/locales/ckb.js +2 -0
  287. package/node_modules/zod/v4/locales/cs.cjs +2 -0
  288. package/node_modules/zod/v4/locales/cs.js +2 -0
  289. package/node_modules/zod/v4/locales/da.cjs +2 -0
  290. package/node_modules/zod/v4/locales/da.js +2 -0
  291. package/node_modules/zod/v4/locales/de.cjs +2 -0
  292. package/node_modules/zod/v4/locales/de.js +2 -0
  293. package/node_modules/zod/v4/locales/el.cjs +2 -0
  294. package/node_modules/zod/v4/locales/el.js +2 -0
  295. package/node_modules/zod/v4/locales/en.cjs +2 -0
  296. package/node_modules/zod/v4/locales/en.js +2 -0
  297. package/node_modules/zod/v4/locales/eo.cjs +2 -0
  298. package/node_modules/zod/v4/locales/eo.js +2 -0
  299. package/node_modules/zod/v4/locales/es.cjs +2 -0
  300. package/node_modules/zod/v4/locales/es.js +2 -0
  301. package/node_modules/zod/v4/locales/fa.cjs +2 -0
  302. package/node_modules/zod/v4/locales/fa.js +2 -0
  303. package/node_modules/zod/v4/locales/fi.cjs +2 -0
  304. package/node_modules/zod/v4/locales/fi.js +2 -0
  305. package/node_modules/zod/v4/locales/fr-CA.cjs +2 -0
  306. package/node_modules/zod/v4/locales/fr-CA.js +2 -0
  307. package/node_modules/zod/v4/locales/fr.cjs +2 -0
  308. package/node_modules/zod/v4/locales/fr.js +2 -0
  309. package/node_modules/zod/v4/locales/gu.cjs +2 -0
  310. package/node_modules/zod/v4/locales/gu.js +2 -0
  311. package/node_modules/zod/v4/locales/he.cjs +2 -0
  312. package/node_modules/zod/v4/locales/he.js +2 -0
  313. package/node_modules/zod/v4/locales/hi.cjs +2 -0
  314. package/node_modules/zod/v4/locales/hi.js +2 -0
  315. package/node_modules/zod/v4/locales/hr.cjs +2 -0
  316. package/node_modules/zod/v4/locales/hr.js +2 -0
  317. package/node_modules/zod/v4/locales/hu.cjs +2 -0
  318. package/node_modules/zod/v4/locales/hu.js +2 -0
  319. package/node_modules/zod/v4/locales/hy.cjs +2 -0
  320. package/node_modules/zod/v4/locales/hy.js +2 -0
  321. package/node_modules/zod/v4/locales/id.cjs +2 -0
  322. package/node_modules/zod/v4/locales/id.js +2 -0
  323. package/node_modules/zod/v4/locales/index.cjs +22 -1
  324. package/node_modules/zod/v4/locales/index.d.cts +1 -0
  325. package/node_modules/zod/v4/locales/index.d.ts +1 -0
  326. package/node_modules/zod/v4/locales/index.js +1 -0
  327. package/node_modules/zod/v4/locales/is.cjs +2 -0
  328. package/node_modules/zod/v4/locales/is.js +2 -0
  329. package/node_modules/zod/v4/locales/it.cjs +2 -0
  330. package/node_modules/zod/v4/locales/it.js +2 -0
  331. package/node_modules/zod/v4/locales/ja.cjs +2 -0
  332. package/node_modules/zod/v4/locales/ja.js +2 -0
  333. package/node_modules/zod/v4/locales/ka.cjs +2 -0
  334. package/node_modules/zod/v4/locales/ka.js +2 -0
  335. package/node_modules/zod/v4/locales/km.cjs +2 -0
  336. package/node_modules/zod/v4/locales/km.js +2 -0
  337. package/node_modules/zod/v4/locales/kn.cjs +2 -0
  338. package/node_modules/zod/v4/locales/kn.js +2 -0
  339. package/node_modules/zod/v4/locales/ko.cjs +2 -0
  340. package/node_modules/zod/v4/locales/ko.js +2 -0
  341. package/node_modules/zod/v4/locales/lt.cjs +2 -0
  342. package/node_modules/zod/v4/locales/lt.js +2 -0
  343. package/node_modules/zod/v4/locales/mk.cjs +2 -0
  344. package/node_modules/zod/v4/locales/mk.js +2 -0
  345. package/node_modules/zod/v4/locales/ms.cjs +2 -0
  346. package/node_modules/zod/v4/locales/ms.js +2 -0
  347. package/node_modules/zod/v4/locales/ne.cjs +2 -0
  348. package/node_modules/zod/v4/locales/ne.js +2 -0
  349. package/node_modules/zod/v4/locales/nl.cjs +2 -0
  350. package/node_modules/zod/v4/locales/nl.js +2 -0
  351. package/node_modules/zod/v4/locales/nn.cjs +2 -0
  352. package/node_modules/zod/v4/locales/nn.js +2 -0
  353. package/node_modules/zod/v4/locales/no.cjs +2 -0
  354. package/node_modules/zod/v4/locales/no.js +2 -0
  355. package/node_modules/zod/v4/locales/ota.cjs +2 -0
  356. package/node_modules/zod/v4/locales/ota.js +2 -0
  357. package/node_modules/zod/v4/locales/pl.cjs +2 -0
  358. package/node_modules/zod/v4/locales/pl.js +2 -0
  359. package/node_modules/zod/v4/locales/ps.cjs +2 -0
  360. package/node_modules/zod/v4/locales/ps.js +2 -0
  361. package/node_modules/zod/v4/locales/pt-BR.cjs +2 -0
  362. package/node_modules/zod/v4/locales/pt-BR.js +2 -0
  363. package/node_modules/zod/v4/locales/pt.cjs +2 -0
  364. package/node_modules/zod/v4/locales/pt.js +2 -0
  365. package/node_modules/zod/v4/locales/ro.cjs +2 -0
  366. package/node_modules/zod/v4/locales/ro.js +2 -0
  367. package/node_modules/zod/v4/locales/ru.cjs +2 -0
  368. package/node_modules/zod/v4/locales/ru.js +2 -0
  369. package/node_modules/zod/v4/locales/sk.cjs +2 -0
  370. package/node_modules/zod/v4/locales/sk.js +2 -0
  371. package/node_modules/zod/v4/locales/sl.cjs +2 -0
  372. package/node_modules/zod/v4/locales/sl.js +2 -0
  373. package/node_modules/zod/v4/locales/sv.cjs +2 -0
  374. package/node_modules/zod/v4/locales/sv.js +2 -0
  375. package/node_modules/zod/v4/locales/ta.cjs +2 -0
  376. package/node_modules/zod/v4/locales/ta.js +2 -0
  377. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  378. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  379. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  380. package/node_modules/zod/v4/locales/tg.js +117 -0
  381. package/node_modules/zod/v4/locales/th.cjs +2 -0
  382. package/node_modules/zod/v4/locales/th.js +2 -0
  383. package/node_modules/zod/v4/locales/tk.cjs +2 -0
  384. package/node_modules/zod/v4/locales/tk.js +2 -0
  385. package/node_modules/zod/v4/locales/tr.cjs +2 -0
  386. package/node_modules/zod/v4/locales/tr.js +2 -0
  387. package/node_modules/zod/v4/locales/uk.cjs +2 -0
  388. package/node_modules/zod/v4/locales/uk.js +2 -0
  389. package/node_modules/zod/v4/locales/ur.cjs +2 -0
  390. package/node_modules/zod/v4/locales/ur.js +2 -0
  391. package/node_modules/zod/v4/locales/uz.cjs +2 -0
  392. package/node_modules/zod/v4/locales/uz.js +2 -0
  393. package/node_modules/zod/v4/locales/vi.cjs +2 -0
  394. package/node_modules/zod/v4/locales/vi.js +2 -0
  395. package/node_modules/zod/v4/locales/yo.cjs +2 -0
  396. package/node_modules/zod/v4/locales/yo.js +2 -0
  397. package/node_modules/zod/v4/locales/zh-CN.cjs +2 -0
  398. package/node_modules/zod/v4/locales/zh-CN.js +2 -0
  399. package/node_modules/zod/v4/locales/zh-TW.cjs +2 -0
  400. package/node_modules/zod/v4/locales/zh-TW.js +2 -0
  401. package/node_modules/zod/v4/mini/checks.cjs +19 -0
  402. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  403. package/node_modules/zod/v4/mini/deep-partial.cjs +19 -0
  404. package/node_modules/zod/v4/mini/external.cjs +22 -1
  405. package/node_modules/zod/v4/mini/external.d.cts +1 -1
  406. package/node_modules/zod/v4/mini/external.d.ts +1 -1
  407. package/node_modules/zod/v4/mini/external.js +1 -1
  408. package/node_modules/zod/v4/mini/in-out.cjs +19 -0
  409. package/node_modules/zod/v4/mini/index.cjs +19 -0
  410. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  411. package/node_modules/zod/v4/mini/parse.cjs +19 -0
  412. package/node_modules/zod/v4/mini/schemas.cjs +44 -8
  413. package/node_modules/zod/v4/mini/schemas.d.cts +6 -1
  414. package/node_modules/zod/v4/mini/schemas.d.ts +6 -1
  415. package/node_modules/zod/v4/mini/schemas.js +21 -6
  416. package/node_modules/zod/v4-mini/index.cjs +19 -0
  417. package/package.json +8 -5
  418. package/dist/.setup/message-handler.history-CJOsN9w5.mjs +0 -28
  419. package/dist/.setup/provider.runtime-DuhmKdDU.mjs +0 -2
  420. package/dist/.setup/setup-plugin-api-CINIEBLa.mjs +0 -3
  421. package/dist/.setup/targets-D1mAB5yO.mjs +0 -3
@@ -1,16 +1,17 @@
1
- import { h as readDiscordComponentSpec, m as coerceDiscordComponentParam } from "./components-MqMWUWnE.mjs";
1
+ import { h as readDiscordComponentSpec, m as coerceDiscordComponentParam } from "./components-yBEb75bB.mjs";
2
2
  import { l as resolveDiscordChannelConfigWithFallback, o as normalizeDiscordSlug, r as isDiscordGroupAllowedByPolicy, t as isDiscordThreadChannelType, v as resolveGroupDmAllow } from "./channel-type-DKnjV1XW.mjs";
3
3
  import { o as mergeDiscordAccountConfig, s as resolveDefaultDiscordAccountId, t as createDiscordActionGate } from "./accounts-CwJQoLjM.mjs";
4
- import { r as sendDiscordComponentMessage } from "./send.components-DWQjXhPV.mjs";
5
- import { b as resolveDiscordChannelId, d as createReusableDiscordReplyReference, p as resolveDiscordReplyReference, y as parseDiscordTarget } from "./retry-DBfcEgmO.mjs";
6
- import { F as createDiscordRuntimeAccountContext, T as hasAnyGuildPermissionDiscord, U as getGateway, b as canViewDiscordGuildChannel, d as resolveDiscordTargetChannelId, v as canManageGuildMemberRoleDiscord, w as hasAnyChannelPermissionDiscord, x as fetchChannelPermissionsDiscord, y as canManageGuildRoleDiscord } from "./send.shared-Zwx6BxQ5.mjs";
7
- import { r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-D0hQ7s50.mjs";
4
+ import { r as sendDiscordComponentMessage } from "./send.components-ChY21qr-.mjs";
5
+ import { b as resolveDiscordChannelId, d as createReusableDiscordReplyReference, p as resolveDiscordReplyReference, y as parseDiscordTarget } from "./retry-BEYkDy0P.mjs";
6
+ import { F as createDiscordRuntimeAccountContext, T as hasAnyGuildPermissionDiscord, U as getGateway, b as canViewDiscordGuildChannel, d as resolveDiscordTargetChannelId, n as buildDiscordTextChunks, v as canManageGuildMemberRoleDiscord, w as hasAnyChannelPermissionDiscord, x as fetchChannelPermissionsDiscord, y as canManageGuildRoleDiscord } from "./send.shared-VNvWfX2T.mjs";
7
+ import { r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-QTyuFupn.mjs";
8
8
  import { n as getPresence } from "./presence-cache-dYSHPWMx.mjs";
9
- import { A as listScheduledEventsDiscord, B as moveChannelDiscord, C as fetchChannelInfoDiscord, D as fetchVoiceStatusDiscord, E as fetchRoleInfoDiscord, F as uploadEmojiDiscord, H as setChannelPermissionDiscord, I as uploadStickerDiscord, L as createChannelDiscord, M as resolveEventCoverImage, N as timeoutMemberDiscord, O as kickMemberDiscord, P as listGuildEmojisDiscord, R as deleteChannelDiscord, S as createScheduledEventDiscord, T as fetchMemberInfoDiscord, V as removeChannelPermissionDiscord, _ as readMessagesDiscord, a as removeReactionDiscord, b as addRoleDiscord, d as deleteMessageDiscord, f as editMessageDiscord, g as pinMessageDiscord, h as listThreadsDiscord, i as removeOwnReactionsDiscord, j as removeRoleDiscord, k as listGuildChannelsDiscord, l as DiscordThreadInitialMessageError, m as listPinsDiscord, n as fetchReactionsDiscord, p as fetchMessageDiscord, r as reactMessageDiscord, s as sendVoiceMessageDiscord, u as createThreadDiscord, v as searchMessagesDiscord, w as fetchGuildInfoDiscord, x as banMemberDiscord, y as unpinMessageDiscord, z as editChannelDiscord } from "./send-CKDczUNL.mjs";
10
- import "./targets-D1mAB5yO.mjs";
9
+ import { A as listScheduledEventsDiscord, B as moveChannelDiscord, C as fetchChannelInfoDiscord, D as fetchVoiceStatusDiscord, E as fetchRoleInfoDiscord, F as uploadEmojiDiscord, H as setChannelPermissionDiscord, I as uploadStickerDiscord, L as createChannelDiscord, M as resolveEventCoverImage, N as timeoutMemberDiscord, O as kickMemberDiscord, P as listGuildEmojisDiscord, R as deleteChannelDiscord, S as createScheduledEventDiscord, T as fetchMemberInfoDiscord, V as removeChannelPermissionDiscord, _ as readMessagesDiscord, a as removeReactionDiscord, b as addRoleDiscord, d as deleteMessageDiscord, f as editMessageDiscord, g as pinMessageDiscord, h as listThreadsDiscord, i as removeOwnReactionsDiscord, j as removeRoleDiscord, k as listGuildChannelsDiscord, l as DiscordThreadInitialMessageError, m as listPinsDiscord, n as fetchReactionsDiscord, p as fetchMessageDiscord, r as reactMessageDiscord, s as sendVoiceMessageDiscord, u as createThreadDiscord, v as searchMessagesDiscord, w as fetchGuildInfoDiscord, x as banMemberDiscord, y as unpinMessageDiscord, z as editChannelDiscord } from "./send-CIBzvXjS.mjs";
10
+ import "./targets-CvemhN3i.mjs";
11
11
  import { ChannelType, PermissionFlagsBits } from "discord-api-types/v10";
12
12
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
13
13
  import { asBoolean, isRecord, normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
14
+ import { createChannelProgressDraftCompositor } from "openclaw/plugin-sdk/channel-outbound";
14
15
  import { resolveOpenProviderRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
15
16
  import { assertMediaNotDataUrl, jsonResult, parseAvailableTags, readNonNegativeIntegerParam, readPositiveIntegerParam, readReactionParams, readStringArrayParam, readStringParam, withNormalizedTimestamp } from "openclaw/plugin-sdk/channel-actions";
16
17
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
@@ -383,6 +384,7 @@ function createDiscordMessagingActionContext(params) {
383
384
  params: params.input,
384
385
  isActionEnabled: params.isActionEnabled,
385
386
  cfg: params.cfg,
387
+ accountConfig,
386
388
  options: params.options,
387
389
  accountId,
388
390
  resolveChannelId: () => resolveDiscordChannelId(readStringParam(params.input, "channelId", { required: true })),
@@ -1057,13 +1059,26 @@ async function handleDiscordMessageManagementAction(ctx) {
1057
1059
  if (!ctx.isActionEnabled("messages")) throw new Error("Discord message edits are disabled.");
1058
1060
  const channelId = ctx.resolveChannelId();
1059
1061
  const messageId = readStringParam(ctx.params, "messageId", { required: true });
1060
- const content = readStringParam(ctx.params, "content", {
1062
+ const snapshot = ctx.options?.progressSnapshot;
1063
+ const content = snapshot ? buildDiscordTextChunks(createChannelProgressDraftCompositor({
1064
+ entry: ctx.accountConfig,
1065
+ mode: "progress",
1066
+ active: true,
1067
+ seed: `${ctx.accountId}:${channelId}`,
1068
+ initialSnapshot: snapshot
1069
+ }).getText(), {
1070
+ maxChars: Math.min(ctx.accountConfig.textChunkLimit ?? 2e3, 2e3),
1071
+ maxLinesPerMessage: Number.MAX_SAFE_INTEGER
1072
+ })[0] ?? "" : readStringParam(ctx.params, "content", {
1061
1073
  required: true,
1062
1074
  allowEmpty: true,
1063
1075
  trim: false
1064
1076
  });
1065
1077
  await ctx.assertReadTargetAllowed({ channelId });
1066
- const message = await editMessageDiscord(channelId, messageId, { content }, ctx.withOpts());
1078
+ const message = await editMessageDiscord(channelId, messageId, {
1079
+ content,
1080
+ ...snapshot ? { allowedMentions: { parse: [] } } : {}
1081
+ }, ctx.withOpts());
1067
1082
  return jsonResult({
1068
1083
  ok: true,
1069
1084
  message
@@ -1417,10 +1432,14 @@ async function handleDiscordMessageSendAction(ctx) {
1417
1432
  appliedTags: readStringArrayParam(ctx.params, "appliedTags") ?? void 0
1418
1433
  };
1419
1434
  try {
1420
- const thread = await createThreadDiscord(channelId, payload, ctx.withOpts());
1435
+ const { initialMessageDelivery, ...thread } = await createThreadDiscord(channelId, payload, ctx.withOpts());
1421
1436
  return jsonResult({
1422
1437
  ok: true,
1423
- thread
1438
+ thread,
1439
+ ...initialMessageDelivery ? {
1440
+ threadSnapshot: "creation",
1441
+ initialMessageDelivery
1442
+ } : {}
1424
1443
  });
1425
1444
  } catch (error) {
1426
1445
  if (error instanceof DiscordThreadInitialMessageError) {
@@ -1,5 +1,5 @@
1
1
  import { c as resolveDiscordAccount, g as selectDiscordActivitiesRuntimeConfig, n as isDiscordAccountEnabledForRuntime, r as listDiscordAccountIds } from "./accounts-CwJQoLjM.mjs";
2
- import { z as resolveDiscordProxyFetchForAccount } from "./send.shared-Zwx6BxQ5.mjs";
2
+ import { z as resolveDiscordProxyFetchForAccount } from "./send.shared-VNvWfX2T.mjs";
3
3
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  //#region extensions/discord/src/activities/config.ts
5
5
  function resolveDiscordActivitiesConfig(account, env = process.env) {
@@ -1,8 +1,8 @@
1
1
  import { At as getGuild, Bt as removeGuildMember, C as withDiscordRequestAuthority, Ct as addGuildMemberRole, Dt as createGuildScheduledEvent, Et as createGuildEmoji, Ft as listGuildEmojis, Ht as timeoutGuildMember, It as listGuildRoles, Lt as listGuildScheduledEvents, Mt as getGuildVoiceState, Nt as listGuildActiveThreads, Ot as createGuildSticker, Pt as listGuildChannels, Rt as moveGuildChannels, S as readRetryAfter, St as unpinChannelMessage, Tt as createGuildChannel, Ut as __exportAll, Vt as removeGuildMemberRole, _ as DiscordError, _t as listChannelMessages, at as deleteOwnMessageReaction, b as readDiscordCode, bt as searchGuildMessages, ct as createThread, dt as editChannel, ft as editChannelMessage, gt as listChannelArchivedThreads, it as createOwnMessageReaction, jt as getGuildMember, kt as deleteChannelPermission, lt as deleteChannel, mt as getChannelMessage, ot as listMessageReactionUsers, pt as getChannel, ut as deleteChannelMessage, v as RateLimitError, vt as listChannelPins, wt as createGuildBan, x as readDiscordMessage, xt as sendChannelTyping, y as isUnknownDiscordVoiceStateError, yt as pinChannelMessage, zt as putChannelPermission } from "./discord-BXpHW-cu.mjs";
2
2
  import { D as resolveDiscordEndpointAttachmentGuard, E as getDiscordEndpointRuntime, w as parseDiscordRetryAfterBodySeconds } from "./channel-type-DKnjV1XW.mjs";
3
- import { a as recordDiscordMessageCreateAmbiguity, c as createDiscordSendReceiptFromResults, d as createReusableDiscordReplyReference, f as resolveDiscordReplyMessageId, l as createDiscordSendResult, n as classifyDiscordDeliveryFailure, o as chunkDiscordTextWithMode, r as createDiscordRetryRunner } from "./retry-DBfcEgmO.mjs";
4
- import { C as hasAllGuildPermissionsDiscord, I as resolveDiscordClientAccountContext, K as parseAndResolveChannelRecipient, L as resolveDiscordRest, M as resolveDiscordSuppressEmbeds, N as createDiscordClient, O as createDiscordMessageNonce, R as DISCORD_REST_TIMEOUT_MS, S as fetchMemberGuildPermissionsDiscord, T as hasAnyGuildPermissionDiscord, _ as DiscordSendError, b as canViewDiscordGuildChannel, g as DISCORD_MAX_STICKER_BYTES, h as DISCORD_MAX_EVENT_COVER_BYTES, i as formatReactionEmoji, k as resolveDiscordMessageFlags, l as resolveChannelId, m as DISCORD_MAX_EMOJI_BYTES, n as buildDiscordTextChunks, o as normalizeEmojiName, p as sendDiscordText, r as buildReactionIdentifier, s as normalizeReactionEmoji, t as buildDiscordSendError, v as canManageGuildMemberRoleDiscord, w as hasAnyChannelPermissionDiscord, x as fetchChannelPermissionsDiscord, y as canManageGuildRoleDiscord } from "./send.shared-Zwx6BxQ5.mjs";
5
- import { i as prepareDiscordOutboundText, n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-D0hQ7s50.mjs";
3
+ import { a as recordDiscordMessageCreateAmbiguity, c as createDiscordSendReceiptFromResults, d as createReusableDiscordReplyReference, f as resolveDiscordReplyMessageId, l as createDiscordSendResult, n as classifyDiscordDeliveryFailure, o as chunkDiscordTextWithMode, r as createDiscordRetryRunner } from "./retry-BEYkDy0P.mjs";
4
+ import { C as hasAllGuildPermissionsDiscord, I as resolveDiscordClientAccountContext, K as parseAndResolveChannelRecipient, L as resolveDiscordRest, M as resolveDiscordSuppressEmbeds, N as createDiscordClient, O as createDiscordMessageNonce, R as DISCORD_REST_TIMEOUT_MS, S as fetchMemberGuildPermissionsDiscord, T as hasAnyGuildPermissionDiscord, _ as DiscordSendError, b as canViewDiscordGuildChannel, g as DISCORD_MAX_STICKER_BYTES, h as DISCORD_MAX_EVENT_COVER_BYTES, i as formatReactionEmoji, k as resolveDiscordMessageFlags, l as resolveChannelId, m as DISCORD_MAX_EMOJI_BYTES, n as buildDiscordTextChunks, o as normalizeEmojiName, p as sendDiscordText, r as buildReactionIdentifier, s as normalizeReactionEmoji, t as buildDiscordSendError, v as canManageGuildMemberRoleDiscord, w as hasAnyChannelPermissionDiscord, x as fetchChannelPermissionsDiscord, y as canManageGuildRoleDiscord } from "./send.shared-VNvWfX2T.mjs";
5
+ import { i as prepareDiscordOutboundText, n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-QTyuFupn.mjs";
6
6
  import { n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS } from "./timeouts-D86uWLt_.mjs";
7
7
  import fs from "node:fs/promises";
8
8
  import { ChannelType } from "discord-api-types/v10";
@@ -19,9 +19,9 @@ import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
19
19
  import { recordOutboundMessageIdentity } from "openclaw/plugin-sdk/channel-outbound";
20
20
  import { MEDIA_FFMPEG_MAX_AUDIO_DURATION_SECS, buildOutboundMediaLoadOptions, extensionForMime, maxBytesForKind, parseFfprobeCodecAndSampleRate, runFfmpeg, runFfprobe, unlinkIfExists } from "openclaw/plugin-sdk/media-runtime";
21
21
  import { loadWebMediaRaw } from "openclaw/plugin-sdk/web-media";
22
+ import { resolvePreferredOpenClawTmpDir, withTempWorkspace } from "openclaw/plugin-sdk/temp-path";
22
23
  import { buildTimeoutAbortSignal } from "openclaw/plugin-sdk/extension-shared";
23
24
  import path from "node:path";
24
- import { resolvePreferredOpenClawTmpDir, withTempWorkspace } from "openclaw/plugin-sdk/temp-path";
25
25
  import { writeExternalFileWithinRoot } from "openclaw/plugin-sdk/security-runtime";
26
26
  //#region extensions/discord/src/send.channels.ts
27
27
  async function createChannelDiscord(payload, opts) {
@@ -302,7 +302,8 @@ async function editMessageDiscord(channelId, messageId, payload, opts) {
302
302
  const rest = resolveDiscordRest(opts);
303
303
  return await editChannelMessage(rest, channelId, messageId, { body: {
304
304
  content: payload.content,
305
- ...payload.flags !== void 0 ? { flags: payload.flags } : {}
305
+ ...payload.flags !== void 0 ? { flags: payload.flags } : {},
306
+ ...payload.allowedMentions ? { allowed_mentions: payload.allowedMentions } : {}
306
307
  } });
307
308
  }
308
309
  async function deleteMessageDiscord(channelId, messageId, opts) {
@@ -325,6 +326,7 @@ async function listPinsDiscord(channelId, opts) {
325
326
  return await listChannelPins(rest, channelId);
326
327
  }
327
328
  async function createThreadDiscord(channelId, payload, opts) {
329
+ const assertCreateAllowed = opts.assertCreateAllowed;
328
330
  const { rest, request } = createDiscordClient(opts);
329
331
  const body = { name: payload.name };
330
332
  if (!payload.messageId && payload.type !== void 0) body.type = payload.type;
@@ -342,11 +344,14 @@ async function createThreadDiscord(channelId, payload, opts) {
342
344
  if (payload.appliedTags?.length) body.applied_tags = payload.appliedTags;
343
345
  }
344
346
  if (!payload.messageId && !isForumLike && body.type === void 0) body.type = ChannelType.PublicThread;
345
- const thread = await createThread(rest, channelId, { body }, payload.messageId);
347
+ const thread = await withDiscordRequestAuthority(assertCreateAllowed, () => {
348
+ assertCreateAllowed?.();
349
+ return createThread(rest, channelId, { body }, payload.messageId);
350
+ });
346
351
  const followupChunks = isForumLike ? initialMessageChunks.slice(1) : initialMessageChunks;
352
+ const deliveredMessageIds = isForumLike ? [resolveDiscordThreadStarterMessageId(thread)] : [];
353
+ let deliveredChunkCount = isForumLike ? 1 : 0;
347
354
  if (followupChunks.length && "id" in thread) {
348
- const deliveredMessageIds = isForumLike ? [resolveDiscordThreadStarterMessageId(thread)] : [];
349
- let deliveredChunkCount = isForumLike ? 1 : 0;
350
355
  const firstFollowupChunkIndex = isForumLike ? 1 : 0;
351
356
  for (const [followupIndex, content] of followupChunks.entries()) {
352
357
  let chunkMayHaveDelivered = false;
@@ -383,7 +388,16 @@ async function createThreadDiscord(channelId, payload, opts) {
383
388
  }
384
389
  }
385
390
  }
386
- return thread;
391
+ return deliveredChunkCount > 0 ? {
392
+ ...thread,
393
+ initialMessageDelivery: {
394
+ status: "delivered",
395
+ starterMessageDelivered: isForumLike,
396
+ deliveredChunkCount,
397
+ deliveredMessageIds,
398
+ totalChunkCount: initialMessageChunks.length
399
+ }
400
+ } : thread;
387
401
  }
388
402
  async function listThreadsDiscord(payload, opts) {
389
403
  const rest = resolveDiscordRest(opts);
@@ -1,9 +1,9 @@
1
1
  import { A as serializePayload, C as withDiscordRequestAuthority, Ut as __exportAll, ft as editChannelMessage, st as createChannelMessage } from "./discord-BXpHW-cu.mjs";
2
- import { d as buildDiscordComponentMessage, f as buildDiscordComponentMessageFlags, g as resolveDiscordComponentAttachmentName } from "./components-MqMWUWnE.mjs";
2
+ import { d as buildDiscordComponentMessage, f as buildDiscordComponentMessageFlags, g as resolveDiscordComponentAttachmentName } from "./components-yBEb75bB.mjs";
3
3
  import { n as getOptionalDiscordRuntime } from "./runtime-DgnVQ7zW.mjs";
4
- import { l as createDiscordSendResult } from "./retry-DBfcEgmO.mjs";
5
- import { E as SUPPRESS_NOTIFICATIONS_FLAG, K as parseAndResolveChannelRecipient, N as createDiscordClient, O as createDiscordMessageNonce, l as resolveChannelId, t as buildDiscordSendError, u as resolveDiscordChannel } from "./send.shared-Zwx6BxQ5.mjs";
6
- import { t as sendMessageDiscord } from "./send.outbound-D0hQ7s50.mjs";
4
+ import { l as createDiscordSendResult } from "./retry-BEYkDy0P.mjs";
5
+ import { E as SUPPRESS_NOTIFICATIONS_FLAG, K as parseAndResolveChannelRecipient, N as createDiscordClient, O as createDiscordMessageNonce, l as resolveChannelId, t as buildDiscordSendError, u as resolveDiscordChannel } from "./send.shared-VNvWfX2T.mjs";
6
+ import { t as sendMessageDiscord } from "./send.outbound-QTyuFupn.mjs";
7
7
  import { ChannelType } from "discord-api-types/v10";
8
8
  import { asDateTimestampMs, isFutureDateTimestampMs, resolveDateTimestampMs, resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
9
9
  import { resolveGlobalSingleton } from "openclaw/plugin-sdk/global-singleton";
@@ -1,7 +1,7 @@
1
1
  import { C as withDiscordRequestAuthority, ct as createThread, st as createChannelMessage } from "./discord-BXpHW-cu.mjs";
2
2
  import { i as normalizeDiscordHandleKey, o as resolveDiscordDirectoryUserId } from "./directory-live--EGTH0DC.mjs";
3
- import { c as createDiscordSendReceiptFromResults, d as createReusableDiscordReplyReference, l as createDiscordSendResult } from "./retry-DBfcEgmO.mjs";
4
- import { A as resolveDiscordSendComponents, D as buildDiscordMessageRequest, K as parseAndResolveChannelRecipient, M as resolveDiscordSuppressEmbeds, N as createDiscordClient, O as createDiscordMessageNonce, a as normalizeDiscordPollInput, c as normalizeStickerIds, f as sendDiscordMedia, j as resolveDiscordSendEmbeds, k as resolveDiscordMessageFlags, l as resolveChannelId, n as buildDiscordTextChunks, p as sendDiscordText, t as buildDiscordSendError, u as resolveDiscordChannel } from "./send.shared-Zwx6BxQ5.mjs";
3
+ import { c as createDiscordSendReceiptFromResults, d as createReusableDiscordReplyReference, l as createDiscordSendResult } from "./retry-BEYkDy0P.mjs";
4
+ import { A as resolveDiscordSendComponents, D as buildDiscordMessageRequest, K as parseAndResolveChannelRecipient, M as resolveDiscordSuppressEmbeds, N as createDiscordClient, O as createDiscordMessageNonce, a as normalizeDiscordPollInput, c as normalizeStickerIds, f as sendDiscordMedia, j as resolveDiscordSendEmbeds, k as resolveDiscordMessageFlags, l as resolveChannelId, n as buildDiscordTextChunks, p as sendDiscordText, t as buildDiscordSendError, u as resolveDiscordChannel } from "./send.shared-VNvWfX2T.mjs";
5
5
  import { ChannelType } from "discord-api-types/v10";
6
6
  import { expectDefined } from "openclaw/plugin-sdk/expect-runtime";
7
7
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -324,6 +324,15 @@ function normalizeDiscordBold(markdown) {
324
324
  if (spanEdits) spanEdits.push(edit);
325
325
  else editsBySpan.set(edit.spanId, [edit]);
326
326
  }
327
+ const renderEdits = (selectedEdits, start = 0, end = markdown.length) => {
328
+ let cursor = start;
329
+ let rendered = "";
330
+ for (const edit of selectedEdits) {
331
+ rendered += `${markdown.slice(cursor, edit.start)}${edit.marker}`;
332
+ cursor = edit.start + edit.consume;
333
+ }
334
+ return rendered + markdown.slice(cursor, end);
335
+ };
327
336
  const protectedSpanIds = /* @__PURE__ */ new Set();
328
337
  const protectedEditKeys = /* @__PURE__ */ new Set();
329
338
  const spansWithProtectedContent = /* @__PURE__ */ new Set();
@@ -342,30 +351,20 @@ function normalizeDiscordBold(markdown) {
342
351
  for (const spanId of spansWithProtectedContent) {
343
352
  const span = spans[spanId];
344
353
  if (!span) continue;
345
- let localCursor = span.start;
346
- const localRendered = (editsBySpan.get(spanId) ?? []).filter((edit) => {
354
+ const localRendered = renderEdits((editsBySpan.get(spanId) ?? []).filter((edit) => {
347
355
  const key = `${edit.start}:${edit.consume}:${edit.marker}`;
348
356
  return !protectedEditKeys.has(key);
349
- }).map((edit) => {
350
- const chunk = `${markdown.slice(localCursor, edit.start)}${edit.marker}`;
351
- localCursor = edit.start + edit.consume;
352
- return chunk;
353
- }).join("") + markdown.slice(localCursor, span.end);
357
+ }), span.start, span.end);
354
358
  const localSource = markdown.slice(span.start, span.end);
355
359
  if (markdownSemanticSignature(fromMarkdown(localRendered)) !== markdownSemanticSignature(fromMarkdown(localSource))) protectedSpanIds.add(spanId);
356
360
  }
357
- let cursor = 0;
358
361
  const seenEdits = /* @__PURE__ */ new Set();
359
- const rendered = edits.filter((edit) => {
362
+ const rendered = renderEdits(edits.filter((edit) => {
360
363
  const key = `${edit.start}:${edit.consume}:${edit.marker}`;
361
364
  if (protectedSpanIds.has(edit.spanId) || protectedEditKeys.has(key) || seenEdits.has(key)) return false;
362
365
  seenEdits.add(key);
363
366
  return true;
364
- }).map((edit) => {
365
- const chunk = `${markdown.slice(cursor, edit.start)}${edit.marker}`;
366
- cursor = edit.start + edit.consume;
367
- return chunk;
368
- }).join("") + markdown.slice(cursor);
367
+ }));
369
368
  return markdownSemanticSignature(fromMarkdown(rendered)) === markdownSemanticSignature(sourceTree) ? rendered : markdown;
370
369
  }
371
370
  function renderDiscordMarkdown(markdown, tableMode) {
@@ -1,8 +1,8 @@
1
1
  import { A as serializePayload, At as getGuild, g as RequestClient, ht as getThreadMember, j as Embed, jt as getGuildMember, k as hasDiscordV2Components, nt as createUserDmChannel, pt as getChannel, rt as getCurrentUser, st as createChannelMessage } from "./discord-BXpHW-cu.mjs";
2
2
  import { t as isDiscordThreadChannelType } from "./channel-type-DKnjV1XW.mjs";
3
3
  import { c as resolveDiscordAccount, m as normalizeDiscordToken, o as mergeDiscordAccountConfig } from "./accounts-CwJQoLjM.mjs";
4
- import { f as resolveDiscordReplyMessageId, o as chunkDiscordTextWithMode, r as createDiscordRetryRunner } from "./retry-DBfcEgmO.mjs";
5
- import { t as parseAndResolveDiscordTarget } from "./target-resolver-B6MrxbYv.mjs";
4
+ import { f as resolveDiscordReplyMessageId, o as chunkDiscordTextWithMode, r as createDiscordRetryRunner } from "./retry-BEYkDy0P.mjs";
5
+ import { t as parseAndResolveDiscordTarget } from "./target-resolver-BXpy6VT8.mjs";
6
6
  import { ChannelType, MessageFlags, PermissionFlagsBits } from "discord-api-types/v10";
7
7
  import { randomBytes } from "node:crypto";
8
8
  import { makeProxyFetch } from "openclaw/plugin-sdk/fetch-runtime";
@@ -0,0 +1,3 @@
1
+ import { t as discordSetupPlugin } from "./channel.setup-0NX6FFwi.mjs";
2
+ import "../setup-plugin-api.js";
3
+ export { discordSetupPlugin };
@@ -119,7 +119,7 @@ const DISCORD_LEGACY_CONFIG_RULES = [];
119
119
  //#region extensions/discord/src/shared.ts
120
120
  const DISCORD_CHANNEL = "discord";
121
121
  const livePolicyConfigPrefixes = Object.keys(selectDiscordLivePolicyConfig({})).flatMap((key) => [`channels.discord.${key}`, `channels.discord.accounts.*.${key}`]);
122
- const loadDiscordDoctorModule = createLazyRuntimeModule(() => import("./doctor-DxcdkXzz.mjs"));
122
+ const loadDiscordDoctorModule = createLazyRuntimeModule(() => import("./doctor-D1R-uFIu.mjs"));
123
123
  const discordDoctor = {
124
124
  dmAllowFromMode: "topOnly",
125
125
  groupModel: "route",
@@ -1,6 +1,6 @@
1
1
  import { Ut as __exportAll } from "./discord-BXpHW-cu.mjs";
2
2
  import { s as ensureBindingsLoadedAsync } from "./thread-bindings.state-BThFQEga.mjs";
3
- import { o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey } from "./thread-bindings-CK5272V3.mjs";
3
+ import { o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey } from "./thread-bindings-CEh2dhqP.mjs";
4
4
  import { normalizeOptionalLowercaseString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  //#region extensions/discord/src/subagent-hooks.ts
6
6
  var subagent_hooks_exports = /* @__PURE__ */ __exportAll({
@@ -1,7 +1,7 @@
1
1
  import { Ut as __exportAll } from "./discord-BXpHW-cu.mjs";
2
2
  import { c as resolveDiscordAccount, l as resolveDiscordAccountAllowFrom } from "./accounts-CwJQoLjM.mjs";
3
3
  import { a as rememberDiscordDirectoryUser, r as listDiscordDirectoryPeersLive } from "./directory-live--EGTH0DC.mjs";
4
- import { m as allowFromContainsDiscordUserId, y as parseDiscordTarget } from "./retry-DBfcEgmO.mjs";
4
+ import { m as allowFromContainsDiscordUserId, y as parseDiscordTarget } from "./retry-BEYkDy0P.mjs";
5
5
  import { buildMessagingTarget } from "openclaw/plugin-sdk/channel-targets";
6
6
  //#region extensions/discord/src/send-target-parsing.ts
7
7
  const parseDiscordSendTarget = (raw, options = {}) => parseDiscordTarget(raw, options);
@@ -0,0 +1,3 @@
1
+ import "./retry-BEYkDy0P.mjs";
2
+ import "./target-resolver-BXpy6VT8.mjs";
3
+ export {};
@@ -1,9 +1,9 @@
1
1
  import { Ut as __exportAll } from "./discord-BXpHW-cu.mjs";
2
- import { y as parseDiscordTarget } from "./retry-DBfcEgmO.mjs";
3
- import "./targets-D1mAB5yO.mjs";
2
+ import { y as parseDiscordTarget } from "./retry-BEYkDy0P.mjs";
3
+ import "./targets-CvemhN3i.mjs";
4
4
  import { C as resolveThreadBindingMaxAgeMs$1, D as shouldPersistBindingMutations, S as resolveThreadBindingMaxAgeExpiresAt, b as resolveThreadBindingIdleTimeoutMs$1, f as normalizeThreadId, g as removeBindingRecord, l as getThreadBindingToken, n as MANAGERS_BY_ACCOUNT_ID, p as refreshUnboundThreadWebhookIdentity, t as BINDINGS_BY_THREAD_ID, w as saveBindingsToDisk, x as resolveThreadBindingInactivityExpiresAt } from "./thread-bindings.state-BThFQEga.mjs";
5
5
  import { n as setThreadBindingMaxAgeBySessionKey, r as resolveBindingIdsForTargetSession, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-DCQq1WZ5.mjs";
6
- import { c as resolveThreadBindingPersona, d as resolveThreadBindingIntroText, f as resolveThreadBindingThreadName, i as getThreadBindingManager, l as resolveThreadBindingPersonaFromRecord, n as createThreadBindingManager, s as resolveChannelIdForBinding, t as createNoopThreadBindingManager, u as formatThreadBindingDurationLabel } from "./thread-bindings.manager-eexkKyrG.mjs";
6
+ import { a as createNoopThreadBindingManager, c as resolveThreadBindingPersona, d as resolveThreadBindingIntroText, f as resolveThreadBindingThreadName, l as resolveThreadBindingPersonaFromRecord, r as getThreadBindingManager, s as resolveChannelIdForBinding, t as createThreadBindingManager, u as formatThreadBindingDurationLabel } from "./thread-bindings.manager-ve-i6oqt.mjs";
7
7
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
8
8
  import { normalizeOptionalLowercaseString, normalizeOptionalString, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
9
9
  import { resolveThreadBindingIdleTimeoutMs, resolveThreadBindingMaxAgeMs, resolveThreadBindingsEnabled } from "openclaw/plugin-sdk/conversation-runtime";
@@ -1,10 +1,10 @@
1
- import { Ut as __exportAll, pt as getChannel, tt as createChannelWebhook } from "./discord-BXpHW-cu.mjs";
1
+ import { C as withDiscordRequestAuthority, Ut as __exportAll, pt as getChannel, tt as createChannelWebhook } from "./discord-BXpHW-cu.mjs";
2
2
  import { t as isDiscordThreadChannelType } from "./channel-type-DKnjV1XW.mjs";
3
- import { b as resolveDiscordChannelId, t as canFallbackDiscordWebhookSend } from "./retry-DBfcEgmO.mjs";
4
- import { P as createDiscordRestClient } from "./send.shared-Zwx6BxQ5.mjs";
5
- import { t as sendMessageDiscord } from "./send.outbound-D0hQ7s50.mjs";
3
+ import { b as resolveDiscordChannelId, t as canFallbackDiscordWebhookSend } from "./retry-BEYkDy0P.mjs";
4
+ import { P as createDiscordRestClient } from "./send.shared-VNvWfX2T.mjs";
5
+ import { t as sendMessageDiscord } from "./send.outbound-QTyuFupn.mjs";
6
6
  import { n as resolveDiscordChannelInfoSafe, t as resolveDiscordChannelIdSafe } from "./channel-access-C12aDZ0p.mjs";
7
- import { c as sendWebhookMessageDiscord, u as createThreadDiscord } from "./send-CKDczUNL.mjs";
7
+ import { c as sendWebhookMessageDiscord, u as createThreadDiscord } from "./send-CIBzvXjS.mjs";
8
8
  import { C as resolveThreadBindingMaxAgeMs$1, E as shouldDefaultPersist, T as setBindingRecord, _ as resolveBindingIdsForSession, a as THREAD_BINDING_TOUCH_PERSIST_MIN_INTERVAL_MS, b as resolveThreadBindingIdleTimeoutMs$1, c as forgetThreadBindingToken, d as normalizeThreadBindingDurationMs, f as normalizeThreadId, g as removeBindingRecord, h as rememberThreadBindingToken, i as REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL, k as toReusableWebhookKey, l as getThreadBindingToken, m as rememberReusableWebhook, n as MANAGERS_BY_ACCOUNT_ID, o as ensureBindingsLoaded, p as refreshUnboundThreadWebhookIdentity, r as PERSIST_BY_ACCOUNT_ID, s as ensureBindingsLoadedAsync, t as BINDINGS_BY_THREAD_ID, u as normalizeTargetKind, v as resolveBindingRecordKey, w as saveBindingsToDisk, y as resolvePreparedThreadBindingLifecycle } from "./thread-bindings.state-BThFQEga.mjs";
9
9
  import { parseStrictNonNegativeInteger } from "openclaw/plugin-sdk/number-runtime";
10
10
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
@@ -83,17 +83,22 @@ function isDiscordThreadGoneError(err) {
83
83
  return status === 404 || status === 403;
84
84
  }
85
85
  async function maybeSendBindingMessage(params) {
86
+ const assertCurrent = params.assertCurrent;
86
87
  const text = params.text.trim();
87
88
  if (!text) return;
88
89
  const record = params.record;
89
- if (params.preferWebhook !== false && record.webhookId && record.webhookToken) try {
90
- await sendWebhookMessageDiscord(text, {
91
- cfg: params.cfg,
92
- webhookId: record.webhookId,
93
- webhookToken: record.webhookToken,
94
- accountId: record.accountId,
95
- threadId: record.threadId,
96
- username: resolveThreadBindingPersonaFromRecord(record)
90
+ const { webhookId, webhookToken } = record;
91
+ if (params.preferWebhook !== false && webhookId && webhookToken) try {
92
+ await withDiscordRequestAuthority(assertCurrent, () => {
93
+ assertCurrent?.();
94
+ return sendWebhookMessageDiscord(text, {
95
+ cfg: params.cfg,
96
+ webhookId,
97
+ webhookToken,
98
+ accountId: record.accountId,
99
+ threadId: record.threadId,
100
+ username: resolveThreadBindingPersonaFromRecord(record)
101
+ });
97
102
  });
98
103
  return;
99
104
  } catch (err) {
@@ -105,22 +110,29 @@ async function maybeSendBindingMessage(params) {
105
110
  if (!fallbackToBot) return;
106
111
  }
107
112
  try {
108
- await sendMessageDiscord(buildThreadTarget(record.threadId), text, {
109
- cfg: params.cfg,
110
- accountId: record.accountId
113
+ await withDiscordRequestAuthority(assertCurrent, () => {
114
+ assertCurrent?.();
115
+ return sendMessageDiscord(buildThreadTarget(record.threadId), text, {
116
+ cfg: params.cfg,
117
+ accountId: record.accountId
118
+ });
111
119
  });
112
120
  } catch (err) {
113
121
  logVerbose(`discord thread binding fallback send failed: ${summarizeDiscordError(err)}`);
114
122
  }
115
123
  }
116
124
  async function createWebhookForChannel(params) {
125
+ const assertCreateAllowed = params.assertCreateAllowed;
117
126
  try {
118
127
  const rest = createDiscordRestClient({
119
128
  cfg: params.cfg,
120
129
  accountId: params.accountId,
121
130
  token: params.token
122
131
  }).rest;
123
- const created = await createChannelWebhook(rest, params.channelId, { body: { name: "OpenClaw Agents" } });
132
+ const created = await withDiscordRequestAuthority(assertCreateAllowed, () => {
133
+ assertCreateAllowed?.();
134
+ return createChannelWebhook(rest, params.channelId, { body: { name: "OpenClaw Agents" } });
135
+ });
124
136
  const webhookId = normalizeOptionalString(created?.id) ?? "";
125
137
  const webhookToken = normalizeOptionalString(created?.token) ?? "";
126
138
  if (!webhookId || !webhookToken) return {};
@@ -179,11 +191,13 @@ async function resolveChannelIdForBinding(params) {
179
191
  }
180
192
  }
181
193
  async function createThreadForBinding(params) {
194
+ const assertCreateAllowed = params.assertCreateAllowed;
182
195
  try {
183
196
  const created = await createThreadDiscord(params.channelId, { name: params.threadName }, {
184
197
  cfg: params.cfg,
185
198
  accountId: params.accountId,
186
- token: params.token
199
+ token: params.token,
200
+ ...assertCreateAllowed ? { assertCreateAllowed } : {}
187
201
  });
188
202
  return (normalizeOptionalString(created?.id) ?? "") || null;
189
203
  } catch (err) {
@@ -250,6 +264,7 @@ function createThreadBindingSessionAdapter(params) {
250
264
  accountId: params.accountId,
251
265
  capabilities: { placements: ["current", "child"] },
252
266
  bind: async (input) => {
267
+ const assertCurrent = input.assertCurrent;
253
268
  if (input.conversation.channel !== "discord") return null;
254
269
  const targetSessionKey = input.targetSessionKey.trim();
255
270
  if (!targetSessionKey) return null;
@@ -285,7 +300,8 @@ function createThreadBindingSessionAdapter(params) {
285
300
  label,
286
301
  boundBy,
287
302
  introText,
288
- metadata
303
+ metadata,
304
+ ...assertCurrent ? { assertCurrent } : {}
289
305
  });
290
306
  return bound ? serializeBinding(bound) : null;
291
307
  },
@@ -325,17 +341,23 @@ function createThreadBindingSessionAdapter(params) {
325
341
  }
326
342
  };
327
343
  }
328
- //#endregion
329
- //#region extensions/discord/src/monitor/thread-bindings.manager.ts
330
- var thread_bindings_manager_exports = /* @__PURE__ */ __exportAll({
331
- createNoopThreadBindingManager: () => createNoopThreadBindingManager,
332
- createThreadBindingManager: () => createThreadBindingManager,
333
- createThreadBindingManagerAsync: () => createThreadBindingManagerAsync,
334
- getThreadBindingManager: () => getThreadBindingManager
335
- });
336
- function createNoopManager(accountIdRaw) {
344
+ /** Disabled bindings have a live empty owner; retirement still makes that owner unavailable. */
345
+ function createNoopThreadBindingManager(accountIdRaw) {
346
+ const accountId = normalizeAccountId(accountIdRaw);
347
+ const adapter = {
348
+ channel: "discord",
349
+ accountId,
350
+ capabilities: {
351
+ bindSupported: false,
352
+ unbindSupported: false,
353
+ placements: []
354
+ },
355
+ listBySession: () => [],
356
+ resolveByConversation: () => null
357
+ };
358
+ registerSessionBindingAdapter(adapter);
337
359
  return {
338
- accountId: normalizeAccountId(accountIdRaw),
360
+ accountId,
339
361
  getIdleTimeoutMs: () => DEFAULT_THREAD_BINDING_IDLE_TIMEOUT_MS,
340
362
  getMaxAgeMs: () => 0,
341
363
  getByThreadId: () => void 0,
@@ -346,9 +368,20 @@ function createNoopManager(accountIdRaw) {
346
368
  bindTarget: async () => null,
347
369
  unbindThread: () => null,
348
370
  unbindBySessionKey: () => [],
349
- stop: () => {}
371
+ stop: () => unregisterSessionBindingAdapter({
372
+ channel: "discord",
373
+ accountId,
374
+ adapter
375
+ })
350
376
  };
351
377
  }
378
+ //#endregion
379
+ //#region extensions/discord/src/monitor/thread-bindings.manager.ts
380
+ var thread_bindings_manager_exports = /* @__PURE__ */ __exportAll({
381
+ createThreadBindingManager: () => createThreadBindingManager,
382
+ createThreadBindingManagerAsync: () => createThreadBindingManagerAsync,
383
+ getThreadBindingManager: () => getThreadBindingManager
384
+ });
352
385
  function isDirectConversationBindingId(value) {
353
386
  const trimmed = normalizeOptionalString(value);
354
387
  return Boolean(trimmed && /^(user:|channel:)/i.test(trimmed));
@@ -483,13 +516,28 @@ function createThreadBindingManager(params) {
483
516
  if (touchParams.persist ?? persist) saveBindingsToDisk({ minIntervalMs: THREAD_BINDING_TOUCH_PERSIST_MIN_INTERVAL_MS });
484
517
  return nextRecord;
485
518
  },
486
- bindTarget: async (bindParams) => {
519
+ bindTarget: async (input) => {
520
+ const bindParams = {
521
+ ...input,
522
+ metadata: input.metadata ? { ...input.metadata } : void 0
523
+ };
524
+ const assertCurrent = bindParams.assertCurrent;
525
+ assertCurrent?.();
487
526
  const cfg = resolveCurrentCfg();
488
527
  let threadId = normalizeThreadId(bindParams.threadId);
489
528
  let channelId = normalizeOptionalString(bindParams.channelId) ?? "";
490
529
  const directConversationBinding = isDirectConversationBindingId(threadId) || isDirectConversationBindingId(channelId);
530
+ let nativeBindingCreated = false;
531
+ const targetSessionKey = normalizeOptionalString(bindParams.targetSessionKey) ?? "";
532
+ if (!targetSessionKey) return null;
533
+ const targetKind = normalizeTargetKind(bindParams.targetKind, targetSessionKey);
534
+ let agentId = normalizeOptionalString(bindParams.agentId);
491
535
  if (!threadId && bindParams.createThread) {
492
536
  if (!channelId) return null;
537
+ agentId ??= resolveSessionAgentIdStrict({
538
+ config: cfg,
539
+ sessionKey: targetSessionKey
540
+ });
493
541
  const threadName = resolveThreadBindingThreadName({
494
542
  agentId: bindParams.agentId,
495
543
  label: bindParams.label
@@ -499,8 +547,10 @@ function createThreadBindingManager(params) {
499
547
  accountId,
500
548
  token: resolveCurrentToken(),
501
549
  channelId,
502
- threadName: normalizeOptionalString(bindParams.threadName) ?? threadName
550
+ threadName: normalizeOptionalString(bindParams.threadName) ?? threadName,
551
+ ...assertCurrent ? { assertCreateAllowed: assertCurrent } : {}
503
552
  }) ?? void 0;
553
+ nativeBindingCreated = Boolean(threadId);
504
554
  }
505
555
  if (!threadId) return null;
506
556
  if (!channelId && directConversationBinding) channelId = threadId;
@@ -513,10 +563,11 @@ function createThreadBindingManager(params) {
513
563
  }) ?? "";
514
564
  if (!channelId) return null;
515
565
  const existingValue = manager.getByThreadId(threadId);
516
- const targetSessionKey = normalizeOptionalString(bindParams.targetSessionKey) ?? "";
517
- if (!targetSessionKey) return null;
518
- const targetKind = normalizeTargetKind(bindParams.targetKind, targetSessionKey);
519
566
  const previous = existingValue?.targetSessionKey === targetSessionKey && existingValue.targetKind === targetKind ? existingValue : void 0;
567
+ agentId ??= normalizeOptionalString(previous?.agentId) ?? resolveSessionAgentIdStrict({
568
+ config: cfg,
569
+ sessionKey: targetSessionKey
570
+ });
520
571
  let webhookId = normalizeOptionalString(bindParams.webhookId) ?? normalizeOptionalString(existingValue?.webhookId) ?? "";
521
572
  let webhookToken = normalizeOptionalString(bindParams.webhookToken) ?? normalizeOptionalString(existingValue?.webhookToken) ?? "";
522
573
  if (!directConversationBinding && (!webhookId || !webhookToken)) {
@@ -532,10 +583,12 @@ function createThreadBindingManager(params) {
532
583
  cfg,
533
584
  accountId,
534
585
  token: resolveCurrentToken(),
535
- channelId
586
+ channelId,
587
+ ...assertCurrent ? { assertCreateAllowed: assertCurrent } : {}
536
588
  });
537
589
  webhookId = createdWebhook.webhookId ?? "";
538
590
  webhookToken = createdWebhook.webhookToken ?? "";
591
+ nativeBindingCreated ||= Boolean(webhookId && webhookToken);
539
592
  }
540
593
  const now = Date.now();
541
594
  const record = {
@@ -544,10 +597,7 @@ function createThreadBindingManager(params) {
544
597
  threadId,
545
598
  targetKind,
546
599
  targetSessionKey,
547
- agentId: normalizeOptionalString(bindParams.agentId) ?? normalizeOptionalString(previous?.agentId) ?? resolveSessionAgentIdStrict({
548
- config: cfg,
549
- sessionKey: targetSessionKey
550
- }),
600
+ agentId,
551
601
  label: normalizeOptionalString(bindParams.label) ?? normalizeOptionalString(previous?.label),
552
602
  webhookId: webhookId || void 0,
553
603
  webhookToken: webhookToken || void 0,
@@ -561,13 +611,15 @@ function createThreadBindingManager(params) {
561
611
  ...bindParams.metadata
562
612
  }
563
613
  };
614
+ if (!nativeBindingCreated) assertCurrent?.();
564
615
  setBindingRecord(record);
565
616
  if (persist) saveBindingsToDisk();
566
617
  const introText = bindParams.introText?.trim();
567
618
  if (introText && cfg) maybeSendBindingMessage({
568
619
  cfg,
569
620
  record,
570
- text: introText
621
+ text: introText,
622
+ ...assertCurrent ? { assertCurrent } : {}
571
623
  });
572
624
  return record;
573
625
  },
@@ -667,12 +719,9 @@ async function createThreadBindingManagerAsync(params) {
667
719
  await ensureBindingsLoadedAsync();
668
720
  return createThreadBindingManager(params);
669
721
  }
670
- function createNoopThreadBindingManager(accountId) {
671
- return createNoopManager(accountId);
672
- }
673
722
  function getThreadBindingManager(accountId) {
674
723
  const normalized = normalizeAccountId(accountId);
675
724
  return MANAGERS_BY_ACCOUNT_ID.get(normalized) ?? null;
676
725
  }
677
726
  //#endregion
678
- export { thread_bindings_manager_exports as a, resolveThreadBindingPersona as c, resolveThreadBindingIntroText as d, resolveThreadBindingThreadName as f, getThreadBindingManager as i, resolveThreadBindingPersonaFromRecord as l, createThreadBindingManager as n, isThreadArchived as o, createThreadBindingManagerAsync as r, resolveChannelIdForBinding as s, createNoopThreadBindingManager as t, formatThreadBindingDurationLabel as u };
727
+ export { createNoopThreadBindingManager as a, resolveThreadBindingPersona as c, resolveThreadBindingIntroText as d, resolveThreadBindingThreadName as f, thread_bindings_manager_exports as i, resolveThreadBindingPersonaFromRecord as l, createThreadBindingManagerAsync as n, isThreadArchived as o, getThreadBindingManager as r, resolveChannelIdForBinding as s, createThreadBindingManager as t, formatThreadBindingDurationLabel as u };