前言¶
在 DeepSeek Harness(DSH)里,智能体改文件时,会话界面会弹出「编辑 · 路径」一类的工具卡片。内置 UI 对一部分编辑工具不画 diff,对会画 diff 的场景又常把相同上下文行在红区和绿区各渲染一遍,改一行可能展开十几行,统计上的 +N -M 也会偏大。若你经常在 PTC(run_code 子调用)或 str_replace_editor 下审阅改动,或希望一轮对话结束时集中看「改了哪些文件」,默认展示往往不够用。
下面介绍社区插件 dsh-edit-diff(维护者 senyayume,分类:工作流)。它在文件变更工具卡片上重绘行级 diff:相同行只渲染一次,改动行整行红/绿底色,行内真正变动的字符再加深一档;同时覆盖 run_code(PTC)子调用与 str_replace_editor,并在轮末给出改动汇总卡,支持在资源管理器中定位或复制路径。
这是什么¶
dsh-edit-diff 是标准 DSH bundle:通过 package.json 里的 dsh.bundle.patch 指向 cordis.patch.yml,安装后自动挂载,无需手工改 profile 入口。插件不改 DSH 安装目录,而是利用官方 keyed 槽位 tool.call.toolview(priority: -1)接管 edit / write / insert / str_replace_editor 的行渲染,并注册轮末槽位与宿主路由。
它解决三类问题:内置对某些工具不渲染 diff;内置 DiffBlock 不做行级匹配导致上下文重复;缺少「本轮改了哪些文件」的汇总视图与便捷的路径操作。
核心功能¶
行级去重与行内高亮¶
展开工具卡片后,差异体采用行级对齐:未改动的上下文行只出现一次(暗色);删除行、新增行分别用整行红/绿底色标出;行内字符级差异在同一底色上再深一档,文字本身走语法着色(插件自带本地分词器,配色与主题的 --shiki-token-* 一致)。标题行右侧显示分色的 +N -M 统计。
覆盖的工具与 PTC 子调用¶
接管的工具包括:edit、write、insert、str_replace_editor,以及 run_code(PTC)内部对上述工具的子调用。内置 @deepseek-ai/dsh-client-ui-tool 的 diffCardModel() 对 parentCallId 存在的块(PTC 子调用)和 str_replace_editor 会直接返回 null,本插件在这些场景补全 diff 展示。
diff 数据来源优先使用结果元数据 block.meta.diffs;否则从调用参数推导(如 edit 的 old_string/new_string)。调用失败(block.isError)时不推导 hunk,避免显示未落地的改动。
轮末改动卡¶
每一轮对话结束时,若本轮有文件变更,插件在 conversation.chat.turnTail 槽位插入汇总卡:标题为「N 个文件已更改」,合计 +A -R,整卡可折叠。逐文件一行包含类型图标、文件名、目录、+N -M,行尾有「审查」「打开」;展开后与工具行同一套差异体。
右键路径菜单¶
在轮末卡的每一行,以及本插件接管的工具行上,右键可选「在资源管理器中打开」「复制文件夹路径」「复制文件路径」。「在资源管理器中打开」由插件宿主路由完成(Windows 使用 explorer.exe /n,/select,…),官方 opener 作回落。路径按当前会话 workspace 相对化,workspace 外仍显示绝对路径。
安装与启用¶
系统要求¶
开发与实测环境为 DSH Desktop 自带 harness 0.2.0-rc.1(@deepseek-ai/dsh-client-ui-primitives 同版本)。0.2 起宿主会按 bundle 的 peerDependencies 比对引擎版本,不满足时 bundle 会被静默跳过;若 harness 版本不在插件声明范围内,需按 README 使用 dsh plugin allow-version 为精确版本开豁免。安装由 dsh plugin add(内部 pnpm)完成,需要 Node;跑仓库测试需 Node ≥ 18 与 React 18。
安装命令¶
dsh plugin add github:senyayume/dsh-edit-diff --profile desktop
profile 请换成你实际使用的 profile 名。装好后 profile 的 package.json 中 dsh.profile.bundles 应包含 dsh-edit-diff。
生效方式¶
插件分「客户端半身」(lib/client.js)与「host 半身」(lib/index.js):
- 客户端半身:每次页面加载从磁盘读取,刷新 DSH 窗口即可使文案或客户端逻辑变更生效。
- host 半身:仅在 harness 进程启动时装载。DSH Desktop 关窗口不会退出进程(会缩到托盘),修改 host 相关代码或首次安装后需从托盘右键退出再启动,否则宿主路由(如「在资源管理器中打开」)可能未注册,客户端 POST 可能得到 405。
卸载可使用:
dsh plugin remove dsh-edit-diff --profile <profile>
并重启 harness,即恢复 DSH 内置渲染。
典型用法¶
安装并确认 harness 已重启后,无需额外配置即可在会话中生效:
- 让智能体通过
edit、write、insert或str_replace_editor修改文件,展开对应工具行,查看重绘后的 diff 与+N -M。 - 在 PTC 模式下,通过
run_code触发的子层编辑同样会显示同一套差异体。 - 一轮对话结束后,在轮末汇总卡中浏览文件列表,点「审查」就地展开 diff,或点「打开」;需要时在行上右键复制路径或在资源管理器中定位。
仓库提供 docs/verification.md 中的 live 清单(工具行、轮末卡、会话装配等条目),可用于对照本机是否行为正常。
适用场景与注意¶
适合谁:在 DSH Desktop 中日常审阅智能体改文件、尤其依赖 PTC 或 str_replace_editor 的开发者;希望减少重复上下文行、在一轮末尾集中审查多文件改动的用户。
权限与安全:插件以当前 DSH 进程权限运行,host 半身会注册 reveal 等路由。安装前应阅读 GitHub 仓库 源码与 MIT 许可证,确认符合你的环境策略。
已知限制(摘要):部分截图中的行号为窗口内相对编号(host 未随进程装载时的 fallback),非文件绝对行号;macOS / Linux 上「在资源管理器中打开」代码存在但未在 README 中标注为真机验证;更低版本 DSH 若无 uiConversation.events 与 conversation.chat.turnTail,插件会降级为仅接管工具行、不出轮末卡。
结尾¶
dsh-edit-diff 在不改动 DSH 核心的前提下,补全 PTC 与 str_replace_editor 的 diff 展示,用行级去重和行内高亮降低审阅成本,并用轮末汇总卡与路径菜单把「改了什么、文件在哪」串成一条工作流。