
























@@ -182,7 +182,56 @@ describe("legacy migrate audio transcription", () => {
182182});
183183184184describe("legacy migrate mention routing", () => {
185-it("does not rewrite removed routing.groupChat.requireMention migrations", () => {
185+it("moves legacy routing group chat settings into current channel and message config", () => {
186+const res = migrateLegacyConfigForTest({
187+routing: {
188+allowFrom: ["+15550001111"],
189+groupChat: {
190+requireMention: false,
191+historyLimit: 12,
192+mentionPatterns: ["@openclaw"],
193+},
194+},
195+channels: {
196+whatsapp: {},
197+telegram: {
198+groups: {
199+"*": { requireMention: true },
200+},
201+},
202+imessage: {},
203+},
204+});
205+206+const migratedConfig = res.config as Record<string, unknown> | null;
207+expect(migratedConfig?.routing).toBeUndefined();
208+expect(res.config?.channels?.whatsapp?.allowFrom).toEqual(["+15550001111"]);
209+expect(res.config?.channels?.whatsapp?.groups).toEqual({
210+"*": { requireMention: false },
211+});
212+expect(res.config?.channels?.telegram?.groups).toEqual({
213+"*": { requireMention: true },
214+});
215+expect(res.config?.channels?.imessage?.groups).toEqual({
216+"*": { requireMention: false },
217+});
218+expect(res.config?.messages?.groupChat).toEqual({
219+historyLimit: 12,
220+mentionPatterns: ["@openclaw"],
221+});
222+expect(res.changes).toEqual(
223+expect.arrayContaining([
224+"Moved routing.allowFrom → channels.whatsapp.allowFrom.",
225+'Moved routing.groupChat.requireMention → channels.whatsapp.groups."*".requireMention.',
226+'Removed routing.groupChat.requireMention (channels.telegram.groups."*" already set).',
227+'Moved routing.groupChat.requireMention → channels.imessage.groups."*".requireMention.',
228+"Moved routing.groupChat.historyLimit → messages.groupChat.historyLimit.",
229+"Moved routing.groupChat.mentionPatterns → messages.groupChat.mentionPatterns.",
230+]),
231+);
232+});
233+234+it("removes legacy routing requireMention when no compatible channel exists", () => {
186235const res = migrateLegacyConfigForTest({
187236routing: {
188237groupChat: {
@@ -191,11 +240,14 @@ describe("legacy migrate mention routing", () => {
191240},
192241});
193242194-expect(res.changes).toEqual([]);
195-expect(res.config).toBeNull();
243+const migratedConfig = res.config as Record<string, unknown> | null;
244+expect(migratedConfig?.routing).toBeUndefined();
245+expect(res.changes).toEqual([
246+"Removed routing.groupChat.requireMention (no configured WhatsApp, Telegram, or iMessage channel found).",
247+]);
196248});
197249198-it("does not rewrite removed channels.telegram.requireMention migrations", () => {
250+it("moves channels.telegram.requireMention into the wildcard group default", () => {
199251const res = migrateLegacyConfigForTest({
200252channels: {
201253telegram: {
@@ -204,8 +256,14 @@ describe("legacy migrate mention routing", () => {
204256},
205257});
206258207-expect(res.changes).toEqual([]);
208-expect(res.config).toBeNull();
259+expect(res.config?.channels?.telegram).toEqual({
260+groups: {
261+"*": { requireMention: false },
262+},
263+});
264+expect(res.changes).toContain(
265+'Moved channels.telegram.requireMention → channels.telegram.groups."*".requireMention.',
266+);
209267});
210268});
211269此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。