feat(web): 智能体对话重做(AGUI-3)
- 会话流:用户消息 → 一行进度 → 结论正文 → 没做的事 → 一行实际结果。进度行把一段里的工具调用、思考和过程中的话 聚成一行(1 次也折叠),按能力 verb/noun 人话计数(「查了站点、2 个下载任务和媒体库 · 1 项没做 · 3 秒」), 展开每步一行;工具名、调用 ID、幂等键、输入输出进技术信息。去掉回合头、「模型说的」重复卡和系统核实大卡。 - agent.plan / agent.propose_options 不作为工具调用出现(旧事件回放同样跳过);被拒调用不出红卡, 回合末尾一行「没做:检测站点,需要你批准 [批准并重试]」(非计划类能力建一次性持续授权后重试)。 - 方案卡:每个方案一个按钮,点一下就选定;推荐项第一位、主按钮;按钮写服务端给的动作要点;风险折叠; 「都不要…」点开才出原因框;选完收成一行。审批卡只留摘要和批准 / 拒绝,计划 ID、hash、版本、到期进技术信息。 - 会话页去掉右侧栏和页头目标,步骤 / 子会话 / 模型 / 预算 / ID 进顶部概况条;输入区只有输入框和发送 / 停止, / 指令 /先给方案、/重跑(「先看方案再执行」开关原本只是新建时的本地状态,不需要迁移)。 - 抽屉去掉「当前 / 历史」Tab:头部「历史」弹层(最近 20 条)+「新对话」;上下文显示成名称标签,可去掉。 - 会话列表:搜索 + 全部 / 等你处理 / 失败;等你处理置顶,子会话收在父会话下,正常结束不加徽章。 - 入口页与空态给 3 个快捷目标。mock 加审查报告 3 个示例的演示数据;smoke 改测历史弹层。 - 组件测试:聚合、隐藏、拒绝一行、方案一键选定、历史置顶与子会话、指令。 Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
2ab6d452dd
commit
6fcf82afb0
17 files changed
+2381
-1846
No files matched your search
@@ -256,9 +256,9 @@ async function main() {
|
||||
}
|
||||
}
|
||||
|
||||
// ── 交互:智能体抽屉「历史」Tab(AGUI-2;演示数据,点一条在抽屉内打开、返回列表、关了再开仍停在历史)──
|
||||
// ── 交互:智能体抽屉「历史」弹层(AGUI-3;演示数据,点一条在抽屉内打开、新对话回到输入框、关了再开仍是那条会话)──
|
||||
{
|
||||
const label = "智能体抽屉 → 历史 → 抽屉内打开会话";
|
||||
const label = "智能体抽屉 → 历史弹层 → 抽屉内打开会话";
|
||||
problems = [];
|
||||
const t0 = Date.now();
|
||||
try {
|
||||
@@ -266,17 +266,20 @@ async function main() {
|
||||
await page.goto(`${BASE}/console/audit?mock=1`, { waitUntil: "networkidle", timeout: 30_000 });
|
||||
const launcher = page.locator("[data-agent-launcher]:visible").last();
|
||||
await launcher.click();
|
||||
await page.getByRole("tab", { name: "历史" }).click();
|
||||
await page.getByRole("button", { name: "历史会话" }).click();
|
||||
const list = page.getByRole("navigation", { name: "智能体会话列表" });
|
||||
await list.getByRole("button").first().click();
|
||||
await page.getByRole("button", { name: "返回列表" }).waitFor({ timeout: 10_000 });
|
||||
await list
|
||||
.getByRole("button")
|
||||
.filter({ hasNotText: /^(全部|等你处理|失败)$/ })
|
||||
.first()
|
||||
.click();
|
||||
await page.getByRole("button", { name: "新对话" }).and(page.locator(":enabled")).waitFor({ timeout: 10_000 });
|
||||
if (new URL(page.url()).pathname !== "/console/audit") problems.push("点历史会话跳走了页面");
|
||||
await page.getByRole("button", { name: "返回列表" }).click();
|
||||
await list.waitFor({ timeout: 5_000 });
|
||||
await page.keyboard.press("Escape");
|
||||
await launcher.click();
|
||||
const tab = await page.getByRole("tab", { name: "历史" }).getAttribute("aria-selected");
|
||||
if (tab !== "true") problems.push("再次打开没有停在「历史」");
|
||||
if (!(await page.getByRole("button", { name: "新对话" }).isEnabled())) problems.push("再次打开没有回到那条会话");
|
||||
await page.getByRole("button", { name: "新对话" }).click();
|
||||
await page.getByRole("textbox", { name: "目标" }).waitFor({ timeout: 5_000 });
|
||||
if (SHOTS) await page.screenshot({ path: join(OUT, "agent_drawer_history.png") }).catch(() => {});
|
||||
await page.keyboard.press("Escape");
|
||||
await page.goto(`${BASE}/console/agent?mock=0`, { waitUntil: "networkidle", timeout: 30_000 });
|
||||
|
||||
Reference in new issue
Block a user