From 769661a4a256968282ff7336bf4a8f701a3e3da5 Mon Sep 17 00:00:00 2001 From: Sebastian <19554889+sebslight@users.noreply.github.com> Date: Sat, 14 Feb 2026 22:59:54 -0500 Subject: [PATCH] test(reply): add block delivery normalization regressions --- src/auto-reply/reply.block-streaming.test.ts | 50 +++++++++++++++++++ ...ing.runreplyagent-typing-heartbeat.test.ts | 4 +- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/auto-reply/reply.block-streaming.test.ts b/src/auto-reply/reply.block-streaming.test.ts index 46e927d4be7..ad4a2e88b11 100644 --- a/src/auto-reply/reply.block-streaming.test.ts +++ b/src/auto-reply/reply.block-streaming.test.ts @@ -261,4 +261,54 @@ describe("block streaming", () => { expect(seen).toEqual(["Hello from stream"]); }); }); + + it("still parses media directives for direct block payloads", async () => { + await withTempHome(async (home) => { + const onBlockReply = vi.fn(); + + piEmbeddedMock.runEmbeddedPiAgent.mockImplementation( + async (params: RunEmbeddedPiAgentParams) => { + void params.onBlockReply?.({ text: "Result\nMEDIA: ./image.png" }); + return { + payloads: [{ text: "Result\nMEDIA: ./image.png" }], + meta: { + durationMs: 5, + agentMeta: { sessionId: "s", provider: "p", model: "m" }, + }, + }; + }, + ); + + const res = await getReplyFromConfig( + { + Body: "ping", + From: "+1004", + To: "+2000", + MessageSid: "msg-129", + Provider: "telegram", + }, + { + onBlockReply, + disableBlockStreaming: false, + }, + { + agents: { + defaults: { + model: "anthropic/claude-opus-4-5", + workspace: path.join(home, "openclaw"), + }, + }, + channels: { telegram: { allowFrom: ["*"] } }, + session: { store: path.join(home, "sessions.json") }, + }, + ); + + expect(res).toBeUndefined(); + expect(onBlockReply).toHaveBeenCalledTimes(1); + expect(onBlockReply.mock.calls[0][0]).toMatchObject({ + text: "Result", + mediaUrls: ["./image.png"], + }); + }); + }); }); diff --git a/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.test.ts b/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.test.ts index 1ed76941968..751246d668b 100644 --- a/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.test.ts +++ b/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.test.ts @@ -181,10 +181,10 @@ describe("runReplyAgent typing (heartbeat)", () => { expect(typing.startTypingLoop).not.toHaveBeenCalled(); }); - it("signals typing on block replies", async () => { + it("signals typing on normalized block replies", async () => { const onBlockReply = vi.fn(); runEmbeddedPiAgentMock.mockImplementationOnce(async (params: AgentRunParams) => { - await params.onBlockReply?.({ text: "chunk", mediaUrls: [] }); + await params.onBlockReply?.({ text: "\n\nchunk", mediaUrls: [] }); return { payloads: [{ text: "final" }], meta: {} }; });