























@@ -8,6 +8,24 @@ import {
88import { subscribeEmbeddedPiSession } from "./pi-embedded-subscribe.js";
991010describe("subscribeEmbeddedPiSession reply tags", () => {
11+type ReplyPayload = { text?: string; replyToCurrent?: boolean; replyToTag?: boolean };
12+13+function replyPayloadAt(mock: ReturnType<typeof vi.fn>, index: number): ReplyPayload {
14+const call = mock.mock.calls[index];
15+if (!call) {
16+throw new Error(`expected reply payload at index ${index}`);
17+}
18+return call[0] as ReplyPayload;
19+}
20+21+function replyTexts(mock: ReturnType<typeof vi.fn>): string[] {
22+return mock.mock.calls.map(([payload]) => (payload as ReplyPayload).text ?? "");
23+}
24+25+function lastReplyPayload(mock: ReturnType<typeof vi.fn>): ReplyPayload {
26+return replyPayloadAt(mock, mock.mock.calls.length - 1);
27+}
28+1129function createBlockReplyHarness() {
1230const { session, emit } = createStubSessionHarness();
1331const onBlockReply = vi.fn();
@@ -41,10 +59,10 @@ describe("subscribeEmbeddedPiSession reply tags", () => {
4159emit({ type: "message_end", message: assistantMessage });
42604361expect(onBlockReply).toHaveBeenCalledTimes(1);
44-const payload = onBlockReply.mock.calls.at(0)?.[0];
45-expect(payload?.text).toBe("Hello");
46-expect(payload?.replyToCurrent).toBe(true);
47-expect(payload?.replyToTag).toBe(true);
62+const payload = replyPayloadAt(onBlockReply, 0);
63+expect(payload.text).toBe("Hello");
64+expect(payload.replyToCurrent).toBe(true);
65+expect(payload.replyToTag).toBe(true);
4866});
49675068it("flushes trailing directive tails on stream end", () => {
@@ -61,8 +79,7 @@ describe("subscribeEmbeddedPiSession reply tags", () => {
6179emit({ type: "message_end", message: assistantMessage });
62806381expect(onBlockReply).toHaveBeenCalledTimes(2);
64-expect(onBlockReply.mock.calls.at(0)?.[0]?.text).toBe("Hello");
65-expect(onBlockReply.mock.calls.at(1)?.[0]?.text).toBe("[[");
82+expect(replyTexts(onBlockReply)).toEqual(["Hello", "[["]);
6683});
67846885it("streams partial replies past reply_to tags split across chunks", () => {
@@ -82,8 +99,7 @@ describe("subscribeEmbeddedPiSession reply tags", () => {
8299emitAssistantTextDelta({ emit, delta: " world" });
83100emitAssistantTextEnd({ emit });
8410185-const lastPayload = onPartialReply.mock.calls.at(-1)?.[0];
86-expect(lastPayload?.text).toBe("Hello world");
102+expect(lastReplyPayload(onPartialReply).text).toBe("Hello world");
87103for (const call of onPartialReply.mock.calls) {
88104expect(call[0]?.text?.includes("[[reply_to")).toBe(false);
89105}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。