Skip to content
FunCoding

Search

Search docs, Skills and MCP

Transcript 渲染与工具预览

按语义类型展示工具、子智能体、取消结果和前向兼容诊断。

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

共享 transcript 定义内容含义,具体布局由宿主决定。优先使用类型、selector 和 render helper,避免每个客户端各自猜测工具名称或解析错误文案。

渲染输出

helper适用输出
daemonBlockToMarkdownMarkdown 内容,可配置 sanitizeUrls、maxFieldLength、locale
daemonBlockToHtml保守 HTML 输出,进行转义,不提供完整 Markdown 解析
daemonBlockToPlainText复制、日志或纯文本展示
daemonToolPreviewToMarkdown未自定义工具卡片时的预览回退

若通过 Markdown 解析器生成富 HTML,官方示例使用先解析再净化的两步流程。内置 HTML helper 的转义与完整 Markdown 渲染是不同路径,不应混淆。

工具预览类型

类别preview.kind
文件和外部内容file_diff、file_read、web_fetch、mcp_invocation
结构化内容code_block、search、tabular、image_generation、subagent_delegation
交互控制ask_user_question、command
通用回退key_value、generic

tabular 预览最多保留 50 行并标记裁剪。宿主可以对文件差异、图像或表格提供专用组件,其余类型回退 Markdown,不需要为了接入而实现全部卡片。

工具图标优先依据 provenance:builtin、mcp、subagent、unknown;MCP 还可带 serverId。SDK 对 mcp____ 有名称推断回退,但名称规则不能替代明确类型。

取消与子智能体

assistant.done.reason 为 cancelled 时,reducer 会将所有进行中的工具块转为 cancelled,避免 daemon 未逐一发出工具终态时界面持续转圈。这个传播包括子智能体工具,不只处理当前指针指向的一项。

子工具携带 parentToolCallId、subagentType;父块已存在时还解析 parentBlockId,父块后到时可补齐。父块被 maxBlocks 裁剪后,仍保留 parentToolCallId,但不会保留无法解析的父块引用。

selectSubagentChildBlocks(state, parentToolCallId) 只返回直接子项。树形视图需要递归,并在沿父引用遍历时防止异常循环;平铺界面可以继续忽略这些新增字段。

错误与未知事件

errorKind 可区分 missing_binary、blocked_egress、auth_env_error、init_timeout、restore_timeout、protocol_error、missing_file、parse_error、budget_exhausted。只有 daemon 提供可识别类型时才有该值;未知值回退普通错误显示,不通过英文文本正则伪造分类。

归一化后的 debugReason 区分 unrecognized_event、unrecognized_session_update 与 malformed_payload。前两者进入有界 unrecognizedDiagnostics 旁路,使用 selectUnrecognizedDiagnostics 读取,不占 blocks 或 maxBlocks,也不结束正在流式累积的消息。

malformed_payload 属于已知事件结构损坏,仍可形成 transcript 状态块。普通 status 和宿主主动发出的 debug 没有同样的 reason;不要为了隐藏未知事件噪声而把它们一起删除。

未知 preview 回退 generic,未知工具状态保留已有当前指针,缺少服务器时间回退客户端时间。这些兼容行为使新旧客户端可以渐进升级,不代表缺失能力已经在 daemon 端实现。