Skip to content
FunCoding

Search

Search docs, Skills and MCP

共享 UI 的渐进迁移

用事件顺序、渲染 helper 和语义一致性测试替换宿主自建投影。

This page has not been translated into English yet. The original Chinese version is shown below.

官方 v2 迁移指南描述在既有 UI 原语上的增量扩展。升级可以逐项进行;它不要求 native TUI、渠道或 IDE 在同一批变更中全部切换传输和渲染。

建议迁移顺序

  1. 将 createdAt 排序改为 selectTranscriptBlocksOrderedByEventId。
  2. 将时间显示改为 formatBlockTimestamp,优先使用服务器时间。
  3. 按需显示 session、workspace 和 auth 旁路事件,不把它们全部插入聊天正文。
  4. 采用共享 Markdown、HTML 或纯文本投影,减少宿主之间的语义差异。
  5. 运行 adapter conformance suite,再增加专用工具卡片或子智能体嵌套。

createdAt 作为 clientReceivedAt 的兼容别名保留;可选新增字段不要求旧消费者立即使用。兼容承诺针对该 UI 层的增量变化,不能代替 daemon 的 capability 检查。

语义一致性测试

import { runAdapterConformanceSuite } from '@qwen-code/sdk/daemon';

const result = runAdapterConformanceSuite({
  reduce: (events) => myReducer(events),
  renderToText: (state) => myRenderer(state),
});

if (result.failed.length > 0) {
  throw new Error('Daemon UI projection differs from the reference corpus');
}

myReducer 和 myRenderer 是宿主提供的实现。测试比较 expectedContains 和 expectedAbsent 等语义内容,适用于 ANSI、HTML、Markdown 或 JSX 投影,不要求像素一致。

用例涵盖聊天、工具生命周期、文件编辑、MCP、审批、预算警告、取消、损坏负载处理、认证、命令更新和子智能体嵌套。旧迁移页写有固定用例数量;当前参考入口要求从 DAEMON_UI_CONFORMANCE_FIXTURES.length 读取,不应把旧数字写死在检查中。

新增显示的采用条件

使用 provenance 选择工具图标,用 errorKind 选择错误引导,用 preview.kind 选择工具卡片;尚未识别的类型保留通用回退。

服务器时间、错误分类等字段可能依赖 daemon 端发出,SDK 提供类型并不保证任意旧服务都有值。共享状态层自动处理取消传播,但宿主仍要把正确的完成与取消事件送进 reducer。

升级后复核

检查 SSE 重连后顺序、自己的用户消息是否重复、审批是否消失、取消后工具是否停止转圈、未知事件是否污染聊天,以及重同步是否正确恢复。

这些 UI 检查不验证真实模型质量、权限后端或跨工作区访问边界。传输侧继续遵循DaemonClient和适配器边界的约束。