diff --git a/src/agents/pi-embedded-subscribe.test.ts b/src/agents/pi-embedded-subscribe.test.ts index dc9598b98..8799ff70b 100644 --- a/src/agents/pi-embedded-subscribe.test.ts +++ b/src/agents/pi-embedded-subscribe.test.ts @@ -231,6 +231,33 @@ describe("subscribeEmbeddedPiSession", () => { expect(subscription.assistantTexts).toEqual(["Hello block"]); }); + it("does not duplicate assistantTexts when message_end repeats", () => { + let handler: SessionEventHandler | undefined; + const session: StubSession = { + subscribe: (fn) => { + handler = fn; + return () => {}; + }, + }; + + const subscription = subscribeEmbeddedPiSession({ + session: session as unknown as Parameters< + typeof subscribeEmbeddedPiSession + >[0]["session"], + runId: "run", + }); + + const assistantMessage = { + role: "assistant", + content: [{ type: "text", text: "Hello world" }], + } as AssistantMessage; + + handler?.({ type: "message_end", message: assistantMessage }); + handler?.({ type: "message_end", message: assistantMessage }); + + expect(subscription.assistantTexts).toEqual(["Hello world"]); + }); + it("does not append when text_end content is a prefix of deltas", () => { let handler: ((evt: unknown) => void) | undefined; const session: StubSession = { diff --git a/src/agents/pi-embedded-subscribe.ts b/src/agents/pi-embedded-subscribe.ts index d22c51dc4..7997885e6 100644 --- a/src/agents/pi-embedded-subscribe.ts +++ b/src/agents/pi-embedded-subscribe.ts @@ -557,7 +557,10 @@ export function subscribeEmbeddedPiSession(params: { const addedDuringMessage = assistantTexts.length > assistantTextBaseline; - if (!addedDuringMessage && text) assistantTexts.push(text); + if (!addedDuringMessage && text) { + const last = assistantTexts.at(-1); + if (!last || last !== text) assistantTexts.push(text); + } assistantTextBaseline = assistantTexts.length; if (