交互式 UI(render_ui)
Myrm 提供声明式 UI 工件链路:Agent 调用 render_ui → Server 推送 UI_UPDATE SSE → WebUI 在对话内渲染可交互组件。
启用方式
- 在聊天中打开 Agent 配置。
- 开启 交互式 UI(
render_ui)。 - 首次在有 workspace 的场景运行时会自动 seed
.agent/docs/A2UI_REFERENCE.md(完整 props 手册)。
Surface 门禁(仅 Web / 桌面)
内联 A2UI 仅在 Web 对话与 Tauri 桌面客户端挂载(client_surface 为 web 或 tauri)。Telegram、Discord、定时任务等非 Web 渠道在 Turn1 不会加载 render_ui_tool / update_ui_data_tool,Agent 以纯文本回复,并在这些渠道上每轮节省约 318 prompt token。语音(OpenAI Realtime、Gemini Live、agent bridge)同样不提供内联 A2UI:会话内没有 UI 渲染面,暴露 render_ui 只会浪费 token 并导致无效工具调用。开启「交互式 UI」时 Agent 配置页会显示说明;表单与 live 面板请使用 Web 对话或桌面客户端。
已验证(2026-07-20):Chrome E2E — 配置页 Web-only 提示、client_surface=web 注入、注入 window.__TAURI__ 时 client_surface=tauri、对话内 live inline 卡片(READ 2/2 + LIVE 1/1);agent-stream 集成断言各 surface 挂载/省略;lane resolver 确保 READ 测试不再误占 LIVE lease。
render_ui 默认关闭时
为保持 Prompt Cache 轻量,render_ui 默认关闭。若你直接要求「填表 / 部署清单」等交互 UI 而未开启:
- Preflight 在 Agent 运行前推送
capability_gapSSE。 - WebUI 弹出 toast — 点 开启并重发。
- 若首轮 stream 仍在 loading,
pendingGapRetry会等到 MESSAGE_END / ERROR / CANCEL 后自动重发(已开启render_ui)。 - 第二轮在气泡内渲染 A2UI 表单 — 无需去设置页。
A2UI v3.1 要点
投递链路(SSE)
工具可能在 LangGraph 子 asyncio 任务中执行,此时ArtifactContext 的 ContextVar 不可见。Myrm 按 assistant message_id stash UI 工件(run 级绑定 + post_run 弹出),确保 UI_UPDATE SSE 在 MESSAGE_END 前到达 WebUI。
回归覆盖(2026-07-10):20 项 SSE wiring + 13 项 stream-collector + 12 项前端 Vitest(含 data_update 深合并)+ 架构枚举 parity + 1 项真实 LLM agent-stream E2E(minimax/MiniMax-M3)——关键路径 66 项全绿。GUI & UX 审计通过:65 项 A2UI 交互组件 + 105 项 ArtifactCard + 68 项 ProgressSteps + 73 项审批系统 + 6 项 gapEvents = 317 项前端测试全通过。
增量数据更新(update_ui_data)
长生命周期 UI(进度条、任务列表、实时指标)无需每次全量 render_ui 重绘。Agent 调用 update_ui_data 推送 data_update 事件,WebUI 深合并 data 模型字段(嵌套对象保留兄弟键,数组按 key 替换)。
用户收益:部署清单、批处理进度、监控面板类 UI 可实时刷新,不闪烁、不丢用户已填字段。
数据绑定(bindings)
组件可声明 bindings(prop 名 → 数据路径的映射,如 {"text": "$.status"})。前端每次渲染时从 data 模型解析被绑定的 prop 并覆盖静态值,让展示与表单组件完全数据驱动。配合 update_ui_data,Agent 只需推送变化的数据切片,绑定 prop(进度百分比、状态徽章、表格行、表单值)原地更新——无需整份 artifact 重绘,也无 Markdown 再生成。
JSON 结构(邻接表)
竞品对比
简单澄清问题请优先
ask_question_tool,不必搭完整 UI。在桌面端,提问通过独立反馈窗口呈现——一个不阻塞聊天流的聚焦对话框。
OpenClaw 用浏览器 question-prompt 组件呈现同一确认;Hermes / deer-flow / CoPaw / LobsterAI 仅有终端文本 prompt,无队列、无超时、无草稿生命周期。
大文件内联预览保护
HTML/SVG/Mermaid 工件默认在对话流内自动展开渲染。当工件超过 1 MB(LARGE_FILE_THRESHOLD)时,内联渲染器自动优雅降级:
- 不执行内容 fetch 或
srcDoc渲染(防止 OOM / 浏览器卡顿)。 - 显示精简降级卡片:文件大小提示 + “全屏查看” 按钮。
- 点击按钮打开
ArtifactPortal,通过隔离 URL 模式(iframe src)安全渲染——无论文件多大均无性能风险。
另见:Agent 配置 — 工具加载策略。