





















@@ -207,6 +207,7 @@ describe("EmbeddedTuiBackend", () => {
207207runId: "run-local-1",
208208sessionKey: "agent:main:main",
209209state: "delta",
210+deltaText: "hello",
210211message: {
211212role: "assistant",
212213content: [{ type: "text", text: "hello" }],
@@ -303,6 +304,65 @@ describe("EmbeddedTuiBackend", () => {
303304});
304305});
305306307+it("marks local embedded replacement deltas", async () => {
308+const { EmbeddedTuiBackend } = await import("./embedded-backend.js");
309+const pending = deferred<{
310+payloads: Array<{ text: string }>;
311+meta: Record<string, unknown>;
312+}>();
313+agentCommandFromIngressMock.mockReturnValueOnce(pending.promise);
314+315+const backend = new EmbeddedTuiBackend();
316+const events: Array<{ event: string; payload: unknown }> = [];
317+backend.onEvent = (evt) => {
318+events.push({ event: evt.event, payload: evt.payload });
319+};
320+321+backend.start();
322+await backend.sendChat({
323+sessionKey: "agent:main:main",
324+message: "replace",
325+runId: "run-local-replace",
326+});
327+328+registeredListener?.({
329+runId: "run-local-replace",
330+stream: "assistant",
331+data: { text: "Hello world" },
332+});
333+registeredListener?.({
334+runId: "run-local-replace",
335+stream: "assistant",
336+data: { text: "Goodbye world" },
337+});
338+339+pending.resolve({ payloads: [{ text: "Goodbye world" }], meta: {} });
340+await flushMicrotasks();
341+342+const chatPayloads = events
343+.filter((entry) => entry.event === "chat")
344+.map(
345+(entry) =>
346+entry.payload as {
347+state?: string;
348+deltaText?: string;
349+replace?: boolean;
350+},
351+);
352+expect(
353+chatPayloads
354+.filter((payload) => payload.state === "delta")
355+.map((payload) => ({
356+state: payload.state,
357+deltaText: payload.deltaText,
358+replace: payload.replace,
359+})),
360+).toEqual([
361+{ state: "delta", deltaText: "Hello world", replace: undefined },
362+{ state: "delta", deltaText: "Goodbye world", replace: true },
363+]);
364+});
365+306366it("keeps a fallback response deliverable after a retryable lifecycle error", async () => {
307367const { EmbeddedTuiBackend } = await import("./embedded-backend.js");
308368const pending = deferred<{
@@ -496,6 +556,7 @@ describe("EmbeddedTuiBackend", () => {
496556runId: "run-tool-first",
497557sessionKey: "agent:main:main",
498558state: "delta",
559+deltaText: "",
499560message: {
500561role: "assistant",
501562content: [{ type: "text", text: "" }],
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。