
























@@ -24,6 +24,7 @@ import {
2424buildMatrixReplyArtifact,
2525buildMatrixReplyDetails,
2626buildMentionPrompt,
27+doesMatrixQaReplyBodyMatchToken,
2728createMatrixQaDriverScenarioClient,
2829createMatrixQaScenarioClient,
2930isMatrixQaExactMarkerReply,
@@ -754,6 +755,43 @@ function buildMatrixQaToolProgressTimeoutMessage(params: {
754755].join("\n");
755756}
756757758+function buildMatrixQaToolProgressFinalTimeoutMessage(params: {
759+cause: unknown;
760+events: MatrixQaObservedEvent[];
761+previewEventId: string;
762+roomId: string;
763+startIndex: number;
764+sutUserId: string;
765+token: string;
766+}) {
767+const candidates = params.events
768+.slice(params.startIndex)
769+.filter((event) => {
770+if (
771+event.roomId !== params.roomId ||
772+event.sender !== params.sutUserId ||
773+event.type !== "m.room.message" ||
774+!isMatrixQaMessageLikeKind(event.kind)
775+) {
776+return false;
777+}
778+return event.relatesTo?.eventId === params.previewEventId;
779+})
780+.slice(-8);
781+const candidateDetails =
782+candidates.length === 0
783+ ? ["observed final candidates: <none>"]
784+ : ["observed final candidates:", ...candidates.map(describeMatrixQaToolProgressCandidate)];
785+return [
786+params.cause instanceof Error
787+ ? params.cause.message
788+ : `Matrix tool progress final wait failed: ${String(params.cause)}`,
789+`preview event: ${params.previewEventId}`,
790+`expected token: ${params.token}`,
791+ ...candidateDetails,
792+].join("\n");
793+}
794+757795async function runMatrixToolProgressScenario(
758796context: MatrixQaScenarioContext,
759797params: {
@@ -824,19 +862,33 @@ async function runMatrixToolProgressScenario(
824862assertMatrixQaToolProgressMentionsInert(progress.event);
825863}
826864827-const finalized = await client.waitForRoomEvent({
828-observedEvents: context.observedEvents,
829-predicate: (event) =>
830-event.roomId === context.roomId &&
831-event.sender === context.sutUserId &&
832-isMatrixQaMessageLikeKind(event.kind) &&
833-event.relatesTo?.relType === "m.replace" &&
834-event.relatesTo.eventId === preview.event.eventId &&
835-event.body === params.finalText,
836-roomId: context.roomId,
837-since: progress.since,
838-timeoutMs: context.timeoutMs,
839-});
865+const finalized = await client
866+.waitForRoomEvent({
867+observedEvents: context.observedEvents,
868+predicate: (event) =>
869+event.roomId === context.roomId &&
870+event.sender === context.sutUserId &&
871+isMatrixQaMessageLikeKind(event.kind) &&
872+event.relatesTo?.relType === "m.replace" &&
873+event.relatesTo.eventId === preview.event.eventId &&
874+doesMatrixQaReplyBodyMatchToken(event, params.finalText),
875+roomId: context.roomId,
876+since: progress.since,
877+timeoutMs: context.timeoutMs,
878+})
879+.catch((err: unknown) => {
880+throw new Error(
881+buildMatrixQaToolProgressFinalTimeoutMessage({
882+cause: err,
883+events: context.observedEvents,
884+previewEventId: preview.event.eventId,
885+roomId: context.roomId,
886+startIndex: startObservedIndex,
887+sutUserId: context.sutUserId,
888+token: params.finalText,
889+}),
890+);
891+});
840892const unexpectedWorkingEvents = findMatrixQaUnexpectedWorkingEvents({
841893events: context.observedEvents,
842894finalEventId: finalized.event.eventId,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。