UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

77 lines (76 loc) 4.85 kB
import { a as asOptionalRecord } from "./record-coerce-DItp3I4t.js"; import { g as readStringValue, t as hasNonEmptyString } from "./string-coerce-CIXf7egm.js"; import { c as normalizeToolPolicyName } from "./tool-policy-shared-DIyS0iQC.js"; import "./tool-policy-Wi0C45cX.js"; import { o as readToolResultDetails, r as isToolResultError } from "./tool-result-error-CbDLJzG-.js"; import { c as isMessageToolSendActionName, s as isMessageToolConversationCreateActionName, u as isMessagingToolDeliveryAction } from "./tool-loop-detection-C39fRNx6.js"; import { b as pluginEnvelopeHas, x as readEmbeddedMessageDeliveryFact, y as pluginBroadcastHasDelivery } from "./openclaw-tools-CNOZOjlX.js"; //#region src/agents/embedded-agent-message-tool-source-reply.ts const EXPLICIT_MESSAGE_ROUTE_KEYS = [ "channel", "target", "to", "channelId", "provider" ]; function resolveMessageToolSourceReplyFinal(args) { return (asOptionalRecord(args) ?? {}).final !== false; } function resultConfirmsCurrentSourceRoute(value) { return asOptionalRecord(asOptionalRecord(value)?.details)?.sourceReplyRoute === "current-source"; } function hasExplicitMessageRoute(args) { return EXPLICIT_MESSAGE_ROUTE_KEYS.some((key) => hasNonEmptyString(args[key])) || Array.isArray(args.targets) && args.targets.some((value) => hasNonEmptyString(value)); } function isMessageToolSourceReplyActionName(action) { return isMessageToolSendActionName(action) || [ "reply", "thread-reply", "poll" ].includes(normalizeStatus(action) ?? ""); } function readMessageToolSourceReplyText(args) { const record = asOptionalRecord(args) ?? {}; if (!isMessageToolSourceReplyActionName(record.action)) return; if (normalizeStatus(record.action) === "poll") return readStringValue(record.pollQuestion) ?? readStringValue(record.poll_question); return [ "content", "message", "text", "body" ].map((key) => readStringValue(record[key])).find((value) => value !== void 0); } function normalizeStatus(value) { return typeof value === "string" ? value.trim().toLowerCase() : void 0; } function hasPluginMessagingDeliveryId(value) { return pluginEnvelopeHas(value, "deliveryId"); } function isDeliveredMessagingToolResult(params) { const args = asOptionalRecord(params.args) ?? {}; const action = normalizeStatus(args.action); const results = [params.result, params.hookResult]; if (args.dryRun === true || results.some((result) => pluginEnvelopeHas(result, "dryRun"))) return false; if (results.some((result) => pluginEnvelopeHas(result, "partial"))) return true; if (action && isMessageToolConversationCreateActionName(action) && results.some((result) => pluginEnvelopeHas(result, "conversation"))) return true; if (action === "broadcast" && results.some(pluginBroadcastHasDelivery)) return true; if (params.isError || results.some(isToolResultError)) return false; const normalizedToolName = normalizeToolPolicyName(params.toolName ?? "message"); const nonDelivery = results.some((result) => pluginEnvelopeHas(result, "nonDelivery")); const noOp = results.some((result) => pluginEnvelopeHas(result, "noOp")); if (!nonDelivery && !noOp && isMessagingToolDeliveryAction(normalizedToolName, args) && action !== "broadcast" && results.some((result) => pluginEnvelopeHas(result, "ok"))) return true; return !nonDelivery && !noOp && results.some((result) => pluginEnvelopeHas(result, "delivery")); } function isDeliveredMessageToolOnlySourceReplyResult(params) { const deliveryFact = readEmbeddedMessageDeliveryFact(readToolResultDetails(params.hookResult)?.messageDelivery) ?? readEmbeddedMessageDeliveryFact(readToolResultDetails(params.result)?.messageDelivery); const confirmedCurrentSourceRoute = deliveryFact?.sourceReplyDelivered === true || resultConfirmsCurrentSourceRoute(params.result) || resultConfirmsCurrentSourceRoute(params.hookResult); if (params.sourceReplyDeliveryMode !== "message_tool_only" && !confirmedCurrentSourceRoute) return false; if (normalizeToolPolicyName(params.toolName) !== "message") return false; const args = asOptionalRecord(params.args) ?? {}; const sourceRouteReplyAction = (params.allowExplicitSourceRoute === true || confirmedCurrentSourceRoute) && isMessageToolSourceReplyActionName(args.action); if (!isMessageToolSendActionName(args.action) && !sourceRouteReplyAction) return false; if (hasExplicitMessageRoute(args) && params.allowExplicitSourceRoute !== true && !confirmedCurrentSourceRoute) return false; return params.deliveryConfirmed ?? (deliveryFact ? deliveryFact.status === "settled" && (!params.isError || deliveryFact.partialDelivery) : isDeliveredMessagingToolResult(params)); } //#endregion export { resolveMessageToolSourceReplyFinal as a, readMessageToolSourceReplyText as i, isDeliveredMessageToolOnlySourceReplyResult as n, isDeliveredMessagingToolResult as r, hasPluginMessagingDeliveryId as t };