openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
93 lines (92 loc) • 4.47 kB
JavaScript
import { t as formatErrorMessage } from "./errors-BvOkmQM5.mjs";
import { c as getReplyPayloadMetadata } from "./reply-payload-BEgsL2xJ.mjs";
import { i as serializeDurableMessagePayloadOutcomes } from "./send-pkDeJujE.mjs";
import "./runtime-JocY4hue.mjs";
import { t as hasAnyNonEmptyString } from "./delivery-evidence-values-CSe-71lq.mjs";
//#region src/agents/command/delivery-result.ts
function hasNonEmptyArray(value) {
return Array.isArray(value) && value.length > 0;
}
function buildDeliveryResult(params) {
const successfulCronAdds = params.result.successfulCronAdds;
const hasSuccessfulCronAdds = typeof successfulCronAdds === "number" && Number.isFinite(successfulCronAdds) && successfulCronAdds > 0;
return {
payloads: params.payloads,
meta: params.meta,
...params.result.didSendViaMessagingTool === true ? { didSendViaMessagingTool: true } : {},
...params.result.didDeliverSourceReplyViaMessageTool === true ? { didDeliverSourceReplyViaMessageTool: true } : {},
...params.result.sourceReplyDelivered ? { sourceReplyDelivered: true } : {},
...params.result.sourceReplyDeliveryState !== void 0 ? { sourceReplyDeliveryState: params.result.sourceReplyDeliveryState } : {},
...hasNonEmptyArray(params.result.messagingToolSourceReplyPayloads) ? { messagingToolSourceReplyPayloads: params.result.messagingToolSourceReplyPayloads } : {},
...hasAnyNonEmptyString(params.result.messagingToolSentTexts) ? { messagingToolSentTexts: params.result.messagingToolSentTexts } : {},
...hasAnyNonEmptyString(params.result.messagingToolSentMediaUrls) ? { messagingToolSentMediaUrls: params.result.messagingToolSentMediaUrls } : {},
...hasNonEmptyArray(params.result.messagingToolSentTargets) ? { messagingToolSentTargets: params.result.messagingToolSentTargets } : {},
...params.result.didSendDeterministicApprovalPrompt === true ? { didSendDeterministicApprovalPrompt: true } : {},
...hasNonEmptyArray(params.result.acceptedSessionSpawns) ? { acceptedSessionSpawns: params.result.acceptedSessionSpawns } : {},
...params.result.requesterContinuationSettled === true ? { requesterContinuationSettled: true } : {},
...hasSuccessfulCronAdds ? { successfulCronAdds } : {},
...params.deliverySucceeded !== void 0 ? { deliverySucceeded: params.deliverySucceeded } : {},
...params.deliveryStatus ? { deliveryStatus: params.deliveryStatus } : {}
};
}
function deliveryStatusFromDurableSend(send) {
const payloadOutcomes = serializeDurableMessagePayloadOutcomes(send.payloadOutcomes, { includeHookEffect: true });
const status = {
requested: true,
attempted: true,
status: send.status
};
switch (send.status) {
case "sent":
case "suppressed": return {
...status,
succeeded: true,
...send.status === "suppressed" ? { reason: send.reason } : {},
resultCount: send.status === "sent" ? send.results.length : 0,
...payloadOutcomes ? { payloadOutcomes } : {}
};
case "partial_failed":
case "failed": return {
...status,
succeeded: send.status === "partial_failed" ? "partial" : false,
error: true,
errorMessage: formatErrorMessage(send.error),
...send.status === "partial_failed" ? {
resultCount: send.results.length,
sentBeforeError: true
} : send.stage ? { reason: send.stage } : {},
...payloadOutcomes ? { payloadOutcomes } : {}
};
}
return send;
}
function preDeliveryFailureStatus(reason) {
return {
requested: true,
attempted: false,
status: "failed",
succeeded: false,
error: true,
reason
};
}
function noVisiblePayloadStatus(reason) {
return {
requested: true,
attempted: false,
status: "suppressed",
succeeded: true,
reason: reason === "channel_transform" ? reason : "no_visible_payload",
resultCount: 0
};
}
/**
* Payloads the source may receive. A tool-only source gets only host-granted ones
* (diagnostics, media); a host-owned turn may also keep runtime error payloads out of it.
*/
function selectSourceDeliverablePayloads(payloads, opts) {
const deliverable = opts.internalDeliverySuppressErrors ? payloads.filter((payload) => payload.isError !== true) : payloads;
return opts.sourceReplyDeliveryMode === "message_tool_only" ? deliverable.filter((payload) => getReplyPayloadMetadata(payload)?.deliverDespiteSourceReplySuppression === true) : deliverable;
}
//#endregion
export { selectSourceDeliverablePayloads as a, preDeliveryFailureStatus as i, deliveryStatusFromDurableSend as n, noVisiblePayloadStatus as r, buildDeliveryResult as t };