diff --git a/src/agents/subagent-announce-delivery.test.ts b/src/agents/subagent-announce-delivery.test.ts index 83ffc32e83c..97d41ec3687 100644 --- a/src/agents/subagent-announce-delivery.test.ts +++ b/src/agents/subagent-announce-delivery.test.ts @@ -1241,8 +1241,8 @@ describe("deliverSubagentAnnouncement completion delivery", () => { expect(result).toEqual( expect.objectContaining({ - delivered: false, - path: "direct", + delivered: true, + path: "direct-fallback", }), ); expect(callGateway).toHaveBeenCalledWith( diff --git a/src/agents/subagent-announce-delivery.ts b/src/agents/subagent-announce-delivery.ts index da1ff9ec6ee..f44fe6b5668 100644 --- a/src/agents/subagent-announce-delivery.ts +++ b/src/agents/subagent-announce-delivery.ts @@ -893,7 +893,9 @@ async function sendSubagentAnnounceDirectly(params: { }); const shouldDeliverAgentFinal = deliveryTarget.deliver && !requiresMessageToolDelivery; const completionFallbackText = - params.expectsCompletionMessage && shouldDeliverAgentFinal && !agentMediatedCompletion + params.expectsCompletionMessage && + deliveryTarget.deliver && + (!agentMediatedCompletion || requiresMessageToolDelivery) ? extractThreadCompletionFallbackText(params.internalEvents) : ""; const requesterActivity = resolveRequesterSessionActivity(canonicalRequesterSessionKey); @@ -1089,6 +1091,24 @@ async function sendSubagentAnnounceDirectly(params: { requiresMessageToolDelivery && !hasGatewayAgentMessagingToolDelivery(directAnnounceResponse) ) { + const didFallback = await sendCompletionFallback({ + cfg, + channel: deliveryTarget.channel, + to: deliveryTarget.to, + accountId: deliveryTarget.accountId, + threadId: deliveryTarget.threadId, + content: completionFallbackText, + requesterSessionKey: canonicalRequesterSessionKey, + bestEffortDeliver: params.bestEffortDeliver, + idempotencyKey: params.directIdempotencyKey, + signal: params.signal, + }); + if (didFallback) { + return { + delivered: true, + path: resolveCompletionFallbackPath(deliveryTarget.threadId), + }; + } return { delivered: false, path: "direct",