@openclaw/discord 2026.9.5 → 2026.9.7

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 (517) hide show
  1. package/assets/icon.png +0 -0
  2. package/dist/.setup/{account-inspect-BwQj24ht.mjs → account-inspect-De8hOUxG.mjs} +1 -1
  3. package/dist/.setup/{accounts-CwJQoLjM.mjs → accounts-ChaMcixG.mjs} +1 -4
  4. package/dist/.setup/{activities-api-DBwRt5ES.mjs → activities-api-tvbsU2e3.mjs} +38 -66
  5. package/dist/.setup/{api-CBK9zcq5.mjs → api-DVbJwZVt.mjs} +10 -2
  6. package/dist/.setup/{approval-handler.runtime-Du3n5ypX.mjs → approval-handler.runtime-DxCK2Rux.mjs} +49 -125
  7. package/dist/.setup/{approval-message-updates-BN7JtScm.mjs → approval-message-updates-BKFqavHZ.mjs} +2 -2
  8. package/dist/.setup/{audit-C8uaKoa9.mjs → audit-CLg9I71N.mjs} +5 -5
  9. package/dist/.setup/{channel-ChKdlBgH.mjs → channel-DxlUVU9t.mjs} +125 -228
  10. package/dist/.setup/{channel-type-DKnjV1XW.mjs → channel-type-DRCrEMss.mjs} +22 -22
  11. package/dist/.setup/{channel.setup-BlC3-Kzz.mjs → channel.setup-CRo1GjV7.mjs} +6 -9
  12. package/dist/.setup/{components-MqMWUWnE.mjs → components-Cq1PvIpN.mjs} +42 -71
  13. package/dist/.setup/{config-schema-CiZz-mtA.mjs → config-schema-oxELUSDx.mjs} +19 -44
  14. package/dist/.setup/{conversation-binding-route-_rz33QHO.mjs → conversation-binding-route-Caz_XuFH.mjs} +14 -6
  15. package/dist/.setup/{directory-config-BytTftz-.mjs → directory-config-esqNn0Eo.mjs} +6 -9
  16. package/dist/.setup/{directory-live--EGTH0DC.mjs → directory-live-DtKRHuGV.mjs} +6 -12
  17. package/dist/.setup/{discord-BXpHW-cu.mjs → discord-0xJYfdDD.mjs} +82 -386
  18. package/dist/.setup/{doctor-DxcdkXzz.mjs → doctor-BCl1H5tl.mjs} +21 -36
  19. package/dist/.setup/{doctor-contract-Co5vRCZ6.mjs → doctor-contract-CvvgwrrG.mjs} +41 -50
  20. package/dist/.setup/{channel-actions.runtime-CJmiFfps.mjs → handle-action-CUvQWnE7.mjs} +74 -105
  21. package/dist/.setup/{handle-action.guild-admin-DAFyh_yV.mjs → handle-action.guild-admin-Df-8gVle.mjs} +63 -121
  22. package/dist/.setup/{live-policy-config-eKQ-PLdy.mjs → live-policy-config-8Pv20CHc.mjs} +2 -3
  23. package/dist/.setup/{message-handler-DnUrDpaU.mjs → message-handler-B-Jk4oDk.mjs} +18 -93
  24. package/dist/.setup/message-handler.preflight-pluralkit-CWLUBVcx.mjs +141 -0
  25. package/dist/.setup/{message-handler.preflight-CtqaF_fb.mjs → message-handler.preflight-v-__NSDq.mjs} +73 -287
  26. package/dist/.setup/{message-handler.process-Dz1xvuQU.mjs → message-handler.process-BNFFuChn.mjs} +423 -374
  27. package/dist/.setup/{outbound-adapter-C8v79z9Z.mjs → outbound-adapter-BobT-kse.mjs} +105 -19
  28. package/dist/.setup/{outbound-session-route-CqWbuMOm.mjs → outbound-session-route-zVGxxceg.mjs} +142 -109
  29. package/dist/.setup/{pluralkit-CdAt1G0P.mjs → pluralkit-a6_NLfH9.mjs} +1 -1
  30. package/dist/.setup/{preflight-audio-DrnqFA8U.mjs → preflight-audio-DHGIHEpv.mjs} +2 -1
  31. package/dist/.setup/{presence-cache-dYSHPWMx.mjs → presence-cache-Di3H3DIU.mjs} +0 -4
  32. package/dist/.setup/{probe-CupW4we4.mjs → probe-LYrIHlBF.mjs} +13 -4
  33. package/dist/.setup/{provider-72zIvN-i.mjs → provider-B_G5hASF.mjs} +1112 -1668
  34. package/dist/.setup/provider-session.runtime-BYlTBFD2.mjs +6 -0
  35. package/dist/.setup/provider.runtime-CUE3UxER.mjs +2 -0
  36. package/dist/.setup/{realtime-session.runtime-DTccTgTM.mjs → realtime-session.runtime-oUd9DOcz.mjs} +372 -345
  37. package/dist/.setup/receive-recovery-CHPOsnLc.mjs +514 -0
  38. package/dist/.setup/{resolve-allowlist-common-CwMBzbx9.mjs → resolve-allowlist-common-DPdRggu5.mjs} +4 -7
  39. package/dist/.setup/{resolve-channels-BbvsLQOZ.mjs → resolve-channels-BFPNRmVv.mjs} +21 -40
  40. package/dist/.setup/{resolve-users-ByFlR7LQ.mjs → resolve-users-0-aBuCy3.mjs} +4 -4
  41. package/dist/.setup/{retry-DBfcEgmO.mjs → retry-pz_cSha2.mjs} +81 -16
  42. package/dist/.setup/rolldown-runtime-B4FMCO8f.mjs +28 -0
  43. package/dist/.setup/{runtime-SchNfUsQ.mjs → runtime-FN000lxA.mjs} +83 -166
  44. package/dist/.setup/runtime-doctor-migrations-CshUGl36.mjs +159 -0
  45. package/dist/.setup/{runtime-BVoa7hhx.mjs → runtime-sUksZ--Q.mjs} +2 -5
  46. package/dist/.setup/{secret-config-contract-DFu9hfU8.mjs → secret-config-contract-uOE2J7yM.mjs} +15 -85
  47. package/dist/.setup/{security-audit-s5w50-Ly.mjs → security-audit-Cdaegq7C.mjs} +3 -1
  48. package/dist/.setup/{send-CKDczUNL.mjs → send-CrfEI6Bs.mjs} +73 -114
  49. package/dist/.setup/{send.components-DWQjXhPV.mjs → send.components-DxQAMfES.mjs} +62 -107
  50. package/dist/.setup/{send.outbound-D0hQ7s50.mjs → send.outbound-BISKnb-a.mjs} +79 -154
  51. package/dist/.setup/{send.shared-Zwx6BxQ5.mjs → send.shared-DGFkbkQR.mjs} +10 -25
  52. package/dist/.setup/{sender-identity-0Ymgvmaj.mjs → sender-identity-B9X5Vb9R.mjs} +2 -3
  53. package/dist/.setup/setup-plugin-api-BQUBxbhe.mjs +3 -0
  54. package/dist/.setup/{shared-CaA3Vv4n.mjs → shared-B3wZ4hN-.mjs} +25 -32
  55. package/dist/.setup/{subagent-hooks-Bired9q6.mjs → subagent-hooks-nlUE9ow7.mjs} +5 -6
  56. package/dist/.setup/system-events-CdeZnvPV.mjs +33 -0
  57. package/dist/.setup/{target-resolver-B6MrxbYv.mjs → target-resolver-BuLapkhy.mjs} +9 -12
  58. package/dist/.setup/targets-0KUcEIYx.mjs +3 -0
  59. package/dist/.setup/{thread-bindings-CK5272V3.mjs → thread-bindings-D7TfgjR_.mjs} +33 -35
  60. package/dist/.setup/thread-bindings.manager-DN-NissX.mjs +819 -0
  61. package/dist/.setup/thread-bindings.session-updates-CshfKghV.mjs +359 -0
  62. package/dist/.setup/{thread-bindings.state-BThFQEga.mjs → thread-bindings.state-g6v9zAym.mjs} +21 -62
  63. package/dist/.setup/{transcripts-source-CuWYgayu.mjs → transcripts-source-p8EV179h.mjs} +133 -238
  64. package/dist/.setup/{typing-BKZL5fGj.mjs → typing-BiHCzBRu.mjs} +2 -1
  65. package/dist/.setup/{voice-runtime-DHVQ2mFz.mjs → voice-runtime-B46rcwrG.mjs} +633 -1085
  66. package/dist/account-inspect-api.js +1 -1
  67. package/dist/action-runtime-api.js +1 -1
  68. package/dist/activities-api.js +1 -1
  69. package/dist/api.js +18 -18
  70. package/dist/channel-config-api.js +1 -1
  71. package/dist/channel-plugin-api.js +1 -1
  72. package/dist/directory-contract-api.js +1 -1
  73. package/dist/doctor-contract-api.js +4 -4
  74. package/dist/index.js +1 -1
  75. package/dist/runtime-api.js +20 -20
  76. package/dist/secret-contract-api.js +1 -1
  77. package/dist/security-audit-contract-api.js +1 -1
  78. package/dist/setup-entry.js +1 -1
  79. package/dist/setup-plugin-api.js +1 -1
  80. package/dist/src/voice/audio-worker.runtime.js +1056 -0
  81. package/dist/subagent-hooks-api.js +3 -4
  82. package/dist/transcripts-source-api.js +1 -1
  83. package/node_modules/@napi-rs/wasm-runtime/dist/emnapi-plugins.cjs +8 -4
  84. package/node_modules/@napi-rs/wasm-runtime/dist/emnapi-plugins.js +8 -4
  85. package/node_modules/@napi-rs/wasm-runtime/dist/fs-proxy.cjs +1 -1
  86. package/node_modules/@napi-rs/wasm-runtime/dist/fs.js +770 -695
  87. package/node_modules/@napi-rs/wasm-runtime/fs-proxy.js +3 -2
  88. package/node_modules/@napi-rs/wasm-runtime/package.json +1 -1
  89. package/node_modules/@tybys/wasm-util/LICENSE +21 -0
  90. package/node_modules/@tybys/wasm-util/package.json +1 -1
  91. package/node_modules/@types/node/README.md +2 -2
  92. package/node_modules/@types/node/child_process.d.ts +1 -1
  93. package/node_modules/@types/node/crypto.d.ts +20 -8
  94. package/node_modules/@types/node/ffi.d.ts +14 -0
  95. package/node_modules/@types/node/http2.d.ts +3 -2
  96. package/node_modules/@types/node/net.d.ts +16 -4
  97. package/node_modules/@types/node/package.json +2 -17
  98. package/node_modules/@types/node/process.d.ts +1 -0
  99. package/node_modules/@types/node/quic.d.ts +39 -1
  100. package/node_modules/@types/node/stream/iter.d.ts +9 -12
  101. package/node_modules/@types/node/test/reporters.d.ts +1 -0
  102. package/node_modules/@types/node/test.d.ts +72 -0
  103. package/node_modules/@types/node/tls.d.ts +14 -10
  104. package/node_modules/@types/node/vm.d.ts +2 -1
  105. package/node_modules/@types/node/web-globals/streams.d.ts +4 -0
  106. package/node_modules/@types/node/worker_threads.d.ts +4 -1
  107. package/node_modules/typebox/build/compile/code.mjs +1 -2
  108. package/node_modules/typebox/build/compile/validator.mjs +5 -1
  109. package/node_modules/typebox/build/format/iri.mjs +16 -9
  110. package/node_modules/typebox/build/guard/emit.mjs +2 -2
  111. package/node_modules/typebox/build/guard/guard.d.mts +7 -5
  112. package/node_modules/typebox/build/guard/guard.mjs +14 -9
  113. package/node_modules/typebox/build/guard/index.mjs +6 -0
  114. package/node_modules/typebox/build/guard/unicode/unicode.d.mts +6 -0
  115. package/node_modules/typebox/build/guard/unicode/unicode.mjs +35 -0
  116. package/node_modules/typebox/build/guard/{string.mjs → unicode/unicode_segment.mjs} +16 -19
  117. package/node_modules/typebox/build/schema/build.mjs +2 -3
  118. package/node_modules/typebox/build/schema/engine/_pathing.d.mts +1 -0
  119. package/node_modules/typebox/build/schema/engine/_pathing.mjs +11 -0
  120. package/node_modules/typebox/build/schema/engine/_refine.mjs +13 -5
  121. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +2 -1
  122. package/node_modules/typebox/build/schema/engine/dependencies.mjs +2 -1
  123. package/node_modules/typebox/build/schema/engine/dependentSchemas.mjs +2 -1
  124. package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +1 -1
  125. package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +2 -2
  126. package/node_modules/typebox/build/schema/engine/format.mjs +9 -2
  127. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +3 -2
  128. package/node_modules/typebox/build/schema/engine/properties.mjs +3 -2
  129. package/node_modules/typebox/build/schema/engine/propertyNames.mjs +2 -1
  130. package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +1 -1
  131. package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +2 -2
  132. package/node_modules/typebox/build/schema/engine/ref.d.mts +1 -1
  133. package/node_modules/typebox/build/schema/engine/ref.mjs +2 -2
  134. package/node_modules/typebox/build/schema/engine/schema.mjs +24 -24
  135. package/node_modules/typebox/build/schema/parse.mjs +3 -0
  136. package/node_modules/typebox/build/schema/pointer/pointer.d.mts +1 -6
  137. package/node_modules/typebox/build/schema/pointer/pointer.mjs +47 -64
  138. package/node_modules/typebox/build/system/settings/internal.d.mts +2 -0
  139. package/node_modules/typebox/build/system/settings/internal.mjs +20 -0
  140. package/node_modules/typebox/build/system/settings/settings.d.mts +11 -0
  141. package/node_modules/typebox/build/system/settings/settings.mjs +14 -0
  142. package/node_modules/typebox/build/type/extends/inference.d.mts +1 -1
  143. package/node_modules/typebox/build/type/extends/inference.mjs +15 -2
  144. package/node_modules/typebox/build/type/extends/tuple.d.mts +2 -1
  145. package/node_modules/typebox/build/type/extends/tuple.mjs +21 -1
  146. package/node_modules/typebox/build/value/parse/parse.mjs +10 -4
  147. package/node_modules/typebox/package.json +1 -1
  148. package/node_modules/typebox/readme.md +3 -1
  149. package/node_modules/zod/README.md +2 -2
  150. package/node_modules/zod/compile.cjs +19 -0
  151. package/node_modules/zod/index.cjs +19 -0
  152. package/node_modules/zod/locales/index.cjs +19 -0
  153. package/node_modules/zod/mini/index.cjs +19 -0
  154. package/node_modules/zod/package.json +8 -7
  155. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  156. package/node_modules/zod/src/v4/classic/external.ts +2 -0
  157. package/node_modules/zod/src/v4/classic/from-json-schema.ts +248 -25
  158. package/node_modules/zod/src/v4/classic/schemas.ts +243 -168
  159. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +60 -9
  160. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +6 -0
  161. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
  162. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +265 -0
  163. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +112 -6
  164. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +9 -0
  165. package/node_modules/zod/src/v4/classic/tests/error.test.ts +130 -1
  166. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +157 -0
  167. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  168. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +40 -2
  169. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +27 -7
  170. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +88 -56
  171. package/node_modules/zod/src/v4/classic/tests/number.test.ts +39 -0
  172. package/node_modules/zod/src/v4/classic/tests/object.test.ts +56 -0
  173. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +3 -2
  174. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  175. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  176. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +46 -1
  177. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  178. package/node_modules/zod/src/v4/classic/tests/string.test.ts +95 -1
  179. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +33 -1
  180. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +234 -38
  181. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +569 -0
  182. package/node_modules/zod/src/v4/core/api.ts +44 -28
  183. package/node_modules/zod/src/v4/core/checks.ts +62 -102
  184. package/node_modules/zod/src/v4/core/compile.ts +218 -93
  185. package/node_modules/zod/src/v4/core/core.ts +1 -3
  186. package/node_modules/zod/src/v4/core/doc.ts +6 -2
  187. package/node_modules/zod/src/v4/core/errors.ts +3 -6
  188. package/node_modules/zod/src/v4/core/json-schema-generator.ts +2 -2
  189. package/node_modules/zod/src/v4/core/json-schema-processors.ts +185 -81
  190. package/node_modules/zod/src/v4/core/memoizer.ts +75 -28
  191. package/node_modules/zod/src/v4/core/parse.ts +37 -16
  192. package/node_modules/zod/src/v4/core/regexes.ts +14 -4
  193. package/node_modules/zod/src/v4/core/schemas.ts +296 -132
  194. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  195. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +35 -0
  196. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  197. package/node_modules/zod/src/v4/core/tests/compile.test.ts +399 -2
  198. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  199. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  200. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  201. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +118 -16
  202. package/node_modules/zod/src/v4/core/to-json-schema.ts +9 -7
  203. package/node_modules/zod/src/v4/core/util.ts +218 -147
  204. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  205. package/node_modules/zod/src/v4/locales/ar.ts +2 -0
  206. package/node_modules/zod/src/v4/locales/az.ts +2 -0
  207. package/node_modules/zod/src/v4/locales/be.ts +2 -0
  208. package/node_modules/zod/src/v4/locales/bg.ts +2 -0
  209. package/node_modules/zod/src/v4/locales/bn.ts +2 -0
  210. package/node_modules/zod/src/v4/locales/ca.ts +2 -0
  211. package/node_modules/zod/src/v4/locales/ckb.ts +2 -0
  212. package/node_modules/zod/src/v4/locales/cs.ts +2 -0
  213. package/node_modules/zod/src/v4/locales/da.ts +2 -0
  214. package/node_modules/zod/src/v4/locales/de.ts +2 -0
  215. package/node_modules/zod/src/v4/locales/el.ts +2 -0
  216. package/node_modules/zod/src/v4/locales/en.ts +2 -0
  217. package/node_modules/zod/src/v4/locales/eo.ts +2 -0
  218. package/node_modules/zod/src/v4/locales/es.ts +2 -0
  219. package/node_modules/zod/src/v4/locales/fa.ts +2 -0
  220. package/node_modules/zod/src/v4/locales/fi.ts +2 -0
  221. package/node_modules/zod/src/v4/locales/fr-CA.ts +2 -0
  222. package/node_modules/zod/src/v4/locales/fr.ts +2 -0
  223. package/node_modules/zod/src/v4/locales/gu.ts +2 -0
  224. package/node_modules/zod/src/v4/locales/he.ts +2 -0
  225. package/node_modules/zod/src/v4/locales/hi.ts +2 -0
  226. package/node_modules/zod/src/v4/locales/hr.ts +2 -0
  227. package/node_modules/zod/src/v4/locales/hu.ts +2 -0
  228. package/node_modules/zod/src/v4/locales/hy.ts +2 -0
  229. package/node_modules/zod/src/v4/locales/id.ts +2 -0
  230. package/node_modules/zod/src/v4/locales/index.ts +1 -0
  231. package/node_modules/zod/src/v4/locales/is.ts +2 -0
  232. package/node_modules/zod/src/v4/locales/it.ts +2 -0
  233. package/node_modules/zod/src/v4/locales/ja.ts +2 -0
  234. package/node_modules/zod/src/v4/locales/ka.ts +2 -0
  235. package/node_modules/zod/src/v4/locales/km.ts +2 -0
  236. package/node_modules/zod/src/v4/locales/kn.ts +2 -0
  237. package/node_modules/zod/src/v4/locales/ko.ts +2 -0
  238. package/node_modules/zod/src/v4/locales/lt.ts +2 -0
  239. package/node_modules/zod/src/v4/locales/mk.ts +2 -0
  240. package/node_modules/zod/src/v4/locales/ms.ts +2 -0
  241. package/node_modules/zod/src/v4/locales/ne.ts +2 -0
  242. package/node_modules/zod/src/v4/locales/nl.ts +2 -0
  243. package/node_modules/zod/src/v4/locales/nn.ts +2 -0
  244. package/node_modules/zod/src/v4/locales/no.ts +2 -0
  245. package/node_modules/zod/src/v4/locales/ota.ts +2 -0
  246. package/node_modules/zod/src/v4/locales/pl.ts +2 -0
  247. package/node_modules/zod/src/v4/locales/ps.ts +2 -0
  248. package/node_modules/zod/src/v4/locales/pt-BR.ts +2 -0
  249. package/node_modules/zod/src/v4/locales/pt.ts +2 -0
  250. package/node_modules/zod/src/v4/locales/ro.ts +2 -0
  251. package/node_modules/zod/src/v4/locales/ru.ts +2 -0
  252. package/node_modules/zod/src/v4/locales/sk.ts +2 -0
  253. package/node_modules/zod/src/v4/locales/sl.ts +2 -0
  254. package/node_modules/zod/src/v4/locales/sv.ts +2 -0
  255. package/node_modules/zod/src/v4/locales/ta.ts +2 -0
  256. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  257. package/node_modules/zod/src/v4/locales/th.ts +2 -0
  258. package/node_modules/zod/src/v4/locales/tk.ts +2 -0
  259. package/node_modules/zod/src/v4/locales/tr.ts +2 -0
  260. package/node_modules/zod/src/v4/locales/uk.ts +2 -0
  261. package/node_modules/zod/src/v4/locales/ur.ts +2 -0
  262. package/node_modules/zod/src/v4/locales/uz.ts +2 -0
  263. package/node_modules/zod/src/v4/locales/vi.ts +2 -0
  264. package/node_modules/zod/src/v4/locales/yo.ts +2 -0
  265. package/node_modules/zod/src/v4/locales/zh-CN.ts +2 -0
  266. package/node_modules/zod/src/v4/locales/zh-TW.ts +2 -0
  267. package/node_modules/zod/src/v4/mini/external.ts +2 -0
  268. package/node_modules/zod/src/v4/mini/schemas.ts +32 -7
  269. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +1 -1
  270. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  271. package/node_modules/zod/src/v4/mini/tests/index.test.ts +86 -0
  272. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  273. package/node_modules/zod/src/v4/mini/tests/string.test.ts +23 -0
  274. package/node_modules/zod/v3/ZodError.cjs +19 -0
  275. package/node_modules/zod/v3/errors.cjs +19 -0
  276. package/node_modules/zod/v3/external.cjs +19 -0
  277. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  278. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  279. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  280. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  281. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  282. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  283. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  284. package/node_modules/zod/v3/index.cjs +19 -0
  285. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  286. package/node_modules/zod/v3/types.cjs +19 -0
  287. package/node_modules/zod/v4/classic/checks.cjs +19 -0
  288. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  289. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  290. package/node_modules/zod/v4/classic/deep-partial.cjs +19 -0
  291. package/node_modules/zod/v4/classic/errors.cjs +19 -0
  292. package/node_modules/zod/v4/classic/external.cjs +22 -1
  293. package/node_modules/zod/v4/classic/external.d.cts +1 -1
  294. package/node_modules/zod/v4/classic/external.d.ts +1 -1
  295. package/node_modules/zod/v4/classic/external.js +1 -1
  296. package/node_modules/zod/v4/classic/from-json-schema.cjs +264 -24
  297. package/node_modules/zod/v4/classic/from-json-schema.js +245 -24
  298. package/node_modules/zod/v4/classic/in-out.cjs +19 -0
  299. package/node_modules/zod/v4/classic/index.cjs +19 -0
  300. package/node_modules/zod/v4/classic/iso.cjs +19 -0
  301. package/node_modules/zod/v4/classic/parse.cjs +19 -0
  302. package/node_modules/zod/v4/classic/schemas.cjs +100 -35
  303. package/node_modules/zod/v4/classic/schemas.d.cts +15 -1
  304. package/node_modules/zod/v4/classic/schemas.d.ts +15 -1
  305. package/node_modules/zod/v4/classic/schemas.js +77 -33
  306. package/node_modules/zod/v4/core/api.cjs +45 -22
  307. package/node_modules/zod/v4/core/api.d.cts +12 -6
  308. package/node_modules/zod/v4/core/api.d.ts +12 -6
  309. package/node_modules/zod/v4/core/api.js +25 -22
  310. package/node_modules/zod/v4/core/checks.cjs +51 -97
  311. package/node_modules/zod/v4/core/checks.d.cts +17 -1
  312. package/node_modules/zod/v4/core/checks.d.ts +17 -1
  313. package/node_modules/zod/v4/core/checks.js +31 -96
  314. package/node_modules/zod/v4/core/compile.cjs +173 -78
  315. package/node_modules/zod/v4/core/compile.d.cts +18 -4
  316. package/node_modules/zod/v4/core/compile.d.ts +18 -4
  317. package/node_modules/zod/v4/core/compile.js +154 -79
  318. package/node_modules/zod/v4/core/core.cjs +20 -1
  319. package/node_modules/zod/v4/core/core.js +1 -1
  320. package/node_modules/zod/v4/core/doc.cjs +26 -2
  321. package/node_modules/zod/v4/core/doc.js +7 -2
  322. package/node_modules/zod/v4/core/errors.cjs +21 -5
  323. package/node_modules/zod/v4/core/errors.js +2 -5
  324. package/node_modules/zod/v4/core/index.cjs +19 -0
  325. package/node_modules/zod/v4/core/json-schema-generator.cjs +20 -1
  326. package/node_modules/zod/v4/core/json-schema-generator.js +2 -2
  327. package/node_modules/zod/v4/core/json-schema-processors.cjs +188 -72
  328. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  329. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  330. package/node_modules/zod/v4/core/json-schema-processors.js +170 -74
  331. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  332. package/node_modules/zod/v4/core/memoizer.cjs +111 -23
  333. package/node_modules/zod/v4/core/memoizer.js +69 -23
  334. package/node_modules/zod/v4/core/parse.cjs +56 -16
  335. package/node_modules/zod/v4/core/parse.js +37 -16
  336. package/node_modules/zod/v4/core/regexes.cjs +31 -6
  337. package/node_modules/zod/v4/core/regexes.d.cts +3 -0
  338. package/node_modules/zod/v4/core/regexes.d.ts +3 -0
  339. package/node_modules/zod/v4/core/regexes.js +10 -4
  340. package/node_modules/zod/v4/core/registries.cjs +19 -0
  341. package/node_modules/zod/v4/core/schemas.cjs +302 -114
  342. package/node_modules/zod/v4/core/schemas.d.cts +28 -8
  343. package/node_modules/zod/v4/core/schemas.d.ts +28 -8
  344. package/node_modules/zod/v4/core/schemas.js +279 -113
  345. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  346. package/node_modules/zod/v4/core/to-json-schema.cjs +28 -7
  347. package/node_modules/zod/v4/core/to-json-schema.d.cts +4 -3
  348. package/node_modules/zod/v4/core/to-json-schema.d.ts +4 -3
  349. package/node_modules/zod/v4/core/to-json-schema.js +7 -6
  350. package/node_modules/zod/v4/core/util.cjs +177 -143
  351. package/node_modules/zod/v4/core/util.d.cts +25 -4
  352. package/node_modules/zod/v4/core/util.d.ts +25 -4
  353. package/node_modules/zod/v4/core/util.js +156 -143
  354. package/node_modules/zod/v4/core/versions.cjs +21 -2
  355. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  356. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  357. package/node_modules/zod/v4/core/versions.js +2 -2
  358. package/node_modules/zod/v4/core/visit.cjs +19 -0
  359. package/node_modules/zod/v4/index.cjs +19 -0
  360. package/node_modules/zod/v4/locales/ar.cjs +2 -0
  361. package/node_modules/zod/v4/locales/ar.js +2 -0
  362. package/node_modules/zod/v4/locales/az.cjs +2 -0
  363. package/node_modules/zod/v4/locales/az.js +2 -0
  364. package/node_modules/zod/v4/locales/be.cjs +2 -0
  365. package/node_modules/zod/v4/locales/be.js +2 -0
  366. package/node_modules/zod/v4/locales/bg.cjs +2 -0
  367. package/node_modules/zod/v4/locales/bg.js +2 -0
  368. package/node_modules/zod/v4/locales/bn.cjs +2 -0
  369. package/node_modules/zod/v4/locales/bn.js +2 -0
  370. package/node_modules/zod/v4/locales/ca.cjs +2 -0
  371. package/node_modules/zod/v4/locales/ca.js +2 -0
  372. package/node_modules/zod/v4/locales/ckb.cjs +2 -0
  373. package/node_modules/zod/v4/locales/ckb.js +2 -0
  374. package/node_modules/zod/v4/locales/cs.cjs +2 -0
  375. package/node_modules/zod/v4/locales/cs.js +2 -0
  376. package/node_modules/zod/v4/locales/da.cjs +2 -0
  377. package/node_modules/zod/v4/locales/da.js +2 -0
  378. package/node_modules/zod/v4/locales/de.cjs +2 -0
  379. package/node_modules/zod/v4/locales/de.js +2 -0
  380. package/node_modules/zod/v4/locales/el.cjs +2 -0
  381. package/node_modules/zod/v4/locales/el.js +2 -0
  382. package/node_modules/zod/v4/locales/en.cjs +2 -0
  383. package/node_modules/zod/v4/locales/en.js +2 -0
  384. package/node_modules/zod/v4/locales/eo.cjs +2 -0
  385. package/node_modules/zod/v4/locales/eo.js +2 -0
  386. package/node_modules/zod/v4/locales/es.cjs +2 -0
  387. package/node_modules/zod/v4/locales/es.js +2 -0
  388. package/node_modules/zod/v4/locales/fa.cjs +2 -0
  389. package/node_modules/zod/v4/locales/fa.js +2 -0
  390. package/node_modules/zod/v4/locales/fi.cjs +2 -0
  391. package/node_modules/zod/v4/locales/fi.js +2 -0
  392. package/node_modules/zod/v4/locales/fr-CA.cjs +2 -0
  393. package/node_modules/zod/v4/locales/fr-CA.js +2 -0
  394. package/node_modules/zod/v4/locales/fr.cjs +2 -0
  395. package/node_modules/zod/v4/locales/fr.js +2 -0
  396. package/node_modules/zod/v4/locales/gu.cjs +2 -0
  397. package/node_modules/zod/v4/locales/gu.js +2 -0
  398. package/node_modules/zod/v4/locales/he.cjs +2 -0
  399. package/node_modules/zod/v4/locales/he.js +2 -0
  400. package/node_modules/zod/v4/locales/hi.cjs +2 -0
  401. package/node_modules/zod/v4/locales/hi.js +2 -0
  402. package/node_modules/zod/v4/locales/hr.cjs +2 -0
  403. package/node_modules/zod/v4/locales/hr.js +2 -0
  404. package/node_modules/zod/v4/locales/hu.cjs +2 -0
  405. package/node_modules/zod/v4/locales/hu.js +2 -0
  406. package/node_modules/zod/v4/locales/hy.cjs +2 -0
  407. package/node_modules/zod/v4/locales/hy.js +2 -0
  408. package/node_modules/zod/v4/locales/id.cjs +2 -0
  409. package/node_modules/zod/v4/locales/id.js +2 -0
  410. package/node_modules/zod/v4/locales/index.cjs +22 -1
  411. package/node_modules/zod/v4/locales/index.d.cts +1 -0
  412. package/node_modules/zod/v4/locales/index.d.ts +1 -0
  413. package/node_modules/zod/v4/locales/index.js +1 -0
  414. package/node_modules/zod/v4/locales/is.cjs +2 -0
  415. package/node_modules/zod/v4/locales/is.js +2 -0
  416. package/node_modules/zod/v4/locales/it.cjs +2 -0
  417. package/node_modules/zod/v4/locales/it.js +2 -0
  418. package/node_modules/zod/v4/locales/ja.cjs +2 -0
  419. package/node_modules/zod/v4/locales/ja.js +2 -0
  420. package/node_modules/zod/v4/locales/ka.cjs +2 -0
  421. package/node_modules/zod/v4/locales/ka.js +2 -0
  422. package/node_modules/zod/v4/locales/km.cjs +2 -0
  423. package/node_modules/zod/v4/locales/km.js +2 -0
  424. package/node_modules/zod/v4/locales/kn.cjs +2 -0
  425. package/node_modules/zod/v4/locales/kn.js +2 -0
  426. package/node_modules/zod/v4/locales/ko.cjs +2 -0
  427. package/node_modules/zod/v4/locales/ko.js +2 -0
  428. package/node_modules/zod/v4/locales/lt.cjs +2 -0
  429. package/node_modules/zod/v4/locales/lt.js +2 -0
  430. package/node_modules/zod/v4/locales/mk.cjs +2 -0
  431. package/node_modules/zod/v4/locales/mk.js +2 -0
  432. package/node_modules/zod/v4/locales/ms.cjs +2 -0
  433. package/node_modules/zod/v4/locales/ms.js +2 -0
  434. package/node_modules/zod/v4/locales/ne.cjs +2 -0
  435. package/node_modules/zod/v4/locales/ne.js +2 -0
  436. package/node_modules/zod/v4/locales/nl.cjs +2 -0
  437. package/node_modules/zod/v4/locales/nl.js +2 -0
  438. package/node_modules/zod/v4/locales/nn.cjs +2 -0
  439. package/node_modules/zod/v4/locales/nn.js +2 -0
  440. package/node_modules/zod/v4/locales/no.cjs +2 -0
  441. package/node_modules/zod/v4/locales/no.js +2 -0
  442. package/node_modules/zod/v4/locales/ota.cjs +2 -0
  443. package/node_modules/zod/v4/locales/ota.js +2 -0
  444. package/node_modules/zod/v4/locales/pl.cjs +2 -0
  445. package/node_modules/zod/v4/locales/pl.js +2 -0
  446. package/node_modules/zod/v4/locales/ps.cjs +2 -0
  447. package/node_modules/zod/v4/locales/ps.js +2 -0
  448. package/node_modules/zod/v4/locales/pt-BR.cjs +2 -0
  449. package/node_modules/zod/v4/locales/pt-BR.js +2 -0
  450. package/node_modules/zod/v4/locales/pt.cjs +2 -0
  451. package/node_modules/zod/v4/locales/pt.js +2 -0
  452. package/node_modules/zod/v4/locales/ro.cjs +2 -0
  453. package/node_modules/zod/v4/locales/ro.js +2 -0
  454. package/node_modules/zod/v4/locales/ru.cjs +2 -0
  455. package/node_modules/zod/v4/locales/ru.js +2 -0
  456. package/node_modules/zod/v4/locales/sk.cjs +2 -0
  457. package/node_modules/zod/v4/locales/sk.js +2 -0
  458. package/node_modules/zod/v4/locales/sl.cjs +2 -0
  459. package/node_modules/zod/v4/locales/sl.js +2 -0
  460. package/node_modules/zod/v4/locales/sv.cjs +2 -0
  461. package/node_modules/zod/v4/locales/sv.js +2 -0
  462. package/node_modules/zod/v4/locales/ta.cjs +2 -0
  463. package/node_modules/zod/v4/locales/ta.js +2 -0
  464. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  465. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  466. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  467. package/node_modules/zod/v4/locales/tg.js +117 -0
  468. package/node_modules/zod/v4/locales/th.cjs +2 -0
  469. package/node_modules/zod/v4/locales/th.js +2 -0
  470. package/node_modules/zod/v4/locales/tk.cjs +2 -0
  471. package/node_modules/zod/v4/locales/tk.js +2 -0
  472. package/node_modules/zod/v4/locales/tr.cjs +2 -0
  473. package/node_modules/zod/v4/locales/tr.js +2 -0
  474. package/node_modules/zod/v4/locales/uk.cjs +2 -0
  475. package/node_modules/zod/v4/locales/uk.js +2 -0
  476. package/node_modules/zod/v4/locales/ur.cjs +2 -0
  477. package/node_modules/zod/v4/locales/ur.js +2 -0
  478. package/node_modules/zod/v4/locales/uz.cjs +2 -0
  479. package/node_modules/zod/v4/locales/uz.js +2 -0
  480. package/node_modules/zod/v4/locales/vi.cjs +2 -0
  481. package/node_modules/zod/v4/locales/vi.js +2 -0
  482. package/node_modules/zod/v4/locales/yo.cjs +2 -0
  483. package/node_modules/zod/v4/locales/yo.js +2 -0
  484. package/node_modules/zod/v4/locales/zh-CN.cjs +2 -0
  485. package/node_modules/zod/v4/locales/zh-CN.js +2 -0
  486. package/node_modules/zod/v4/locales/zh-TW.cjs +2 -0
  487. package/node_modules/zod/v4/locales/zh-TW.js +2 -0
  488. package/node_modules/zod/v4/mini/checks.cjs +19 -0
  489. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  490. package/node_modules/zod/v4/mini/deep-partial.cjs +19 -0
  491. package/node_modules/zod/v4/mini/external.cjs +22 -1
  492. package/node_modules/zod/v4/mini/external.d.cts +1 -1
  493. package/node_modules/zod/v4/mini/external.d.ts +1 -1
  494. package/node_modules/zod/v4/mini/external.js +1 -1
  495. package/node_modules/zod/v4/mini/in-out.cjs +19 -0
  496. package/node_modules/zod/v4/mini/index.cjs +19 -0
  497. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  498. package/node_modules/zod/v4/mini/parse.cjs +19 -0
  499. package/node_modules/zod/v4/mini/schemas.cjs +44 -8
  500. package/node_modules/zod/v4/mini/schemas.d.cts +6 -1
  501. package/node_modules/zod/v4/mini/schemas.d.ts +6 -1
  502. package/node_modules/zod/v4/mini/schemas.js +21 -6
  503. package/node_modules/zod/v4-mini/index.cjs +19 -0
  504. package/openclaw.plugin.json +21 -1
  505. package/package.json +9 -6
  506. package/dist/.setup/agent-components.runtime-CEPrf2SY.mjs +0 -4
  507. package/dist/.setup/message-handler.history-CJOsN9w5.mjs +0 -28
  508. package/dist/.setup/probe.runtime-DBQ_AGPe.mjs +0 -2
  509. package/dist/.setup/provider-session.runtime-BW7QrF5C.mjs +0 -6
  510. package/dist/.setup/provider.runtime-DuhmKdDU.mjs +0 -2
  511. package/dist/.setup/security-audit.runtime-DHtYenx9.mjs +0 -2
  512. package/dist/.setup/setup-plugin-api-CINIEBLa.mjs +0 -3
  513. package/dist/.setup/system-events-B2YEEMbS.mjs +0 -34
  514. package/dist/.setup/targets-D1mAB5yO.mjs +0 -3
  515. package/dist/.setup/thread-bindings.manager-eexkKyrG.mjs +0 -678
  516. package/dist/.setup/thread-bindings.session-updates-DCQq1WZ5.mjs +0 -55
  517. /package/node_modules/typebox/build/guard/{string.d.mts → unicode/unicode_segment.d.mts} +0 -0
