fix: backport media completion fallback

This commit is contained in:
Peter Steinberger
2026-05-05 23:34:08 +01:00
parent 8a601b0607
commit 4aa91b0b97
2 changed files with 23 additions and 3 deletions

View File

@@ -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(

View File

@@ -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",