























@@ -3032,6 +3032,47 @@ describe("matrix live qa scenarios", () => {
30323032});
30333033});
303430343035+it("accepts final-only quiet streaming replies without a draft replacement", async () => {
3036+const fallbackFinalText = "MATRIX_QA_QUIET_STREAM_PREVIEW_COMPLETE";
3037+const { sendTextMessage, waitForRoomEvent } = mockMatrixQaRoomClient({
3038+driverEventId: "$quiet-stream-trigger",
3039+events: [
3040+{
3041+event: ({ sendTextMessage }) =>
3042+matrixQaMessageEvent({
3043+kind: "message",
3044+eventId: "$quiet-final-only",
3045+body: readMatrixQaReplyDirective(
3046+mockMessageBody(sendTextMessage, "sendTextMessage"),
3047+fallbackFinalText,
3048+),
3049+}),
3050+since: "driver-sync-final",
3051+},
3052+],
3053+});
3054+3055+const scenario = requireMatrixQaScenario("matrix-room-quiet-streaming-preview");
3056+3057+const result = await runMatrixQaScenario(scenario, matrixQaScenarioContext());
3058+const artifacts = result.artifacts as {
3059+driverEventId?: unknown;
3060+previewEventId?: unknown;
3061+reply?: { eventId?: unknown };
3062+};
3063+expect(artifacts.driverEventId).toBe("$quiet-stream-trigger");
3064+expect(artifacts.previewEventId).toBeUndefined();
3065+expect(artifacts.reply?.eventId).toBe("$quiet-final-only");
3066+expect(result.details).toContain("final delivered without draft replacement");
3067+expect(waitForRoomEvent).toHaveBeenCalledTimes(1);
3068+3069+expectSentTextMessage(sendTextMessage, {
3070+bodyIncludes: "Quiet streaming QA check",
3071+mentionUserIds: ["@sut:matrix-qa.test"],
3072+roomId: "!main:matrix-qa.test",
3073+});
3074+});
3075+30353076it("captures Matrix tool progress inside the quiet preview before finalizing", async () => {
30363077const previewEventId = "$tool-progress-preview";
30373078const { sendTextMessage } = mockMatrixQaRoomClient({
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。