import { test, expect } from "@playwright/test"; import { provisionAndLogin } from "./auth.mjs"; const BASE = process.env.BASE_URL; const MOCK = process.env.MOCK_URL; const U = "e2euser"; const P = "password123"; test("chat + tool approval + stats/cost/copy + traces + files", async ({ page }) => { // --- seed via API (cookies land in the browser context) --- await provisionAndLogin(page.request, U, P); const projects = await (await page.request.get(`${BASE}/api/projects`)).json(); const projectId = projects.projects[0].projectId; const put = await page.request.put(`${BASE}/api/projects/${projectId}/models`, { data: { defaultModel: { provider: "custom", modelId: "claude-4-8" }, models: [ { provider: "custom", modelId: "claude-4-8", apiKey: "sk-mock", baseUrl: MOCK, contextWindow: 200000, pricing: { cacheRead: 1, cacheWrite: 5, output: 10 }, }, ], }, }); expect(put.ok(), "put models").toBeTruthy(); const agents = await (await page.request.get(`${BASE}/api/projects/${projectId}/agents`)).json(); // The project ships with exactly one builtin agent: default_agent. const agentIds = agents.agents.map((a) => a.agentId); expect(agentIds).toEqual(["default_agent"]); const agentId = "default_agent"; // Approval defaults to allow-all; this test verifies the manual approval flow, so specify always-ask explicitly. const sess = await ( await page.request.post(`${BASE}/api/projects/${projectId}/agents/${agentId}/sessions`, { data: { provider: "custom", modelId: "claude-4-8", approvalMode: "always-ask" }, }) ).json(); const sessionId = sess.session.sessionId; // --- chat --- await page.goto(`${BASE}/chat/${sessionId}`); const ta = page.getByPlaceholder(/输入消息/); await ta.waitFor(); // Approval-mode is a custom dropdown (button), NOT a native