From fb4127082aee18d955fb67cf64341de8db2a5d5a Mon Sep 17 00:00:00 2001 From: Tak Hoffman <781889+Takhoffman@users.noreply.github.com> Date: Fri, 3 Apr 2026 11:09:28 -0500 Subject: [PATCH] fix: honor signal action discovery account config --- extensions/signal/src/message-actions.test.ts | 12 ++++++++++++ extensions/signal/src/message-actions.ts | 13 ++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/extensions/signal/src/message-actions.test.ts b/extensions/signal/src/message-actions.test.ts index f3a3b9adc60..b977238663c 100644 --- a/extensions/signal/src/message-actions.test.ts +++ b/extensions/signal/src/message-actions.test.ts @@ -14,6 +14,7 @@ function createSignalAccountOverrideCfg(): OpenClawConfig { return { channels: { signal: { + account: "+15550002222", actions: { reactions: false }, accounts: { work: { account: "+15550001111", actions: { reactions: true } }, @@ -48,6 +49,17 @@ describe("signalMessageActions", () => { ).toEqual(["send", "react"]); }); + it("honors account-scoped reaction gates during discovery", () => { + const cfg = createSignalAccountOverrideCfg(); + + expect(signalMessageActions.describeMessageTool?.({ cfg, accountId: "default" })?.actions).toEqual( + ["send"], + ); + expect(signalMessageActions.describeMessageTool?.({ cfg, accountId: "work" })?.actions).toEqual( + ["send", "react"], + ); + }); + it("skips send for plugin dispatch", () => { expect(signalMessageActions.supportsAction?.({ action: "send" })).toBe(false); expect(signalMessageActions.supportsAction?.({ action: "react" })).toBe(true); diff --git a/extensions/signal/src/message-actions.ts b/extensions/signal/src/message-actions.ts index ca3d9ffd717..0bc97620780 100644 --- a/extensions/signal/src/message-actions.ts +++ b/extensions/signal/src/message-actions.ts @@ -73,18 +73,17 @@ async function mutateSignalReaction(params: { } export const signalMessageActions: ChannelMessageActionAdapter = { - describeMessageTool: ({ cfg }) => { - const accounts = listEnabledSignalAccounts(cfg); - if (accounts.length === 0) { - return null; - } - const configuredAccounts = accounts.filter((account) => account.configured); + describeMessageTool: ({ cfg, accountId }) => { + const configuredAccounts = accountId + ? [resolveSignalAccount({ cfg, accountId })].filter( + (account) => account.enabled && account.configured, + ) + : listEnabledSignalAccounts(cfg).filter((account) => account.configured); if (configuredAccounts.length === 0) { return null; } const actions = new Set(["send"]); - const reactionsEnabled = configuredAccounts.some((account) => createActionGate(account.config.actions)("reactions"), );