Slack: treat auto-threaded tool sends as same thread

This commit is contained in:
SocialNerd42069 2026-01-27 14:42:08 -06:00
parent 40d2842443
commit f04ddea9a1
3 changed files with 11 additions and 1 deletions

View File

@ -97,6 +97,7 @@ export function buildReplyPayloads(params: {
originatingTo: params.originatingTo,
originatingThreadId: params.originatingThreadId,
accountId: params.accountId,
replyToMode: params.replyToMode,
});
const dedupedPayloads = filterMessagingToolDuplicates({
payloads: replyTaggedPayloads,

View File

@ -243,6 +243,7 @@ export function createFollowupRunner(params: {
originatingTo: queued.originatingTo,
originatingThreadId: queued.originatingThreadId,
accountId: queued.run.agentAccountId,
replyToMode,
});
const finalPayloads = suppressMessagingToolReplies ? [] : dedupedPayloads;

View File

@ -84,6 +84,7 @@ export function shouldSuppressMessagingToolReplies(params: {
originatingTo?: string;
originatingThreadId?: string | number;
accountId?: string;
replyToMode?: ReplyToMode;
}): boolean {
const provider = params.messageProvider?.trim().toLowerCase();
if (!provider) return false;
@ -99,6 +100,10 @@ export function shouldSuppressMessagingToolReplies(params: {
};
const originThreadId = normalizeThreadId(params.originatingThreadId);
const originAccount = normalizeAccountId(params.accountId);
const shouldAssumeAutoThread =
provider === "slack" &&
(params.replyToMode === "all" || params.replyToMode === "first") &&
Boolean(originThreadId);
const sentTargets = params.messagingToolSentTargets ?? [];
if (sentTargets.length === 0) return false;
return sentTargets.some((target) => {
@ -110,7 +115,10 @@ export function shouldSuppressMessagingToolReplies(params: {
if (originAccount && targetAccount && originAccount !== targetAccount) {
return false;
}
const targetThreadId = normalizeThreadId(target.threadId);
let targetThreadId = normalizeThreadId(target.threadId);
if (!targetThreadId && shouldAssumeAutoThread) {
targetThreadId = originThreadId;
}
if (originThreadId || targetThreadId) {
return originThreadId === targetThreadId;
}