前言¶
用 DeepSeek Harness(DSH)做智能体开发时,一个常见问题是:模型在一轮回答里创建或修改了哪些文件,往往要从长转录里翻找。内置的 Produced 行只给出一个笼统的产物列表,想知道某个文件具体改了什么,还得自己去编辑器里看。
dsh-file-changes 是 mixin-ai 维护的一个 DSH Web 插件,解决的问题很具体:在每轮回答结束的消息下方,列出本轮创建或修改的文件,支持直接查看 diff、用系统默认应用打开,或在 OS 文件管理器中定位文件。本文按功能、安装、原理、注意事项的顺序介绍它。
这是什么¶
dsh-file-changes 是一个 DeepSeek Harness Web 插件,采用 MIT 许可证,当前版本为 0.1.0,代码托管在 GitHub(mixin-ai/dsh-file-changes)。
它是对内置 Produced 行的补充:在 Produced 之外,增加了 created/modified 徽章、逐文件 diff 和逐文件文件系统定位。当一轮对话创建了或修改了文件,面板会在结束消息下方把每个文件列出来,并附带三个操作:
- Open:点击文件名,用 OS 默认应用打开文件;
- View diff:弹出一个模态框,使用 harness 的 DiffBlock primitive 渲染本轮实际应用的变更,新文件则显示整文件内容;
- Reveal:在 OS 文件管理器中定位并选中文件(macOS 用
open -R,Windows 用explorer /select,,桌面 Linux 打开所在目录)。这个操作仅在 loopback 访问且原生 opener 可用时显示。
安装与启用¶
从 GitHub 安装:
dsh plugin --profile web add git+https://github.com/mixin-ai/dsh-file-changes
也可以从本地 checkout 安装,便于修改和调试:
dsh plugin --profile web add link:/path/to/dsh-file-changes
安装后重启 dsh web,再刷新浏览器页面,面板即可生效。
插件要求 Node 版本 ^22.19.0 || >=24.0.0。如果想验证插件逻辑是否正常,可以在仓库根目录运行测试:
node smoke.test.mjs && node client.test.mjs
这两个测试分别覆盖 host 半部与客户端逻辑。
工作原理¶
插件由 host 和 client 两个半部组成,通过 cordis.patch.yml 的 bundle patch 挂载:
lib/index.js:host 半部,包含嵌套 dispatch tap 和两个 HTTP 路由;lib/client.js:浏览器 bundle,包含 turn 累加器和面板/diff/reveal 的 UI。
按数据来源分两种模式:
1、Native 模式。客户端半部注册一个会话定义(做法上类似于 @deepseek-ai/dsh-client-ui-deliverables),从展示视图(card: 'diff' 的 hunk,或通用的 kind: 'edit' location)累积本轮成功的变更类工具调用,以 turn-scoped 数据发布在 fileChanges 键下,再经 chat 视图的 conversation.chat.turnTail slot chain 渲染出来。
2、Code Mode(run_code)。嵌套 dispatch 在线上传输时不携带展示视图,客户端拿不到信息,所以由 host 半部监听 tools/execute 与 tools/result 中带 parent 的执行(即 Code Mode 子调用),从 write / edit / str_replace_editor 的参数重建变更记录,通过 /api/file-changes/changes 提供给前端。
面板会把两个来源合并,并按文件路径去重,所以不管文件是通过哪种方式改的,都能在同一处看到。
Reveal 功能走 POST /api/file-changes/reveal 端点:服务端先校验 JSON payload、loopback origin 和绝对存在路径,全部通过后才交给平台 opener 执行。
适用场景与注意¶
适合的场景:
- 在浏览器里使用 DSH Web 界面做开发,希望每轮结束后立刻确认哪些文件被改动;
- 需要逐文件查看 diff,而不是翻转录里的代码块;
- 在 loopback 环境下希望一键跳到文件管理器定位文件。
使用时注意以下几点:
- 终端命令(如
bash)间接创建的文件不会被检测到,这与官方 produced-files 行的词汇表限制相同; - host 侧 Code Mode 的变更记录存在内存中(2 小时、每会话 2000 条的环形缓冲),服务器重启后即清空;
- reveal 端点只信任 loopback 同源的 JSON 请求,这是有意为之的安全设计。
另外要提醒:插件以当前 dsh 进程的权限运行,安装前建议先检查源码与许可证。该项目是 MIT 许可,代码量不大,主要逻辑集中在 lib/index.js 和 lib/client.js 两个文件里,通读一遍的代价不高。
小结¶
dsh-file-changes 做的事情不复杂,但切中了 DSH Web 使用中的一个日常痛点:让每轮回答的文件变更可见、可查、可跳转。它兼容 Native 与 Code Mode 两种来源,并对 reveal 路径做了边界校验,是一个定位清晰的小型插件。
DSH 的理念是「一切皆插件」,这类由社区维护的插件正是这个生态的组成部分。项目地址与目录页如下:
- GitHub:https://github.com/mixin-ai/dsh-file-changes
- 目录页:https://www.skillhub.cn/plugins/mixin-ai/dsh-file-changes
需要说明的是,skillhub.cn 是独立的社区目录站点,与 DeepSeek / 幻方无官方从属关系,使用前请以仓库内的 README 为准。