@@ -1,13 +1,13 @@
1
- import { v as RateLimitError } from "./discord-BXpHW-cu.mjs";
2
- import { parseStrictNonNegativeInteger, resolveIntegerOption } from "openclaw/plugin-sdk/number-runtime";
1
+ import { v as RateLimitError } from "./discord-0xJYfdDD.mjs";
3
2
  import { expectDefined } from "openclaw/plugin-sdk/expect-runtime";
3
+ import { parseStrictNonNegativeInteger, resolveIntegerOption } from "openclaw/plugin-sdk/number-runtime";
4
4
  import { collectErrorGraphCandidates, extractErrorCode, formatErrorMessage, readErrorName } from "openclaw/plugin-sdk/error-runtime";
5
5
  import { classifyTransientNetworkErrorCode, createChannelApiRetryRunner, resolveRetryConfig, retryAsync } from "openclaw/plugin-sdk/retry-runtime";
6
6
  import { buildMessagingTarget, parseMentionPrefixOrAtUserTarget, requireTargetKind } from "openclaw/plugin-sdk/channel-targets";
7
7
  import { sleepWithAbort } from "openclaw/plugin-sdk/runtime-env";
8
8
  import { resolveAllowlistMatchByCandidates } from "openclaw/plugin-sdk/allow-from";
