跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

共享 UI 的渐进迁移

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

官方 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和适配器边界的约束。