Skip to content

Commit 0f6d92b

Browse files
fix(agents): preserve accepted spawn terminal success
1 parent 2c045f7 commit 0f6d92b

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

src/agents/accepted-session-spawn.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,14 @@ export function normalizeAcceptedSessionSpawnResult(result: unknown): AcceptedSe
2424
return { runId, childSessionKey };
2525
}
2626

27-
export function hasAcceptedSessionSpawn(
28-
acceptedSessionSpawns?: readonly AcceptedSessionSpawn[],
29-
): boolean {
27+
export function hasAcceptedSessionSpawn(acceptedSessionSpawns?: readonly unknown[]): boolean {
3028
return (acceptedSessionSpawns ?? []).some((spawn) => {
29+
const record = asRecord(spawn);
30+
if (!record) {
31+
return false;
32+
}
3133
return Boolean(
32-
normalizeOptionalString(spawn.runId) && normalizeOptionalString(spawn.childSessionKey),
34+
normalizeOptionalString(record.runId) && normalizeOptionalString(record.childSessionKey),
3335
);
3436
});
3537
}

src/agents/pi-embedded-runner/run.incomplete-turn.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1883,6 +1883,20 @@ describe("runEmbeddedPiAgent incomplete-turn safety", () => {
18831883
expect(hasOutboundDeliveryEvidence({ acceptedSessionSpawns })).toBe(true);
18841884
});
18851885

1886+
it("ignores malformed accepted sessions_spawn delivery evidence", () => {
1887+
expect(
1888+
hasOutboundDeliveryEvidence({
1889+
acceptedSessionSpawns: [
1890+
null,
1891+
{
1892+
runId: "run-child",
1893+
childSessionKey: " ",
1894+
},
1895+
],
1896+
}),
1897+
).toBe(false);
1898+
});
1899+
18861900
it("leaves committed delivery plus tool errors to the tool-error payload path", () => {
18871901
const incompleteTurnText = resolveIncompleteTurnPayloadText({
18881902
payloadCount: 0,

0 commit comments

Comments
 (0)