跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

Transcript 渲染与工具预览

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

共享 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 端实现。