From 0e45297f4eb72b76137444e059fd4fcb193f614c Mon Sep 17 00:00:00 2001 From: Gustavo Madeira Santana Date: Wed, 18 Feb 2026 16:07:01 -0500 Subject: [PATCH] gateway: add chat.send block streaming regression coverage --- ...ver.chat.gateway-server-chat-b.e2e.test.ts | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/gateway/server.chat.gateway-server-chat-b.e2e.test.ts b/src/gateway/server.chat.gateway-server-chat-b.e2e.test.ts index de1d16acdf5..ed6c6da6161 100644 --- a/src/gateway/server.chat.gateway-server-chat-b.e2e.test.ts +++ b/src/gateway/server.chat.gateway-server-chat-b.e2e.test.ts @@ -136,6 +136,42 @@ describe("gateway server chat", () => { }); }); + test("chat.send does not force-disable block streaming", async () => { + await withGatewayChatHarness(async ({ ws, createSessionDir }) => { + const spy = vi.mocked(getReplyFromConfig) as unknown as ReturnType; + await connectOk(ws); + + await createSessionDir(); + await writeMainSessionStore(); + testState.agentConfig = { blockStreamingDefault: "on" }; + try { + spy.mockReset(); + let capturedOpts: Record | undefined; + spy.mockImplementationOnce(async (_ctx, opts) => { + capturedOpts = opts as Record | undefined; + }); + + const sendRes = await rpcReq(ws, "chat.send", { + sessionKey: "main", + message: "hello", + idempotencyKey: "idem-block-streaming", + }); + expect(sendRes.ok).toBe(true); + + await vi.waitFor( + () => { + expect(spy.mock.calls.length).toBeGreaterThan(0); + }, + { timeout: 2_000, interval: 10 }, + ); + + expect(capturedOpts?.disableBlockStreaming).toBeUndefined(); + } finally { + testState.agentConfig = undefined; + } + }); + }); + test("chat.history hard-caps single oversized nested payloads", async () => { await withGatewayChatHarness(async ({ ws, createSessionDir }) => { const historyMaxBytes = 64 * 1024;