Skip to content

Commit 7e0d275

Browse files
committed
fix(agents): preserve skipped subagent delivery state
1 parent faae752 commit 7e0d275

2 files changed

Lines changed: 26 additions & 12 deletions

File tree

src/agents/subagent-registry-lifecycle.ts

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -803,28 +803,37 @@ export function createSubagentRegistryLifecycleController(params: {
803803
return;
804804
}
805805
if (didAnnounce) {
806-
if (!options?.skipAnnounce) {
807-
const delivery = ensureDeliveryState(entry);
808-
const deliveredAt = delivery.deliveredAt ?? Date.now();
806+
const delivery = ensureDeliveryState(entry);
807+
const shouldCreditDelivery =
808+
!options?.skipAnnounce ||
809+
delivery.status === "delivered" ||
810+
typeof delivery.announcedAt === "number";
811+
if (shouldCreditDelivery) {
812+
const deliveredAt = delivery.deliveredAt ?? delivery.announcedAt ?? Date.now();
809813
delivery.status = "delivered";
810814
delivery.deliveredAt = deliveredAt;
811-
delivery.announcedAt = deliveredAt;
812-
params.persist();
815+
delivery.announcedAt = delivery.announcedAt ?? deliveredAt;
816+
if (!options?.skipAnnounce) {
817+
delivery.announcedAt = deliveredAt;
818+
params.persist();
819+
}
813820
}
814821
clearPendingFinalDelivery(entry);
815-
const delivery = ensureDeliveryState(entry);
816-
delivery.status = "delivered";
817-
delivery.suspendedAt = undefined;
818-
delivery.suspendedReason = undefined;
819-
if (!options?.skipDeliveryStatus) {
822+
const finalDelivery = ensureDeliveryState(entry);
823+
if (shouldCreditDelivery) {
824+
finalDelivery.status = "delivered";
825+
finalDelivery.suspendedAt = undefined;
826+
finalDelivery.suspendedReason = undefined;
827+
}
828+
if (shouldCreditDelivery && !options?.skipDeliveryStatus) {
820829
safeSetSubagentTaskDeliveryStatus({
821830
runId,
822831
childSessionKey: entry.childSessionKey,
823832
deliveryStatus: "delivered",
824833
});
825834
}
826-
delivery.lastError = undefined;
827-
delivery.lastDropReason = undefined;
835+
finalDelivery.lastError = undefined;
836+
finalDelivery.lastDropReason = undefined;
828837
entry.wakeOnDescendantSettle = undefined;
829838
const completion = ensureCompletionState(entry);
830839
completion.fallbackResultText = undefined;

src/gateway/server-methods/agent.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2883,6 +2883,11 @@ describe("gateway agent handler", () => {
28832883
expect(task.runtime).not.toBe("cli");
28842884
});
28852885

2886+
await waitForAssertion(() => {
2887+
expectRecordFields(getSubagentRunByChildSessionKey(childSessionKey), {
2888+
cleanupCompletedAt: expect.any(Number),
2889+
});
2890+
});
28862891
const run = requireValue(
28872892
getSubagentRunByChildSessionKey(childSessionKey),
28882893
"expected subagent registry run",

0 commit comments

Comments
 (0)