9
9
  import { chunkByParagraph } from "openclaw/plugin-sdk/reply-chunking";
10
- import { avoidTrailingHighSurrogateBreak, chunkTextForOutbound, findCodeRegions } from "openclaw/plugin-sdk/text-chunking";
10
+ import { chunkTextForOutbound, findCodeRegions } from "openclaw/plugin-sdk/text-chunking";
11
11
  import { isSingleUseReplyToMode } from "openclaw/plugin-sdk/reply-reference";
12
12
  import { createMessageReceiptFromOutboundResults } from "openclaw/plugin-sdk/channel-outbound";
13
13
  import { attachChannelToResults } from "openclaw/plugin-sdk/channel-send-result";
@@ -222,6 +222,42 @@ function createDiscordSendResult(params) {
222
222
  };
223
223
  }
224
224
  //#endregion
225
+ //#region packages/normalization-core/src/utf16-slice.ts
226
+ function isHighSurrogate(codeUnit) {
227
+ return codeUnit >= 55296 && codeUnit <= 56319;
228
+ }
229
+ function isLowSurrogate(codeUnit) {
230
+ return codeUnit >= 56320 && codeUnit <= 57343;
231
+ }
232
+ /** Moves a chunk boundary away from the middle of a UTF-16 surrogate pair. */
233
+ function avoidTrailingHighSurrogateBreak(text, start, end) {
234
+ if (end <= start || end >= text.length || !isHighSurrogate(text.charCodeAt(end - 1)) || !isLowSurrogate(text.charCodeAt(end))) return end;
235
+ const adjusted = end - 1;
236
+ return adjusted > start ? adjusted : end + 1;
237
+ }
238
+ //#endregion
239
+ //#region packages/normalization-core/src/grapheme.ts
240
+ let graphemeSegmenter;
241
+ function getGraphemeSegmenter() {
242
+ graphemeSegmenter ??= new Intl.Segmenter(void 0, { granularity: "grapheme" });
243
+ return graphemeSegmenter;
244
+ }
245
+ /**
246
+ * Chooses a whole-grapheme cut within the hard budget, honoring a usable preference.
247
+ * If no whole grapheme fits, allowPartial permits a surrogate-safe progress cut;
248
+ * a leading surrogate pair can exceed maxEnd by one code unit.
249
+ */
250
+ function findGraphemeChunkEnd(text, start, maxEnd, preferredEnd = maxEnd, allowPartial = true) {
251
+ const hardEnd = Math.min(maxEnd, text.length);
252
+ if (hardEnd <= start) return start;
253
+ const preferred = Number.isInteger(preferredEnd) && preferredEnd > start && preferredEnd <= hardEnd ? preferredEnd : hardEnd;
254
+ if (preferred === text.length) return preferred;
255
+ const segments = getGraphemeSegmenter().segment(text);
256
+ let end = segments.containing(preferred)?.index ?? preferred;
257
+ if (end <= start && preferred < hardEnd) end = hardEnd === text.length ? hardEnd : segments.containing(hardEnd)?.index ?? hardEnd;
258
+ return end > start ? end : allowPartial ? avoidTrailingHighSurrogateBreak(text, start, hardEnd) : start;
259
+ }
260
+ //#endregion
225
261
  //#region extensions/discord/src/chunk.ts
