fix(discord): normalize legacy streaming aliases

This commit is contained in:
Peter Steinberger
2026-04-12 11:52:33 -07:00
parent 2c590bdbc4
commit cb5a25d8d8
3 changed files with 178 additions and 15 deletions

View File

@@ -3,7 +3,12 @@ import type {
ChannelDoctorLegacyConfigRule,
} from "openclaw/plugin-sdk/channel-contract";
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-runtime";
import { asObjectRecord, normalizeLegacyDmAliases } from "openclaw/plugin-sdk/runtime-doctor";
import {
asObjectRecord,
normalizeLegacyDmAliases,
normalizeLegacyStreamingAliases,
} from "openclaw/plugin-sdk/runtime-doctor";
import { resolveDiscordPreviewStreamMode } from "./preview-streaming.js";
const LEGACY_TTS_PROVIDER_KEYS = ["openai", "elevenlabs", "microsoft", "edge"] as const;
@@ -141,6 +146,16 @@ export function normalizeCompatibilityConfig({
updated = dm.entry;
changed = changed || dm.changed;
const streaming = normalizeLegacyStreamingAliases({
entry: updated,
pathPrefix: "channels.discord",
changes,
resolvedMode: resolveDiscordPreviewStreamMode(updated),
includePreviewChunk: true,
});
updated = streaming.entry;
changed = changed || streaming.changed;
const rawAccounts = asObjectRecord(updated.accounts);
if (rawAccounts) {
let accountsChanged = false;
@@ -159,6 +174,15 @@ export function normalizeCompatibilityConfig({
});
accountEntry = accountDm.entry;
accountChanged = accountDm.changed;
const accountStreaming = normalizeLegacyStreamingAliases({
entry: accountEntry,
pathPrefix: `channels.discord.accounts.${accountId}`,
changes,
resolvedMode: resolveDiscordPreviewStreamMode(accountEntry),
includePreviewChunk: true,
});
accountEntry = accountStreaming.entry;
accountChanged = accountChanged || accountStreaming.changed;
const accountVoice = asObjectRecord(accountEntry.voice);
if (
accountVoice &&

View File

@@ -8,7 +8,7 @@ import {
} from "./doctor.js";
describe("discord doctor", () => {
it("leaves legacy discord streaming aliases untouched during doctor normalization", () => {
it("normalizes legacy discord streaming aliases for runtime config", () => {
const normalize = discordDoctor.normalizeCompatibilityConfig;
expect(normalize).toBeDefined();
if (!normalize) {
@@ -39,22 +39,39 @@ describe("discord doctor", () => {
});
expect(result.config.channels?.discord).toEqual({
streamMode: "block",
chunkMode: "newline",
blockStreaming: true,
draftChunk: {
minChars: 120,
streaming: {
mode: "block",
chunkMode: "newline",
block: {
enabled: true,
},
preview: {
chunk: {
minChars: 120,
},
},
},
accounts: {
work: {
streaming: false,
blockStreamingCoalesce: {
idleMs: 250,
streaming: {
mode: "off",
block: {
coalesce: {
idleMs: 250,
},
},
},
},
},
});
expect(result.changes).toEqual([]);
expect(result.changes).toEqual([
"Moved channels.discord.streamMode → channels.discord.streaming.mode (block).",
"Moved channels.discord.chunkMode → channels.discord.streaming.chunkMode.",
"Moved channels.discord.blockStreaming → channels.discord.streaming.block.enabled.",
"Moved channels.discord.draftChunk → channels.discord.streaming.preview.chunk.",
"Moved channels.discord.accounts.work.streaming (boolean) → channels.discord.accounts.work.streaming.mode (off).",
"Moved channels.discord.accounts.work.blockStreamingCoalesce → channels.discord.accounts.work.streaming.block.coalesce.",
]);
});
it("moves account voice.tts.edge into providers.microsoft", () => {