























@@ -11,6 +11,12 @@ import type {
1111} from "../../plugins/agent-tool-result-middleware-types.js";
1212import { createLazyPromiseLoader } from "../../shared/lazy-promise.js";
1313import { truncateUtf16Safe } from "../../utils.js";
14+import {
15+hasMessagingDeliveryReceipt,
16+isDeliveredMessagingToolResult,
17+} from "../embedded-agent-message-tool-source-reply.js";
18+import { isMessagingToolSendAction } from "../embedded-agent-messaging.js";
19+import { isToolResultError } from "../tool-result-error.js";
14201521const log = createSubsystemLogger("agents/harness");
1622const MAX_MIDDLEWARE_CONTENT_BLOCKS = 200;
@@ -429,6 +435,42 @@ function buildMiddlewareFailureResult(): OpenClawAgentToolResult {
429435};
430436}
431437438+function buildDeliveredMessagingFailureFallback(
439+event: AgentToolResultMiddlewareEvent,
440+result: OpenClawAgentToolResult,
441+): OpenClawAgentToolResult | undefined {
442+if (
443+event.isError === true ||
444+isToolResultError(result) ||
445+!isMessagingToolSendAction(event.toolName, event.args) ||
446+!isDeliveredMessagingToolResult({
447+toolName: event.toolName,
448+args: event.args,
449+ result,
450+}) ||
451+!hasMessagingDeliveryReceipt(result)
452+) {
453+return undefined;
454+}
455+return {
456+content: [{ type: "text", text: "Message delivered, but result post-processing failed." }],
457+details: {
458+ok: true,
459+deliveryStatus: "sent",
460+middlewareWarning: "post-processing failed",
461+},
462+};
463+}
464+465+function reconcileDeliveredMessagingFailure(
466+result: OpenClawAgentToolResult,
467+fallback: OpenClawAgentToolResult | undefined,
468+): OpenClawAgentToolResult {
469+return fallback && isRecord(result.details) && result.details.middlewareError === true
470+ ? fallback
471+ : result;
472+}
473+432474export function createAgentToolResultMiddlewareRunner(
433475ctx: AgentToolResultMiddlewareContext,
434476handlers?: AgentToolResultMiddleware[],
@@ -461,6 +503,12 @@ export function createAgentToolResultMiddlewareRunner(
461503if (handlersForRun.length === 0) {
462504return event.result;
463505}
506+// Snapshot the confirmed side effect before legacy middleware can mutate
507+// or sanitization can collapse the receipt; never expose the raw result.
508+const deliveredMessagingFallback = buildDeliveredMessagingFailureFallback(
509+event,
510+event.result,
511+);
464512let current = sanitizeToolResultForMiddleware(event.result);
465513for (const handler of handlersForRun) {
466514try {
@@ -479,7 +527,10 @@ export function createAgentToolResultMiddlewareRunner(
479527 120,
480528 )}`,
481529);
482-return buildMiddlewareFailureResult();
530+return reconcileDeliveredMessagingFailure(
531+buildMiddlewareFailureResult(),
532+deliveredMessagingFallback,
533+);
483534}
484535} catch {
485536log.warn(
@@ -488,10 +539,13 @@ export function createAgentToolResultMiddlewareRunner(
488539 120,
489540 )}`,
490541);
491-return buildMiddlewareFailureResult();
542+return reconcileDeliveredMessagingFailure(
543+buildMiddlewareFailureResult(),
544+deliveredMessagingFallback,
545+);
492546}
493547}
494-return current;
548+return reconcileDeliveredMessagingFailure(current, deliveredMessagingFallback);
495549},
496550};
497551}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。