diff --git a/src/agents/accepted-session-spawn.ts b/src/agents/accepted-session-spawn.ts index f7366345fc3..9dc64d49f4e 100644 --- a/src/agents/accepted-session-spawn.ts +++ b/src/agents/accepted-session-spawn.ts @@ -24,12 +24,14 @@ export function normalizeAcceptedSessionSpawnResult(result: unknown): AcceptedSe return { runId, childSessionKey }; } -export function hasAcceptedSessionSpawn( - acceptedSessionSpawns?: readonly AcceptedSessionSpawn[], -): boolean { +export function hasAcceptedSessionSpawn(acceptedSessionSpawns?: readonly unknown[]): boolean { return (acceptedSessionSpawns ?? []).some((spawn) => { + const record = asRecord(spawn); + if (!record) { + return false; + } return Boolean( - normalizeOptionalString(spawn.runId) && normalizeOptionalString(spawn.childSessionKey), + normalizeOptionalString(record.runId) && normalizeOptionalString(record.childSessionKey), ); }); } diff --git a/src/agents/pi-embedded-runner/run.incomplete-turn.test.ts b/src/agents/pi-embedded-runner/run.incomplete-turn.test.ts index 89e0fea8b99..c1dfea90bc0 100644 --- a/src/agents/pi-embedded-runner/run.incomplete-turn.test.ts +++ b/src/agents/pi-embedded-runner/run.incomplete-turn.test.ts @@ -1883,6 +1883,20 @@ describe("runEmbeddedPiAgent incomplete-turn safety", () => { expect(hasOutboundDeliveryEvidence({ acceptedSessionSpawns })).toBe(true); }); + it("ignores malformed accepted sessions_spawn delivery evidence", () => { + expect( + hasOutboundDeliveryEvidence({ + acceptedSessionSpawns: [ + null, + { + runId: "run-child", + childSessionKey: " ", + }, + ], + }), + ).toBe(false); + }); + it("leaves committed delivery plus tool errors to the tool-error payload path", () => { const incompleteTurnText = resolveIncompleteTurnPayloadText({ payloadCount: 0,