@openclaw/discord 2026.5.7 → 2026.5.10-beta.1

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 (110) hide show
  1. package/dist/{access-CHY9FK3X.js → access-R4X7pYt4.js} +1 -1
  2. package/dist/action-runtime-api.js +1 -1
  3. package/dist/{allow-list-ek-1hMKN.js → allow-list-4wnZg5P9.js} +2 -6
  4. package/dist/api.js +18 -16
  5. package/dist/{approval-handler.runtime-BBZRYAGs.js → approval-handler.runtime-B5BCBw4D.js} +3 -4
  6. package/dist/{approval-native-CBdZsAR7.js → approval-native-CrCc3b4u.js} +2 -2
  7. package/dist/{approval-shared-Ck6TxKgo.js → approval-shared-Ckk65xSG.js} +1 -1
  8. package/dist/{audit-CCJ0h49k.js → audit-BRBe8xFv.js} +4 -4
  9. package/dist/{channel-UXGa9PGc.js → channel-DTBEGHsT.js} +53 -31
  10. package/dist/{channel-actions-Br29_1nE.js → channel-actions-CHgoSpPF.js} +27 -1
  11. package/dist/{channel-actions.runtime-ChmNUig1.js → channel-actions.runtime-E5Plubuu.js} +5 -5
  12. package/dist/channel-config-api.js +1 -1
  13. package/dist/channel-plugin-api.js +1 -1
  14. package/dist/{channel.setup-D_xyQu_h.js → channel.setup-EQXuueIk.js} +3 -3
  15. package/dist/chunk-DYl-_5RL.js +179 -0
  16. package/dist/{components-D5LnN7ZQ.js → components-BJOShoIU.js} +2 -3
  17. package/dist/{config-schema-Cc953rAs.js → config-schema-BGn5I3_3.js} +46 -1
  18. package/dist/contract-api.js +7 -7
  19. package/dist/{conversation-identity-DHhS0ez3.js → conversation-identity-BPQm_uhV.js} +1 -1
  20. package/dist/{directory-config-DoETeOOx.js → directory-config-JBaFwbAQ.js} +1 -1
  21. package/dist/directory-contract-api.js +1 -1
  22. package/dist/{directory-live-DJ0V5asB.js → directory-live-B4kW11z5.js} +2 -2
  23. package/dist/{discord-eZlimVfW.js → discord-DtHMmZqJ.js} +58 -15
  24. package/dist/{doctor-Bo-yifB3.js → doctor-CPV4Ch3V.js} +3 -3
  25. package/dist/{doctor-contract-Bso46EOQ.js → doctor-contract-BGjjFBdq.js} +1 -1
  26. package/dist/doctor-contract-api.js +1 -1
  27. package/dist/{handle-action.guild-admin-sJiQymg8.js → handle-action.guild-admin-DSeMCHvR.js} +6 -3
  28. package/dist/{inbound-context-CRylwjg0.js → inbound-context-BAwOn5Iq.js} +1 -1
  29. package/dist/manager.runtime-DGvCDWI5.js +2082 -0
  30. package/dist/{message-handler-C9Ohf-ea.js → message-handler-BWHSteQf.js} +7 -7
  31. package/dist/{message-handler.preflight-BrvazsYn.js → message-handler.preflight-q7ose9Ta.js} +31 -42
  32. package/dist/{message-handler.process-CEnzuLiN.js → message-handler.process-BN8bE7AE.js} +81 -64
  33. package/dist/{message-utils-9kaGF59d.js → message-utils-DEjCwCRz.js} +2 -2
  34. package/dist/normalize-Cu94FOqy.js +58 -0
  35. package/dist/{outbound-adapter-DNsTVJfH.js → outbound-adapter-Bt8FL3yO.js} +78 -17
  36. package/dist/{outbound-session-route-DK9qkPgP.js → outbound-session-route-BaJRt05p.js} +1 -1
  37. package/dist/{pluralkit-OFss_pIy.js → pluralkit-CUfobeQu.js} +1 -1
  38. package/dist/{preflight-audio-CRmUxxuM.js → preflight-audio-BcsH127L.js} +1 -1
  39. package/dist/{preview-streaming-Cc_oeIPP.js → preview-streaming-DCPAe24T.js} +1 -0
  40. package/dist/{probe.runtime-CMgUDax3.js → probe.runtime-4Q9GD7FG.js} +1 -1
  41. package/dist/{provider-CuOh6z_b.js → provider-DBvvDP9A.js} +185 -225
  42. package/dist/{provider-session.runtime-CCESIHVo.js → provider-session.runtime-DepAOR1U.js} +3 -3
  43. package/dist/provider.runtime-BlbOt97W.js +2 -0
  44. package/dist/{reply-delivery-D9aKHtDH.js → reply-delivery-vHSqaKKo.js} +9 -6
  45. package/dist/{resolve-allowlist-common-_e1cWOb3.js → resolve-allowlist-common-ZcVU4OMA.js} +1 -1
  46. package/dist/{resolve-channels-kyuvrXJg.js → resolve-channels-D9Dubj_y.js} +3 -3
  47. package/dist/{resolve-users-CAwh4EBq.js → resolve-users-DlzKsLQe.js} +2 -2
  48. package/dist/route-resolution-foWW8_D1.js +268 -0
  49. package/dist/runtime-api.actions.js +2 -2
  50. package/dist/runtime-api.js +25 -25
  51. package/dist/runtime-api.lookup.js +6 -6
  52. package/dist/runtime-api.monitor-CsetE9pd.js +6 -0
  53. package/dist/runtime-api.monitor.js +7 -7
  54. package/dist/runtime-api.send.js +5 -5
  55. package/dist/runtime-api.threads.js +5 -5
  56. package/dist/{runtime-D8alY00g.js → runtime-oXRGbcb5.js} +7 -7
  57. package/dist/runtime-setter-api.js +1 -1
  58. package/dist/secret-contract-api.js +1 -1
  59. package/dist/{security-audit-BtRd_VhN.js → security-audit-BQ_sGK3J.js} +1 -1
  60. package/dist/security-audit-contract-api.js +1 -1
  61. package/dist/{security-audit.runtime-Dm1LW9KX.js → security-audit.runtime-B7Gmz2DX.js} +1 -1
  62. package/dist/security-contract-api.js +1 -1
  63. package/dist/{send-8S_HKJpQ.js → send-BSBMchf8.js} +83 -57
  64. package/dist/{send.components-A42c_5tQ.js → send.components-BoEhxys4.js} +22 -15
  65. package/dist/{send.outbound-D3tonSz8.js → send.outbound-B2DK2loZ.js} +22 -11
  66. package/dist/send.receipt-BAZw2Zsz.js +35 -0
  67. package/dist/{send.shared-BQGiUPvZ.js → send.shared-DzwpAEMP.js} +26 -7
  68. package/dist/session-key-api.js +1 -1
  69. package/dist/setup-plugin-api.js +1 -1
  70. package/dist/{shared-BEW4H3bj.js → shared-CBsrEG5q.js} +8 -8
  71. package/dist/{shared-interactive-KgJjCqnB.js → shared-interactive-D39V9Wtn.js} +3 -3
  72. package/dist/{subagent-hooks-T0LPLh4H.js → subagent-hooks-BDy1pJD5.js} +2 -2
  73. package/dist/subagent-hooks-api.js +1 -1
  74. package/dist/{system-events-_fzSG--3.js → system-events-BeVImqnV.js} +1 -1
  75. package/dist/target-parsing-D-H7nnh2.js +51 -0
  76. package/dist/target-resolver-DzOelJEt.js +85 -0
  77. package/dist/targets-Dj-qyUaE.js +3 -0
  78. package/dist/test-api.js +4 -4
  79. package/dist/{thread-bindings-CMpZjP50.js → thread-bindings-DUzBL8jL.js} +7 -7
  80. package/dist/{thread-bindings.discord-api-CwWGoyei.js → thread-bindings.discord-api-dpSDYFKX.js} +7 -7
  81. package/dist/{thread-bindings.manager-BtxfLfWf.js → thread-bindings.manager-DTuwm8Tk.js} +5 -6
  82. package/dist/{thread-bindings.session-updates-jcZSiRPI.js → thread-bindings.session-updates-BhcGQTJb.js} +1 -1
  83. package/dist/{threading-BMmpA2JR.js → threading-CTUnZtNi.js} +4 -5
  84. package/dist/timeouts.js +1 -1
  85. package/dist/{typing-Bw6NKWLZ.js → typing-BYeVSviE.js} +2 -3
  86. package/openclaw.plugin.json +222 -1
  87. package/package.json +5 -5
  88. package/dist/manager.runtime-Cug1PoeZ.js +0 -1025
  89. package/dist/provider.runtime-B68g3qLv.js +0 -2
  90. package/dist/rolldown-runtime-C3SqQTfK.js +0 -28
  91. package/dist/route-resolution-BWErj5Cn.js +0 -236
  92. package/dist/runtime-api.monitor-DzkCxeBL.js +0 -6
  93. package/dist/target-resolver-DA84_xbt.js +0 -365
  94. package/dist/targets-FwL1BPTU.js +0 -2
  95. /package/dist/{agent-components.runtime-Dof1YMSz.js → agent-components.runtime-zT8qPsnM.js} +0 -0
  96. /package/dist/{audit-core-CejGc3hO.js → audit-core-CG37TsZm.js} +0 -0
  97. /package/dist/{channel-access-DFIQqbYm.js → channel-access-BL-wemES.js} +0 -0
  98. /package/dist/{doctor-shared-Cqvfgv9m.js → doctor-shared-D_QLzu30.js} +0 -0
  99. /package/dist/{mentions-BPZUaFk7.js → mentions-f806C7MB.js} +0 -0
  100. /package/dist/{preflight-audio.runtime-DPVbpZid.js → preflight-audio.runtime-fXnUxxBa.js} +0 -0
  101. /package/dist/{probe-E80IMT1X.js → probe-CjO53qsc.js} +0 -0
  102. /package/dist/{runtime-K9RT6Egn.js → runtime-BqCoo-zp.js} +0 -0
  103. /package/dist/{secret-config-contract-5S9U9pjx.js → secret-config-contract-BCQNNS7N.js} +0 -0
  104. /package/dist/{security-contract-BE8rsdPq.js → security-contract-DrbQqyyW.js} +0 -0
  105. /package/dist/{security-doctor-DiilN216.js → security-doctor-BJH5YIGL.js} +0 -0
  106. /package/dist/{sender-identity-BGUfyvOC.js → sender-identity-CDOVm5Dk.js} +0 -0
  107. /package/dist/{session-contract-CuW9Nlxg.js → session-contract-D871HDFG.js} +0 -0
  108. /package/dist/{session-key-normalization-B5La-jFM.js → session-key-normalization-BQNCS1gu.js} +0 -0
  109. /package/dist/{thread-bindings.state-WU4duXKY.js → thread-bindings.state-DwgDYzBM.js} +0 -0
  110. /package/dist/{timeouts-CdsmBWWs.js → timeouts-C3FYXWJX.js} +0 -0
