dsh-ptc-diff-card:让 PTC 里嵌套的 edit/write 显示标准 diff 卡片

前言

在 DeepSeek Harness(DSH)里用 PTC(Programmatic Tool Calling)时,agent 会在 run_code 程序内部再调用 edit 或 write。这些调用在会话里会记成嵌套的 tool/ptc-dispatch 事件,界面通常把它们渲染在 run_code 卡片下方:一行通用工具行,展开后往往只有类似 The file ... has been updated successfully 的结果文本,看不到和标准模式一样的文件 diff 卡片。

官方 Tool 层推导 diff 的逻辑在 packages/client/ui-tool 的 diffCardModel 里,第一行就把「非根调用」排除了——parentCallId 有值时直接 return null。嵌套块上其实已经有调用参数(file_path、old_string、new_string、content)以及落盘后的 meta.diffs,只是 Web GUI 默认不把它们画成 diff 卡片。

下面介绍社区插件 dsh-ptc-diff-card(维护者 GrounzerLiu,分类:客户端)。它只在 Web GUI 侧补这一层展示,不改变工具执行本身。

这是什么

dsh-ptc-diff-card 是 DSH Web GUI 插件:在 PTC 模式下,让 run_code 内嵌套发生的 edit / write 调用,呈现与标准模式一致的 diff 卡片(标题、路径、增删统计,展开为官方风格的 DiffBlock)。

核心功能

插件启用后,相对默认 PTC 展示,README 中核实的效果如下。

  1. 嵌套的 edit / write 行变为标准文件卡片:标题、工作区相对路径、输入大小、+新增 -删除 统计。
  2. 展开区域使用与官方一致的 DiffBlock:语言标签、换行/复制、路径行、增删着色、⋯ 其余 N 行 折叠等。
  3. 调用失败时不绘制 diff:标题显示错误首行,展开为原始输出(与官方失败态一致)。
  4. 根调用(非 PTC 嵌套、即标准模式下的 edit / write)外观与官方逐字一致——实现上是对官方文件行的复刻,diff 推导沿用官方逻辑,仅去掉「必须是根调用」的限制。

diff 数据来源(成功 / 进行中 / 失败)与官方对齐,摘要如下:

调用状态 diff 来源
成功 settle 且 meta.diffs 非空 记录的实际 hunks(路径回写为入参拼写)
write 新建或调用进行中 由入参推导的整文件 diff
失败 / 中断 不画 diff

原理(简要)

在 DSH 的 tool.call.toolview keyed slot 上为 edit / write 注册自定义视图,priority: -1,以低于默认的优先级覆盖官方行;卸载插件后 slot 自动还原。行组件复用官方的 DisclosureRow / DiffBlock 原语,并 vendor 了一份官方行样式表(来自 ui-tool 0.2.1-rc.3 拷贝)。diff 推导逻辑与官方相同,但不再因 parentCallId !== undefined 而直接放弃渲染。

安装与启用

插件以普通 DSH bundle 挂到某个 profile。安装命令须与 README 一致:

# 本地目录(开发)
dsh plugin --profile <name> add link:D:/dsh-plugins/dsh-ptc-diff-card

# 从 GitHub
dsh plugin --profile <name> add "github:GrounzerLiu/dsh-ptc-diff-card"

# 从 npm(已发布后)
dsh plugin --profile <name> add dsh-ptc-diff-card

完成 add 后,把 dsh-ptc-diff-card 写入该 profile 的 package.json 里 dsh.profile.bundles 列表,重启 DSH 应用后生效。

兼容性(README 原文):

  • 目标 DSH 版本:engines.dsh 为 >= 0.2.1-rc.2
  • 平台:platform: web(Web GUI)

典型用法与验收

本插件不新增 CLI 或配置字段,用法即:在已启用该 bundle 的 profile 下,用 PTC 会话让 agent 在 run_code 内调用 edit 或 write,在工具时间线里查看嵌套行是否出现标准 diff 卡片。

仓库中的 VERIFY.md 说明了如何起测试 profile、在 PTC 会话里应对照哪一行、以及如何与标准模式及失败调用对比。可按该文档逐步验收。

适用场景与注意

适合谁

  • 经常在 DSH Web GUI 里使用 PTC(run_code 内嵌套改文件),希望嵌套 edit / write 与标准模式一样可读、可展开 diff 的开发者。

边界与冲突

  • 只接管 edit 和 write;str_replace_editor、apply_patch 等未覆盖。
  • 行样式来自 ui-tool 的 vendor 拷贝;DSH 大版本 UI 改版后,如需与官方完全一致,可能需要重新 vendor。
  • 与同样以 priority: -1 注册 edit / write 视图的插件(README 举例:dsh-diff-viewer)不能共存——同 key 同优先级会被 DSH 拒绝;本插件会捕获并打日志,官方行继续接管,不会让整包加载失败。
  • 不会自动展开 diff,行为与标准模式一致。

安全与权限

DSH 插件随当前 DSH 进程与用户 profile 加载运行。安装前建议阅读仓库源码与 MIT 许可证,确认 bundle 来源可信;社区目录站点(如 skillhub.cn)为独立生态索引,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-ptc-diff-card 解决的是 PTC 嵌套文件工具「有数据、无 diff 卡片」的展示缺口:在 Web 端用与官方相同的 diff 推导与 UI 原语,把嵌套 edit / write 补成标准 diff 卡片,根调用外观保持与官方一致。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye