@openclaw/discord 2026.9.6 → 2026.9.8

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 (150) hide show
  1. package/assets/icon.png +0 -0
  2. package/dist/.setup/{account-inspect-BwQj24ht.mjs → account-inspect-De8hOUxG.mjs} +1 -1
  3. package/dist/.setup/{accounts-CwJQoLjM.mjs → accounts-ChaMcixG.mjs} +1 -4
  4. package/dist/.setup/{activities-api-COU4-0nR.mjs → activities-api-tvbsU2e3.mjs} +38 -66
  5. package/dist/.setup/{api-CBK9zcq5.mjs → api-DVbJwZVt.mjs} +10 -2
  6. package/dist/.setup/{approval-handler.runtime-CbBktBb4.mjs → approval-handler.runtime-DxCK2Rux.mjs} +49 -125
  7. package/dist/.setup/{approval-message-updates-jf9zMaIC.mjs → approval-message-updates-BKFqavHZ.mjs} +2 -2
  8. package/dist/.setup/{audit-vKbh-LFR.mjs → audit-CLg9I71N.mjs} +5 -5
  9. package/dist/.setup/{channel-Dv4e3Jpc.mjs → channel-DxlUVU9t.mjs} +121 -227
  10. package/dist/.setup/{channel-type-DKnjV1XW.mjs → channel-type-DRCrEMss.mjs} +22 -22
  11. package/dist/.setup/{channel.setup-0NX6FFwi.mjs → channel.setup-CRo1GjV7.mjs} +6 -9
  12. package/dist/.setup/{components-yBEb75bB.mjs → components-Cq1PvIpN.mjs} +41 -69
  13. package/dist/.setup/{config-schema-CiZz-mtA.mjs → config-schema-oxELUSDx.mjs} +19 -44
  14. package/dist/.setup/{conversation-binding-route-B7qImK_b.mjs → conversation-binding-route-Caz_XuFH.mjs} +10 -5
  15. package/dist/.setup/{directory-config-BytTftz-.mjs → directory-config-esqNn0Eo.mjs} +6 -9
  16. package/dist/.setup/{directory-live--EGTH0DC.mjs → directory-live-DtKRHuGV.mjs} +6 -12
  17. package/dist/.setup/{discord-BXpHW-cu.mjs → discord-0xJYfdDD.mjs} +82 -386
  18. package/dist/.setup/{doctor-D1R-uFIu.mjs → doctor-BCl1H5tl.mjs} +21 -36
  19. package/dist/.setup/{doctor-contract-Co5vRCZ6.mjs → doctor-contract-CvvgwrrG.mjs} +41 -50
  20. package/dist/.setup/{channel-actions.runtime-leZuw01r.mjs → handle-action-CUvQWnE7.mjs} +67 -104
  21. package/dist/.setup/{handle-action.guild-admin-DcFa8NwA.mjs → handle-action.guild-admin-Df-8gVle.mjs} +62 -120
  22. package/dist/.setup/{live-policy-config-eKQ-PLdy.mjs → live-policy-config-8Pv20CHc.mjs} +2 -3
  23. package/dist/.setup/{message-handler-X6ejmbtY.mjs → message-handler-B-Jk4oDk.mjs} +18 -94
  24. package/dist/.setup/{message-handler.preflight-pluralkit-8Xji34AF.mjs → message-handler.preflight-pluralkit-CWLUBVcx.mjs} +8 -10
  25. package/dist/.setup/{message-handler.preflight-DE_POxFc.mjs → message-handler.preflight-v-__NSDq.mjs} +69 -180
  26. package/dist/.setup/{message-handler.process-CCmIVnxy.mjs → message-handler.process-BNFFuChn.mjs} +65 -86
  27. package/dist/.setup/{outbound-adapter-ClIgmu4F.mjs → outbound-adapter-BobT-kse.mjs} +105 -19
  28. package/dist/.setup/{outbound-session-route-VulUE0yV.mjs → outbound-session-route-zVGxxceg.mjs} +140 -108
  29. package/dist/.setup/{pluralkit-CdAt1G0P.mjs → pluralkit-a6_NLfH9.mjs} +1 -1
  30. package/dist/.setup/{presence-cache-dYSHPWMx.mjs → presence-cache-Di3H3DIU.mjs} +0 -4
  31. package/dist/.setup/{probe-CupW4we4.mjs → probe-LYrIHlBF.mjs} +13 -4
  32. package/dist/.setup/{provider-iOf73HW-.mjs → provider-B_G5hASF.mjs} +721 -1416
  33. package/dist/.setup/provider-session.runtime-BYlTBFD2.mjs +6 -0
  34. package/dist/.setup/provider.runtime-CUE3UxER.mjs +2 -0
  35. package/dist/.setup/{realtime-session.runtime-Dz8uVutq.mjs → realtime-session.runtime-oUd9DOcz.mjs} +41 -55
  36. package/dist/.setup/{receive-recovery-DHst8WRx.mjs → receive-recovery-CHPOsnLc.mjs} +1 -4
  37. package/dist/.setup/{resolve-allowlist-common-CwMBzbx9.mjs → resolve-allowlist-common-DPdRggu5.mjs} +4 -7
  38. package/dist/.setup/{resolve-channels-BbvsLQOZ.mjs → resolve-channels-BFPNRmVv.mjs} +21 -40
  39. package/dist/.setup/{resolve-users-ByFlR7LQ.mjs → resolve-users-0-aBuCy3.mjs} +4 -4
  40. package/dist/.setup/{retry-BEYkDy0P.mjs → retry-pz_cSha2.mjs} +3 -3
  41. package/dist/.setup/rolldown-runtime-B4FMCO8f.mjs +28 -0
  42. package/dist/.setup/{runtime-B8lJfyrA.mjs → runtime-FN000lxA.mjs} +60 -162
  43. package/dist/.setup/runtime-doctor-migrations-CshUGl36.mjs +159 -0
  44. package/dist/.setup/{runtime-DisDbixd.mjs → runtime-sUksZ--Q.mjs} +2 -5
  45. package/dist/.setup/{secret-config-contract-DFu9hfU8.mjs → secret-config-contract-uOE2J7yM.mjs} +15 -85
  46. package/dist/.setup/{security-audit-s5w50-Ly.mjs → security-audit-Cdaegq7C.mjs} +3 -1
  47. package/dist/.setup/{send-CIBzvXjS.mjs → send-CrfEI6Bs.mjs} +53 -108
  48. package/dist/.setup/{send.components-ChY21qr-.mjs → send.components-DxQAMfES.mjs} +62 -107
  49. package/dist/.setup/{send.outbound-QTyuFupn.mjs → send.outbound-BISKnb-a.mjs} +66 -140
  50. package/dist/.setup/{send.shared-VNvWfX2T.mjs → send.shared-DGFkbkQR.mjs} +10 -25
  51. package/dist/.setup/{sender-identity-0Ymgvmaj.mjs → sender-identity-B9X5Vb9R.mjs} +2 -3
  52. package/dist/.setup/setup-plugin-api-BQUBxbhe.mjs +3 -0
  53. package/dist/.setup/{shared-DHPDaMSx.mjs → shared-B3wZ4hN-.mjs} +25 -32
  54. package/dist/.setup/{subagent-hooks-CjW7r8Pe.mjs → subagent-hooks-nlUE9ow7.mjs} +5 -6
  55. package/dist/.setup/system-events-CdeZnvPV.mjs +33 -0
  56. package/dist/.setup/{target-resolver-BXpy6VT8.mjs → target-resolver-BuLapkhy.mjs} +9 -12
  57. package/dist/.setup/targets-0KUcEIYx.mjs +3 -0
  58. package/dist/.setup/{thread-bindings-CEh2dhqP.mjs → thread-bindings-D7TfgjR_.mjs} +33 -35
  59. package/dist/.setup/{thread-bindings.manager-ve-i6oqt.mjs → thread-bindings.manager-DN-NissX.mjs} +325 -233
  60. package/dist/.setup/thread-bindings.session-updates-CshfKghV.mjs +359 -0
  61. package/dist/.setup/{thread-bindings.state-BThFQEga.mjs → thread-bindings.state-g6v9zAym.mjs} +21 -62
  62. package/dist/.setup/{transcripts-source-DVegW0WI.mjs → transcripts-source-p8EV179h.mjs} +76 -235
  63. package/dist/.setup/{typing-BKZL5fGj.mjs → typing-BiHCzBRu.mjs} +2 -1
  64. package/dist/.setup/{voice-runtime-elTtjEIG.mjs → voice-runtime-B46rcwrG.mjs} +140 -244
  65. package/dist/account-inspect-api.js +1 -1
  66. package/dist/action-runtime-api.js +1 -1
  67. package/dist/activities-api.js +1 -1
  68. package/dist/api.js +18 -18
  69. package/dist/channel-config-api.js +1 -1
  70. package/dist/channel-plugin-api.js +1 -1
  71. package/dist/directory-contract-api.js +1 -1
  72. package/dist/doctor-contract-api.js +4 -4
  73. package/dist/index.js +1 -1
  74. package/dist/runtime-api.js +20 -20
  75. package/dist/secret-contract-api.js +1 -1
  76. package/dist/security-audit-contract-api.js +1 -1
  77. package/dist/setup-entry.js +1 -1
  78. package/dist/setup-plugin-api.js +1 -1
  79. package/dist/src/voice/audio-worker.runtime.js +15 -24
  80. package/dist/subagent-hooks-api.js +3 -4
  81. package/dist/transcripts-source-api.js +1 -1
  82. package/node_modules/@types/node/README.md +2 -2
  83. package/node_modules/@types/node/child_process.d.ts +1 -1
  84. package/node_modules/@types/node/crypto.d.ts +20 -8
  85. package/node_modules/@types/node/ffi.d.ts +14 -0
  86. package/node_modules/@types/node/http2.d.ts +3 -2
  87. package/node_modules/@types/node/net.d.ts +16 -4
  88. package/node_modules/@types/node/package.json +2 -17
  89. package/node_modules/@types/node/process.d.ts +1 -0
  90. package/node_modules/@types/node/quic.d.ts +39 -1
  91. package/node_modules/@types/node/stream/iter.d.ts +9 -12
  92. package/node_modules/@types/node/test/reporters.d.ts +1 -0
  93. package/node_modules/@types/node/test.d.ts +72 -0
  94. package/node_modules/@types/node/tls.d.ts +14 -10
  95. package/node_modules/@types/node/vm.d.ts +2 -1
  96. package/node_modules/@types/node/worker_threads.d.ts +4 -1
  97. package/node_modules/typebox/build/compile/code.mjs +1 -2
  98. package/node_modules/typebox/build/compile/validator.mjs +5 -1
  99. package/node_modules/typebox/build/format/iri.mjs +16 -9
  100. package/node_modules/typebox/build/guard/emit.mjs +2 -2
  101. package/node_modules/typebox/build/guard/guard.d.mts +7 -5
  102. package/node_modules/typebox/build/guard/guard.mjs +14 -9
  103. package/node_modules/typebox/build/guard/index.mjs +6 -0
  104. package/node_modules/typebox/build/guard/unicode/unicode.d.mts +6 -0
  105. package/node_modules/typebox/build/guard/unicode/unicode.mjs +35 -0
  106. package/node_modules/typebox/build/guard/{string.mjs → unicode/unicode_segment.mjs} +16 -19
  107. package/node_modules/typebox/build/schema/build.mjs +2 -3
  108. package/node_modules/typebox/build/schema/engine/_pathing.d.mts +1 -0
  109. package/node_modules/typebox/build/schema/engine/_pathing.mjs +11 -0
  110. package/node_modules/typebox/build/schema/engine/_refine.mjs +13 -5
  111. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +2 -1
  112. package/node_modules/typebox/build/schema/engine/dependencies.mjs +2 -1
  113. package/node_modules/typebox/build/schema/engine/dependentSchemas.mjs +2 -1
  114. package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +1 -1
  115. package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +2 -2
  116. package/node_modules/typebox/build/schema/engine/format.mjs +9 -2
  117. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +3 -2
  118. package/node_modules/typebox/build/schema/engine/properties.mjs +3 -2
  119. package/node_modules/typebox/build/schema/engine/propertyNames.mjs +2 -1
  120. package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +1 -1
  121. package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +2 -2
  122. package/node_modules/typebox/build/schema/engine/ref.d.mts +1 -1
  123. package/node_modules/typebox/build/schema/engine/ref.mjs +2 -2
  124. package/node_modules/typebox/build/schema/engine/schema.mjs +24 -24
  125. package/node_modules/typebox/build/schema/parse.mjs +3 -0
  126. package/node_modules/typebox/build/schema/pointer/pointer.d.mts +1 -6
  127. package/node_modules/typebox/build/schema/pointer/pointer.mjs +47 -64
  128. package/node_modules/typebox/build/system/settings/internal.d.mts +2 -0
  129. package/node_modules/typebox/build/system/settings/internal.mjs +20 -0
  130. package/node_modules/typebox/build/system/settings/settings.d.mts +11 -0
  131. package/node_modules/typebox/build/system/settings/settings.mjs +14 -0
  132. package/node_modules/typebox/build/type/extends/inference.d.mts +1 -1
  133. package/node_modules/typebox/build/type/extends/inference.mjs +15 -2
  134. package/node_modules/typebox/build/type/extends/tuple.d.mts +2 -1
  135. package/node_modules/typebox/build/type/extends/tuple.mjs +21 -1
  136. package/node_modules/typebox/build/value/parse/parse.mjs +10 -4
  137. package/node_modules/typebox/package.json +1 -1
  138. package/node_modules/typebox/readme.md +3 -1
  139. package/openclaw.plugin.json +21 -1
  140. package/package.json +5 -5
  141. package/dist/.setup/agent-components.runtime-CEPrf2SY.mjs +0 -4
  142. package/dist/.setup/probe.runtime-DBQ_AGPe.mjs +0 -2
  143. package/dist/.setup/provider-session.runtime-DrGAYnZv.mjs +0 -6
  144. package/dist/.setup/provider.runtime-BmjW_pIw.mjs +0 -2
  145. package/dist/.setup/security-audit.runtime-DHtYenx9.mjs +0 -2
  146. package/dist/.setup/setup-plugin-api-Dvr41dyx.mjs +0 -3
  147. package/dist/.setup/system-events-B2YEEMbS.mjs +0 -34
  148. package/dist/.setup/targets-CvemhN3i.mjs +0 -3
  149. package/dist/.setup/thread-bindings.session-updates-DCQq1WZ5.mjs +0 -55
  150. /package/node_modules/typebox/build/guard/{string.d.mts → unicode/unicode_segment.d.mts} +0 -0
