From 8e9607c06428174e43c27937ed1eddb8d244fdff Mon Sep 17 00:00:00 2001 From: Tak Hoffman <781889+Takhoffman@users.noreply.github.com> Date: Fri, 3 Apr 2026 10:12:32 -0500 Subject: [PATCH] fix: honor googlechat account replyToMode --- extensions/googlechat/src/channel.test.ts | 25 +++++++++++++++++++++++ extensions/googlechat/src/channel.ts | 6 +++++- 2 files changed, 30 insertions(+), 1 deletion(-) 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: {