@@ -1,6 +1,6 @@
1
- import { a as reconcileAcpThreadBindingsOnStartup } from "./thread-bindings-CMpZjP50.js";
2
- import { n as createNoopThreadBindingManager, r as createThreadBindingManager } from "./thread-bindings.manager-BtxfLfWf.js";
3
- import { t as createDiscordMessageHandler } from "./message-handler-C9Ohf-ea.js";
1
+ import { a as reconcileAcpThreadBindingsOnStartup } from "./thread-bindings-DUzBL8jL.js";
2
+ import { n as createNoopThreadBindingManager, r as createThreadBindingManager } from "./thread-bindings.manager-DTuwm8Tk.js";
3
+ import { t as createDiscordMessageHandler } from "./message-handler-BWHSteQf.js";
4
4
  import { resolveThreadBindingIdleTimeoutMs, resolveThreadBindingMaxAgeMs, resolveThreadBindingsEnabled } from "openclaw/plugin-sdk/conversation-runtime";
5
5
  import { getAcpSessionManager, isAcpRuntimeError } from "openclaw/plugin-sdk/acp-runtime";
6
6
  export { createDiscordMessageHandler, createNoopThreadBindingManager, createThreadBindingManager, getAcpSessionManager, isAcpRuntimeError, reconcileAcpThreadBindingsOnStartup, resolveThreadBindingIdleTimeoutMs, resolveThreadBindingMaxAgeMs, resolveThreadBindingsEnabled };
@@ -0,0 +1,2 @@
1
+ import { t as monitorDiscordProvider } from "./provider-DBvvDP9A.js";
2
+ export { monitorDiscordProvider };
@@ -1,10 +1,11 @@
1
1
  import { i as resolveTimestampMs } from "./format-D8TsaXxW.js";
2
- import { s as sendVoiceMessageDiscord } from "./send-8S_HKJpQ.js";
3
- import { t as sendMessageDiscord } from "./send.outbound-D3tonSz8.js";
4
- import { t as resolveDiscordSenderIdentity } from "./sender-identity-BGUfyvOC.js";
2
+ import { s as sendVoiceMessageDiscord } from "./send-BSBMchf8.js";
3
+ import { t as sendMessageDiscord } from "./send.outbound-B2DK2loZ.js";
4
+ import { t as resolveDiscordSenderIdentity } from "./sender-identity-CDOVm5Dk.js";
5
5
  import { normalizeOptionalString, sanitizeAssistantVisibleText } from "openclaw/plugin-sdk/text-runtime";
6
6
  import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload";
7
- import { buildOutboundSessionContext, deliverOutboundPayloads } from "openclaw/plugin-sdk/outbound-runtime";
7
+ import { sendDurableMessageBatch } from "openclaw/plugin-sdk/channel-message";
8
+ import { buildOutboundSessionContext } from "openclaw/plugin-sdk/outbound-runtime";
8
9
  import { resolveAgentAvatar } from "openclaw/plugin-sdk/agent-runtime";
9
10
  //#region extensions/discord/src/monitor/reply-context.ts
10
11
  function resolveReplyContext(message, resolveDiscordMessageText) {
@@ -157,7 +158,7 @@ async function deliverDiscordReply(params) {
157
158
  const delivery = resolveDiscordDeliveryOptions(params);
158
159
  const payloads = sanitizeDiscordFrontChannelReplyPayloads(params.replies);
159
160
  if (payloads.length === 0) return;
160
- if ((await deliverOutboundPayloads({
161
+ const send = await sendDurableMessageBatch({
161
162
  cfg: params.cfg,
162
163
  channel: "discord",
163
164
  to: delivery.to,
@@ -180,7 +181,9 @@ async function deliverDiscordReply(params) {
180
181
  agentId: delivery.agentId,
181
182
  requesterAccountId: params.accountId
182
183
  })
183
- })).length === 0) throw new Error(`discord final reply produced no delivered message for ${delivery.to}`);
184
+ });
185
+ if (send.status === "failed" || send.status === "partial_failed") throw send.error;
186
+ if ((send.status === "sent" ? send.results : []).length === 0) throw new Error(`discord final reply produced no delivered message for ${delivery.to}`);
184
187
  }
185
188
  //#endregion
186
189
  export { resolveReplyContext as i, buildDirectLabel as n, buildGuildLabel as r, deliverDiscordReply as t };
@@ -1,6 +1,6 @@
1
1
  import { t as normalizeDiscordToken } from "./token-BZtonk7d.js";
2
2
  import { n as fetchDiscord } from "./api-DzNBVTto.js";
3
- import { a as normalizeDiscordSlug } from "./allow-list-ek-1hMKN.js";
3
+ import { a as normalizeDiscordSlug } from "./allow-list-4wnZg5P9.js";
4
4
  //#region extensions/discord/src/guilds.ts
