diff --git a/src/agents/pi-embedded-runner/tool-result-context-guard.test.ts b/src/agents/pi-embedded-runner/tool-result-context-guard.test.ts index 48f25c9b61b..113878beca0 100644 --- a/src/agents/pi-embedded-runner/tool-result-context-guard.test.ts +++ b/src/agents/pi-embedded-runner/tool-result-context-guard.test.ts @@ -392,7 +392,25 @@ describe("installContextEngineLoopHook", () => { expect(transformed).toBe(compactedView); }); - it("returns the source messages when the assembled view has the same length", async () => { + it("returns the assembled view when the engine rewrites content without changing count", async () => { + const agent = makeGuardableAgent(); + const rewrittenView = [makeUser("rewritten-1"), makeUser("rewritten-2")]; + const engine = makeMockEngine({ + assemble: async () => ({ messages: rewrittenView, estimatedTokens: 0 }), + }); + installHook(agent, engine); + + const initial = [makeUser("first"), makeToolResult("call_1", "r")]; + await callTransform(agent, initial); + + const withNew = [...initial, makeToolResult("call_2", "r2")]; + const transformed = await callTransform(agent, withNew); + + // Same count (2) but different array reference — engine's view should be used + expect(transformed).toBe(rewrittenView); + }); + + it("returns the source when the engine returns the same array reference", async () => { const agent = makeGuardableAgent(); const engine = makeMockEngine(); installHook(agent, engine); diff --git a/src/agents/pi-embedded-runner/tool-result-context-guard.ts b/src/agents/pi-embedded-runner/tool-result-context-guard.ts index 2624bfc8a6c..14fbb3d48c5 100644 --- a/src/agents/pi-embedded-runner/tool-result-context-guard.ts +++ b/src/agents/pi-embedded-runner/tool-result-context-guard.ts @@ -239,11 +239,7 @@ export function installContextEngineLoopHook(params: { tokenBudget, model: modelId, }); - if ( - assembled && - Array.isArray(assembled.messages) && - assembled.messages.length !== sourceMessages.length - ) { + if (assembled && Array.isArray(assembled.messages) && assembled.messages !== sourceMessages) { lastAssembledView = assembled.messages; return assembled.messages; }