fix: seal workbench final response from terminal trace

This commit is contained in:
lyon
2026-06-20 00:11:35 +08:00
parent d46d2216cb
commit c3ca0f869e
6 changed files with 316 additions and 17 deletions
@@ -43,6 +43,41 @@ test.describe("terminal completed without final response", () => {
});
});
test.describe("terminal assistant event final response", () => {
test.use({ scenarioId: "terminal-assistant-event-final-response" });
test("renders the sealed Workbench final response from the authoritative terminal assistant event", async ({ page }, testInfo) => {
const sessionId = "ses_terminal_assistant_final";
const traceId = "trc_terminal_assistant_final";
const messagesResponse = await page.request.get(`/v1/workbench/sessions/${sessionId}/messages?limit=100`);
expect(messagesResponse.status()).toBe(200);
const messagesPayload = await messagesResponse.json();
const agentMessage = messagesPayload.messages.find((message: { role?: string }) => message.role === "agent");
expect(agentMessage?.text).toContain("全部六份数据到手");
expect(agentMessage?.finalResponse?.text).toBe(agentMessage?.text);
const turnResponse = await page.request.get(`/v1/workbench/turns/${traceId}`);
expect(turnResponse.status()).toBe(200);
const turnPayload = await turnResponse.json();
expect(turnPayload.turn.finalResponse.text).toBe(agentMessage?.text);
const traceResponse = await page.request.get(`/v1/workbench/traces/${traceId}/events?limit=20`);
expect(traceResponse.status()).toBe(200);
const tracePayload = await traceResponse.json();
const finalEvent = tracePayload.events.find((event: { label?: string; final?: boolean }) => event.label === "agentrun:assistant:message" && event.final === true);
expect(finalEvent?.replyAuthority).toBe(true);
expect(finalEvent?.message).toBe(agentMessage?.text);
await gotoWorkbench(page, `/workbench/sessions/${sessionId}`);
const card = page.locator(`${selectors.messageCard}[data-role="agent"][data-status="completed"]`).last();
await expect(card.locator(".message-markdown.message-text")).toContainText("全部六份数据到手");
await expect(card.locator(".message-markdown.message-text table")).toHaveCount(1);
await card.locator("summary.trace-disclosure-summary").click();
await expect(card.locator(".trace-row-markdown table")).toHaveCount(1);
await saveScreenshot(page, testInfo, "terminal-assistant-event-final-response");
});
});
test.describe("non-terminal tool completed event", () => {
test.use({ scenarioId: "tool-completed-projection-running" });