Files
deepseek-harness/docs/rfc/rejected/simplification/2026-06-20-generic-tool-rendering.zh.md
T
Ziya 2565133af3 docs(i18n): RFC tree batch — 146 bilingual pairs via the committed pipeline
implemented(除 4 篇超长文档随后补)、proposed、rejected 全树配对;
同一流水线 + 二遍校验(paraphrase-back + 仓库上下文一致性)产出。
docs/rfc/implemented/AGENTS.md 与其 CLAUDE.md 符号链接列入排除
(agent 指令文件,与根 AGENTS.md 同策略)。
2026-07-15 23:25:06 -07:00

2.6 KiB
Raw Blame History

RFC:收拢工具自有的 UI 展示逻辑

English | 中文

Status: rejected — tool-owned presentation should wait for more real tools before being generalized or deleted. Bash and ACP currently need the existing richer presentation path.

问题

工具可以定义 presentCall() 和 presentResult() 回调,返回 ToolCallPresentation、ToolResultPresentation 以及可选的 ToolTerminal 字段。代码本身已标记出设计的混乱:title、kind、raw input、content、terminal cwd、terminal output、exit code 和 signal 逐步堆积成一堆可选字段。ACP(Agent Client Protocol)随后维护 pending call 状态以将 result 与原始 args 配对,在 session/load 时创建仅用于回放的 presenter,并将 terminal 子字段映射为 Zed 特有的 _meta。dsh-tool-bash 甚至从已渲染的文本中反向解析退出状态,因为纯回放安全的 presenter 已经拿不到结构化的 BashRunResult。

真正的一方使用场景是 ACP 的 bash 展示。这不足以作为冻结一个跨包 UI 展示 API 的依据。

提案

暂时移除工具自有的 UI 展示回调。规范的工具事件已经携带工具名称、原始参数字符串、结果内容与错误状态。UI 从这些字段渲染一个通用的工具卡片。工具特有的富展示可以在至少有两个真实工具和两个真实消费方来验证词汇后,以 tagged render-intent union 的形式回归。

曾考虑的替代方案

一个更小的替代方案是在单个 PR(Pull Request)中将当前的可选字段包替换为一个显式 union;但如果目标是简化,更彻底的做法是删除回调、保留通用路径。

验收标准

  • ToolDefinition 移除 presentCall 和 presentResult。
  • ToolCallPresentation、ToolResultPresentation、ToolTerminal 和 ToolCallKind 消失,除非一个最小的通用 UI 类型仍需要其中之一。
  • ACP 不再维护 presenter pending 状态,也不在实时流式输出/加载回放期间调用工具回调。
  • dsh-tool-bash 不再解析已渲染文本来恢复退出状态以生成 UI pill。
  • 快照 golden 展示通用工具卡片和文本结果。

放弃了什么

Bash 失去其自定义的终端风格卡片和模型撰写的描述位置。回退方案仍然合理:命令作为工具输入展示,输出作为文本展示。富展示应在产品拥有足够的 UI/工具多样性、足以支撑一份稳定的展示契约时再行设计。

相关

本 RFC 是移除 ACP terminal 元数据的宽泛版本。如果本 RFC 被接受,那个更窄的 RFC 就不再需要。