feat: return completed handoffs to Agent Chat (#14408)

Return completed Agent Chat handoffs through a durable outbox and scope each generated update to its supplied tasks. Add recovery, browser delivery, result access, and calibrated quality coverage.

Validated with two consecutive ten-case Claude/Codex campaigns, all CI checks, and a 5/5 review.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
DottaandPaperclip authored and GitHub committed 2026-09-29 10:25:52 -05:00
1 parent 3b4b270650
commit 83076d7e7c
59 files changed
+2696 -83

No files matched your search

@@ -44,7 +44,7 @@ export function buildNativeContinuationPrompt(input: {
});
// Other provider, attachment, question, approval, and recovery paths keep
// their specialized framing. A matching prior run still gates every delta.
if ((wake.externalChatProvider && !externalChat) ||
if (rawWake.chatCompletionUpdates || (wake.externalChatProvider && !externalChat) ||
(!['issue_commented', 'issue_children_completed'].includes(wake.reason ?? '') &&
!(externalChat && wake.reason === "External chat message received")) ||
wake.fallbackFetchNeeded || wake.truncated || wake.recovery || continuation?.interruptedRunId ||
@@ -969,7 +969,7 @@ export async function repairCommittedNativeChatResponse(
input.issueId,
resolved.text,
{ agentId: run.agentId, runId: run.id },
{ authorizationReason: CHAT_RUN_PRESENTATION_AUTHORIZATION_REASON },
{ authorizationReason: CHAT_RUN_PRESENTATION_AUTHORIZATION_REASON, completionReply: true },
tx,
);
const presentationDecision = {
@@ -1944,6 +1944,7 @@ export async function commitNativeStatusDecision(input: {
completedChildIssueId: input.issueId,
childIssueIds: parent.childIssueIds,
childIssueSummaries: parent.childIssueSummaries,
onboardingCompletion: parent.onboardingCompletion,
childIssueSummaryTruncated: parent.childIssueSummaryTruncated,
}
: null;
@@ -1988,12 +1989,14 @@ export async function commitNativeStatusDecision(input: {
completedChildIssueId: input.issueId,
childIssueIds: parent.childIssueIds,
childIssueSummaries: parent.childIssueSummaries,
onboardingCompletion: parent.onboardingCompletion,
childIssueSummaryTruncated: parent.childIssueSummaryTruncated,
},
contextSnapshot: {
completedChildIssueId: input.issueId,
childIssueIds: parent.childIssueIds,
childIssueSummaries: parent.childIssueSummaries,
onboardingCompletion: parent.onboardingCompletion,
childIssueSummaryTruncated: parent.childIssueSummaryTruncated,
},
});
@@ -2005,6 +2008,7 @@ export async function commitNativeStatusDecision(input: {
parentIssueId: parent.id,
completedChildIssueId: input.issueId,
childIssueSummaries: parent.childIssueSummaries,
onboardingCompletion: parent.onboardingCompletion,
childIssueSummaryTruncated: parent.childIssueSummaryTruncated,
},
});