dsh-file-changes: DSH Web Plugin to Display File Changes Panel at the End of Each Response

前言

用 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/executetools/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.jslib/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 为准。

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

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

Xiaoye