5
5
  async function listGuilds(token, fetcher) {
6
6
  return (await fetchDiscord("/users/@me/guilds", token, fetcher)).filter((guild) => typeof guild.id === "string" && typeof guild.name === "string").map((guild) => ({
@@ -1,7 +1,7 @@
1
- import { t as __exportAll } from "./rolldown-runtime-C3SqQTfK.js";
1
+ import { Pt as __exportAll } from "./discord-DtHMmZqJ.js";
2
2
  import { n as fetchDiscord, t as DiscordApiError } from "./api-DzNBVTto.js";
3
- import { a as normalizeDiscordSlug } from "./allow-list-ek-1hMKN.js";
4
- import { i as listGuilds, n as filterDiscordGuilds, r as resolveDiscordAllowlistToken, t as buildDiscordUnresolvedResults } from "./resolve-allowlist-common-_e1cWOb3.js";
3
+ import { a as normalizeDiscordSlug } from "./allow-list-4wnZg5P9.js";
4
+ import { i as listGuilds, n as filterDiscordGuilds, r as resolveDiscordAllowlistToken, t as buildDiscordUnresolvedResults } from "./resolve-allowlist-common-ZcVU4OMA.js";
5
5
  //#region extensions/discord/src/resolve-channels.ts
6
6
  var resolve_channels_exports = /* @__PURE__ */ __exportAll({ resolveDiscordChannelAllowlist: () => resolveDiscordChannelAllowlist });
7
7
  function parseDiscordChannelInput(raw) {
@@ -1,6 +1,6 @@
1
- import { t as __exportAll } from "./rolldown-runtime-C3SqQTfK.js";
1
+ import { Pt as __exportAll } from "./discord-DtHMmZqJ.js";
2
2
  import { n as fetchDiscord } from "./api-DzNBVTto.js";
3
- import { i as listGuilds, n as filterDiscordGuilds, r as resolveDiscordAllowlistToken, t as buildDiscordUnresolvedResults } from "./resolve-allowlist-common-_e1cWOb3.js";
3
+ import { i as listGuilds, n as filterDiscordGuilds, r as resolveDiscordAllowlistToken, t as buildDiscordUnresolvedResults } from "./resolve-allowlist-common-ZcVU4OMA.js";
4
4
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime";
5
5
  //#region extensions/discord/src/resolve-users.ts
6
6
  var resolve_users_exports = /* @__PURE__ */ __exportAll({ resolveDiscordUserAllowlist: () => resolveDiscordUserAllowlist });
@@ -0,0 +1,268 @@
1
+ import { w as canViewDiscordGuildChannel } from "./send.shared-DzwpAEMP.js";
2
+ import { r as normalizeDiscordAllowList } from "./allow-list-4wnZg5P9.js";
3
+ import { deriveLastRoutePolicy, isAcpSessionKey, isSubagentSessionKey, parseAgentSessionKey, resolveAgentIdFromSessionKey, resolveAgentRoute } from "openclaw/plugin-sdk/routing";
4
+ import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
5
+ import { createChannelPairingChallengeIssuer } from "openclaw/plugin-sdk/channel-pairing";
6
+ import { upsertChannelPairingRequest } from "openclaw/plugin-sdk/conversation-runtime";
7
+ import { createChannelIngressResolver, defineStableChannelIngressIdentity } from "openclaw/plugin-sdk/channel-ingress-runtime";
8
+ //#region extensions/discord/src/monitor/dm-command-auth.ts
9
+ const DISCORD_ALLOW_LIST_PREFIXES = [
10
+ "discord:",
11
+ "user:",
12
+ "pk:"
13
+ ];
14
+ const DISCORD_CHANNEL_ID = "discord";
15
+ const DISCORD_USER_ID_KIND = "stable-id";
16
+ const DISCORD_USER_NAME_KIND = "username";
17
+ function normalizeDiscordIdEntry(entry) {
18
+ const text = entry.trim();
19
+ if (!text) return null;
20
+ const maybeId = text.replace(/^<@!?/, "").replace(/>$/, "");
21
+ if (/^\d+$/.test(maybeId)) return maybeId;
22
+ const prefix = DISCORD_ALLOW_LIST_PREFIXES.find((entryPrefix) => text.startsWith(entryPrefix));
23
+ if (prefix) return text.slice(prefix.length).trim() || null;
24
+ return null;
25
+ }
26
+ function normalizeDiscordNameEntry(entry) {
27
+ const text = entry.trim();
28
+ if (!text || text === "*" || normalizeDiscordIdEntry(text)) return null;
29
+ const nameSlug = normalizeDiscordAllowList([text], DISCORD_ALLOW_LIST_PREFIXES)?.names.values().next().value;
30
+ return typeof nameSlug === "string" && nameSlug ? nameSlug : null;
31
+ }
32
+ function normalizeDiscordNameSubject(value) {
33
+ const nameSlug = normalizeDiscordAllowList([value], DISCORD_ALLOW_LIST_PREFIXES)?.names.values().next().value;
34
+ return typeof nameSlug === "string" && nameSlug ? nameSlug : null;
35
+ }
36
+ const discordIngressIdentity = defineStableChannelIngressIdentity({
37
+ key: "discordUserId",
38
+ kind: DISCORD_USER_ID_KIND,
39
+ normalizeEntry: normalizeDiscordIdEntry,
40
+ normalizeSubject: (value) => value.trim() || null,
41
+ sensitivity: "pii",
42
+ aliases: [["discordUserName", normalizeDiscordNameEntry], ["discordUserTag", () => null]].map(([key, normalizeEntry]) => ({
43
+ key,
44
+ kind: DISCORD_USER_NAME_KIND,
45
+ normalizeEntry,
46
+ normalizeSubject: normalizeDiscordNameSubject,
47
+ dangerous: true,
48
+ sensitivity: "pii"
49
+ }))
50
+ });
51
+ function createDiscordDmIngressSubject(sender) {
52
+ return {
53
+ stableId: sender.id,
54
+ aliases: {
55
+ discordUserName: sender.name,
56
+ discordUserTag: sender.tag
57
+ }
58
+ };
59
+ }
60
+ function createDiscordDynamicAccessGroupResolver(params) {
61
+ if (!params.cfg) return;
62
+ const cfg = params.cfg;
63
+ return async ({ name, group, accountId, subject }) => {
64
+ if (group.type !== "discord.channelAudience") return false;
65
+ const senderId = String(subject.stableId ?? "").trim();
66
+ if (!senderId) return false;
67
+ if ((group.membership ?? "canViewChannel") !== "canViewChannel") return false;
68
+ try {
69
+ return await canViewDiscordGuildChannel(group.guildId, group.channelId, senderId, {
70
+ cfg,
71
+ accountId,
72
+ token: params.token,
73
+ rest: params.rest
74
+ });
75
+ } catch (err) {
76
+ logVerbose(`discord: accessGroup:${name} lookup failed for user ${senderId}: ${String(err)}`);
77
+ throw err;
78
+ }
79
+ };
80
+ }
81
+ function createDiscordIngressResolver(params) {
82
+ return createChannelIngressResolver({
83
+ channelId: DISCORD_CHANNEL_ID,
84
+ accountId: params.accountId,
85
+ identity: discordIngressIdentity,
86
+ cfg: params.cfg,
87
+ resolveAccessGroupMembership: createDiscordDynamicAccessGroupResolver({
88
+ cfg: params.cfg,
89
+ token: params.token,
90
+ rest: params.rest
91
+ }),
92
+ ...params.readStoreAllowFrom ? { readStoreAllowFrom: params.readStoreAllowFrom } : {},
93
+ ...params.useDefaultPairingStore !== void 0 ? { useDefaultPairingStore: params.useDefaultPairingStore } : {}
94
+ });
95
+ }
96
+ function syntheticAccessGroupMembership(groupName, allowed) {
97
+ return allowed ? {
98
+ kind: "matched",
99
+ groupName,
100
+ source: "dynamic",
101
+ matchedEntryIds: [groupName]
102
+ } : {
103
+ kind: "not-matched",
104
+ groupName,
105
+ source: "dynamic"
106
+ };
107
+ }
108
+ async function resolveDiscordDmCommandAccess(params) {
109
+ return await createDiscordIngressResolver({
110
+ accountId: params.accountId,
111
+ cfg: params.cfg,
112
+ token: params.token,
113
+ rest: params.rest,
114
+ readStoreAllowFrom: params.readStoreAllowFrom,
115
+ useDefaultPairingStore: params.readStoreAllowFrom == null
116
+ }).message({
117
+ subject: createDiscordDmIngressSubject(params.sender),
118
+ conversation: {
119
+ kind: "direct",
120
+ id: params.sender.id
121
+ },
122
+ event: {
123
+ kind: params.eventKind ?? "native-command",
124
+ authMode: "inbound",
125
+ mayPair: true
126
+ },
127
+ dmPolicy: params.dmPolicy,
128
+ groupPolicy: "disabled",
129
+ policy: { mutableIdentifierMatching: params.allowNameMatching ? "enabled" : "disabled" },
130
+ allowFrom: params.configuredAllowFrom,
131
+ command: {
132
+ hasControlCommand: false,
133
+ modeWhenAccessGroupsOff: "configured"
134
+ }
135
+ });
136
+ }
137
+ async function resolveDiscordTextCommandAccess(params) {
138
+ const ownerAllowFrom = (params.ownerAllowFrom ?? []).filter((entry) => entry.trim() !== "*");
139
+ const memberAccessGroup = "discord-member-access";
140
+ const commandGroup = params.memberAccessConfigured ? [`accessGroup:${memberAccessGroup}`] : [];
141
+ const accessGroupMembership = params.memberAccessConfigured ? [syntheticAccessGroupMembership(memberAccessGroup, params.memberAllowed)] : [];
142
+ return (await createDiscordIngressResolver({
143
+ accountId: params.accountId,
144
+ cfg: params.cfg,
145
+ token: params.token,
146
+ rest: params.rest
147
+ }).command({
148
+ subject: createDiscordDmIngressSubject(params.sender),
149
+ conversation: {
150
+ kind: "group",
151
+ id: "discord-command"
152
+ },
153
+ accessGroupMembership,
154
+ dmPolicy: "allowlist",
155
+ groupPolicy: "allowlist",
156
+ policy: { mutableIdentifierMatching: params.allowNameMatching ? "enabled" : "disabled" },
157
+ allowFrom: ownerAllowFrom,
158
+ groupAllowFrom: commandGroup,
159
+ command: {
160
+ allowTextCommands: params.allowTextCommands,
161
+ hasControlCommand: params.hasControlCommand,
162
+ modeWhenAccessGroupsOff: "configured"
163
+ }
164
+ })).commandAccess;
165
+ }
166
+ //#endregion
167
+ //#region extensions/discord/src/monitor/dm-command-decision.ts
168
+ async function handleDiscordDmCommandDecision(params) {
169
+ if (params.senderAccess.decision === "allow") return true;
170
+ if (params.senderAccess.decision === "pairing") {
171
+ const upsertPairingRequest = params.upsertPairingRequest ?? upsertChannelPairingRequest;
172
+ const result = await createChannelPairingChallengeIssuer({
173
+ channel: "discord",
174
+ upsertPairingRequest: async ({ id, meta }) => await upsertPairingRequest({
175
+ channel: "discord",
176
+ id,
177
+ accountId: params.accountId,
178
+ meta
179
+ })
180
+ })({
181
+ senderId: params.sender.id,
182
+ senderIdLine: `Your Discord user id: ${params.sender.id}`,
183
+ meta: {
184
+ tag: params.sender.tag,
185
+ name: params.sender.name
186
+ },
187
+ sendPairingReply: async () => {}
188
+ });
189
+ if (result.created && result.code) await params.onPairingCreated(result.code);
190
+ return false;
191
+ }
192
+ await params.onUnauthorized();
193
+ return false;
194
+ }
195
+ //#endregion
196
+ //#region extensions/discord/src/monitor/route-resolution.ts
197
+ function buildDiscordRoutePeer(params) {
198
+ return {
199
+ kind: params.isDirectMessage ? "direct" : params.isGroupDm ? "group" : "channel",
200
+ id: params.isDirectMessage ? params.directUserId?.trim() || params.conversationId : params.conversationId
201
+ };
202
+ }
203
+ function resolveDiscordConversationRoute(params) {
204
+ return resolveAgentRoute({
205
+ cfg: params.cfg,
206
+ channel: "discord",
207
+ accountId: params.accountId,
208
+ guildId: params.guildId ?? void 0,
209
+ memberRoleIds: params.memberRoleIds,
210
+ peer: params.peer,
211
+ parentPeer: params.parentConversationId ? {
212
+ kind: "channel",
213
+ id: params.parentConversationId
214
+ } : void 0
215
+ });
216
+ }
217
+ function resolveDiscordBoundConversationRoute(params) {
218
+ return resolveDiscordEffectiveRoute({
219
+ route: resolveDiscordConversationRoute({
220
+ cfg: params.cfg,
221
+ accountId: params.accountId,
222
+ guildId: params.guildId,
223
+ memberRoleIds: params.memberRoleIds,
224
+ peer: buildDiscordRoutePeer({
225
+ isDirectMessage: params.isDirectMessage,
226
+ isGroupDm: params.isGroupDm,
227
+ directUserId: params.directUserId,
228
+ conversationId: params.conversationId
229
+ }),
230
+ parentConversationId: params.parentConversationId
231
+ }),
232
+ boundSessionKey: params.boundSessionKey,
233
+ configuredRoute: params.configuredRoute,
234
+ matchedBy: params.matchedBy
235
+ });
236
+ }
237
+ function resolveDiscordEffectiveRoute(params) {
238
+ const boundSessionKey = params.boundSessionKey?.trim();
239
+ if (!boundSessionKey) return params.configuredRoute?.route ?? params.route;
240
+ return {
241
+ ...params.route,
242
+ sessionKey: boundSessionKey,
243
+ agentId: resolveAgentIdFromSessionKey(boundSessionKey),
244
+ lastRoutePolicy: deriveLastRoutePolicy({
245
+ sessionKey: boundSessionKey,
246
+ mainSessionKey: params.route.mainSessionKey
247
+ }),
248
+ ...params.matchedBy ? { matchedBy: params.matchedBy } : {}
249
+ };
250
+ }
251
+ function hasExplicitRuntimeBindingIntent(record) {
252
+ if (record.targetKind === "subagent") return true;
253
+ if (isAcpSessionKey(record.targetSessionKey) || isSubagentSessionKey(record.targetSessionKey)) return true;
254
+ const metadata = record.metadata;
255
+ if (!metadata || typeof metadata !== "object") return false;
256
+ return typeof metadata.boundBy === "string" || typeof metadata.label === "string" || typeof metadata.threadName === "string" || metadata.pluginBindingOwner === "plugin";
257
+ }
258
+ function shouldIgnoreStaleDiscordRouteBinding(params) {
259
+ const bindingRecord = params.bindingRecord;
260
+ const boundSessionKey = bindingRecord?.targetSessionKey?.trim();
261
+ if (!bindingRecord || !boundSessionKey || hasExplicitRuntimeBindingIntent(bindingRecord)) return false;
262
+ const bound = parseAgentSessionKey(boundSessionKey);
263
+ const routed = parseAgentSessionKey(params.route.sessionKey);
264
+ if (!bound || !routed || bound.rest !== routed.rest) return false;
265
+ return bound.agentId !== params.route.agentId;
266
+ }
267
+ //#endregion
268
+ export { shouldIgnoreStaleDiscordRouteBinding as a, resolveDiscordTextCommandAccess as c, resolveDiscordEffectiveRoute as i, resolveDiscordBoundConversationRoute as n, handleDiscordDmCommandDecision as o, resolveDiscordConversationRoute as r, resolveDiscordDmCommandAccess as s, buildDiscordRoutePeer as t };
@@ -1,3 +1,3 @@
1
- import { a as readDiscordChannelCreateParams, c as readDiscordParentIdParam, i as requiredGuildPermissionForModerationAction, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-D8alY00g.js";
2
- import { t as discordMessageActions } from "./channel-actions-Br29_1nE.js";
1
+ import { a as readDiscordChannelCreateParams, c as readDiscordParentIdParam, i as requiredGuildPermissionForModerationAction, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-oXRGbcb5.js";
2
+ import { t as discordMessageActions } from "./channel-actions-CHgoSpPF.js";
3
3
  export { discordMessageActions, handleDiscordAction, isDiscordModerationAction, readDiscordChannelCreateParams, readDiscordChannelEditParams, readDiscordChannelMoveParams, readDiscordModerationCommand, readDiscordParentIdParam, requiredGuildPermissionForModerationAction };
@@ -1,31 +1,31 @@
1
- import { t as resolveDiscordOutboundSessionRoute } from "./outbound-session-route-DK9qkPgP.js";
2
- import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./send.components-A42c_5tQ.js";
1
+ import { t as resolveDiscordOutboundSessionRoute } from "./outbound-session-route-BaJRt05p.js";
2
+ import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./send.components-BoEhxys4.js";
3
3
  import { a as clearPresences, c as setPresence, i as unregisterGateway, n as getGateway, o as getPresence, r as registerGateway, s as presenceCacheSize, t as clearGateways } from "./gateway-registry-BKG4KIVC.js";
4
- import { C as DiscordSendError, D as hasAllGuildPermissionsDiscord, E as fetchMemberGuildPermissionsDiscord, O as hasAnyGuildPermissionDiscord, T as fetchChannelPermissionsDiscord } from "./send.shared-BQGiUPvZ.js";
5
- import { _ as resolveGroupDmAllow, a as normalizeDiscordSlug, c as resolveDiscordChannelConfigWithFallback, d as resolveDiscordGuildEntry, g as resolveDiscordShouldRequireMention, n as isDiscordGroupAllowedByPolicy, r as normalizeDiscordAllowList, s as resolveDiscordChannelConfig, t as allowListMatches, u as resolveDiscordCommandAuthorized, v as shouldEmitDiscordReactionNotification } from "./allow-list-ek-1hMKN.js";
6
- import { n as listDiscordDirectoryGroupsLive, r as listDiscordDirectoryPeersLive } from "./directory-live-DJ0V5asB.js";
7
- import { A as removeRoleDiscord, B as removeChannelPermissionDiscord, C as fetchChannelInfoDiscord, D as kickMemberDiscord, E as fetchVoiceStatusDiscord, F as uploadStickerDiscord, I as createChannelDiscord, L as deleteChannelDiscord, M as timeoutMemberDiscord, N as listGuildEmojisDiscord, O as listGuildChannelsDiscord, P as uploadEmojiDiscord, R as editChannelDiscord, S as createScheduledEventDiscord, T as fetchRoleInfoDiscord, V as setChannelPermissionDiscord, _ as readMessagesDiscord, a as removeReactionDiscord, b as addRoleDiscord, c as sendWebhookMessageDiscord, d as deleteMessageDiscord, f as editMessageDiscord, g as pinMessageDiscord, h as listThreadsDiscord, i as removeOwnReactionsDiscord, j as resolveEventCoverImage, k as listScheduledEventsDiscord, m as listPinsDiscord, n as fetchReactionsDiscord, o as sendTypingDiscord, p as fetchMessageDiscord, r as reactMessageDiscord, s as sendVoiceMessageDiscord, u as createThreadDiscord, v as searchMessagesDiscord, w as fetchMemberInfoDiscord, x as banMemberDiscord, y as unpinMessageDiscord, z as moveChannelDiscord } from "./send-8S_HKJpQ.js";
8
- import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-D3tonSz8.js";
9
- import { a as readDiscordChannelCreateParams, c as readDiscordParentIdParam, i as requiredGuildPermissionForModerationAction, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-D8alY00g.js";
10
- import { r as setDiscordRuntime } from "./runtime-K9RT6Egn.js";
11
- import { t as discordMessageActions } from "./channel-actions-Br29_1nE.js";
12
- import { C as resolveThreadBindingMaxAgeMs, S as resolveThreadBindingMaxAgeExpiresAt, b as resolveThreadBindingIdleTimeoutMs, l as isRecentlyUnboundThreadWebhookMessage, x as resolveThreadBindingInactivityExpiresAt } from "./thread-bindings.state-WU4duXKY.js";
13
- import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-jcZSiRPI.js";
14
- import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-kyuvrXJg.js";
15
- import { t as resolveDiscordUserAllowlist } from "./resolve-users-CAwh4EBq.js";
16
- import { d as formatThreadBindingDurationLabel, l as resolveThreadBindingPersona, m as resolveThreadBindingThreadName, p as resolveThreadBindingIntroText, u as resolveThreadBindingPersonaFromRecord } from "./thread-bindings.discord-api-CwWGoyei.js";
17
- import { a as reconcileAcpThreadBindingsOnStartup, c as resolveDiscordThreadBindingMaxAgeMs, i as listThreadBindingsForAccount, l as resolveThreadBindingsEnabled, n as autoBindSpawnedDiscordSubagent, o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey, s as resolveDiscordThreadBindingIdleTimeoutMs } from "./thread-bindings-CMpZjP50.js";
18
- import { i as getThreadBindingManager, n as createNoopThreadBindingManager, r as createThreadBindingManager, t as __testing } from "./thread-bindings.manager-BtxfLfWf.js";
19
- import { a as resolveDiscordPrivilegedIntentsFromFlags, i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, t as fetchDiscordApplicationId } from "./probe-E80IMT1X.js";
20
- import { a as mergeAbortSignals, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, r as DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./timeouts-CdsmBWWs.js";
4
+ import { C as DiscordSendError, D as hasAllGuildPermissionsDiscord, E as fetchMemberGuildPermissionsDiscord, O as hasAnyGuildPermissionDiscord, T as fetchChannelPermissionsDiscord } from "./send.shared-DzwpAEMP.js";
5
+ import { _ as resolveGroupDmAllow, a as normalizeDiscordSlug, c as resolveDiscordChannelConfigWithFallback, d as resolveDiscordGuildEntry, g as resolveDiscordShouldRequireMention, n as isDiscordGroupAllowedByPolicy, r as normalizeDiscordAllowList, s as resolveDiscordChannelConfig, t as allowListMatches, u as resolveDiscordCommandAuthorized, v as shouldEmitDiscordReactionNotification } from "./allow-list-4wnZg5P9.js";
6
+ import { n as listDiscordDirectoryGroupsLive, r as listDiscordDirectoryPeersLive } from "./directory-live-B4kW11z5.js";
7
+ import { A as removeRoleDiscord, B as removeChannelPermissionDiscord, C as fetchChannelInfoDiscord, D as kickMemberDiscord, E as fetchVoiceStatusDiscord, F as uploadStickerDiscord, I as createChannelDiscord, L as deleteChannelDiscord, M as timeoutMemberDiscord, N as listGuildEmojisDiscord, O as listGuildChannelsDiscord, P as uploadEmojiDiscord, R as editChannelDiscord, S as createScheduledEventDiscord, T as fetchRoleInfoDiscord, V as setChannelPermissionDiscord, _ as readMessagesDiscord, a as removeReactionDiscord, b as addRoleDiscord, c as sendWebhookMessageDiscord, d as deleteMessageDiscord, f as editMessageDiscord, g as pinMessageDiscord, h as listThreadsDiscord, i as removeOwnReactionsDiscord, j as resolveEventCoverImage, k as listScheduledEventsDiscord, m as listPinsDiscord, n as fetchReactionsDiscord, o as sendTypingDiscord, p as fetchMessageDiscord, r as reactMessageDiscord, s as sendVoiceMessageDiscord, u as createThreadDiscord, v as searchMessagesDiscord, w as fetchMemberInfoDiscord, x as banMemberDiscord, y as unpinMessageDiscord, z as moveChannelDiscord } from "./send-BSBMchf8.js";
8
+ import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-B2DK2loZ.js";
9
+ import { a as readDiscordChannelCreateParams, c as readDiscordParentIdParam, i as requiredGuildPermissionForModerationAction, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-oXRGbcb5.js";
10
+ import { r as setDiscordRuntime } from "./runtime-BqCoo-zp.js";
11
+ import { t as discordMessageActions } from "./channel-actions-CHgoSpPF.js";
12
+ import { C as resolveThreadBindingMaxAgeMs, S as resolveThreadBindingMaxAgeExpiresAt, b as resolveThreadBindingIdleTimeoutMs, l as isRecentlyUnboundThreadWebhookMessage, x as resolveThreadBindingInactivityExpiresAt } from "./thread-bindings.state-DwgDYzBM.js";
13
+ import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-BhcGQTJb.js";
14
+ import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-D9Dubj_y.js";
15
+ import { t as resolveDiscordUserAllowlist } from "./resolve-users-DlzKsLQe.js";
16
+ import { d as formatThreadBindingDurationLabel, l as resolveThreadBindingPersona, m as resolveThreadBindingThreadName, p as resolveThreadBindingIntroText, u as resolveThreadBindingPersonaFromRecord } from "./thread-bindings.discord-api-dpSDYFKX.js";
17
+ import { a as reconcileAcpThreadBindingsOnStartup, c as resolveDiscordThreadBindingMaxAgeMs, i as listThreadBindingsForAccount, l as resolveThreadBindingsEnabled, n as autoBindSpawnedDiscordSubagent, o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey, s as resolveDiscordThreadBindingIdleTimeoutMs } from "./thread-bindings-DUzBL8jL.js";
18
+ import { i as getThreadBindingManager, n as createNoopThreadBindingManager, r as createThreadBindingManager, t as __testing } from "./thread-bindings.manager-DTuwm8Tk.js";
19
+ import { a as resolveDiscordPrivilegedIntentsFromFlags, i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, t as fetchDiscordApplicationId } from "./probe-CjO53qsc.js";
20
+ import { a as mergeAbortSignals, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, r as DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./timeouts-C3FYXWJX.js";
21
21
  import "./runtime-api.actions.js";
22
- import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./audit-CCJ0h49k.js";
22
+ import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./audit-BRBe8xFv.js";
23
23
  import "./runtime-api.lookup.js";
24
- import { a as createDiscordNativeCommand, i as waitForDiscordGatewayPluginRegistration, n as createDiscordGatewayPlugin, o as registerDiscordListener, r as resolveDiscordGatewayIntents, t as monitorDiscordProvider } from "./provider-CuOh6z_b.js";
25
- import { i as buildDiscordMediaPayload } from "./message-utils-9kaGF59d.js";
26
- import { o as sanitizeDiscordThreadName, r as resolveDiscordReplyTarget } from "./threading-BMmpA2JR.js";
27
- import { t as createDiscordMessageHandler } from "./message-handler-C9Ohf-ea.js";
28
- import "./runtime-api.monitor-DzkCxeBL.js";
24
+ import { a as createDiscordNativeCommand, i as waitForDiscordGatewayPluginRegistration, n as createDiscordGatewayPlugin, o as registerDiscordListener, r as resolveDiscordGatewayIntents, t as monitorDiscordProvider } from "./provider-DBvvDP9A.js";
25
+ import { i as buildDiscordMediaPayload } from "./message-utils-DEjCwCRz.js";
26
+ import { o as sanitizeDiscordThreadName, r as resolveDiscordReplyTarget } from "./threading-CTUnZtNi.js";
27
+ import { t as createDiscordMessageHandler } from "./message-handler-BWHSteQf.js";
28
+ import "./runtime-api.monitor-CsetE9pd.js";
29
29
  import "./runtime-api.send.js";
30
30
  import "./runtime-api.threads.js";
31
31
  export { DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, DiscordSendError, __testing, addRoleDiscord, allowListMatches, auditDiscordChannelPermissions, autoBindSpawnedDiscordSubagent, banMemberDiscord, buildDiscordMediaPayload, clearGateways, clearPresences, collectDiscordAuditChannelIds, createChannelDiscord, createDiscordGatewayPlugin, createDiscordMessageHandler, createDiscordNativeCommand, createNoopThreadBindingManager, createScheduledEventDiscord, createThreadBindingManager, createThreadDiscord, deleteChannelDiscord, deleteMessageDiscord, discordMessageActions, editChannelDiscord, editDiscordComponentMessage, editMessageDiscord, fetchChannelInfoDiscord, fetchChannelPermissionsDiscord, fetchDiscordApplicationId, fetchDiscordApplicationSummary, fetchMemberGuildPermissionsDiscord, fetchMemberInfoDiscord, fetchMessageDiscord, fetchReactionsDiscord, fetchRoleInfoDiscord, fetchVoiceStatusDiscord, formatThreadBindingDurationLabel, getGateway, getPresence, getThreadBindingManager, handleDiscordAction, hasAllGuildPermissionsDiscord, hasAnyGuildPermissionDiscord, isDiscordGroupAllowedByPolicy, isDiscordModerationAction, isRecentlyUnboundThreadWebhookMessage, kickMemberDiscord, listDiscordDirectoryGroupsLive, listDiscordDirectoryPeersLive, listGuildChannelsDiscord, listGuildEmojisDiscord, listPinsDiscord, listScheduledEventsDiscord, listThreadBindingsBySessionKey, listThreadBindingsForAccount, listThreadsDiscord, mergeAbortSignals, monitorDiscordProvider, moveChannelDiscord, normalizeDiscordAllowList, normalizeDiscordSlug, parseApplicationIdFromToken, pinMessageDiscord, presenceCacheSize, probeDiscord, reactMessageDiscord, readDiscordChannelCreateParams, readDiscordChannelEditParams, readDiscordChannelMoveParams, readDiscordModerationCommand, readDiscordParentIdParam, readMessagesDiscord, reconcileAcpThreadBindingsOnStartup, registerBuiltDiscordComponentMessage, registerDiscordListener, registerGateway, removeChannelPermissionDiscord, removeOwnReactionsDiscord, removeReactionDiscord, removeRoleDiscord, requiredGuildPermissionForModerationAction, resolveDiscordChannelAllowlist, resolveDiscordChannelConfig, resolveDiscordChannelConfigWithFallback, resolveDiscordCommandAuthorized, resolveDiscordGatewayIntents, resolveDiscordGuildEntry, resolveDiscordOutboundSessionRoute, resolveDiscordPrivilegedIntentsFromFlags, resolveDiscordReplyTarget, resolveDiscordShouldRequireMention, resolveDiscordThreadBindingIdleTimeoutMs, resolveDiscordThreadBindingMaxAgeMs, resolveDiscordUserAllowlist, resolveEventCoverImage, resolveGroupDmAllow, resolveThreadBindingIdleTimeoutMs, resolveThreadBindingInactivityExpiresAt, resolveThreadBindingIntroText, resolveThreadBindingMaxAgeExpiresAt, resolveThreadBindingMaxAgeMs, resolveThreadBindingPersona, resolveThreadBindingPersonaFromRecord, resolveThreadBindingThreadName, resolveThreadBindingsEnabled, sanitizeDiscordThreadName, searchMessagesDiscord, sendDiscordComponentMessage, sendMessageDiscord, sendPollDiscord, sendStickerDiscord, sendTypingDiscord, sendVoiceMessageDiscord, sendWebhookMessageDiscord, setChannelPermissionDiscord, setDiscordRuntime, setPresence, setThreadBindingIdleTimeoutBySessionKey, setThreadBindingMaxAgeBySessionKey, shouldEmitDiscordReactionNotification, timeoutMemberDiscord, unbindThreadBindingsBySessionKey, unpinMessageDiscord, unregisterGateway, uploadEmojiDiscord, uploadStickerDiscord, waitForDiscordGatewayPluginRegistration };
@@ -1,7 +1,7 @@
1
- import { n as listDiscordDirectoryGroupsLive, r as listDiscordDirectoryPeersLive } from "./directory-live-DJ0V5asB.js";
2
- import { r as setDiscordRuntime } from "./runtime-K9RT6Egn.js";
3
- import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-kyuvrXJg.js";
4
- import { t as resolveDiscordUserAllowlist } from "./resolve-users-CAwh4EBq.js";
5
- import { a as resolveDiscordPrivilegedIntentsFromFlags, i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, t as fetchDiscordApplicationId } from "./probe-E80IMT1X.js";
6
- import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./audit-CCJ0h49k.js";
1
+ import { n as listDiscordDirectoryGroupsLive, r as listDiscordDirectoryPeersLive } from "./directory-live-B4kW11z5.js";
2
+ import { r as setDiscordRuntime } from "./runtime-BqCoo-zp.js";
3
+ import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-D9Dubj_y.js";
4
+ import { t as resolveDiscordUserAllowlist } from "./resolve-users-DlzKsLQe.js";
5
+ import { a as resolveDiscordPrivilegedIntentsFromFlags, i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, t as fetchDiscordApplicationId } from "./probe-CjO53qsc.js";
6
+ import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./audit-BRBe8xFv.js";
7
7
  export { auditDiscordChannelPermissions, collectDiscordAuditChannelIds, fetchDiscordApplicationId, fetchDiscordApplicationSummary, listDiscordDirectoryGroupsLive, listDiscordDirectoryPeersLive, parseApplicationIdFromToken, probeDiscord, resolveDiscordChannelAllowlist, resolveDiscordPrivilegedIntentsFromFlags, resolveDiscordUserAllowlist, setDiscordRuntime };
@@ -0,0 +1,6 @@
1
+ import "./allow-list-4wnZg5P9.js";
2
+ import "./provider-DBvvDP9A.js";
3
+ import "./message-utils-DEjCwCRz.js";
4
+ import "./threading-CTUnZtNi.js";
5
+ import "./message-handler-BWHSteQf.js";
6
+ export {};
@@ -1,9 +1,9 @@
1
1
  import { a as clearPresences, c as setPresence, i as unregisterGateway, n as getGateway, o as getPresence, r as registerGateway, s as presenceCacheSize, t as clearGateways } from "./gateway-registry-BKG4KIVC.js";
2
- import { _ as resolveGroupDmAllow, a as normalizeDiscordSlug, c as resolveDiscordChannelConfigWithFallback, d as resolveDiscordGuildEntry, g as resolveDiscordShouldRequireMention, n as isDiscordGroupAllowedByPolicy, r as normalizeDiscordAllowList, s as resolveDiscordChannelConfig, t as allowListMatches, u as resolveDiscordCommandAuthorized, v as shouldEmitDiscordReactionNotification } from "./allow-list-ek-1hMKN.js";
3
- import { a as mergeAbortSignals, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, r as DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./timeouts-CdsmBWWs.js";
4
- import { a as createDiscordNativeCommand, i as waitForDiscordGatewayPluginRegistration, n as createDiscordGatewayPlugin, o as registerDiscordListener, r as resolveDiscordGatewayIntents, t as monitorDiscordProvider } from "./provider-CuOh6z_b.js";
5
- import { i as buildDiscordMediaPayload } from "./message-utils-9kaGF59d.js";
6
- import { o as sanitizeDiscordThreadName, r as resolveDiscordReplyTarget } from "./threading-BMmpA2JR.js";
7
- import { t as createDiscordMessageHandler } from "./message-handler-C9Ohf-ea.js";
8
- import "./runtime-api.monitor-DzkCxeBL.js";
2
+ import { _ as resolveGroupDmAllow, a as normalizeDiscordSlug, c as resolveDiscordChannelConfigWithFallback, d as resolveDiscordGuildEntry, g as resolveDiscordShouldRequireMention, n as isDiscordGroupAllowedByPolicy, r as normalizeDiscordAllowList, s as resolveDiscordChannelConfig, t as allowListMatches, u as resolveDiscordCommandAuthorized, v as shouldEmitDiscordReactionNotification } from "./allow-list-4wnZg5P9.js";
3
+ import { a as mergeAbortSignals, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, r as DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./timeouts-C3FYXWJX.js";
4
+ import { a as createDiscordNativeCommand, i as waitForDiscordGatewayPluginRegistration, n as createDiscordGatewayPlugin, o as registerDiscordListener, r as resolveDiscordGatewayIntents, t as monitorDiscordProvider } from "./provider-DBvvDP9A.js";
5
+ import { i as buildDiscordMediaPayload } from "./message-utils-DEjCwCRz.js";
6
+ import { o as sanitizeDiscordThreadName, r as resolveDiscordReplyTarget } from "./threading-CTUnZtNi.js";
7
+ import { t as createDiscordMessageHandler } from "./message-handler-BWHSteQf.js";
8
+ import "./runtime-api.monitor-CsetE9pd.js";
9
9
  export { DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, allowListMatches, buildDiscordMediaPayload, clearGateways, clearPresences, createDiscordGatewayPlugin, createDiscordMessageHandler, createDiscordNativeCommand, getGateway, getPresence, isDiscordGroupAllowedByPolicy, mergeAbortSignals, monitorDiscordProvider, normalizeDiscordAllowList, normalizeDiscordSlug, presenceCacheSize, registerDiscordListener, registerGateway, resolveDiscordChannelConfig, resolveDiscordChannelConfigWithFallback, resolveDiscordCommandAuthorized, resolveDiscordGatewayIntents, resolveDiscordGuildEntry, resolveDiscordReplyTarget, resolveDiscordShouldRequireMention, resolveGroupDmAllow, sanitizeDiscordThreadName, setPresence, shouldEmitDiscordReactionNotification, unregisterGateway, waitForDiscordGatewayPluginRegistration };
@@ -1,6 +1,6 @@
1
- import { t as resolveDiscordOutboundSessionRoute } from "./outbound-session-route-DK9qkPgP.js";
2
- import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./send.components-A42c_5tQ.js";
3
- import { C as DiscordSendError, D as hasAllGuildPermissionsDiscord, E as fetchMemberGuildPermissionsDiscord, O as hasAnyGuildPermissionDiscord, T as fetchChannelPermissionsDiscord } from "./send.shared-BQGiUPvZ.js";
4
- import { A as removeRoleDiscord, B as removeChannelPermissionDiscord, C as fetchChannelInfoDiscord, D as kickMemberDiscord, E as fetchVoiceStatusDiscord, F as uploadStickerDiscord, I as createChannelDiscord, L as deleteChannelDiscord, M as timeoutMemberDiscord, N as listGuildEmojisDiscord, O as listGuildChannelsDiscord, P as uploadEmojiDiscord, R as editChannelDiscord, S as createScheduledEventDiscord, T as fetchRoleInfoDiscord, V as setChannelPermissionDiscord, _ as readMessagesDiscord, a as removeReactionDiscord, b as addRoleDiscord, c as sendWebhookMessageDiscord, d as deleteMessageDiscord, f as editMessageDiscord, g as pinMessageDiscord, h as listThreadsDiscord, i as removeOwnReactionsDiscord, j as resolveEventCoverImage, k as listScheduledEventsDiscord, m as listPinsDiscord, n as fetchReactionsDiscord, o as sendTypingDiscord, p as fetchMessageDiscord, r as reactMessageDiscord, s as sendVoiceMessageDiscord, u as createThreadDiscord, v as searchMessagesDiscord, w as fetchMemberInfoDiscord, x as banMemberDiscord, y as unpinMessageDiscord, z as moveChannelDiscord } from "./send-8S_HKJpQ.js";
5
- import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-D3tonSz8.js";
1
+ import { t as resolveDiscordOutboundSessionRoute } from "./outbound-session-route-BaJRt05p.js";
2
+ import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./send.components-BoEhxys4.js";
3
+ import { C as DiscordSendError, D as hasAllGuildPermissionsDiscord, E as fetchMemberGuildPermissionsDiscord, O as hasAnyGuildPermissionDiscord, T as fetchChannelPermissionsDiscord } from "./send.shared-DzwpAEMP.js";
4
+ import { A as removeRoleDiscord, B as removeChannelPermissionDiscord, C as fetchChannelInfoDiscord, D as kickMemberDiscord, E as fetchVoiceStatusDiscord, F as uploadStickerDiscord, I as createChannelDiscord, L as deleteChannelDiscord, M as timeoutMemberDiscord, N as listGuildEmojisDiscord, O as listGuildChannelsDiscord, P as uploadEmojiDiscord, R as editChannelDiscord, S as createScheduledEventDiscord, T as fetchRoleInfoDiscord, V as setChannelPermissionDiscord, _ as readMessagesDiscord, a as removeReactionDiscord, b as addRoleDiscord, c as sendWebhookMessageDiscord, d as deleteMessageDiscord, f as editMessageDiscord, g as pinMessageDiscord, h as listThreadsDiscord, i as removeOwnReactionsDiscord, j as resolveEventCoverImage, k as listScheduledEventsDiscord, m as listPinsDiscord, n as fetchReactionsDiscord, o as sendTypingDiscord, p as fetchMessageDiscord, r as reactMessageDiscord, s as sendVoiceMessageDiscord, u as createThreadDiscord, v as searchMessagesDiscord, w as fetchMemberInfoDiscord, x as banMemberDiscord, y as unpinMessageDiscord, z as moveChannelDiscord } from "./send-BSBMchf8.js";
5
+ import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-B2DK2loZ.js";
6
6
  export { DiscordSendError, addRoleDiscord, banMemberDiscord, createChannelDiscord, createScheduledEventDiscord, createThreadDiscord, deleteChannelDiscord, deleteMessageDiscord, editChannelDiscord, editDiscordComponentMessage, editMessageDiscord, fetchChannelInfoDiscord, fetchChannelPermissionsDiscord, fetchMemberGuildPermissionsDiscord, fetchMemberInfoDiscord, fetchMessageDiscord, fetchReactionsDiscord, fetchRoleInfoDiscord, fetchVoiceStatusDiscord, hasAllGuildPermissionsDiscord, hasAnyGuildPermissionDiscord, kickMemberDiscord, listGuildChannelsDiscord, listGuildEmojisDiscord, listPinsDiscord, listScheduledEventsDiscord, listThreadsDiscord, moveChannelDiscord, pinMessageDiscord, reactMessageDiscord, readMessagesDiscord, registerBuiltDiscordComponentMessage, removeChannelPermissionDiscord, removeOwnReactionsDiscord, removeReactionDiscord, removeRoleDiscord, resolveDiscordOutboundSessionRoute, resolveEventCoverImage, searchMessagesDiscord, sendDiscordComponentMessage, sendMessageDiscord, sendPollDiscord, sendStickerDiscord, sendTypingDiscord, sendVoiceMessageDiscord, sendWebhookMessageDiscord, setChannelPermissionDiscord, timeoutMemberDiscord, unpinMessageDiscord, uploadEmojiDiscord, uploadStickerDiscord };
@@ -1,6 +1,6 @@
1
- import { C as resolveThreadBindingMaxAgeMs, S as resolveThreadBindingMaxAgeExpiresAt, b as resolveThreadBindingIdleTimeoutMs, l as isRecentlyUnboundThreadWebhookMessage, x as resolveThreadBindingInactivityExpiresAt } from "./thread-bindings.state-WU4duXKY.js";
2
- import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-jcZSiRPI.js";
3
- import { d as formatThreadBindingDurationLabel, l as resolveThreadBindingPersona, m as resolveThreadBindingThreadName, p as resolveThreadBindingIntroText, u as resolveThreadBindingPersonaFromRecord } from "./thread-bindings.discord-api-CwWGoyei.js";
4
- import { a as reconcileAcpThreadBindingsOnStartup, c as resolveDiscordThreadBindingMaxAgeMs, i as listThreadBindingsForAccount, l as resolveThreadBindingsEnabled, n as autoBindSpawnedDiscordSubagent, o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey, s as resolveDiscordThreadBindingIdleTimeoutMs } from "./thread-bindings-CMpZjP50.js";
5
- import { i as getThreadBindingManager, n as createNoopThreadBindingManager, r as createThreadBindingManager, t as __testing } from "./thread-bindings.manager-BtxfLfWf.js";
1
+ import { C as resolveThreadBindingMaxAgeMs, S as resolveThreadBindingMaxAgeExpiresAt, b as resolveThreadBindingIdleTimeoutMs, l as isRecentlyUnboundThreadWebhookMessage, x as resolveThreadBindingInactivityExpiresAt } from "./thread-bindings.state-DwgDYzBM.js";
2
+ import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-BhcGQTJb.js";
3
+ import { d as formatThreadBindingDurationLabel, l as resolveThreadBindingPersona, m as resolveThreadBindingThreadName, p as resolveThreadBindingIntroText, u as resolveThreadBindingPersonaFromRecord } from "./thread-bindings.discord-api-dpSDYFKX.js";
4
+ import { a as reconcileAcpThreadBindingsOnStartup, c as resolveDiscordThreadBindingMaxAgeMs, i as listThreadBindingsForAccount, l as resolveThreadBindingsEnabled, n as autoBindSpawnedDiscordSubagent, o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey, s as resolveDiscordThreadBindingIdleTimeoutMs } from "./thread-bindings-DUzBL8jL.js";
5
+ import { i as getThreadBindingManager, n as createNoopThreadBindingManager, r as createThreadBindingManager, t as __testing } from "./thread-bindings.manager-DTuwm8Tk.js";
6
6
  export { __testing, autoBindSpawnedDiscordSubagent, createNoopThreadBindingManager, createThreadBindingManager, formatThreadBindingDurationLabel, getThreadBindingManager, isRecentlyUnboundThreadWebhookMessage, listThreadBindingsBySessionKey, listThreadBindingsForAccount, reconcileAcpThreadBindingsOnStartup, resolveDiscordThreadBindingIdleTimeoutMs, resolveDiscordThreadBindingMaxAgeMs, resolveThreadBindingIdleTimeoutMs, resolveThreadBindingInactivityExpiresAt, resolveThreadBindingIntroText, resolveThreadBindingMaxAgeExpiresAt, resolveThreadBindingMaxAgeMs, resolveThreadBindingPersona, resolveThreadBindingPersonaFromRecord, resolveThreadBindingThreadName, resolveThreadBindingsEnabled, setThreadBindingIdleTimeoutBySessionKey, setThreadBindingMaxAgeBySessionKey, unbindThreadBindingsBySessionKey };
@@ -1,12 +1,12 @@
1
1
  import { o as resolveDefaultDiscordAccountId, t as createDiscordActionGate } from "./accounts-CaHGiVB4.js";
2
- import { l as resolveDiscordChannelId } from "./target-resolver-DA84_xbt.js";
3
- import { c as jsonResult, d as readNumberParam, f as readReactionParams, g as withNormalizedTimestamp, h as resolvePollMaxSelections, l as parseAvailableTags, m as readStringParam, p as readStringArrayParam, r as sendDiscordComponentMessage, s as assertMediaNotDataUrl, u as readBooleanParam } from "./send.components-A42c_5tQ.js";
2
+ import { n as resolveDiscordChannelId } from "./target-parsing-D-H7nnh2.js";
3
+ import { c as jsonResult, d as readNumberParam, f as readReactionParams, g as withNormalizedTimestamp, h as resolvePollMaxSelections, l as parseAvailableTags, m as readStringParam, p as readStringArrayParam, r as sendDiscordComponentMessage, s as assertMediaNotDataUrl, u as readBooleanParam } from "./send.components-BoEhxys4.js";
4
4
  import { n as getGateway, o as getPresence } from "./gateway-registry-BKG4KIVC.js";
5
- import { M as createDiscordRuntimeAccountContext, O as hasAnyGuildPermissionDiscord, T as fetchChannelPermissionsDiscord, d as resolveDiscordTargetChannelId } from "./send.shared-BQGiUPvZ.js";
6
- import { A as removeRoleDiscord, B as removeChannelPermissionDiscord, C as fetchChannelInfoDiscord, D as kickMemberDiscord, E as fetchVoiceStatusDiscord, F as uploadStickerDiscord, I as createChannelDiscord, L as deleteChannelDiscord, M as timeoutMemberDiscord, N as listGuildEmojisDiscord, O as listGuildChannelsDiscord, P as uploadEmojiDiscord, R as editChannelDiscord, S as createScheduledEventDiscord, T as fetchRoleInfoDiscord, V as setChannelPermissionDiscord, _ 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 resolveEventCoverImage, k as listScheduledEventsDiscord, 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 fetchMemberInfoDiscord, x as banMemberDiscord, y as unpinMessageDiscord, z as moveChannelDiscord } from "./send-8S_HKJpQ.js";
7
- import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-D3tonSz8.js";
8
- import { c as readDiscordComponentSpec } from "./components-D5LnN7ZQ.js";
9
- import "./targets-FwL1BPTU.js";
5
+ import { M as createDiscordRuntimeAccountContext, O as hasAnyGuildPermissionDiscord, T as fetchChannelPermissionsDiscord, d as resolveDiscordTargetChannelId } from "./send.shared-DzwpAEMP.js";
6
+ import { A as removeRoleDiscord, B as removeChannelPermissionDiscord, C as fetchChannelInfoDiscord, D as kickMemberDiscord, E as fetchVoiceStatusDiscord, F as uploadStickerDiscord, I as createChannelDiscord, L as deleteChannelDiscord, M as timeoutMemberDiscord, N as listGuildEmojisDiscord, O as listGuildChannelsDiscord, P as uploadEmojiDiscord, R as editChannelDiscord, S as createScheduledEventDiscord, T as fetchRoleInfoDiscord, V as setChannelPermissionDiscord, _ 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 resolveEventCoverImage, k as listScheduledEventsDiscord, 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 fetchMemberInfoDiscord, x as banMemberDiscord, y as unpinMessageDiscord, z as moveChannelDiscord } from "./send-BSBMchf8.js";
7
+ import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./send.outbound-B2DK2loZ.js";
8
+ import { c as readDiscordComponentSpec } from "./components-BJOShoIU.js";
9
+ import "./targets-Dj-qyUaE.js";
10
10
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/text-runtime";
11
11
  import { PermissionFlagsBits } from "discord-api-types/v10";
12
12
  //#region extensions/discord/src/actions/runtime.shared.ts
@@ -1,2 +1,2 @@
1
- import { r as setDiscordRuntime } from "./runtime-K9RT6Egn.js";
1
+ import { r as setDiscordRuntime } from "./runtime-BqCoo-zp.js";
2
2
  export { setDiscordRuntime };
@@ -1,2 +1,2 @@
1
- import { n as secretTargetRegistryEntries, t as collectRuntimeConfigAssignments } from "./secret-config-contract-5S9U9pjx.js";
1
+ import { n as secretTargetRegistryEntries, t as collectRuntimeConfigAssignments } from "./secret-config-contract-BCQNNS7N.js";
2
2
  export { collectRuntimeConfigAssignments, secretTargetRegistryEntries };
@@ -1,4 +1,4 @@
1
- import { t as isDiscordMutableAllowEntry } from "./security-doctor-DiilN216.js";
1
+ import { t as isDiscordMutableAllowEntry } from "./security-doctor-BJH5YIGL.js";
2
2
  import { coerceNativeSetting, normalizeAllowFromList } from "openclaw/plugin-sdk/channel-policy";
3
3
  import { readChannelAllowFromStore } from "openclaw/plugin-sdk/conversation-runtime";
4
4
  import { isDangerousNameMatchingEnabled } from "openclaw/plugin-sdk/dangerous-name-runtime";
@@ -1,2 +1,2 @@
1
- import { t as collectDiscordSecurityAuditFindings } from "./security-audit-BtRd_VhN.js";
1
+ import { t as collectDiscordSecurityAuditFindings } from "./security-audit-BQ_sGK3J.js";
2
2
  export { collectDiscordSecurityAuditFindings };
@@ -1,2 +1,2 @@
1
- import { t as collectDiscordSecurityAuditFindings } from "./security-audit-BtRd_VhN.js";
1
+ import { t as collectDiscordSecurityAuditFindings } from "./security-audit-BQ_sGK3J.js";
2
2
  export { collectDiscordSecurityAuditFindings };
@@ -1,2 +1,2 @@
1
- import { n as unsupportedSecretRefSurfacePatterns, t as collectUnsupportedSecretRefConfigCandidates } from "./security-contract-BE8rsdPq.js";
1
+ import { n as unsupportedSecretRefSurfacePatterns, t as collectUnsupportedSecretRefConfigCandidates } from "./security-contract-DrbQqyyW.js";
2
2
  export { collectUnsupportedSecretRefConfigCandidates, unsupportedSecretRefSurfacePatterns };