From a881bd41ebfa00cc514c8c2a3dead15758f8af95 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 16 Feb 2026 01:35:11 +0000 Subject: [PATCH] refactor(outbound): dedupe plugin outbound context --- src/infra/outbound/deliver.ts | 56 ++++++++++++++++------------------- 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/src/infra/outbound/deliver.ts b/src/infra/outbound/deliver.ts index 33ec037bf..23c576cd9 100644 --- a/src/infra/outbound/deliver.ts +++ b/src/infra/outbound/deliver.ts @@ -1,5 +1,8 @@ import type { ReplyPayload } from "../../auto-reply/types.js"; -import type { ChannelOutboundAdapter } from "../../channels/plugins/types.js"; +import type { + ChannelOutboundAdapter, + ChannelOutboundContext, +} from "../../channels/plugins/types.js"; import type { OpenClawConfig } from "../../config/config.js"; import type { sendMessageDiscord } from "../../discord/send.js"; import type { sendMessageIMessage } from "../../imessage/send.js"; @@ -110,6 +113,7 @@ function createPluginHandler( if (!outbound?.sendText || !outbound?.sendMedia) { return null; } + const baseCtx = createChannelOutboundContextBase(params); const sendText = outbound.sendText; const sendMedia = outbound.sendMedia; const chunker = outbound.chunker ?? null; @@ -121,53 +125,43 @@ function createPluginHandler( sendPayload: outbound.sendPayload ? async (payload) => outbound.sendPayload!({ - cfg: params.cfg, - to: params.to, + ...baseCtx, text: payload.text ?? "", mediaUrl: payload.mediaUrl, - accountId: params.accountId, - replyToId: params.replyToId, - threadId: params.threadId, - identity: params.identity, - gifPlayback: params.gifPlayback, - deps: params.deps, - silent: params.silent, - mediaLocalRoots: params.mediaLocalRoots, payload, }) : undefined, sendText: async (text) => sendText({ - cfg: params.cfg, - to: params.to, + ...baseCtx, text, - accountId: params.accountId, - replyToId: params.replyToId, - threadId: params.threadId, - identity: params.identity, - gifPlayback: params.gifPlayback, - deps: params.deps, - silent: params.silent, - mediaLocalRoots: params.mediaLocalRoots, }), sendMedia: async (caption, mediaUrl) => sendMedia({ - cfg: params.cfg, - to: params.to, + ...baseCtx, text: caption, mediaUrl, - accountId: params.accountId, - replyToId: params.replyToId, - threadId: params.threadId, - identity: params.identity, - gifPlayback: params.gifPlayback, - deps: params.deps, - silent: params.silent, - mediaLocalRoots: params.mediaLocalRoots, }), }; } +function createChannelOutboundContextBase( + params: ChannelHandlerParams, +): Omit { + return { + cfg: params.cfg, + to: params.to, + accountId: params.accountId, + replyToId: params.replyToId, + threadId: params.threadId, + identity: params.identity, + gifPlayback: params.gifPlayback, + deps: params.deps, + silent: params.silent, + mediaLocalRoots: params.mediaLocalRoots, + }; +} + const isAbortError = (err: unknown): boolean => err instanceof Error && err.name === "AbortError"; type DeliverOutboundPayloadsCoreParams = {