真实测试 · 中间输出 —— 别再「运行中 · Ns」干等

真实测试运行时能看到什么中间进度,为什么有时卡住,最小修法是什么

一句话:后端 SSE + 前端实时渲染器都已存在,WIZ 向导路径已在展示工具活动流;唯独草稿卡「继续测试」按钮仍用非流式调用,只显示 真实测试中 · Ns 计时器,跑几分钟页面无变化。把按钮切到已有的流式通道即可。

1两条真实测试入口 · 中间输出现状(SVG)

路径 A(WIZ 向导)已流式;路径 B(草稿卡按钮)干等 Ns

用户触发「真实测试」 POST /api/v1/creator/drafts/{id}/test 路径 A · WIZ 向导(发布前测试) 已流式中间输出 前端 testCreatorDraftStream + SSE → progress.update(event) 实时渲染 实时活动流(每步可见) ● session · 全新 SDK 会话已就绪 ● activity · 正在加载员工 Skill ● activity · 调用 winbrain-yuntu 查数据 ● asset · 生成文件 skills/…/evals.json ● status · 正在… / 工具完成 ● risk · 权限已阻止 / 工具超时 ● test.completed · status=verified 顶部指标实时跳动 工具 N · 子Agent N · 产物 N · 风险 N 已用时 计时 + 转圈 orbit aria-live 播报(读屏友好) 路径 B · 草稿卡「继续测试」按钮 只显示 Ns 计时 前端 backend-draft-test → await testCreatorDraft()(非流式) 用户看到(整个运行期间) 真实测试中 · 34s… 每 5s 只更新一个秒数 无工具活动 / 无指标 / 无文本 分钟级无变化 → 像卡死 直到 Promise 返回才一次性 显示 pass/fail(或超时) 根因 同一次后端 SSE 端点已在(Accept: text/event-stream)但按钮没走它 前端渲染器已存在,没接到这里

2后端已经在流哪些中间输出(SSE 事件)

证据:expert-api-server.ts sendCreatorDraftTestEvents(Accept: text/event-stream 即触发)· v1-dto.ts agentEventView · claude-agent-sdk.ts streamSdk

事件用户可见内容用途
session全新 SDK 会话已就绪确认真实执行已启动,非假跑
activity工具调用(加载 Skill / 查 MCP / 写文件 / 子 Agent)+ kind 徽标核心中间进度,知道在干什么
status / text「正在…」「…完成」状态行 + 增量正文活的输出,不是死等
asset(activity kind)文件已保存:skills/…/SKILL.md产物落地可见
risk(activity kind)权限已阻止 / 工具超时 / 重试异常即时暴露,不等结束
test.completed结果 + draft.status=verified权威认证信号

3最小修法(复用已有件,几行)

后端零改动 —— SSE 端点与事件流齐全。只改前端一处按钮接线

步骤改动位置
1backend-draft-testawait runtime.client.testCreatorDraft() 换成 for await (… of runtime.client.testCreatorDraftStream())frontend/src/adapters/browser/workbench-api-adapter.js:1526
2复用 creatorRuntimeProgress(true) 渲染器(WIZ 已用,指标+活动流+计时+读屏)挂到测试 feed同文件 :1649
3保留 5s 计时器作兜底,事件到达即覆盖同文件 :1536
现状代码证据(点击展开)
文件事实
expert-api-server.ts:1978POST /api/v1/creator/drafts/{id}/test —— Accept 含 text/event-stream 时走 sendCreatorDraftTestEvents,否则一次 JSON
expert-api-server.ts:678sendCreatorDraftTestEventsagentEventView 逐事件 + test.completed,10s keepalive
workbench.ts:241runExpertTestsPromise.all + invokeExpert —— 非流式路径一次性返回
claude-agent-sdk.ts:835streamSdk 生成器每个工具调用 yield activity/status —— 中间输出源
v1-dto.ts:157agentEventView 把 session/activity/done/status 序列化给 SSE
workbench-api-adapter.js:1526backend-draft-test:非流式 await + 真实测试中 · Ns 5s 计时
workbench-api-adapter.js:1802WIZ 路径已用 testCreatorDraftStream + progress.update(对比例证)
workbench-api-adapter.js:1649creatorRuntimeProgress 渲染器:orbit/指标/活动列表/aria-live —— 已可复用