From ba47e616576f48869727412ef46e8b9a634c48d7 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Fri, 29 May 2026 14:23:05 -0600 Subject: [PATCH] Fix assistant history text block merging --- packages/agents-runtime/src/pi-adapter.ts | 12 +++++++----- packages/agents-runtime/test/pi-adapter.test.ts | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/packages/agents-runtime/src/pi-adapter.ts b/packages/agents-runtime/src/pi-adapter.ts index b72375a74e..50eb668844 100644 --- a/packages/agents-runtime/src/pi-adapter.ts +++ b/packages/agents-runtime/src/pi-adapter.ts @@ -107,11 +107,13 @@ export function toAgentHistory( case `assistant`: { const prev = lastAssistant() - if (prev) { - ;(prev.content as Array).push({ - type: `text`, - text: message.content, - }) + const prevContent = prev?.content as + | Array<{ type: string; text?: string }> + | undefined + const lastBlock = prevContent?.[prevContent.length - 1] + + if (lastBlock?.type === `text`) { + lastBlock.text = `${lastBlock.text ?? ``}${message.content}` } else { history.push({ role: `assistant`, diff --git a/packages/agents-runtime/test/pi-adapter.test.ts b/packages/agents-runtime/test/pi-adapter.test.ts index 91f04056cf..611aa6d517 100644 --- a/packages/agents-runtime/test/pi-adapter.test.ts +++ b/packages/agents-runtime/test/pi-adapter.test.ts @@ -417,6 +417,23 @@ describe(`toAgentHistory`, () => { expect(second?.role).toBe(`assistant`) }) + it(`merges adjacent assistant text messages into one text block`, () => { + const messages: Array = [ + { role: `user`, content: `Question` }, + { role: `assistant`, content: `First chunk.` }, + { role: `assistant`, content: ` Second chunk.` }, + ] + + const history = toAgentHistory(messages) + + expect(history).toHaveLength(2) + const assistant = history[1] as AssistantMessage + expect(assistant.role).toBe(`assistant`) + expect(assistant.content).toEqual([ + { type: `text`, text: `First chunk. Second chunk.` }, + ]) + }) + it(`merges assistant text and tool_call into a single assistant message`, () => { const messages: Array = [ { role: `user`, content: `Help me` },