@@ -1,67 +1,67 @@
1
- import { s as resolveDefaultDiscordAccountId } from "./accounts-CwJQoLjM.mjs";
2
- import { n as discordVoiceTranscriptsSourceProvider } from "./transcripts-source-DVegW0WI.mjs";
3
- import { t as inspectDiscordAccount } from "./account-inspect-BwQj24ht.mjs";
4
- import { r as DISCORD_LEGACY_CONFIG_RULES } from "./shared-DHPDaMSx.mjs";
5
- import { n as normalizeCompatibilityConfig } from "./doctor-contract-Co5vRCZ6.mjs";
1
+ import { s as resolveDefaultDiscordAccountId } from "./accounts-ChaMcixG.mjs";
2
+ import { n as discordVoiceTranscriptsSourceProvider } from "./transcripts-source-p8EV179h.mjs";
3
+ import { t as inspectDiscordAccount } from "./account-inspect-De8hOUxG.mjs";
4
+ import { r as DISCORD_LEGACY_CONFIG_RULES } from "./shared-B3wZ4hN-.mjs";
5
+ import { t as runtime_doctor_migrations_exports } from "./runtime-doctor-migrations-CshUGl36.mjs";
6
+ import { n as normalizeCompatibilityConfig } from "./doctor-contract-CvvgwrrG.mjs";
6
7
  import { t as isDiscordMutableAllowEntry } from "./security-doctor-nGgPm65L.mjs";
