fix(discord): keep exec approval fallbacks reachable

This commit is contained in:
Peter Steinberger
2026-04-29 06:29:36 +01:00
parent 66b4324d41
commit 548c280eff
14 changed files with 270 additions and 10 deletions

View File

@@ -791,11 +791,12 @@ export const discordPlugin: ChannelPlugin<ResolvedDiscordAccount, DiscordProbe>
...discordOutbound,
preferFinalAssistantVisibleText: true,
shouldTreatDeliveredTextAsVisible: shouldTreatDiscordDeliveredTextAsVisible,
shouldSuppressLocalPayloadPrompt: ({ cfg, accountId, payload }) =>
shouldSuppressLocalPayloadPrompt: ({ cfg, accountId, payload, hint }) =>
shouldSuppressLocalDiscordExecApprovalPrompt({
cfg,
accountId,
payload,
hint,
}),
},
});

View File

@@ -1,3 +1,4 @@
import type { ChannelOutboundPayloadHint } from "openclaw/plugin-sdk/channel-contract";
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-types";
import type { DiscordExecApprovalConfig } from "openclaw/plugin-sdk/config-types";
import type { ReplyPayload } from "openclaw/plugin-sdk/reply-dispatch-runtime";
@@ -5,6 +6,7 @@ import { resolveDiscordAccount } from "./accounts.js";
import {
getExecApprovalReplyMetadata,
isChannelExecApprovalClientEnabledFromConfig,
matchesApprovalRequestFilters,
resolveApprovalApprovers,
} from "./approval-runtime.js";
import { parseDiscordTarget } from "./target-parsing.js";
@@ -87,9 +89,22 @@ export function shouldSuppressLocalDiscordExecApprovalPrompt(params: {
cfg: OpenClawConfig;
accountId?: string | null;
payload: ReplyPayload;
hint?: ChannelOutboundPayloadHint;
}): boolean {
const metadata = getExecApprovalReplyMetadata(params.payload);
const config = resolveDiscordAccount(params).config.execApprovals;
return (
params.hint?.kind === "approval-pending" &&
params.hint.nativeRouteActive === true &&
isDiscordExecApprovalClientEnabled(params) &&
getExecApprovalReplyMetadata(params.payload) !== null
metadata !== null &&
matchesApprovalRequestFilters({
request: {
agentId: metadata.agentId,
sessionKey: metadata.sessionKey,
},
agentFilter: config?.agentFilter,
sessionFilter: config?.sessionFilter,
})
);
}