diff --git a/extensions/googlechat/src/channel.test.ts b/extensions/googlechat/src/channel.test.ts index 54d0cb96cd0..eb6f25d5d68 100644 --- a/extensions/googlechat/src/channel.test.ts +++ b/extensions/googlechat/src/channel.test.ts @@ -321,6 +321,31 @@ describe("googlechatPlugin outbound sendMedia", () => { }); }); +describe("googlechatPlugin threading", () => { + it("honors per-account replyToMode overrides", () => { + const resolveReplyToMode = googlechatPlugin.threading?.resolveReplyToMode; + if (!resolveReplyToMode) { + throw new Error("Expected googlechatPlugin.threading.resolveReplyToMode to be defined"); + } + + const cfg = { + channels: { + googlechat: { + replyToMode: "all", + accounts: { + work: { + replyToMode: "first", + }, + }, + }, + }, + } as OpenClawConfig; + + expect(resolveReplyToMode({ cfg, accountId: "work" })).toBe("first"); + expect(resolveReplyToMode({ cfg, accountId: "default" })).toBe("all"); + }); +}); + const resolveTarget = googlechatPlugin.outbound?.resolveTarget; describe("googlechatPlugin outbound resolveTarget", () => { diff --git a/extensions/googlechat/src/channel.ts b/extensions/googlechat/src/channel.ts index 0c42f8abeb0..be656c1ce7c 100644 --- a/extensions/googlechat/src/channel.ts +++ b/extensions/googlechat/src/channel.ts @@ -343,7 +343,11 @@ export const googlechatPlugin = createChatChannelPlugin({ collectWarnings: collectGoogleChatSecurityWarnings, }, threading: { - topLevelReplyToMode: "googlechat", + scopedAccountReplyToMode: { + resolveAccount: (cfg, accountId) => resolveGoogleChatAccount({ cfg, accountId }), + resolveReplyToMode: (account) => account.config.replyToMode, + fallback: "off", + }, }, outbound: { base: {