7
8
  import { expectDefined } from "openclaw/plugin-sdk/expect-runtime";
8
9
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
9
- import { asObjectRecord, collectChannelAccountScopes, collectProviderDangerousNameMatchingScopes } from "openclaw/plugin-sdk/runtime-doctor-migrations";
10
10
  //#region extensions/discord/src/doctor.ts
11
11
  function sanitizeForLog(value) {
12
12
  return value.replace(/\p{Cc}+/gu, " ").trim();
13
13
  }
14
- function collectDiscordIdLists(prefix, account) {
14
+ function collectDiscordIdLists(prefix, account, userAllowlistsOnly = false) {
15
15
  const refs = [{
16
16
  pathLabel: `${prefix}.allowFrom`,
17
17
  holder: account,
18
18
  key: "allowFrom"
19
19
  }];
20
- const dm = asObjectRecord(account.dm);
20
+ const dm = (0, runtime_doctor_migrations_exports.asObjectRecord)(account.dm);
21
21
  if (dm) {
22
22
  refs.push({
23
23
  pathLabel: `${prefix}.dm.allowFrom`,
24
24
  holder: dm,
25
25
  key: "allowFrom"
26
26
  });
27
- refs.push({
27
+ if (!userAllowlistsOnly) refs.push({
28
28
  pathLabel: `${prefix}.dm.groupChannels`,
29
29
  holder: dm,
30
30
  key: "groupChannels"
31
31
  });
32
32
  }
33
- const execApprovals = asObjectRecord(account.execApprovals);
34
- if (execApprovals) refs.push({
33
+ const execApprovals = (0, runtime_doctor_migrations_exports.asObjectRecord)(account.execApprovals);
34
+ if (execApprovals && !userAllowlistsOnly) refs.push({
35
35
  pathLabel: `${prefix}.execApprovals.approvers`,
36
36
  holder: execApprovals,
37
37
  key: "approvers"
38
38
  });
39
- const guilds = asObjectRecord(account.guilds);
39
+ const guilds = (0, runtime_doctor_migrations_exports.asObjectRecord)(account.guilds);
40
40
  if (!guilds) return refs;
41
41
  for (const guildId of Object.keys(guilds)) {
42
- const guild = asObjectRecord(guilds[guildId]);
42
+ const guild = (0, runtime_doctor_migrations_exports.asObjectRecord)(guilds[guildId]);
43
43
  if (!guild) continue;
44
44
  refs.push({
45
45
  pathLabel: `${prefix}.guilds.${guildId}.users`,
46
46
  holder: guild,
47
47
  key: "users"
48
48
  });
49
- refs.push({
49
+ if (!userAllowlistsOnly) refs.push({
50
50
  pathLabel: `${prefix}.guilds.${guildId}.roles`,
51
51
  holder: guild,
52
52
  key: "roles"
53
53
  });
54
- const channels = asObjectRecord(guild.channels);
54
+ const channels = (0, runtime_doctor_migrations_exports.asObjectRecord)(guild.channels);
55
55
  if (!channels) continue;
56
56
  for (const channelId of Object.keys(channels)) {
57
- const channel = asObjectRecord(channels[channelId]);
57
+ const channel = (0, runtime_doctor_migrations_exports.asObjectRecord)(channels[channelId]);
58
58
  if (!channel) continue;
59
59
  refs.push({
60
60
  pathLabel: `${prefix}.guilds.${guildId}.channels.${channelId}.users`,
61
61
  holder: channel,
62
62
  key: "users"
63
63
  });
64
- refs.push({
64
+ if (!userAllowlistsOnly) refs.push({
65
65
  pathLabel: `${prefix}.guilds.${guildId}.channels.${channelId}.roles`,
66
66
  holder: channel,
67
67
  key: "roles"
@@ -83,7 +83,7 @@ function scanDiscordNumericIdEntries(cfg) {
83
83
  });
84
84
  }
85
85
  };
86
- for (const scope of collectChannelAccountScopes({
86
+ for (const scope of (0, runtime_doctor_migrations_exports.collectChannelAccountScopes)({
87
87
  cfg,
88
88
  channelId: "discord"
89
89
  })) for (const ref of collectDiscordIdLists(scope.prefix, scope.account)) scanList(ref.pathLabel, ref.holder[ref.key]);
@@ -135,7 +135,7 @@ function maybeRepairDiscordNumericIds(cfg, doctorFixCommand) {
135
135
  });
136
136
  if (converted > 0) changes.push(`- ${sanitizeForLog(pathLabel)}: converted ${converted} numeric ${converted === 1 ? "ID" : "IDs"} to strings`);
137
137
  };
138
- for (const scope of collectChannelAccountScopes({
138
+ for (const scope of (0, runtime_doctor_migrations_exports.collectChannelAccountScopes)({
139
139
  cfg: next,
140
140
  channelId: "discord"
141
141
  })) for (const ref of collectDiscordIdLists(scope.prefix, scope.account)) repairList(ref.pathLabel, ref.holder, ref.key);
@@ -198,24 +198,9 @@ function collectDiscordMutableAllowlistWarnings(cfg) {
198
198
  });
199
199
  }
200
200
  };
201
- for (const scope of collectProviderDangerousNameMatchingScopes(cfg, "discord")) {
201
+ for (const scope of (0, runtime_doctor_migrations_exports.collectProviderDangerousNameMatchingScopes)(cfg, "discord")) {
202
202
  if (scope.dangerousNameMatchingEnabled) continue;
203
- addHits(`${scope.prefix}.allowFrom`, scope.account.allowFrom);
204
- const dm = asObjectRecord(scope.account.dm);
205
- if (dm) addHits(`${scope.prefix}.dm.allowFrom`, dm.allowFrom);
206
- const guilds = asObjectRecord(scope.account.guilds);
207
- if (!guilds) continue;
208
- for (const [guildId, guildRaw] of Object.entries(guilds)) {
209
- const guild = asObjectRecord(guildRaw);
210
- if (!guild) continue;
211
- addHits(`${scope.prefix}.guilds.${guildId}.users`, guild.users);
212
- const channels = asObjectRecord(guild.channels);
213
- if (!channels) continue;
214
- for (const [channelId, channelRaw] of Object.entries(channels)) {
215
- const channel = asObjectRecord(channelRaw);
216
- if (channel) addHits(`${scope.prefix}.guilds.${guildId}.channels.${channelId}.users`, channel.users);
217
- }
218
- }
203
+ for (const ref of collectDiscordIdLists(scope.prefix, scope.account, true)) addHits(ref.pathLabel, ref.holder[ref.key]);
219
204
  }
220
205
  if (hits.length === 0) return [];
221
206
  const exampleLines = hits.slice(0, 8).map((hit) => `- ${sanitizeForLog(hit.path)}: ${sanitizeForLog(hit.entry)}`);
@@ -1,4 +1,4 @@
1
- import { asObjectRecord, defineChannelAliasMigration, defineKeyMoveMigration, hasLegacyAccountStreamingAliases, normalizeChannelAccounts, stripRetiredChannelKeys } from "openclaw/plugin-sdk/runtime-doctor-migrations";
1
+ import { t as runtime_doctor_migrations_exports } from "./runtime-doctor-migrations-CshUGl36.mjs";
2
2
  import { isSupportedRealtimeVoiceActivationName, normalizeRealtimeVoiceActivationNamePrefix } from "openclaw/plugin-sdk/realtime-voice-activation";
3
3
  //#region extensions/discord/src/doctor-contract.ts
4
4
  const LEGACY_TTS_PROVIDER_KEYS = [
@@ -14,7 +14,7 @@ const RETIRED_TUNING_KEYS = /* @__PURE__ */ new Set([
14
14
  "eventQueue",
15
15
  "retry"
16
16
  ]);
17
- const streamingAliasMigration = defineChannelAliasMigration({
17
+ const streamingAliasMigration = (0, runtime_doctor_migrations_exports.defineChannelAliasMigration)({
18
18
  channelId: "discord",
19
19
  streaming: {
20
20
  defaultMode: "off",
@@ -26,8 +26,8 @@ const streamingAliasMigration = defineChannelAliasMigration({
26
26
  accounts: true
27
27
  },
28
28
  normalizeAccountExtra: ({ account, pathPrefix, changes }) => {
29
- const accountVoice = asObjectRecord(account.voice);
30
- if (!accountVoice || !migrateLegacyTtsConfig(asObjectRecord(accountVoice.tts), `${pathPrefix}.voice.tts`, changes)) return {
29
+ const accountVoice = (0, runtime_doctor_migrations_exports.asObjectRecord)(account.voice);
30
+ if (!accountVoice || !migrateLegacyTtsConfig((0, runtime_doctor_migrations_exports.asObjectRecord)(accountVoice.tts), `${pathPrefix}.voice.tts`, changes)) return {
31
31
  entry: account,
32
32
  changed: false
33
33
  };
@@ -41,11 +41,11 @@ const streamingAliasMigration = defineChannelAliasMigration({
41
41
  }
42
42
  });
43
43
  function hasLegacyTtsProviderKeys(value) {
44
- const tts = asObjectRecord(value);
44
+ const tts = (0, runtime_doctor_migrations_exports.asObjectRecord)(value);
45
45
  if (!tts) return false;
46
46
  return LEGACY_TTS_PROVIDER_KEYS.some((key) => Object.hasOwn(tts, key));
47
47
  }
48
- const guildChannelAllowMigration = defineKeyMoveMigration({
48
+ const guildChannelAllowMigration = (0, runtime_doctor_migrations_exports.defineKeyMoveMigration)({
49
49
  scope: [
50
50
  "guilds",
51
51
  "*",
@@ -56,21 +56,21 @@ const guildChannelAllowMigration = defineKeyMoveMigration({
56
56
  to: ["enabled"]
57
57
  });
58
58
  function hasLegacyDiscordGuildChannelAgentId(value) {
59
- const guilds = asObjectRecord(asObjectRecord(value)?.guilds);
59
+ const guilds = (0, runtime_doctor_migrations_exports.asObjectRecord)((0, runtime_doctor_migrations_exports.asObjectRecord)(value)?.guilds);
60
60
  if (!guilds) return false;
61
61
  return Object.values(guilds).some((guildValue) => {
62
- const channels = asObjectRecord(asObjectRecord(guildValue)?.channels);
62
+ const channels = (0, runtime_doctor_migrations_exports.asObjectRecord)((0, runtime_doctor_migrations_exports.asObjectRecord)(guildValue)?.channels);
63
63
  if (!channels) return false;
64
- return Object.values(channels).some((channel) => Object.hasOwn(asObjectRecord(channel) ?? {}, "agentId"));
64
+ return Object.values(channels).some((channel) => Object.hasOwn((0, runtime_doctor_migrations_exports.asObjectRecord)(channel) ?? {}, "agentId"));
65
65
  });
66
66
  }
67
67
  function hasUnsupportedRealtimeWakeNamesInVoice(value) {
68
- const voice = asObjectRecord(value);
69
- const wakeNames = asObjectRecord(voice?.realtime)?.wakeNames;
68
+ const voice = (0, runtime_doctor_migrations_exports.asObjectRecord)(value);
69
+ const wakeNames = (0, runtime_doctor_migrations_exports.asObjectRecord)(voice?.realtime)?.wakeNames;
70
70
  return Array.isArray(wakeNames) ? wakeNames.length === 0 || wakeNames.some((wakeName) => typeof wakeName === "string" && !isSupportedRealtimeVoiceActivationName(wakeName)) : false;
71
71
  }
72
72
  function hasUnsupportedDiscordRealtimeWakeNames(value) {
73
- const entry = asObjectRecord(value);
73
+ const entry = (0, runtime_doctor_migrations_exports.asObjectRecord)(value);
74
74
  if (!entry) return false;
75
75
  return hasUnsupportedRealtimeWakeNamesInVoice(entry.voice);
76
76
  }
@@ -86,15 +86,15 @@ function mergeMissing(target, source) {
86
86
  }
87
87
  }
88
88
  function getOrCreateTtsProviders(tts) {
89
- const providers = asObjectRecord(tts.providers) ?? {};
89
+ const providers = (0, runtime_doctor_migrations_exports.asObjectRecord)(tts.providers) ?? {};
90
90
  tts.providers = providers;
91
91
  return providers;
92
92
  }
93
93
  function mergeLegacyTtsProviderConfig(tts, legacyKey, providerId) {
94
- const legacyValue = asObjectRecord(tts[legacyKey]);
94
+ const legacyValue = (0, runtime_doctor_migrations_exports.asObjectRecord)(tts[legacyKey]);
95
95
  if (!legacyValue) return false;
96
96
  const providers = getOrCreateTtsProviders(tts);
97
- const existing = asObjectRecord(providers[providerId]) ?? {};
97
+ const existing = (0, runtime_doctor_migrations_exports.asObjectRecord)(providers[providerId]) ?? {};
98
98
  const merged = structuredClone(existing);
99
99
  mergeMissing(merged, legacyValue);
100
100
  providers[providerId] = merged;
@@ -104,27 +104,18 @@ function mergeLegacyTtsProviderConfig(tts, legacyKey, providerId) {
104
104
  function migrateLegacyTtsConfig(tts, pathLabel, changes) {
105
105
  if (!tts) return false;
106
106
  let changed = false;
107
- if (mergeLegacyTtsProviderConfig(tts, "openai", "openai")) {
108
- changes.push(`Moved ${pathLabel}.openai → ${pathLabel}.providers.openai.`);
109
- changed = true;
110
- }
111
- if (mergeLegacyTtsProviderConfig(tts, "elevenlabs", "elevenlabs")) {
112
- changes.push(`Moved ${pathLabel}.elevenlabs → ${pathLabel}.providers.elevenlabs.`);
113
- changed = true;
114
- }
115
- if (mergeLegacyTtsProviderConfig(tts, "microsoft", "microsoft")) {
116
- changes.push(`Moved ${pathLabel}.microsoft → ${pathLabel}.providers.microsoft.`);
117
- changed = true;
118
- }
119
- if (mergeLegacyTtsProviderConfig(tts, "edge", "microsoft")) {
120
- changes.push(`Moved ${pathLabel}.edge → ${pathLabel}.providers.microsoft.`);
121
- changed = true;
107
+ for (const legacyKey of LEGACY_TTS_PROVIDER_KEYS) {
108
+ const providerId = legacyKey === "edge" ? "microsoft" : legacyKey;
109
+ if (mergeLegacyTtsProviderConfig(tts, legacyKey, providerId)) {
110
+ changes.push(`Moved ${pathLabel}.${legacyKey} → ${pathLabel}.providers.${providerId}.`);
111
+ changed = true;
112
+ }
122
113
  }
123
114
  return changed;
124
115
  }
125
116
  function normalizeUnsupportedRealtimeWakeNames(entry, pathPrefix, changes) {
126
- const voice = asObjectRecord(entry.voice);
127
- const realtime = asObjectRecord(voice?.realtime);
117
+ const voice = (0, runtime_doctor_migrations_exports.asObjectRecord)(entry.voice);
118
+ const realtime = (0, runtime_doctor_migrations_exports.asObjectRecord)(voice?.realtime);
128
119
  const wakeNames = realtime?.wakeNames;
129
120
  if (!voice || !realtime || !Array.isArray(wakeNames)) return {
130
121
  entry,
@@ -179,14 +170,14 @@ function normalizeUnsupportedRealtimeWakeNames(entry, pathPrefix, changes) {
179
170
  };
180
171
  }
181
172
  function isDiscordChannelAgentBinding(value, match) {
182
- const binding = asObjectRecord(value);
183
- const bindingMatch = asObjectRecord(binding?.match);
184
- const peer = asObjectRecord(bindingMatch?.peer);
173
+ const binding = (0, runtime_doctor_migrations_exports.asObjectRecord)(value);
174
+ const bindingMatch = (0, runtime_doctor_migrations_exports.asObjectRecord)(binding?.match);
175
+ const peer = (0, runtime_doctor_migrations_exports.asObjectRecord)(bindingMatch?.peer);
185
176
  if (!binding || !bindingMatch || !peer) return false;
186
177
  return bindingMatch.channel === "discord" && bindingMatch.guildId === match.guildId && (match.accountId === void 0 || bindingMatch.accountId === match.accountId) && peer.kind === "channel" && peer.id === match.channelId;
187
178
  }
188
179
  function normalizeDiscordGuildChannelAgentIds(params) {
189
- const guilds = asObjectRecord(params.entry.guilds);
180
+ const guilds = (0, runtime_doctor_migrations_exports.asObjectRecord)(params.entry.guilds);
190
181
  if (!guilds) return {
191
182
  entry: params.entry,
192
183
  changed: false
@@ -195,13 +186,13 @@ function normalizeDiscordGuildChannelAgentIds(params) {
195
186
  let changed = false;
196
187
  const nextGuilds = { ...guilds };
197
188
  for (const [guildId, guildValue] of Object.entries(guilds)) {
198
- const guild = asObjectRecord(guildValue);
199
- const channels = asObjectRecord(guild?.channels);
189
+ const guild = (0, runtime_doctor_migrations_exports.asObjectRecord)(guildValue);
190
+ const channels = (0, runtime_doctor_migrations_exports.asObjectRecord)(guild?.channels);
200
191
  if (!guild || !channels) continue;
201
192
  let channelsChanged = false;
202
193
  const nextChannels = { ...channels };
203
194
  for (const [channelId, channelValue] of Object.entries(channels)) {
204
- const channel = asObjectRecord(channelValue);
195
+ const channel = (0, runtime_doctor_migrations_exports.asObjectRecord)(channelValue);
205
196
  if (!channel || !Object.hasOwn(channel, "agentId")) continue;
206
197
  const nextChannel = { ...channel };
207
198
  const rawAgentId = nextChannel.agentId;
@@ -274,9 +265,9 @@ const legacyConfigRules = [
274
265
  "accounts"
275
266
  ],
276
267
  message: "channels.discord.accounts.<id>.voice.tts.<provider> keys (openai/elevenlabs/microsoft/edge) are legacy; use channels.discord.accounts.<id>.voice.tts.providers.<provider>. Run \"openclaw doctor --fix\".",
277
- match: (value) => hasLegacyAccountStreamingAliases(value, (accountValue) => {
278
- const account = asObjectRecord(accountValue);
279
- return hasLegacyTtsProviderKeys(asObjectRecord(account?.voice)?.tts);
268
+ match: (value) => (0, runtime_doctor_migrations_exports.hasLegacyAccountStreamingAliases)(value, (accountValue) => {
269
+ const account = (0, runtime_doctor_migrations_exports.asObjectRecord)(accountValue);
270
+ return hasLegacyTtsProviderKeys((0, runtime_doctor_migrations_exports.asObjectRecord)(account?.voice)?.tts);
280
271
  })
281
272
  },
282
273
  {
@@ -291,7 +282,7 @@ const legacyConfigRules = [
291
282
  "accounts"
292
283
  ],
293
284
  message: "channels.discord.accounts.<id>.guilds.<id>.channels.<id>.allow is legacy; use channels.discord.accounts.<id>.guilds.<id>.channels.<id>.enabled instead. Run \"openclaw doctor --fix\".",
294
- match: (value) => hasLegacyAccountStreamingAliases(value, guildChannelAllowMigration.hasLegacy)
285
+ match: (value) => (0, runtime_doctor_migrations_exports.hasLegacyAccountStreamingAliases)(value, guildChannelAllowMigration.hasLegacy)
295
286
  },
296
287
  {
297
288
  path: ["channels", "discord"],
@@ -305,7 +296,7 @@ const legacyConfigRules = [
305
296
  "accounts"
306
297
  ],
307
298
  message: "channels.discord.accounts.<id>.guilds.<id>.channels.<id>.agentId is legacy; use top-level bindings[] with match.accountId for per-channel Discord agent routing. Run \"openclaw doctor --fix\".",
308
- match: (value) => hasLegacyAccountStreamingAliases(value, hasLegacyDiscordGuildChannelAgentId)
299
+ match: (value) => (0, runtime_doctor_migrations_exports.hasLegacyAccountStreamingAliases)(value, hasLegacyDiscordGuildChannelAgentId)
309
300
  },
310
301
  {
311
302
  path: ["channels", "discord"],
@@ -319,7 +310,7 @@ const legacyConfigRules = [
319
310
  "accounts"
320
311
  ],
321
312
  message: "channels.discord.accounts.<id>.voice.realtime.wakeNames entries longer than two words are unsupported; use one- or two-word activation names. Run \"openclaw doctor --fix\".",
322
- match: (value) => hasLegacyAccountStreamingAliases(value, hasUnsupportedDiscordRealtimeWakeNames)
313
+ match: (value) => (0, runtime_doctor_migrations_exports.hasLegacyAccountStreamingAliases)(value, hasUnsupportedDiscordRealtimeWakeNames)
323
314
  },
324
315
  ...streamingAliasMigration.legacyConfigRules
325
316
  ];
@@ -330,13 +321,13 @@ function normalizeCompatibilityConfig({ cfg }) {
330
321
  cfg,
331
322
  changes
332
323
  });
333
- const tuningKnobs = stripRetiredChannelKeys({
324
+ const tuningKnobs = (0, runtime_doctor_migrations_exports.stripRetiredChannelKeys)({
334
325
  cfg: aliases.config,
335
326
  channelId: "discord",
336
327
  keys: RETIRED_TUNING_KEYS,
337
328
  scope: "root-and-accounts"
338
329
  });
339
- const rawEntry = asObjectRecord(tuningKnobs.config.channels?.discord);
330
+ const rawEntry = (0, runtime_doctor_migrations_exports.asObjectRecord)(tuningKnobs.config.channels?.discord);
340
331
  if (!rawEntry) return {
341
332
  config: cfg,
342
333
  changes: []
@@ -360,7 +351,7 @@ function normalizeCompatibilityConfig({ cfg }) {
360
351
  });
361
352
  updated = channelAgentIds.entry;
362
353
  changed = changed || channelAgentIds.changed;
363
- const accounts = normalizeChannelAccounts({
354
+ const accounts = (0, runtime_doctor_migrations_exports.normalizeChannelAccounts)({
364
355
  entry: updated,
365
356
  pathPrefix: "channels.discord",
366
357
  changes,
@@ -387,8 +378,8 @@ function normalizeCompatibilityConfig({ cfg }) {
387
378
  });
388
379
  updated = accounts.entry;
389
380
  changed = changed || accounts.changed;
390
- const voice = asObjectRecord(updated.voice);
391
- if (voice && migrateLegacyTtsConfig(asObjectRecord(voice.tts), "channels.discord.voice.tts", changes)) {
381
+ const voice = (0, runtime_doctor_migrations_exports.asObjectRecord)(updated.voice);
382
+ if (voice && migrateLegacyTtsConfig((0, runtime_doctor_migrations_exports.asObjectRecord)(voice.tts), "channels.discord.voice.tts", changes)) {
392
383
  updated = {
393
384
  ...updated,
394
385
  voice