




















@@ -14,6 +14,10 @@ import type {
1414PluginApprovalRequest,
1515} from "openclaw/plugin-sdk/approval-runtime";
1616import type { ChannelApprovalCapability } from "openclaw/plugin-sdk/channel-contract";
17+import {
18+channelRouteTargetsMatchExact,
19+stringifyRouteThreadId,
20+} from "openclaw/plugin-sdk/channel-route";
1721import {
1822normalizeLowercaseStringOrEmpty,
1923normalizeOptionalString,
@@ -69,12 +73,7 @@ function resolveTurnSourceSlackOriginTarget(request: ApprovalRequest): SlackOrig
6973if (!parsed) {
7074return null;
7175}
72-const threadId =
73-typeof request.request.turnSourceThreadId === "string"
74- ? normalizeOptionalString(request.request.turnSourceThreadId)
75- : typeof request.request.turnSourceThreadId === "number"
76- ? String(request.request.turnSourceThreadId)
77- : undefined;
76+const threadId = stringifyRouteThreadId(request.request.turnSourceThreadId);
7877return {
7978to: `${parsed.kind}:${parsed.id}`,
8079 threadId,
@@ -87,12 +86,7 @@ function resolveSessionSlackOriginTarget(sessionTarget: {
8786}): SlackOriginTarget {
8887return {
8988to: sessionTarget.to,
90-threadId:
91-typeof sessionTarget.threadId === "string"
92- ? normalizeOptionalString(sessionTarget.threadId)
93- : typeof sessionTarget.threadId === "number"
94- ? String(sessionTarget.threadId)
95- : undefined,
89+threadId: stringifyRouteThreadId(sessionTarget.threadId),
9690};
9791}
9892@@ -117,10 +111,25 @@ function resolveSlackFallbackOriginTarget(request: ApprovalRequest): SlackOrigin
117111};
118112}
119113114+function normalizeSlackOriginTarget(target: SlackOriginTarget): SlackOriginTarget {
115+return {
116+ ...target,
117+to: normalizeComparableTarget(target.to),
118+};
119+}
120+120121function slackTargetsMatch(a: SlackOriginTarget, b: SlackOriginTarget): boolean {
121122return (
122-normalizeComparableTarget(a.to) === normalizeComparableTarget(b.to) &&
123-normalizeSlackThreadMatchKey(a.threadId) === normalizeSlackThreadMatchKey(b.threadId)
123+channelRouteTargetsMatchExact({
124+left: {
125+channel: "slack",
126+to: a.to,
127+},
128+right: {
129+channel: "slack",
130+to: b.to,
131+},
132+}) && normalizeSlackThreadMatchKey(a.threadId) === normalizeSlackThreadMatchKey(b.threadId)
124133);
125134}
126135@@ -134,6 +143,7 @@ const resolveSlackOriginTarget = createChannelNativeOriginTargetResolver({
134143}),
135144resolveTurnSourceTarget: resolveTurnSourceSlackOriginTarget,
136145resolveSessionTarget: resolveSessionSlackOriginTarget,
146+normalizeTargetForMatch: normalizeSlackOriginTarget,
137147targetsMatch: slackTargetsMatch,
138148resolveFallbackTarget: resolveSlackFallbackOriginTarget,
139149});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。