



























@@ -584,13 +584,12 @@ describe("handleMessageUpdate commentary phase", () => {
584584);
585585586586expect(onAgentEvent).toHaveBeenCalledTimes(1);
587-expect(onAgentEvent.mock.calls[0]?.[0]).toMatchObject({
588-stream: "assistant",
589-data: {
590-text: "Done.",
591-delta: "Done.",
592-},
593-});
587+const event = onAgentEvent.mock.calls[0]?.[0] as
588+| { stream?: string; data?: { text?: string; delta?: string } }
589+| undefined;
590+expect(event?.stream).toBe("assistant");
591+expect(event?.data?.text).toBe("Done.");
592+expect(event?.data?.delta).toBe("Done.");
594593});
595594596595it("contains synchronous text_end flush failures", async () => {
@@ -630,18 +629,28 @@ describe("handleMessageEnd", () => {
630629},
631630} as never);
632631633-expect(warn).toHaveBeenCalledWith(
632+const warnCall = warn.mock.calls[0];
633+expect(warnCall?.[0]).toBe(
634634"Assistant reply looks like a tool call, but no structured tool invocation was emitted; treating it as text.",
635-expect.objectContaining({
636-runId: "run-1",
637-sessionId: "session-1",
638-provider: "ollama",
639-model: "qwen-local",
640-pattern: "json_tool_call",
641-toolName: "read",
642-registeredTool: true,
643-}),
644635);
636+const metadata = warnCall?.[1] as
637+| {
638+runId?: string;
639+sessionId?: string;
640+provider?: string;
641+model?: string;
642+pattern?: string;
643+toolName?: string;
644+registeredTool?: boolean;
645+}
646+| undefined;
647+expect(metadata?.runId).toBe("run-1");
648+expect(metadata?.sessionId).toBe("session-1");
649+expect(metadata?.provider).toBe("ollama");
650+expect(metadata?.model).toBe("qwen-local");
651+expect(metadata?.pattern).toBe("json_tool_call");
652+expect(metadata?.toolName).toBe("read");
653+expect(metadata?.registeredTool).toBe(true);
645654});
646655647656it("does not warn when the assistant emitted a structured tool call", () => {
@@ -830,13 +839,12 @@ describe("handleMessageEnd", () => {
830839} as never);
831840832841expect(onAgentEvent).toHaveBeenCalledTimes(1);
833-expect(onAgentEvent.mock.calls[0]?.[0]).toMatchObject({
834-stream: "assistant",
835-data: {
836-text: "Done.",
837-delta: "",
838-replace: true,
839-},
840-});
842+const event = onAgentEvent.mock.calls[0]?.[0] as
843+| { stream?: string; data?: { text?: string; delta?: string; replace?: boolean } }
844+| undefined;
845+expect(event?.stream).toBe("assistant");
846+expect(event?.data?.text).toBe("Done.");
847+expect(event?.data?.delta).toBe("");
848+expect(event?.data?.replace).toBe(true);
841849});
842850});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。