import { expect, test } from "@playwright/test"; import { mockAgentApi } from "./support/mock-agent-api"; import { mockWorkbenchContext } from "./support/mock-workbench-context"; import { responsesFixture } from "./support/responses-fixture"; test("Agent export links download through the scoped client and preserve the conversation", async ({ page }) => { await page.emulateMedia({ reducedMotion: "reduce" }); await mockWorkbenchContext(page, undefined, undefined, {}, [], { runtimeMode: "backend" }); await mockAgentApi(page); const filename = "mcp-11111111-1111-1111-1111-111111111111.zip"; const path = `/api/v1/session/browser-session-1/files/${filename}`; await page.route("**/api/v1/responses", (route) => { if (route.request().method() === "OPTIONS") return route.fallback(); return route.fulfill({ headers: { "Access-Control-Allow-Origin": "*", "Content-Type": "text/event-stream" }, body: responsesFixture([ { type: "start", messageId: "export-answer" }, { type: "text-start", id: "export-text" }, { type: "text-delta", id: "export-text", delta: `[下载模型文件](${path}) [外部参考](https://example.com)` }, { type: "text-end", id: "export-text" }, { type: "finish", finishReason: "stop" }, ]) }); }); let projectHeader: string | undefined; await page.route(`**${path}`, (route) => { if (route.request().method() === "OPTIONS") return route.fallback(); projectHeader = route.request().headers()["x-project-id"]; return route.fulfill({ headers: { "Access-Control-Allow-Origin": "*", "Content-Type": "application/zip" }, body: "ZIP fixture" }); }); await page.goto("/", { waitUntil: "domcontentloaded" }); await page.getByRole("button", { name: /展开 Agent 助手面板/ }).click(); const panel = page.getByRole("complementary", { name: "Agent 命令面板" }); await panel.locator("textarea").fill("导出当前模型"); await panel.getByRole("button", { name: "发送 Agent 指令" }).click(); const link = panel.getByRole("link", { name: "下载模型文件" }); await expect(link).toBeVisible(); await expect(panel.getByRole("button", { name: "外部参考" })).toBeVisible(); const pageUrl = page.url(); const downloading = page.waitForEvent("download"); await link.focus(); await page.keyboard.press("Enter"); const file = await downloading; expect(file.suggestedFilename()).toBe(filename); expect(projectHeader).toBeTruthy(); expect(page.url()).toBe(pageUrl); await expect(panel.locator("textarea")).toBeVisible(); });