前言¶
在 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)。
- 目录页:https://www.skillhub.cn/plugins/GrounzerLiu/dsh-ptc-diff-card
- 源码与说明:https://github.com/GrounzerLiu/dsh-ptc-diff-card
- 当前 package 版本:0.1.0(以仓库
package.json为准) - 许可:MIT
核心功能¶
插件启用后,相对默认 PTC 展示,README 中核实的效果如下。
- 嵌套的
edit/write行变为标准文件卡片:标题、工作区相对路径、输入大小、+新增 -删除统计。 - 展开区域使用与官方一致的
DiffBlock:语言标签、换行/复制、路径行、增删着色、⋯ 其余 N 行折叠等。 - 调用失败时不绘制 diff:标题显示错误首行,展开为原始输出(与官方失败态一致)。
- 根调用(非 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 卡片,根调用外观保持与官方一致。