import { isSingleUseReplyToMode } from "openclaw/plugin-sdk/reply-reference"; import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/text-runtime"; import { parseSlackTarget } from "./targets.js"; export function resolveSlackAutoThreadId(params: { to: string; toolContext?: { currentChannelId?: string; currentThreadTs?: string; replyToMode?: "off" | "first" | "all" | "batched"; hasRepliedRef?: { value: boolean }; }; }): string | undefined { const context = params.toolContext; if (!context?.currentThreadTs || !context.currentChannelId) { return undefined; } if (context.replyToMode !== "all" && !isSingleUseReplyToMode(context.replyToMode ?? "off")) { return undefined; } const parsedTarget = parseSlackTarget(params.to, { defaultKind: "channel" }); if (!parsedTarget || parsedTarget.kind !== "channel") { return undefined; } if ( normalizeLowercaseStringOrEmpty(parsedTarget.id) !== normalizeLowercaseStringOrEmpty(context.currentChannelId) ) { return undefined; } if (isSingleUseReplyToMode(context.replyToMode ?? "off") && context.hasRepliedRef?.value) { return undefined; } return context.currentThreadTs; }