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, originatingTo: params.originatingTo,
originatingThreadId: params.originatingThreadId, originatingThreadId: params.originatingThreadId,
accountId: params.accountId, accountId: params.accountId,
replyToMode: params.replyToMode,
}); });
const dedupedPayloads = filterMessagingToolDuplicates({ const dedupedPayloads = filterMessagingToolDuplicates({
payloads: replyTaggedPayloads, payloads: replyTaggedPayloads,

View File

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

View File

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