226
262
  const DEFAULT_MAX_CHARS = 2e3;
227
263
  const DEFAULT_MAX_LINES = 17;
@@ -453,24 +489,53 @@ function createDiscordRanges(source, maxChars, maxLines) {
453
489
  offset += line.length + 1;
454
490
  }
455
491
  if (!fence) collect(source.length);
456
- const overlaps = (start, end) => spans.some((span) => span.start < end && span.end > start);
457
- const joins = (end, start) => end <= start && spans.some((span) => span.start < end && end < span.end && start < span.end);
492
+ const firstSpanEndingAfter = (position) => {
493
+ let low = 0;
494
+ let high = spans.length;
495
+ while (low < high) {
496
+ const middle = low + Math.floor((high - low) / 2);
497
+ if (expectDefined(spans[middle], "Discord inline span").end <= position) low = middle + 1;
498
+ else high = middle;
499
+ }
500
+ return low;
501
+ };
502
+ const firstPrefixEndingAfter = (position) => {
503
+ let low = 0;
504
+ let high = spans.length;
505
+ while (low < high) {
506
+ const middle = low + Math.floor((high - low) / 2);
507
+ const span = expectDefined(spans[middle], "Discord inline span");
508
+ if (span.base + span.code.prefix.end <= position) low = middle + 1;
509
+ else high = middle;
510
+ }
511
+ return spans[low];
512
+ };
513
+ const overlaps = (start, end) => {
514
+ const span = spans[firstSpanEndingAfter(start)];
515
+ return Boolean(span && span.start < end);
516
+ };
517
+ const joins = (end, start) => {
518
+ if (end > start) return false;
519
+ const span = spans[firstSpanEndingAfter(end)];
520
+ return Boolean(span && span.start < end && start < span.end);
521
+ };
458
522
  const boundary = (start, end) => {
459
- let safe = avoidTrailingHighSurrogateBreak(source, start, end);
460
- for (const span of spans) {
461
- const prefix = span.code.prefix;
462
- if (span.base + prefix.start < safe && safe < span.base + prefix.end) return span.base + prefix.start;
463
- if (span.start < safe && safe < span.end) {
464
- if (source[safe - 1] === "\r" && source[safe] === "\n") safe -= 1;
465
- if (span.atomicTicks) while (source[safe - 1] === "`" && source[safe] === "`") safe -= 1;
466
- }
523
+ let safe = findGraphemeChunkEnd(source, start, end);
524
+ if (safe === end - 1 && source[end - 1] === "\r" && source[end] === "\n") safe = end;
525
+ const prefixSpan = firstPrefixEndingAfter(safe);
526
+ if (prefixSpan && prefixSpan.base + prefixSpan.code.prefix.start < safe) return prefixSpan.base + prefixSpan.code.prefix.start;
527
+ const span = spans[firstSpanEndingAfter(safe)];
528
+ if (span && span.start < safe) {
529
+ if (source[safe - 1] === "\r" && source[safe] === "\n") safe -= 1;
530
+ if (span.atomicTicks) while (source[safe - 1] === "`" && source[safe] === "`") safe -= 1;
467
531
  }
468
532
  return safe;
469
533
  };
470
534
  const render = (start, end) => {
471
535
  let cursor = start, text = "";
472
- for (const span of spans) {
473
- if (span.end <= start || span.start >= end) continue;
536
+ for (let index = firstSpanEndingAfter(start); index < spans.length; index += 1) {
537
+ const span = expectDefined(spans[index], "Discord inline span");
538
+ if (span.start >= end) break;
474
539
  const prefix = span.code.prefix;
475
540
  const prefixStart = span.base + prefix.start;
476
541
  if (start > span.base + prefix.ownerStart && cursor <= prefixStart) {
@@ -627,4 +692,4 @@ function createDiscordRetryRunner(params) {
627
692
  };
628
693
  }
629
694
  //#endregion
630
- export { normalizeDiscordMessagingTarget as _, recordDiscordMessageCreateAmbiguity as a, resolveDiscordChannelId as b, createDiscordSendReceiptFromResults as c, createReusableDiscordReplyReference as d, resolveDiscordReplyMessageId as f, matchesDiscordToolContextTarget as g, looksLikeDiscordTargetId as h, hasDiscordMessageCreateAmbiguity as i, createDiscordSendResult as l, allowFromContainsDiscordUserId as m, classifyDiscordDeliveryFailure as n, chunkDiscordTextWithMode as o, resolveDiscordReplyReference as p, createDiscordRetryRunner as r, createDiscordSendReceipt as s, canFallbackDiscordWebhookSend as t, toDiscordOutboundDeliveryResult as u, normalizeDiscordOutboundTarget as v, parseDiscordTarget as y };
695
+ export { matchesDiscordToolContextTarget as _, recordDiscordMessageCreateAmbiguity as a, parseDiscordTarget as b, createDiscordSendReceipt as c, toDiscordOutboundDeliveryResult as d, createReusableDiscordReplyReference as f, looksLikeDiscordTargetId as g, allowFromContainsDiscordUserId as h, hasDiscordMessageCreateAmbiguity as i, createDiscordSendReceiptFromResults as l, resolveDiscordReplyReference as m, classifyDiscordDeliveryFailure as n, chunkDiscordTextWithMode as o, resolveDiscordReplyMessageId as p, createDiscordRetryRunner as r, findGraphemeChunkEnd as s, canFallbackDiscordWebhookSend as t, createDiscordSendResult as u, normalizeDiscordMessagingTarget as v, resolveDiscordChannelId as x, normalizeDiscordOutboundTarget as y };
@@ -0,0 +1,28 @@
1
+ import "node:module";
2
+ //#region \0rolldown/runtime.js
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __exportAll = (all, no_symbols) => {
8
+ let target = {};
9
+ for (var name in all) __defProp(target, name, {
10
+ get: all[name],
11
+ enumerable: true
12
+ });
13
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
14
+ return target;
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
18
+ key = keys[i];
19
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
20
+ get: ((k) => from[k]).bind(null, key),
21
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
22
+ });
23
+ }
24
+ return to;
25
+ };
26
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
27
+ //#endregion
28
+ export { __reExport as n, __exportAll as t };
@@ -1,32 +1,21 @@
1
- import { h as readDiscordComponentSpec, m as coerceDiscordComponentParam } from "./components-MqMWUWnE.mjs";
2
- import { l as resolveDiscordChannelConfigWithFallback, o as normalizeDiscordSlug, r as isDiscordGroupAllowedByPolicy, t as isDiscordThreadChannelType, v as resolveGroupDmAllow } from "./channel-type-DKnjV1XW.mjs";
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";
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";
1
+ import { h as readDiscordComponentSpec, m as coerceDiscordComponentParam } from "./components-Cq1PvIpN.mjs";
2
+ import { l as resolveDiscordChannelConfigWithFallback, o as normalizeDiscordSlug, r as isDiscordGroupAllowedByPolicy, t as isDiscordThreadChannelType, y as resolveGroupDmAllow } from "./channel-type-DRCrEMss.mjs";
3
+ import { o as mergeDiscordAccountConfig, s as resolveDefaultDiscordAccountId, t as createDiscordActionGate } from "./accounts-ChaMcixG.mjs";
4
+ import { r as sendDiscordComponentMessage } from "./send.components-DxQAMfES.mjs";
5
+ import { b as parseDiscordTarget, f as createReusableDiscordReplyReference, m as resolveDiscordReplyReference, x as resolveDiscordChannelId } from "./retry-pz_cSha2.mjs";
6
+ import { C as hasAnyChannelPermissionDiscord, H as getGateway, P as createDiscordRuntimeAccountContext, _ as canManageGuildMemberRoleDiscord, b as fetchChannelPermissionsDiscord, n as buildDiscordTextChunks, u as resolveDiscordTargetChannelId, v as canManageGuildRoleDiscord, w as hasAnyGuildPermissionDiscord, y as canViewDiscordGuildChannel } from "./send.shared-DGFkbkQR.mjs";
7
+ import { r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-BISKnb-a.mjs";
8
+ import { n as getPresence } from "./presence-cache-Di3H3DIU.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-CrfEI6Bs.mjs";
10
+ import "./targets-0KUcEIYx.mjs";
11
11
  import { ChannelType, PermissionFlagsBits } from "discord-api-types/v10";
12
12
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
13
- import { asBoolean, isRecord, normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
13
+ import { asBoolean, asOptionalRecord, 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";
17
18
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
18
- //#region extensions/discord/src/actions/runtime.messaging.runtime.ts
19
- async function resolveDiscordReactionTargetChannelId(params) {
20
- try {
21
- return resolveDiscordChannelId(params.target);
22
- } catch {
23
- return (await resolveDiscordTargetChannelId(params.target, {
24
- cfg: params.cfg,
25
- accountId: params.accountId
26
- })).channelId;
27
- }
28
- }
29
- //#endregion
30
19
  //#region extensions/discord/src/actions/runtime.shared.ts
31
20
  /** Discord REST auto_archive_duration allowlist (minutes). */
32
21
  const DISCORD_AUTO_ARCHIVE_MINUTES = /* @__PURE__ */ new Set([
@@ -383,6 +372,7 @@ function createDiscordMessagingActionContext(params) {
383
372
  params: params.input,
384
373
  isActionEnabled: params.isActionEnabled,
385
374
  cfg: params.cfg,
375
+ accountConfig,
386
376
  options: params.options,
387
377
  accountId,
388
378
  resolveChannelId: () => resolveDiscordChannelId(readStringParam(params.input, "channelId", { required: true })),
@@ -390,19 +380,10 @@ function createDiscordMessagingActionContext(params) {
390
380
  const targetChannelId = resolveDiscordChannelId(channelId);
391
381
  const target = await resolveReadTargetContext(targetChannelId);
392
382
  const currentConversation = isCurrentReadTarget(targetChannelId);
393
- if (guildId) {
394
- if (target.metadataKnown && target.guildId !== guildId) throw new Error("Discord read target channel is not allowed.");
395
- const guildInfo = await resolveReadGuildEntry(guildId);
396
- if (directOperator && isExpandedReadTargetEnabled(guildInfo, target, false) || currentConversation && isExpandedReadTargetEnabled(guildInfo, target, true)) return;
397
- if (!isDiscordReadTargetAllowedInGuild({
398
- groupPolicy,
399
- guildInfo,
400
- target
401
- })) throw new Error("Discord read target channel is not allowed.");
402
- return;
403
- }
404
- if (target.guildId) {
405
- const guildInfo = await resolveReadGuildEntry(target.guildId);
383
+ if (guildId && target.metadataKnown && target.guildId !== guildId) throw new Error("Discord read target channel is not allowed.");
384
+ const targetGuildId = guildId || target.guildId;
385
+ if (targetGuildId) {
386
+ const guildInfo = await resolveReadGuildEntry(targetGuildId);
406
387
  if (directOperator && isExpandedReadTargetEnabled(guildInfo, target, false) || currentConversation && isExpandedReadTargetEnabled(guildInfo, target, true)) return;
407
388
  if (!isDiscordReadTargetAllowedInGuild({
408
389
  groupPolicy,
@@ -498,11 +479,14 @@ function createDiscordMessagingActionContext(params) {
498
479
  }
499
480
  return resolveDiscordChannelId(target);
500
481
  }
501
- return await resolveDiscordReactionTargetChannelId({
502
- target,
503
- cfg: params.cfg,
504
- accountId: resolvedReactionAccountId
505
- });
482
+ try {
483
+ return resolveDiscordChannelId(target);
484
+ } catch {
485
+ return (await resolveDiscordTargetChannelId(target, {
486
+ cfg: params.cfg,
487
+ accountId: resolvedReactionAccountId
488
+ })).channelId;
489
+ }
506
490
  },
507
491
  withOpts,
508
492
  withReactionRuntimeOptions: (extra) => ({
@@ -642,19 +626,6 @@ async function verifySenderGuildAdminPermission(params) {
642
626
  if (canManageRole === false || targetType === "role" && canManageRole === null) throw new Error("Sender cannot manage the requested role overwrite.");
643
627
  }
644
628
  }
645
- async function runRoleMutation(params) {
646
- const guildId = readStringParam(params.values, "guildId", { required: true });
647
- const userId = readStringParam(params.values, "userId", { required: true });
648
- const roleId = readStringParam(params.values, "roleId", { required: true });
649
- await params.mutate({
650
- guildId,
651
- userId,
652
- roleId
653
- }, createDiscordActionOptions({
654
- cfg: params.cfg,
655
- accountId: params.accountId
656
- }));
657
- }
658
629
  function readChannelPermissionTarget(params) {
659
630
  return {
660
631
  channelId: readStringParam(params, "channelId", { required: true }),
@@ -695,6 +666,7 @@ async function handleDiscordGuildAction(action, params, isActionEnabled, cfg, op
695
666
  channelTargetRequiredMessage: "Discord guild metadata reads require a wildcard channel allowlist for this guild."
696
667
  });
697
668
  };
669
+ assertGuildAdminActionEnabled(action, isActionEnabled);
698
670
  switch (action) {
699
671
  case "memberInfo": {
700
672
  if (!isActionEnabled("memberInfo")) throw new Error("Discord member info is disabled.");
@@ -751,7 +723,6 @@ async function handleDiscordGuildAction(action, params, isActionEnabled, cfg, op
751
723
  });
752
724
  }
753
725
  case "emojiUpload": {
754
- if (!isActionEnabled("emojiUploads")) throw new Error("Discord emoji uploads are disabled.");
755
726
  const guildId = readStringParam(params, "guildId", { required: true });
756
727
  const name = readStringParam(params, "name", { required: true });
757
728
  const mediaUrl = readStringParam(params, "mediaUrl", { required: true });
@@ -772,7 +743,6 @@ async function handleDiscordGuildAction(action, params, isActionEnabled, cfg, op
772
743
  });
773
744
  }
774
745
  case "stickerUpload": {
775
- if (!isActionEnabled("stickerUploads")) throw new Error("Discord sticker uploads are disabled.");
776
746
  const guildId = readStringParam(params, "guildId", { required: true });
777
747
  const name = readStringParam(params, "name", { required: true });
778
748
  const description = readStringParam(params, "description", { required: true });
@@ -795,23 +765,17 @@ async function handleDiscordGuildAction(action, params, isActionEnabled, cfg, op
795
765
  });
796
766
  }
797
767
  case "roleAdd":
798
- if (!isActionEnabled("roles", false)) throw new Error("Discord role changes are disabled.");
799
- await runRoleMutation({
800
- cfg,
801
- accountId,
802
- values: params,
803
- mutate: addRoleDiscord
804
- });
805
- return jsonResult({ ok: true });
806
- case "roleRemove":
807
- if (!isActionEnabled("roles", false)) throw new Error("Discord role changes are disabled.");
808
- await runRoleMutation({
809
- cfg,
810
- accountId,
811
- values: params,
812
- mutate: removeRoleDiscord
813
- });
768
+ case "roleRemove": {
769
+ const guildId = readStringParam(params, "guildId", { required: true });
770
+ const userId = readStringParam(params, "userId", { required: true });
771
+ const roleId = readStringParam(params, "roleId", { required: true });
772
+ await (action === "roleAdd" ? addRoleDiscord : removeRoleDiscord)({
773
+ guildId,
774
+ userId,
775
+ roleId
776
+ }, withOpts());
814
777
  return jsonResult({ ok: true });
778
+ }
815
779
  case "channelInfo": {
816
780
  if (!isActionEnabled("channelInfo")) throw new Error("Discord channel info is disabled.");
817
781
  const channelId = readStringParam(params, "channelId", { required: true });
@@ -858,7 +822,6 @@ async function handleDiscordGuildAction(action, params, isActionEnabled, cfg, op
858
822
  });
859
823
  }
860
824
  case "eventCreate": {
861
- if (!isActionEnabled("events")) throw new Error("Discord events are disabled.");
862
825
  const guildId = readStringParam(params, "guildId", { required: true });
863
826
  const name = readStringParam(params, "name", { required: true });
864
827
  const startTime = readStringParam(params, "startTime", { required: true });
@@ -886,71 +849,41 @@ async function handleDiscordGuildAction(action, params, isActionEnabled, cfg, op
886
849
  event
887
850
  });
888
851
  }
852
+ case "categoryCreate":
889
853
  case "channelCreate": {
890
- if (!isActionEnabled("channels")) throw new Error("Discord channel management is disabled.");
891
- const channel = await createChannelDiscord(readDiscordChannelCreateParams(params), withOpts());
854
+ const channel = await createChannelDiscord(action === "categoryCreate" ? {
855
+ guildId: readStringParam(params, "guildId", { required: true }),
856
+ name: readStringParam(params, "name", { required: true }),
857
+ type: 4,
858
+ position: readNonNegativeIntegerParam(params, "position")
859
+ } : readDiscordChannelCreateParams(params), withOpts());
892
860
  return jsonResult({
893
861
  ok: true,
894
- channel
862
+ [action === "categoryCreate" ? "category" : "channel"]: channel
895
863
  });
896
864
  }
865
+ case "categoryEdit":
897
866
  case "channelEdit": {
898
- if (!isActionEnabled("channels")) throw new Error("Discord channel management is disabled.");
899
- const channel = await editChannelDiscord(readDiscordChannelEditParams(params), withOpts());
867
+ const channel = await editChannelDiscord(action === "categoryEdit" ? {
868
+ channelId: readStringParam(params, "categoryId", { required: true }),
869
+ name: readStringParam(params, "name"),
870
+ position: readNonNegativeIntegerParam(params, "position")
871
+ } : readDiscordChannelEditParams(params), withOpts());
900
872
  return jsonResult({
901
873
  ok: true,
902
- channel
874
+ [action === "categoryEdit" ? "category" : "channel"]: channel
903
875
  });
904
876
  }
877
+ case "categoryDelete":
905
878
  case "channelDelete": {
906
- if (!isActionEnabled("channels")) throw new Error("Discord channel management is disabled.");
907
- const channelId = readStringParam(params, "channelId", { required: true });
879
+ const channelId = readStringParam(params, action === "categoryDelete" ? "categoryId" : "channelId", { required: true });
908
880
  const result = await deleteChannelDiscord(channelId, withOpts());
909
881
  return jsonResult(result);
910
882
  }
911
883
  case "channelMove":
912
- if (!isActionEnabled("channels")) throw new Error("Discord channel management is disabled.");
913
884
  await moveChannelDiscord(readDiscordChannelMoveParams(params), withOpts());
914
885
  return jsonResult({ ok: true });
915
- case "categoryCreate": {
916
- if (!isActionEnabled("channels")) throw new Error("Discord channel management is disabled.");
917
- const guildId = readStringParam(params, "guildId", { required: true });
918
- const name = readStringParam(params, "name", { required: true });
919
- const position = readNonNegativeIntegerParam(params, "position");
920
- const channel = await createChannelDiscord({
921
- guildId,
922
- name,
923
- type: 4,
924
- position: position ?? void 0
925
- }, withOpts());
926
- return jsonResult({
927
- ok: true,
928
- category: channel
929
- });
930
- }
931
- case "categoryEdit": {
932
- if (!isActionEnabled("channels")) throw new Error("Discord channel management is disabled.");
933
- const categoryId = readStringParam(params, "categoryId", { required: true });
934
- const name = readStringParam(params, "name");
935
- const position = readNonNegativeIntegerParam(params, "position");
936
- const channel = await editChannelDiscord({
937
- channelId: categoryId,
938
- name: name ?? void 0,
939
- position: position ?? void 0
940
- }, withOpts());
941
- return jsonResult({
942
- ok: true,
943
- category: channel
944
- });
945
- }
946
- case "categoryDelete": {
947
- if (!isActionEnabled("channels")) throw new Error("Discord channel management is disabled.");
948
- const categoryId = readStringParam(params, "categoryId", { required: true });
949
- const result = await deleteChannelDiscord(categoryId, withOpts());
950
- return jsonResult(result);
951
- }
952
886
  case "channelPermissionSet": {
953
- if (!isActionEnabled("channels")) throw new Error("Discord channel management is disabled.");
954
887
  const { channelId, targetId } = readChannelPermissionTarget(params);
955
888
  const targetType = readStringParam(params, "targetType", { required: true }) === "member" ? 1 : 0;
956
889
  const allow = readStringParam(params, "allow");
@@ -965,7 +898,6 @@ async function handleDiscordGuildAction(action, params, isActionEnabled, cfg, op
965
898
  return jsonResult({ ok: true });
966
899
  }
967
900
  case "channelPermissionRemove": {
968
- if (!isActionEnabled("channels")) throw new Error("Discord channel management is disabled.");
969
901
  const { channelId, targetId } = readChannelPermissionTarget(params);
970
902
  await removeChannelPermissionDiscord(channelId, targetId, withOpts());
971
903
  return jsonResult({ ok: true });
@@ -984,19 +916,6 @@ function parseDiscordMessageLink(link) {
984
916
  messageId: match[3]
985
917
  };
986
918
  }
987
- function describeDiscordMessageListResult(value) {
988
- if (Array.isArray(value)) return "array";
989
- if (value === null) return "null";
990
- if (value && typeof value === "object") {
991
- const keys = Object.keys(value).toSorted();
992
- return keys.length ? `object with keys ${keys.join(", ")}` : "object";
993
- }
994
- return typeof value;
995
- }
996
- function assertDiscordMessageListResult(value) {
997
- if (Array.isArray(value)) return value;
998
- throw new Error(`Discord message read returned ${describeDiscordMessageListResult(value)} instead of an array.`);
999
- }
1000
919
  async function handleDiscordMessageManagementAction(ctx) {
1001
920
  switch (ctx.action) {
1002
921
  case "permissions": {
@@ -1046,7 +965,7 @@ async function handleDiscordMessageManagementAction(ctx) {
1046
965
  after: readStringParam(ctx.params, "after"),
1047
966
  around: readStringParam(ctx.params, "around")
1048
967
  };
1049
- const messages = messageId ? [await fetchMessageDiscord(channelId, messageId, ctx.withOpts())] : assertDiscordMessageListResult(await readMessagesDiscord(channelId, query, ctx.withOpts()));
968
+ const messages = messageId ? [await fetchMessageDiscord(channelId, messageId, ctx.withOpts())] : await readMessagesDiscord(channelId, query, ctx.withOpts());
1050
969
  return jsonResult({
1051
970
  ok: true,
1052
971
  channelId,
@@ -1057,13 +976,26 @@ async function handleDiscordMessageManagementAction(ctx) {
1057
976
  if (!ctx.isActionEnabled("messages")) throw new Error("Discord message edits are disabled.");
1058
977
  const channelId = ctx.resolveChannelId();
1059
978
  const messageId = readStringParam(ctx.params, "messageId", { required: true });
1060
- const content = readStringParam(ctx.params, "content", {
979
+ const snapshot = ctx.options?.progressSnapshot;
980
+ const content = snapshot ? buildDiscordTextChunks(createChannelProgressDraftCompositor({
981
+ entry: ctx.accountConfig,
982
+ mode: "progress",
983
+ active: true,
984
+ seed: `${ctx.accountId}:${channelId}`,
985
+ initialSnapshot: snapshot
986
+ }).getText(), {
987
+ maxChars: Math.min(ctx.accountConfig.textChunkLimit ?? 2e3, 2e3),
988
+ maxLinesPerMessage: Number.MAX_SAFE_INTEGER
989
+ })[0] ?? "" : readStringParam(ctx.params, "content", {
1061
990
  required: true,
1062
991
  allowEmpty: true,
1063
992
  trim: false
1064
993
  });
1065
994
  await ctx.assertReadTargetAllowed({ channelId });
1066
- const message = await editMessageDiscord(channelId, messageId, { content }, ctx.withOpts());
995
+ const message = await editMessageDiscord(channelId, messageId, {
996
+ content,
997
+ ...snapshot ? { allowedMentions: { parse: [] } } : {}
998
+ }, ctx.withOpts());
1067
999
  return jsonResult({
1068
1000
  ok: true,
1069
1001
  message
@@ -1077,20 +1009,13 @@ async function handleDiscordMessageManagementAction(ctx) {
1077
1009
  await deleteMessageDiscord(channelId, messageId, ctx.withOpts());
1078
1010
  return jsonResult({ ok: true });
1079
1011
  }
1080
- case "pinMessage": {
1081
- if (!ctx.isActionEnabled("pins")) throw new Error("Discord pins are disabled.");
1082
- const channelId = ctx.resolveChannelId();
1083
- const messageId = readStringParam(ctx.params, "messageId", { required: true });
1084
- await ctx.assertReadTargetAllowed({ channelId });
1085
- await pinMessageDiscord(channelId, messageId, ctx.withOpts());
1086
- return jsonResult({ ok: true });
1087
- }
1012
+ case "pinMessage":
1088
1013
  case "unpinMessage": {
1089
1014
  if (!ctx.isActionEnabled("pins")) throw new Error("Discord pins are disabled.");
1090
1015
  const channelId = ctx.resolveChannelId();
1091
1016
  const messageId = readStringParam(ctx.params, "messageId", { required: true });
1092
1017
  await ctx.assertReadTargetAllowed({ channelId });
1093
- await unpinMessageDiscord(channelId, messageId, ctx.withOpts());
1018
+ await (ctx.action === "pinMessage" ? pinMessageDiscord : unpinMessageDiscord)(channelId, messageId, ctx.withOpts());
1094
1019
  return jsonResult({ ok: true });
1095
1020
  }
1096
1021
  case "listPins": {
@@ -1139,10 +1064,6 @@ async function handleDiscordMessageManagementAction(ctx) {
1139
1064
  authorIds: authorIdList.length ? authorIdList : void 0,
1140
1065
  limit
1141
1066
  }, ctx.withOpts());
1142
- if (!results || typeof results !== "object") return jsonResult({
1143
- ok: true,
1144
- results
1145
- });
1146
1067
  const messages = results.messages;
1147
1068
  const normalizedMessages = Array.isArray(messages) ? messages.map((group) => Array.isArray(group) ? group.map((msg) => ctx.normalizeMessage(msg)) : group) : messages;
1148
1069
  return jsonResult({
@@ -1165,8 +1086,8 @@ async function handleDiscordReactionMessagingAction(ctx) {
1165
1086
  const channelId = await ctx.resolveReactionChannelId();
1166
1087
  const messageId = readStringParam(ctx.params, "messageId", { required: true });
1167
1088
  const { emoji, remove, isEmpty } = readReactionParams(ctx.params, { removeErrorMessage: "Emoji is required to remove a Discord reaction." });
1089
+ await ctx.assertReadTargetAllowed({ channelId });
1168
1090
  if (remove) {
1169
- await ctx.assertReadTargetAllowed({ channelId });
1170
1091
  await removeReactionDiscord(channelId, messageId, emoji, ctx.withReactionRuntimeOptions());
1171
1092
  return jsonResult({
1172
1093
  ok: true,
@@ -1174,14 +1095,12 @@ async function handleDiscordReactionMessagingAction(ctx) {
1174
1095
  });
1175
1096
  }
1176
1097
  if (isEmpty) {
1177
- await ctx.assertReadTargetAllowed({ channelId });
1178
1098
  const removed = await removeOwnReactionsDiscord(channelId, messageId, ctx.withReactionRuntimeOptions());
1179
1099
  return jsonResult({
1180
1100
  ok: true,
1181
1101
  removed: removed.removed
1182
1102
  });
1183
1103
  }
1184
- await ctx.assertReadTargetAllowed({ channelId });
1185
1104
  await reactMessageDiscord(channelId, messageId, emoji, ctx.withReactionRuntimeOptions());
1186
1105
  return jsonResult({
1187
1106
  ok: true,
@@ -1205,9 +1124,6 @@ async function handleDiscordReactionMessagingAction(ctx) {
1205
1124
  }
1206
1125
  //#endregion
1207
1126
  //#region extensions/discord/src/actions/runtime.messaging.send.ts
1208
- function hasDiscordComponentObjectKeys(value) {
1209
- return Boolean(value && typeof value === "object" && !Array.isArray(value) && Object.keys(value).length > 0);
1210
- }
1211
1127
  function resolveActionReplyReference(ctx, replyToId) {
1212
1128
  const reply = ctx.options?.reply;
1213
1129
  return reply ? resolveDiscordReplyReference({
@@ -1217,15 +1133,11 @@ function resolveActionReplyReference(ctx, replyToId) {
1217
1133
  }) : createReusableDiscordReplyReference(replyToId);
1218
1134
  }
1219
1135
  function readDiscordThreadArchiveTimestamp(thread) {
1220
- if (!thread || typeof thread !== "object" || Array.isArray(thread)) return;
1221
- const metadata = thread.thread_metadata;
1222
- if (metadata && typeof metadata === "object" && !Array.isArray(metadata)) {
1223
- const archiveTimestamp = metadata.archive_timestamp;
1224
- if (typeof archiveTimestamp === "string" && archiveTimestamp.trim()) return archiveTimestamp;
1225
- }
1136
+ const archiveTimestamp = asOptionalRecord(asOptionalRecord(thread)?.thread_metadata)?.archive_timestamp;
1137
+ return typeof archiveTimestamp === "string" && archiveTimestamp.trim() ? archiveTimestamp : void 0;
1226
1138
  }
1227
1139
  function normalizeDiscordThreadListActionResult(params) {
1228
- const record = params.value && typeof params.value === "object" && !Array.isArray(params.value) ? params.value : void 0;
1140
+ const record = asOptionalRecord(params.value);
1229
1141
  const threadItems = Array.isArray(record?.threads) ? record.threads : [];
1230
1142
  const hasMore = record?.has_more === true;
1231
1143
  const nextBefore = params.includeArchived && hasMore ? readDiscordThreadArchiveTimestamp(threadItems[threadItems.length - 1]) : void 0;
@@ -1313,7 +1225,8 @@ async function handleDiscordMessageSendAction(ctx) {
1313
1225
  const silent = ctx.params.silent === true;
1314
1226
  const suppressEmbeds = ctx.params.suppressEmbeds === void 0 ? void 0 : ctx.params.suppressEmbeds === true;
1315
1227
  const rawComponents = coerceDiscordComponentParam(ctx.params.components);
1316
- const componentSpec = hasDiscordComponentObjectKeys(rawComponents) ? readDiscordComponentSpec(rawComponents) : null;
1228
+ const componentRecord = asOptionalRecord(rawComponents);
1229
+ const componentSpec = componentRecord && Object.keys(componentRecord).length > 0 ? readDiscordComponentSpec(componentRecord) : null;
1317
1230
  const components = Array.isArray(rawComponents) || typeof rawComponents === "function" ? rawComponents : void 0;
1318
1231
  const mediaUrl = readStringParam(ctx.params, "mediaUrl", { trim: false }) ?? readStringParam(ctx.params, "path", { trim: false }) ?? readStringParam(ctx.params, "filePath", { trim: false });
1319
1232
  const rawEmbeds = ctx.params.embeds;
@@ -1417,10 +1330,14 @@ async function handleDiscordMessageSendAction(ctx) {
1417
1330
  appliedTags: readStringArrayParam(ctx.params, "appliedTags") ?? void 0
1418
1331
  };
1419
1332
  try {
1420
- const thread = await createThreadDiscord(channelId, payload, ctx.withOpts());
1333
+ const { initialMessageDelivery, ...thread } = await createThreadDiscord(channelId, payload, ctx.withOpts());
1421
1334
  return jsonResult({
1422
1335
  ok: true,
1423
- thread
1336
+ thread,
1337
+ ...initialMessageDelivery ? {
1338
+ threadSnapshot: "creation",
1339
+ initialMessageDelivery
1340
+ } : {}
1424
1341
  });
1425
1342
  } catch (error) {
1426
1343
  if (error instanceof DiscordThreadInitialMessageError) {