UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

42 lines (41 loc) 2.45 kB
import { c as normalizeOptionalString } from "./string-coerce-mnp54Vah.js"; import { i as mergeDeliveryContext, n as deliveryContextFromSession, o as normalizeDeliveryContext } from "./delivery-context.shared-CpAdEETO.js"; import { t as getLoadedChannelPluginForRead } from "./registry-loaded-read-7phT5GIn.js"; import { r as isInternalMessageChannel } from "./message-channel-BiOeMu0l.js"; import { i as stripTargetTopicSuffix, n as stripTargetKindPrefix, r as stripTargetProviderPrefix } from "./channel-target-prefix-l64LTfQ6.js"; //#region src/agents/subagent-announce-origin.ts /** * Subagent announcement origin resolver. * * Merges requester and session delivery context while avoiding stale thread ids after retargeting. */ function normalizeAnnounceRouteTarget(context) { const rawTo = normalizeOptionalString(context?.to); if (!rawTo) return; const channel = normalizeOptionalString(context?.channel); const messaging = channel ? getLoadedChannelPluginForRead(channel)?.messaging : void 0; const route = stripTargetTopicSuffix(stripTargetKindPrefix(stripTargetProviderPrefix(rawTo, channel ?? ""), ["group", "channel"])); return (messaging?.normalizeTarget?.(route) ?? route) || void 0; } function shouldStripThreadFromAnnounceEntry(normalizedRequester, normalizedEntry) { if (!normalizedRequester?.to || normalizedRequester.threadId != null || normalizedEntry?.threadId == null) return false; const requesterTarget = normalizeAnnounceRouteTarget(normalizedRequester); const entryTarget = normalizeAnnounceRouteTarget(normalizedEntry); if (requesterTarget && entryTarget) return requesterTarget !== entryTarget; return false; } /** Resolve the delivery origin for a subagent completion announcement. */ function resolveAnnounceOrigin(entry, requesterOrigin) { const normalizedRequester = normalizeDeliveryContext(requesterOrigin); const normalizedEntry = deliveryContextFromSession(entry); if (normalizedRequester?.channel && isInternalMessageChannel(normalizedRequester.channel)) return mergeDeliveryContext({ accountId: normalizedRequester.accountId, threadId: normalizedRequester.threadId }, normalizedEntry); return mergeDeliveryContext(normalizedRequester, normalizedEntry && shouldStripThreadFromAnnounceEntry(normalizedRequester, normalizedEntry) ? (() => { const { threadId: _ignore, ...rest } = normalizedEntry; return rest; })() : normalizedEntry); } //#endregion export { resolveAnnounceOrigin as t };