@openclaw/discord 2026.10.1-beta.2 → 2026.10.2
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.
- package/dist/.setup/{account-inspect-CjKqkDnH.mjs → account-inspect-DsER5ILV.mjs} +2 -2
- package/dist/.setup/{channel-type-D1_b5UhU.mjs → allow-list-vxkG9_JD.mjs} +6 -6
- package/dist/.setup/{api-_oznjffB.mjs → api-DlNUkDqj.mjs} +3 -3
- package/dist/.setup/{approval-handler.runtime-BilYSrRF.mjs → approval-handler.runtime-DmnEa54W.mjs} +8 -8
- package/dist/.setup/{approval-message-updates-CgRwc2_Q.mjs → approval-message-updates-B0jdSqOj.mjs} +2 -2
- package/dist/.setup/{audit-DtvzxONM.mjs → audit-BpikUwN_.mjs} +4 -4
- package/dist/.setup/{channel-z5lQMS_9.mjs → channel-Dr-AUnGt.mjs} +23 -23
- package/dist/.setup/{channel.setup-DBJtugJO.mjs → channel.setup-BmNvkidb.mjs} +5 -5
- package/dist/.setup/{components-CzXLR3QH.mjs → components-DLJR0xU-.mjs} +2 -2
- package/dist/.setup/{conversation-binding-route-Bi62ApSt.mjs → conversation-binding-route-DicJC1Lj.mjs} +1 -1
- package/dist/.setup/{directory-config-BH1LA-gi.mjs → directory-config-gqsdcplU.mjs} +1 -1
- package/dist/.setup/{directory-live-C9xz7IPm.mjs → directory-live-Bipr0eUJ.mjs} +3 -3
- package/dist/.setup/{discord-J7aRzq2Q.mjs → discord-9gysrhzp.mjs} +10 -10
- package/dist/.setup/{doctor-DxSAngJq.mjs → doctor-B2bskDcF.mjs} +4 -4
- package/dist/.setup/{handle-action-DlmFX-_G.mjs → handle-action-UmkjXBfo.mjs} +8 -8
- package/dist/.setup/{handle-action.guild-admin-BnyqTczR.mjs → handle-action.guild-admin-CB4sc9VV.mjs} +2 -2
- package/dist/.setup/{live-policy-config-emmPNyh4.mjs → live-policy-config-VxexfRKo.mjs} +1 -1
- package/dist/.setup/{message-handler-BNToPZrx.mjs → message-handler-BK69A-NB.mjs} +13 -13
- package/dist/.setup/{message-handler.preflight-D0BcCyI7.mjs → message-handler.preflight-DFpsh90H.mjs} +17 -17
- package/dist/.setup/{message-handler.preflight-pluralkit-D1g3eq0B.mjs → message-handler.preflight-pluralkit-BXGGVmpe.mjs} +7 -7
- package/dist/.setup/{message-handler.process-CThRmCWK.mjs → message-handler.process-TKoqcqIP.mjs} +21 -21
- package/dist/.setup/{outbound-adapter-BPq0c2wY.mjs → outbound-adapter-D4wRAb5S.mjs} +9 -9
- package/dist/.setup/{outbound-session-route-DGPPKA0z.mjs → outbound-session-route-BvBH4LC6.mjs} +13 -13
- package/dist/.setup/{probe-DIRY8vh7.mjs → probe-BwSKpnZf.mjs} +4 -4
- package/dist/.setup/{provider-D2OKMo0f.mjs → provider-YP8gN9_o.mjs} +74 -74
- package/dist/.setup/{provider-session.runtime-BupCTZQv.mjs → provider-session.runtime-D1gkPxHT.mjs} +3 -3
- package/dist/.setup/provider.runtime-CZ51OIgD.mjs +2 -0
- package/dist/.setup/{realtime-session.runtime-D5RSC8Mm.mjs → realtime-session.runtime-BKUQBy1u.mjs} +19 -19
- package/dist/.setup/{resolve-allowlist-common-DUYRrrVB.mjs → resolve-allowlist-common-BUyU3C-T.mjs} +3 -3
- package/dist/.setup/{resolve-channels--MUatisx.mjs → resolve-channels-DA6QlhZN.mjs} +3 -3
- package/dist/.setup/{resolve-users-CxLcDmM0.mjs → resolve-users-DNrwvunm.mjs} +2 -2
- package/dist/.setup/{runtime-CwUA0RLr.mjs → runtime-CESTexGn.mjs} +12 -12
- package/dist/.setup/{runtime-CerRBfaa.mjs → runtime-DPcmPST9.mjs} +2 -2
- package/dist/.setup/{send-2X7m2Zmw.mjs → send-CJk3VP5q.mjs} +16 -16
- package/dist/.setup/{send.components-RqvgmCs3.mjs → send.components-dPljuV24.mjs} +7 -7
- package/dist/.setup/{send.outbound-B4QHSEzm.mjs → send.outbound-rOboMO_6.mjs} +8 -8
- package/dist/.setup/{retry-BKzO25k4.mjs → send.receipt-DVOg2Oaw.mjs} +203 -203
- package/dist/.setup/{send.shared-BQIUh6Vn.mjs → send.shared-C4CN24D9.mjs} +40 -40
- package/dist/.setup/{sender-identity-CooeYfAn.mjs → sender-identity-AHpUNr72.mjs} +1 -1
- package/dist/.setup/setup-plugin-api-BVlCz3fm.mjs +3 -0
- package/dist/.setup/{shared-CIJn6AEC.mjs → shared-BoBnM5kM.mjs} +7 -7
- package/dist/.setup/{subagent-hooks-BYlVnxzy.mjs → subagent-hooks-HH8Uy9cx.mjs} +2 -2
- package/dist/.setup/{system-events-CQ3if_pS.mjs → system-events-Cwxaww8i.mjs} +2 -2
- package/dist/.setup/{target-resolver-Dzxf80Y3.mjs → target-resolver-CSFoPQ12.mjs} +3 -3
- package/dist/.setup/targets-bqXQENmX.mjs +3 -0
- package/dist/.setup/{thread-bindings-yNNlcUWE.mjs → thread-bindings-DjQCkmsd.mjs} +4 -4
- package/dist/.setup/{thread-bindings.manager-plk0zJAW.mjs → thread-bindings.manager-D2-GYZ5s.mjs} +10 -10
- package/dist/.setup/{transcripts-source-CNWswry-.mjs → transcripts-source-CaZQnGRH.mjs} +18 -18
- package/dist/.setup/{voice-runtime-Bc75quiH.mjs → voice-runtime-DDymtIw8.mjs} +46 -46
- package/dist/account-inspect-api.js +1 -1
- package/dist/action-runtime-api.js +1 -1
- package/dist/activities-api.js +788 -1
- package/dist/api.js +15 -15
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/directory-contract-api.js +1 -1
- package/dist/index.js +9 -5
- package/dist/runtime-api.js +20 -20
- package/dist/setup-entry.js +1 -1
- package/dist/setup-plugin-api.js +1 -1
- package/dist/src/voice/audio-worker.runtime.js +3 -3
- package/dist/subagent-hooks-api.js +1 -1
- package/dist/transcripts-source-api.js +1 -1
- package/package.json +4 -4
- package/dist/.setup/activities-api-BL_hJ0JQ.mjs +0 -789
- package/dist/.setup/provider.runtime-BaW_JnfU.mjs +0 -2
- package/dist/.setup/setup-plugin-api-nn_giXvZ.mjs +0 -3
- package/dist/.setup/targets-Lf8D55w-.mjs +0 -3
- package/dist/.setup/{accounts-DXHCL8Zm.mjs → accounts-HE9-mj1L.mjs} +2 -2
- package/dist/.setup/{config-schema-CsemBDpS.mjs → config-schema-BQWfnSCx.mjs} +1 -1
- package/dist/.setup/{receive-recovery-GqF2PUN_.mjs → receive-recovery-DgkX7Qvi.mjs} +2 -2
- package/dist/.setup/{thread-bindings.session-updates-C9aKtVs6.mjs → thread-bindings.session-updates-Bu_CGr_O.mjs} +2 -2
package/dist/.setup/{thread-bindings.manager-plk0zJAW.mjs → thread-bindings.manager-D2-GYZ5s.mjs}
RENAMED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { A as isDiscordThreadChannelType } from "./allow-list-vxkG9_JD.mjs";
|
|
3
|
+
import { P as createDiscordRestClient } from "./send.shared-C4CN24D9.mjs";
|
|
4
|
+
import { C as withDiscordRequestAuthority, tt as createChannelWebhook, ut as getChannel } from "./discord-9gysrhzp.mjs";
|
|
5
|
+
import { h as canFallbackDiscordWebhookSend, m as resolveDiscordChannelId } from "./send.receipt-DVOg2Oaw.mjs";
|
|
6
|
+
import { c as sendWebhookMessageDiscord, u as createThreadDiscord } from "./send-CJk3VP5q.mjs";
|
|
7
|
+
import { t as sendMessageDiscord } from "./send.outbound-rOboMO_6.mjs";
|
|
8
|
+
import { A as resolveBindingRecordKey, C as getThreadBindingToken, D as rememberReusableWebhook, E as refreshUnboundThreadWebhookIdentity, F as resolveThreadBindingMaxAgeMs$1, I as shouldDefaultPersist, L as toBindingRecordKey, M as resolveThreadBindingIdleTimeoutMs$1, O as rememberThreadBindingToken, R as toReusableWebhookKey, S as forgetThreadBindingToken, T as normalizeThreadBindingDurationMs, _ as MANAGERS_BY_ACCOUNT_ID, b as THREAD_BINDING_TOUCH_PERSIST_MIN_INTERVAL_MS, c as drainThreadBindingAccountOperations, d as runThreadBindingAccountOperation, f as runThreadBindingMutation, g as BINDINGS_BY_THREAD_ID, h as updateBindingRecordSync, j as resolvePreparedThreadBindingLifecycle, k as resolveBindingIdsForSession, l as drainThreadBindingMutations, m as snapshotThreadBindingJson, p as shouldPersistAnyBindingState, s as commitBindingRecord, v as PERSIST_BY_ACCOUNT_ID, w as normalizeTargetKind, x as ensureBindingsLoadedAsync, y as REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL } from "./thread-bindings.session-updates-Bu_CGr_O.mjs";
|
|
7
9
|
import { n as resolveDiscordChannelInfoSafe, t as resolveDiscordChannelIdSafe } from "./channel-access-BRp3Y-rF.mjs";
|
|
8
|
-
import {
|
|
9
|
-
import { A as resolveBindingRecordKey, C as getThreadBindingToken, D as rememberReusableWebhook, E as refreshUnboundThreadWebhookIdentity, F as resolveThreadBindingMaxAgeMs$1, I as shouldDefaultPersist, L as toBindingRecordKey, M as resolveThreadBindingIdleTimeoutMs$1, O as rememberThreadBindingToken, R as toReusableWebhookKey, S as forgetThreadBindingToken, T as normalizeThreadBindingDurationMs, _ as MANAGERS_BY_ACCOUNT_ID, b as THREAD_BINDING_TOUCH_PERSIST_MIN_INTERVAL_MS, c as drainThreadBindingAccountOperations, d as runThreadBindingAccountOperation, f as runThreadBindingMutation, g as BINDINGS_BY_THREAD_ID, h as updateBindingRecordSync, j as resolvePreparedThreadBindingLifecycle, k as resolveBindingIdsForSession, l as drainThreadBindingMutations, m as snapshotThreadBindingJson, p as shouldPersistAnyBindingState, s as commitBindingRecord, v as PERSIST_BY_ACCOUNT_ID, w as normalizeTargetKind, x as ensureBindingsLoadedAsync, y as REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL } from "./thread-bindings.session-updates-C9aKtVs6.mjs";
|
|
10
|
+
import { createSubsystemLogger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
|
|
10
11
|
import { asOptionalObjectRecord, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
11
|
-
import { parseStrictNonNegativeInteger as parseStrictNonNegativeInteger$1 } from "openclaw/plugin-sdk/number-runtime";
|
|
12
12
|
import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
|
|
13
13
|
import { getRuntimeConfigSnapshot } from "openclaw/plugin-sdk/runtime-config-snapshot";
|
|
14
|
-
import {
|
|
15
|
-
import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
14
|
+
import { parseStrictNonNegativeInteger as parseStrictNonNegativeInteger$1 } from "openclaw/plugin-sdk/number-runtime";
|
|
16
15
|
import { SYSTEM_MARK } from "openclaw/plugin-sdk/text-chunking";
|
|
16
|
+
import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
17
17
|
import { registerSessionBindingAdapter, resolveThreadBindingConversationIdFromBindingId, resolveThreadBindingFarewellText, resolveThreadBindingThreadName, unregisterSessionBindingAdapter } from "openclaw/plugin-sdk/conversation-runtime";
|
|
18
18
|
import { resolveSessionAgentIdStrict } from "openclaw/plugin-sdk/agent-scope-runtime";
|
|
19
19
|
//#region extensions/discord/src/monitor/thread-bindings.persona.ts
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { A as
|
|
4
|
-
import {
|
|
2
|
+
import { a as listEnabledDiscordAccounts, c as resolveDiscordAccount, l as resolveDiscordAccountAllowFrom } from "./accounts-HE9-mj1L.mjs";
|
|
3
|
+
import { A as isDiscordThreadChannelType, D as getDiscordEndpointRuntime, f as resolveDiscordGuildEntry, i as normalizeDiscordAllowList, k as resolveDiscordEndpointMediaGuard, l as resolveDiscordChannelConfigWithFallback, n as hasConfiguredDiscordChannels, o as normalizeDiscordSlug, p as resolveDiscordMemberAccessState, r as isDiscordGroupAllowedByPolicy, t as allowListMatches } from "./allow-list-vxkG9_JD.mjs";
|
|
4
|
+
import { _ as DiscordError, dt as getChannelMessage, st as createThread, t as discord_exports } from "./discord-9gysrhzp.mjs";
|
|
5
|
+
import { l as withAbortTimeout } from "./timeouts-pun7VJ02.mjs";
|
|
5
6
|
import { t as resolveDiscordCommandOwnerAllowFrom } from "./command-owners-D78sAoOz.mjs";
|
|
6
7
|
import { a as resolveDiscordChannelParentSafe, i as resolveDiscordChannelParentIdSafe, n as resolveDiscordChannelInfoSafe, r as resolveDiscordChannelNameSafe, t as resolveDiscordChannelIdSafe } from "./channel-access-BRp3Y-rF.mjs";
|
|
7
|
-
import {
|
|
8
|
+
import { createSubsystemLogger, getChildLogger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
|
|
9
|
+
import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
|
|
8
10
|
import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId, summarizeStringEntries, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
11
|
+
import { buildAgentSessionKey } from "openclaw/plugin-sdk/routing";
|
|
9
12
|
import { ComponentType, Routes, StickerFormatType } from "discord-api-types/v10";
|
|
13
|
+
import { pruneMapToMaxSize } from "openclaw/plugin-sdk/collection-runtime";
|
|
14
|
+
import { saveRemoteMedia } from "openclaw/plugin-sdk/media-runtime";
|
|
10
15
|
import { asDateTimestampMs, resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
|
|
11
16
|
import { formatErrorMessage } from "openclaw/plugin-sdk/ssrf-runtime";
|
|
12
17
|
import { resolveGlobalSingleton } from "openclaw/plugin-sdk/global-singleton";
|
|
13
|
-
import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
|
|
14
|
-
import { buildAgentSessionKey } from "openclaw/plugin-sdk/routing";
|
|
15
|
-
import { getFileExtension, normalizeMimeType } from "openclaw/plugin-sdk/media-mime";
|
|
16
|
-
import { createSubsystemLogger, getChildLogger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
|
|
17
18
|
import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
18
19
|
import { createReplyReferencePlanner } from "openclaw/plugin-sdk/reply-reference";
|
|
19
|
-
import { saveRemoteMedia } from "openclaw/plugin-sdk/media-runtime";
|
|
20
|
-
import { resolveCommandAuthorizedFromAuthorizers } from "openclaw/plugin-sdk/command-auth-native";
|
|
21
20
|
import { resolveOpenProviderRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
|
|
22
|
-
import {
|
|
21
|
+
import { getFileExtension, normalizeMimeType } from "openclaw/plugin-sdk/media-mime";
|
|
23
22
|
import { resolveChannelModelOverride } from "openclaw/plugin-sdk/model-session-runtime";
|
|
24
23
|
import { generateConversationLabel } from "openclaw/plugin-sdk/reply-dispatch-runtime";
|
|
25
24
|
import { formatMediaPlaceholderText } from "openclaw/plugin-sdk/channel-inbound";
|
|
25
|
+
import { resolveCommandAuthorizedFromAuthorizers } from "openclaw/plugin-sdk/command-auth-native";
|
|
26
26
|
//#region extensions/discord/src/monitor/message-channel-info-state.ts
|
|
27
27
|
const discordChannelInfoCacheState = { entries: /* @__PURE__ */ new Map() };
|
|
28
28
|
//#endregion
|
|
@@ -966,6 +966,12 @@ async function resolveFetchedDiscordThreadLikeChannelContext(params) {
|
|
|
966
966
|
});
|
|
967
967
|
}
|
|
968
968
|
//#endregion
|
|
969
|
+
//#region extensions/discord/src/voice/config.ts
|
|
970
|
+
function resolveDiscordVoiceEnabled(voice) {
|
|
971
|
+
if (voice?.enabled !== void 0) return voice.enabled;
|
|
972
|
+
return voice !== void 0;
|
|
973
|
+
}
|
|
974
|
+
//#endregion
|
|
969
975
|
//#region extensions/discord/src/voice/owner-access.ts
|
|
970
976
|
async function resolveDiscordVoiceAccessTarget(params) {
|
|
971
977
|
const [guild, channel] = await Promise.all([params.client.fetchGuild(params.guildId).catch(() => null), params.client.fetchChannel(params.channelId).catch(() => null)]);
|
|
@@ -1092,12 +1098,6 @@ async function authorizeDiscordVoiceIngress(initialParams) {
|
|
|
1092
1098
|
};
|
|
1093
1099
|
}
|
|
1094
1100
|
//#endregion
|
|
1095
|
-
//#region extensions/discord/src/voice/config.ts
|
|
1096
|
-
function resolveDiscordVoiceEnabled(voice) {
|
|
1097
|
-
if (voice?.enabled !== void 0) return voice.enabled;
|
|
1098
|
-
return voice !== void 0;
|
|
1099
|
-
}
|
|
1100
|
-
//#endregion
|
|
1101
1101
|
//#region extensions/discord/src/voice/transcripts-source.ts
|
|
1102
1102
|
const TRANSCRIPTS_STATE = resolveGlobalSingleton(Symbol.for("openclaw.discordTranscriptsState"), () => ({
|
|
1103
1103
|
managersByAccountId: /* @__PURE__ */ new Map(),
|
|
@@ -1570,4 +1570,4 @@ const discordVoiceTranscriptsSourceProvider = {
|
|
|
1570
1570
|
}
|
|
1571
1571
|
};
|
|
1572
1572
|
//#endregion
|
|
1573
|
-
export { resolveDiscordMessageChannelId as A, resolveReferencedReplyMediaList as C, resolveDiscordReferencedReplyMessage as D, resolveDiscordMessageStickers as E, resolveDiscordReferencedReplyMessageId as O, resolveMediaList as S, hasDiscordMessageStickers as T, resolveDiscordMessageHistoryText as _,
|
|
1573
|
+
export { resolveDiscordMessageChannelId as A, resolveReferencedReplyMediaList as C, resolveDiscordReferencedReplyMessage as D, resolveDiscordMessageStickers as E, resolveDiscordReferencedReplyMessageId as O, resolveMediaList as S, hasDiscordMessageStickers as T, resolveDiscordMessageHistoryText as _, authorizeDiscordVoiceIngress as a, formatDiscordMediaText as b, resolveDiscordVoiceEnabled as c, threading_exports as d, resolveDiscordAutoThreadReplyPlan as f, resolveDiscordMessageBatch as g, sanitizeDiscordThreadName as h, setDiscordTranscriptsVoiceManager as i, resolveDiscordChannelInfo as k, resolveDiscordThreadLikeChannelContext as l, resolveDiscordThreadStarter as m, discordVoiceTranscriptsSourceProvider as n, resolveDiscordVoiceAccess as o, resolveDiscordReplyTarget as p, resolveDiscordTranscriptsCapture as r, resolveDiscordVoiceAccessTarget as s, bindDiscordCaptureReceipts as t, resolveFetchedDiscordThreadLikeChannelContext as u, resolveDiscordMessageMentionDocuments as v, resolveDiscordCdnPolicy as w, resolveForwardedMediaList as x, resolveDiscordMessageText as y };
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { a as noteVoiceDecryptFailure, n as analyzeVoiceReceiveError, p as writeVoiceWavFile, r as createVoiceReceiveRecoveryState, s as resetVoiceReceiveRecoveryState, t as DECRYPT_FAILURE_WINDOW_MS, v as restoreDiscordAudioError } from "./receive-recovery-DgkX7Qvi.mjs";
|
|
3
|
+
import { S as formatDiscordUserTag, g as resolveDiscordOwnerAccess, o as normalizeDiscordSlug } from "./allow-list-vxkG9_JD.mjs";
|
|
4
|
+
import { _t as getGuildVoiceState, l as ReadyListener, p as VoiceStateUpdateListener, t as discord_exports, u as ResumedListener, y as isUnknownDiscordVoiceStateError } from "./discord-9gysrhzp.mjs";
|
|
5
|
+
import { p as parseDiscordTarget } from "./send.receipt-DVOg2Oaw.mjs";
|
|
6
|
+
import { o as formatMention } from "./send.outbound-rOboMO_6.mjs";
|
|
4
7
|
import { t as getDiscordRuntime } from "./runtime-DgnVQ7zW.mjs";
|
|
5
|
-
import {
|
|
6
|
-
import { o as
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { C as buildDiscordGroupSystemPrompt, _ as resolveDiscordVoiceMode, d as MIN_SEGMENT_SECONDS, f as VOICE_CONNECT_READY_TIMEOUT_MS, g as logVoiceVerbose, h as isVoiceChannel, m as isDiscordRealtimeVoiceMode, p as VOICE_RECONNECT_GRACE_MS, u as CAPTURE_FINALIZE_GRACE_MS, v as resolveVoiceTimeoutMs } from "./provider-YP8gN9_o.mjs";
|
|
9
|
+
import { a as authorizeDiscordVoiceIngress, c as resolveDiscordVoiceEnabled, o as resolveDiscordVoiceAccess, r as resolveDiscordTranscriptsCapture, s as resolveDiscordVoiceAccessTarget, t as bindDiscordCaptureReceipts } from "./transcripts-source-CaZQnGRH.mjs";
|
|
10
|
+
import { Worker } from "node:worker_threads";
|
|
11
|
+
import { PassThrough, Readable } from "node:stream";
|
|
12
|
+
import { formatErrorMessage, readErrorName, toErrorObject } from "openclaw/plugin-sdk/error-runtime";
|
|
13
|
+
import { createSubsystemLogger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
|
|
10
14
|
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
11
|
-
import { randomUUID } from "node:crypto";
|
|
12
|
-
import { asDateTimestampMs, resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
|
|
13
|
-
import { formatErrorMessage } from "openclaw/plugin-sdk/ssrf-runtime";
|
|
14
|
-
import { formatErrorMessage as formatErrorMessage$1, readErrorName, toErrorObject } from "openclaw/plugin-sdk/error-runtime";
|
|
15
15
|
import { resolveAgentRoute } from "openclaw/plugin-sdk/routing";
|
|
16
|
-
import {
|
|
17
|
-
import { escapeRegExp, truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
16
|
+
import { unlinkIfExists } from "openclaw/plugin-sdk/media-runtime";
|
|
18
17
|
import { expectDefined } from "openclaw/plugin-sdk/expect-runtime";
|
|
18
|
+
import { asDateTimestampMs, resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
|
|
19
19
|
import { stripInlineDirectiveTagsForDisplay } from "openclaw/plugin-sdk/text-chunking";
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
20
|
+
import { randomUUID } from "node:crypto";
|
|
21
|
+
import { formatErrorMessage as formatErrorMessage$1 } from "openclaw/plugin-sdk/ssrf-runtime";
|
|
22
|
+
import { escapeRegExp, truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
23
23
|
import { createDeferred } from "openclaw/plugin-sdk/extension-shared";
|
|
24
24
|
import { enqueueRoutedSystemEvent } from "openclaw/plugin-sdk/system-event-runtime";
|
|
25
25
|
import { resolveAgentDir } from "openclaw/plugin-sdk/agent-runtime";
|
|
@@ -125,7 +125,7 @@ async function handleDiscordVoiceAgentControlToolCall(params) {
|
|
|
125
125
|
});
|
|
126
126
|
} catch (error) {
|
|
127
127
|
if (!params.isCurrent()) return;
|
|
128
|
-
await params.session.submitToolResult(params.callId, { error: formatErrorMessage
|
|
128
|
+
await params.session.submitToolResult(params.callId, { error: formatErrorMessage(error) });
|
|
129
129
|
return;
|
|
130
130
|
}
|
|
131
131
|
if (!params.isCurrent()) return;
|
|
@@ -758,7 +758,7 @@ var DiscordVoiceMembershipTracker = class {
|
|
|
758
758
|
}
|
|
759
759
|
}
|
|
760
760
|
logFailure(entry, err) {
|
|
761
|
-
logger$8.warn(`discord voice: participant notification failed guild=${entry.guildId} channel=${entry.channelId}: ${formatErrorMessage(err)}`);
|
|
761
|
+
logger$8.warn(`discord voice: participant notification failed guild=${entry.guildId} channel=${entry.channelId}: ${formatErrorMessage$1(err)}`);
|
|
762
762
|
}
|
|
763
763
|
roster(entry, botUserId, additionalUserIds) {
|
|
764
764
|
return collectDiscordVoiceParticipants({
|
|
@@ -907,7 +907,7 @@ var DiscordVoiceFollowing = class {
|
|
|
907
907
|
delayMs: FOLLOW_USERS_RECONCILE_INTERVAL_MS,
|
|
908
908
|
everyMs: FOLLOW_USERS_RECONCILE_INTERVAL_MS,
|
|
909
909
|
run: () => this.reconcileFollowedUsers("interval").catch((err) => {
|
|
910
|
-
logger$7.warn(`discord voice: follow user reconciliation failed: ${formatErrorMessage(err)}`);
|
|
910
|
+
logger$7.warn(`discord voice: follow user reconciliation failed: ${formatErrorMessage$1(err)}`);
|
|
911
911
|
})
|
|
912
912
|
});
|
|
913
913
|
await this.reconcileFollowedUsers("startup");
|
|
@@ -1038,10 +1038,10 @@ var DiscordVoiceFollowing = class {
|
|
|
1038
1038
|
for (const userId of plan.userIds) {
|
|
1039
1039
|
const voiceState = await getGuildVoiceState(this.params.client.rest, plan.guildId, userId).catch((err) => {
|
|
1040
1040
|
if (!isUnknownDiscordVoiceStateError(err)) {
|
|
1041
|
-
logger$7.warn(`follow-user reconcile skipped (transient voice-state error) guild=${plan.guildId} user=${userId} trigger=${reason}: ${formatErrorMessage(err)}`);
|
|
1041
|
+
logger$7.warn(`follow-user reconcile skipped (transient voice-state error) guild=${plan.guildId} user=${userId} trigger=${reason}: ${formatErrorMessage$1(err)}`);
|
|
1042
1042
|
return "transient-error";
|
|
1043
1043
|
}
|
|
1044
|
-
logFollowUserReconcileVerbose(reason, `follow user reconcile reason=${reason}: no voice state guild ${plan.guildId} user ${userId}: ${formatErrorMessage(err)}`);
|
|
1044
|
+
logFollowUserReconcileVerbose(reason, `follow user reconcile reason=${reason}: no voice state guild ${plan.guildId} user ${userId}: ${formatErrorMessage$1(err)}`);
|
|
1045
1045
|
});
|
|
1046
1046
|
if (this.scheduler.signal.aborted) return;
|
|
1047
1047
|
if (voiceState === "transient-error") continue;
|
|
@@ -1161,10 +1161,10 @@ var DiscordVoiceFollowing = class {
|
|
|
1161
1161
|
if (!botUserId) return;
|
|
1162
1162
|
const botVoiceState = await getGuildVoiceState(this.params.client.rest, guildId, botUserId).catch((err) => {
|
|
1163
1163
|
if (!isUnknownDiscordVoiceStateError(err)) {
|
|
1164
|
-
logger$7.warn(`discord voice: follow reconcile skipped transient bot voice state error guild=${guildId} reason=${reason}: ${formatErrorMessage(err)}`);
|
|
1164
|
+
logger$7.warn(`discord voice: follow reconcile skipped transient bot voice state error guild=${guildId} reason=${reason}: ${formatErrorMessage$1(err)}`);
|
|
1165
1165
|
return "transient-error";
|
|
1166
1166
|
}
|
|
1167
|
-
logFollowUserReconcileVerbose(reason, `follow user reconcile reason=${reason}: no bot voice state guild ${guildId}: ${formatErrorMessage(err)}`);
|
|
1167
|
+
logFollowUserReconcileVerbose(reason, `follow user reconcile reason=${reason}: no bot voice state guild ${guildId}: ${formatErrorMessage$1(err)}`);
|
|
1168
1168
|
});
|
|
1169
1169
|
if (this.scheduler.signal.aborted || botVoiceState === "transient-error") return;
|
|
1170
1170
|
const botChannelId = botVoiceState?.channel_id?.trim();
|
|
@@ -1325,7 +1325,7 @@ async function processDiscordVoiceSegment(params) {
|
|
|
1325
1325
|
const conversationCurrent = () => !entry.captureOnly && entry.sessionLifecycle.status === "active" && params.isConversationCurrent();
|
|
1326
1326
|
logVoiceVerbose(`segment processing (${durationSeconds.toFixed(2)}s): guild ${entry.guildId} channel ${entry.channelId}`);
|
|
1327
1327
|
const ingress = params.resolveIngressContext().catch((error) => {
|
|
1328
|
-
logger$6.warn(`discord voice: conversation authorization failed: ${formatErrorMessage
|
|
1328
|
+
logger$6.warn(`discord voice: conversation authorization failed: ${formatErrorMessage(error)}`);
|
|
1329
1329
|
return null;
|
|
1330
1330
|
});
|
|
1331
1331
|
const conversationAuthorized = ingress.then((context) => Boolean(context) && conversationCurrent());
|
|
@@ -1399,10 +1399,10 @@ async function respondToDiscordVoiceTranscript(params) {
|
|
|
1399
1399
|
text: transcript
|
|
1400
1400
|
}).catch((error) => {
|
|
1401
1401
|
if (readErrorName(error) === "AbortError") {
|
|
1402
|
-
logger$6.warn(`discord voice: active-run control cancelled: ${formatErrorMessage
|
|
1402
|
+
logger$6.warn(`discord voice: active-run control cancelled: ${formatErrorMessage(error)}`);
|
|
1403
1403
|
return null;
|
|
1404
1404
|
}
|
|
1405
|
-
logger$6.warn(`discord voice: active-run control failed; falling back to normal segment handling: ${formatErrorMessage
|
|
1405
|
+
logger$6.warn(`discord voice: active-run control failed; falling back to normal segment handling: ${formatErrorMessage(error)}`);
|
|
1406
1406
|
});
|
|
1407
1407
|
if (control === null || !conversationCurrent()) return;
|
|
1408
1408
|
if (control?.handled) {
|
|
@@ -1562,7 +1562,7 @@ var DiscordVoiceRecording = class {
|
|
|
1562
1562
|
try {
|
|
1563
1563
|
await wav.cleanup();
|
|
1564
1564
|
} catch (error) {
|
|
1565
|
-
logger$5.warn(`discord voice: recording cleanup failed: ${formatErrorMessage(error)}`);
|
|
1565
|
+
logger$5.warn(`discord voice: recording cleanup failed: ${formatErrorMessage$1(error)}`);
|
|
1566
1566
|
} finally {
|
|
1567
1567
|
releaseBudget();
|
|
1568
1568
|
}
|
|
@@ -1591,7 +1591,7 @@ var DiscordVoiceRecording = class {
|
|
|
1591
1591
|
});
|
|
1592
1592
|
} catch (error) {
|
|
1593
1593
|
this.params.onExcluded();
|
|
1594
|
-
logger$5.warn(`discord voice: recording failed: ${formatErrorMessage(error)}`);
|
|
1594
|
+
logger$5.warn(`discord voice: recording failed: ${formatErrorMessage$1(error)}`);
|
|
1595
1595
|
} finally {
|
|
1596
1596
|
await cleanup();
|
|
1597
1597
|
}
|
|
@@ -1661,7 +1661,7 @@ var DiscordVoiceReceive = class {
|
|
|
1661
1661
|
}
|
|
1662
1662
|
}
|
|
1663
1663
|
captureCurrentSpeakers(entry) {
|
|
1664
|
-
for (const userId of entry.audio.speakingUsers) this.handleSpeakingStart(entry, userId, "scan").catch((error) => logger$4.warn(`discord voice: capture failed: ${formatErrorMessage(error)}`));
|
|
1664
|
+
for (const userId of entry.audio.speakingUsers) this.handleSpeakingStart(entry, userId, "scan").catch((error) => logger$4.warn(`discord voice: capture failed: ${formatErrorMessage$1(error)}`));
|
|
1665
1665
|
}
|
|
1666
1666
|
responseContext(entry, userId) {
|
|
1667
1667
|
return {
|
|
@@ -1676,7 +1676,7 @@ var DiscordVoiceReceive = class {
|
|
|
1676
1676
|
speakerContext: this.params.speakerContext,
|
|
1677
1677
|
client: this.params.client,
|
|
1678
1678
|
enqueuePlayback: (playbackEntry, task) => {
|
|
1679
|
-
playbackEntry.playbackQueue = playbackEntry.playbackQueue.then(task).catch((err) => logger$4.warn(`discord voice: playback failed: ${formatErrorMessage(err)}`));
|
|
1679
|
+
playbackEntry.playbackQueue = playbackEntry.playbackQueue.then(task).catch((err) => logger$4.warn(`discord voice: playback failed: ${formatErrorMessage$1(err)}`));
|
|
1680
1680
|
}
|
|
1681
1681
|
};
|
|
1682
1682
|
}
|
|
@@ -1840,12 +1840,12 @@ var DiscordVoiceReceive = class {
|
|
|
1840
1840
|
ingress: currentIngress,
|
|
1841
1841
|
transcript
|
|
1842
1842
|
});
|
|
1843
|
-
}).catch((error) => logger$4.warn(`discord voice: processing failed: ${formatErrorMessage(error)}`));
|
|
1843
|
+
}).catch((error) => logger$4.warn(`discord voice: processing failed: ${formatErrorMessage$1(error)}`));
|
|
1844
1844
|
}
|
|
1845
1845
|
}
|
|
1846
1846
|
} finally {
|
|
1847
1847
|
realtimeRecording?.sealBatch();
|
|
1848
|
-
if (conversationCompletion) conversationCompletion.catch((error) => logger$4.warn(`discord voice: conversation failed: ${formatErrorMessage(error)}`));
|
|
1848
|
+
if (conversationCompletion) conversationCompletion.catch((error) => logger$4.warn(`discord voice: conversation failed: ${formatErrorMessage$1(error)}`));
|
|
1849
1849
|
else if (conversation) entry.conversations.release(conversation);
|
|
1850
1850
|
captureReceipts.close();
|
|
1851
1851
|
stream.off("data", acceptPacket);
|
|
@@ -1932,7 +1932,7 @@ var DiscordVoiceReceive = class {
|
|
|
1932
1932
|
recovery = this.recoverFromDecryptFailures(entry);
|
|
1933
1933
|
}
|
|
1934
1934
|
} else recovery = this.recoverFromDecryptFailures(entry);
|
|
1935
|
-
recovery.catch((recoverErr) => logger$4.warn(`discord voice: decrypt recovery failed: ${formatErrorMessage(recoverErr)}`)).finally(() => {
|
|
1935
|
+
recovery.catch((recoverErr) => logger$4.warn(`discord voice: decrypt recovery failed: ${formatErrorMessage$1(recoverErr)}`)).finally(() => {
|
|
1936
1936
|
entry.receiveRecovery.decryptRecoveryInFlight = false;
|
|
1937
1937
|
});
|
|
1938
1938
|
}
|
|
@@ -2311,7 +2311,7 @@ var DiscordVoiceConversationInput = class {
|
|
|
2311
2311
|
for (const { pcm, receipt } of audio) this.sendAudio(pcm, receipt);
|
|
2312
2312
|
})().catch((error) => {
|
|
2313
2313
|
this.retire();
|
|
2314
|
-
params.warn(`discord voice: conversation admission failed: ${formatErrorMessage(error)}`);
|
|
2314
|
+
params.warn(`discord voice: conversation admission failed: ${formatErrorMessage$1(error)}`);
|
|
2315
2315
|
});
|
|
2316
2316
|
this.ready = Promise.race([admission, this.cancelled.promise]);
|
|
2317
2317
|
}
|
|
@@ -2344,7 +2344,7 @@ var DiscordVoiceConversationInput = class {
|
|
|
2344
2344
|
this.turn?.sendInputAudio(pcm, receipt);
|
|
2345
2345
|
} catch (error) {
|
|
2346
2346
|
this.retire();
|
|
2347
|
-
this.params.warn(`discord voice: conversation audio failed: ${formatErrorMessage(error)}`);
|
|
2347
|
+
this.params.warn(`discord voice: conversation audio failed: ${formatErrorMessage$1(error)}`);
|
|
2348
2348
|
}
|
|
2349
2349
|
}
|
|
2350
2350
|
authorizeSegment(resolve) {
|
|
@@ -2417,7 +2417,7 @@ var DiscordVoiceConversationInput = class {
|
|
|
2417
2417
|
try {
|
|
2418
2418
|
turn?.close("incomplete-input");
|
|
2419
2419
|
} catch (error) {
|
|
2420
|
-
this.params.warn(`discord voice: conversation close failed: ${formatErrorMessage(error)}`);
|
|
2420
|
+
this.params.warn(`discord voice: conversation close failed: ${formatErrorMessage$1(error)}`);
|
|
2421
2421
|
}
|
|
2422
2422
|
}
|
|
2423
2423
|
};
|
|
@@ -2531,7 +2531,7 @@ var DiscordVoiceSessions = class {
|
|
|
2531
2531
|
ok: false,
|
|
2532
2532
|
error: {
|
|
2533
2533
|
ok: false,
|
|
2534
|
-
message: `Failed to resolve Discord channel ${channelId}: ${formatErrorMessage(err)}`,
|
|
2534
|
+
message: `Failed to resolve Discord channel ${channelId}: ${formatErrorMessage$1(err)}`,
|
|
2535
2535
|
guildId,
|
|
2536
2536
|
channelId
|
|
2537
2537
|
}
|
|
@@ -2633,7 +2633,7 @@ var DiscordVoiceSessions = class {
|
|
|
2633
2633
|
await this.stopTransport(guildId);
|
|
2634
2634
|
return {
|
|
2635
2635
|
ok: false,
|
|
2636
|
-
message: "Failed to join voice channel: " + formatErrorMessage(error),
|
|
2636
|
+
message: "Failed to join voice channel: " + formatErrorMessage$1(error),
|
|
2637
2637
|
guildId,
|
|
2638
2638
|
channelId
|
|
2639
2639
|
};
|
|
@@ -2657,7 +2657,7 @@ var DiscordVoiceSessions = class {
|
|
|
2657
2657
|
await this.stopTransport(guildId);
|
|
2658
2658
|
return {
|
|
2659
2659
|
ok: false,
|
|
2660
|
-
message: `Failed to resolve Discord voice agent session: ${formatErrorMessage(err)}`,
|
|
2660
|
+
message: `Failed to resolve Discord voice agent session: ${formatErrorMessage$1(err)}`,
|
|
2661
2661
|
guildId,
|
|
2662
2662
|
channelId
|
|
2663
2663
|
};
|
|
@@ -2686,7 +2686,7 @@ var DiscordVoiceSessions = class {
|
|
|
2686
2686
|
try {
|
|
2687
2687
|
if (realtimeLifecycle.status === "starting" || realtimeLifecycle.status === "active") realtimeCompletion = realtimeLifecycle.instance.close();
|
|
2688
2688
|
} catch (error) {
|
|
2689
|
-
logger$2.warn(`discord voice: realtime close failed: ${formatErrorMessage(error)}`);
|
|
2689
|
+
logger$2.warn(`discord voice: realtime close failed: ${formatErrorMessage$1(error)}`);
|
|
2690
2690
|
}
|
|
2691
2691
|
const audioCompletion = this.stopTransport(guildId, audio);
|
|
2692
2692
|
stopCompletion = Promise.allSettled([realtimeCompletion, audioCompletion]).then(() => {
|
|
@@ -2700,7 +2700,7 @@ var DiscordVoiceSessions = class {
|
|
|
2700
2700
|
};
|
|
2701
2701
|
completion.then(forget, (error) => {
|
|
2702
2702
|
forget();
|
|
2703
|
-
logger$2.warn(`discord voice: session stop failed: ${formatErrorMessage(error)}`);
|
|
2703
|
+
logger$2.warn(`discord voice: session stop failed: ${formatErrorMessage$1(error)}`);
|
|
2704
2704
|
});
|
|
2705
2705
|
return stopCompletion;
|
|
2706
2706
|
};
|
|
@@ -2738,7 +2738,7 @@ var DiscordVoiceSessions = class {
|
|
|
2738
2738
|
};
|
|
2739
2739
|
const speakingHandler = (userId, speaking) => {
|
|
2740
2740
|
if (speaking) this.params.receive.handleSpeakingStart(entry, userId).catch((error) => {
|
|
2741
|
-
logger$2.warn("discord voice: capture failed: " + formatErrorMessage(error));
|
|
2741
|
+
logger$2.warn("discord voice: capture failed: " + formatErrorMessage$1(error));
|
|
2742
2742
|
});
|
|
2743
2743
|
else this.params.receive.scheduleCaptureFinalize(entry, userId);
|
|
2744
2744
|
};
|
|
@@ -2813,7 +2813,7 @@ var DiscordVoiceSessions = class {
|
|
|
2813
2813
|
ok: false,
|
|
2814
2814
|
message: "Discord realtime voice session stopped before startup completed."
|
|
2815
2815
|
};
|
|
2816
|
-
const { DiscordRealtimeVoiceSession } = await import("./realtime-session.runtime-
|
|
2816
|
+
const { DiscordRealtimeVoiceSession } = await import("./realtime-session.runtime-BKUQBy1u.mjs");
|
|
2817
2817
|
const realtime = new DiscordRealtimeVoiceSession({
|
|
2818
2818
|
accountId: this.params.accountId,
|
|
2819
2819
|
bootstrapContextInstructions,
|
|
@@ -2823,7 +2823,7 @@ var DiscordVoiceSessions = class {
|
|
|
2823
2823
|
getHumanParticipantCount: () => this.params.membership.countHumanParticipants(entry, this.params.botUserId()),
|
|
2824
2824
|
mode: voiceMode,
|
|
2825
2825
|
onTerminalError: (error) => {
|
|
2826
|
-
logger$2.error(`discord voice: realtime session failed terminally guild=${entry.guildId} channel=${entry.channelId}: ${formatErrorMessage(error)}`);
|
|
2826
|
+
logger$2.error(`discord voice: realtime session failed terminally guild=${entry.guildId} channel=${entry.channelId}: ${formatErrorMessage$1(error)}`);
|
|
2827
2827
|
const lifecycle = entry.realtimeLifecycle;
|
|
2828
2828
|
if (options?.requireLiveEntry && lifecycle.status === "starting" && lifecycle.instance === realtime) {
|
|
2829
2829
|
entry.realtimeLifecycle = {
|
|
@@ -2870,7 +2870,7 @@ var DiscordVoiceSessions = class {
|
|
|
2870
2870
|
};
|
|
2871
2871
|
return {
|
|
2872
2872
|
ok: false,
|
|
2873
|
-
message: `Failed to start Discord realtime voice: ${formatErrorMessage(err)}`
|
|
2873
|
+
message: `Failed to start Discord realtime voice: ${formatErrorMessage$1(err)}`
|
|
2874
2874
|
};
|
|
2875
2875
|
}
|
|
2876
2876
|
}
|
|
@@ -2879,7 +2879,7 @@ var DiscordVoiceSessions = class {
|
|
|
2879
2879
|
//#region extensions/discord/src/voice/listeners.ts
|
|
2880
2880
|
const logger$1 = createSubsystemLogger("discord/voice");
|
|
2881
2881
|
function startAutoJoin(operation, context = "") {
|
|
2882
|
-
operation().catch((err) => logger$1.warn(`discord voice: autoJoin${context} failed: ${formatErrorMessage(err)}`));
|
|
2882
|
+
operation().catch((err) => logger$1.warn(`discord voice: autoJoin${context} failed: ${formatErrorMessage$1(err)}`));
|
|
2883
2883
|
}
|
|
2884
2884
|
var DiscordVoiceReadyListener = class extends ReadyListener {
|
|
2885
2885
|
constructor(manager) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as inspectDiscordAccount } from "./.setup/account-inspect-
|
|
1
|
+
import { t as inspectDiscordAccount } from "./.setup/account-inspect-DsER5ILV.mjs";
|
|
2
2
|
//#region extensions/discord/account-inspect-api.ts
|
|
3
3
|
function inspectDiscordReadOnlyAccount(cfg, accountId) {
|
|
4
4
|
return inspectDiscordAccount({
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as handleDiscordAction } from "./.setup/runtime-
|
|
1
|
+
import { t as handleDiscordAction } from "./.setup/runtime-CESTexGn.mjs";
|
|
2
2
|
export { handleDiscordAction };
|