前言¶
在 DeepSeek Harness(DSH)里让模型改文件,常见流程是:模型调用 write / edit 或 pwsh 里的写入、删除命令,改动直接落盘,你只能从对话里事后翻 diff,发现不对再手动回滚。错误一旦写入,回滚成本取决于你是否开了版本控制、文件是否已被后续步骤覆盖。
dsh-diff-review 把审查关口前移到动手之前:模型要写、改、删文件时先暂停,右侧边栏展示原文与新文的对比,你点「接受」才真正落盘;点「拒绝」则文件一个字节都不动,模型会收到拒绝原因。下面介绍这个插件的定位、能力、安装与配置。
这是什么¶
- 名称:dsh-diff-review
- 维护者:wyk4447
- 分类:admin-security(社区目录归类)
- 仓库:https://github.com/wyk4447/dsh-diff-review
- 目录页:https://www.skillhub.cn/plugins/wyk4447/dsh-diff-review
- 许可证:MIT(见仓库
package.json) - 当前版本:0.1.4
DeepSeek Harness 插件;自述为零运行时依赖,不改宿主任何内置插件。插件以当前 DSH 进程的权限运行,安装前宜自行核对源码与许可证。
核心功能¶
写入前闸门¶
拦截发生在落盘之前,而不是写完再回滚:
模型:我要把 greet.js 的第 4 行换掉
插件:↓ 暂停,不落盘
右侧边栏显示 —— 第 4 行红底删除、第 4~5 行绿底新增
改动到的字符再加一层深色高亮
你: [接受] → 才真的写进去
[拒绝] → 文件未动,模型收到拒绝原因
审查界面¶
- 改动视图(默认):统一 diff,左右两列行号,
+/-标记,未改动处可折叠;被改写的行除整行底色外,变动字符另有更深底色。 - 全文视图:原文与新文左右并排,行号与文件一致;拖滚一侧时另一侧行、列同步;大段替换时删行与增行在各自栏内对齐。
- 命令级审查:当命令要碰的路径或内容只能由 shell 运行时才知道时,面板展示完整命令行,并说明为何无法算出 diff。
- 删除级审查:对
Remove-Item、rm、[IO.File]::Delete等删除类命令,逐行标红列出将被删掉的原文,并附带原始命令行。
顶栏含操作徽章(新增 / 修改 / 删除 / 命令)、文件名与目录、+N -N、视图切换、拒绝与接受。多条待审项在左侧列表纵向排列,可逐条决定。
拦什么、不拦什么¶
| 操作 | 是否拦截 | 面板表现 |
|---|---|---|
write 新建 / 覆盖 |
拦 | 新增或修改,全文 +N -N |
edit 改文件 |
拦 | 统一 diff 或全文双栏 |
pwsh 中删除、覆盖类命令 |
拦 | 命令原文 + diff(能确定时) |
read / glob / grep 等只读 |
不拦 | — |
对 pwsh 的识别不按固定命令名单,而按「可能改写文件」的形状(PowerShell 动词-名词、.NET 文件 API、把代码交给外部解释器、原地改文件的外部工具等)。脚本块内的删除同样会被审查。只读管道、git status / git diff 等放行。
什么不会拦(在配置默认的前提下):只读工具;系统临时目录;工作区下整个 .dsh/;插件自身源码(避免自锁)。除此之外,落盘前一般会先询问。
「全部允许」¶
本对话内可一键放行后续写入类操作,直到再次关闭(重启 DSH 会恢复询问)。放行时顺带接受当前屏上那一条。即使开启全部允许,文件被删除、改名、移走仍会弹窗;写出临时文件再删掉这类「本来就不存在的文件」整条命令可直接过。
安全阀与边界¶
无人可审批时不能把 agent 卡死:侧边栏未打开、页面已关闭、审查超时(默认 5 分钟未答复)等情形会放行。二进制或超大文件读不出 UTF-8 时降级为仅统计,不假装能 diff。运行期才确定内容的单文件写入,在看不见字节时会直接放行;删除、多目标、iex / node -e 等仍会询问。
审查按对话隔离:待审队列在进程内共享,但每个标签页只处理自己会话的改动,服务端按 sessionId 校验。
安装与启用¶
兼容的 DSH 版本见 engines.dsh:>=0.2.1-rc.1 <0.3.0-0(整个 0.2.x)。不匹配时插件会拒绝加载。
官方安装命令(来自 README):
dsh plugin add https://github.com/wyk4447/dsh-diff-review.git
# 或简写
dsh plugin add github:wyk4447/dsh-diff-review
装完后在 profile 的 package.json 里体现版本或仓库形态,与其它插件一致。改插件代码后需重装一次。Fork 自用请将命令中的 wyk4447 换成自己的用户名。
配置¶
在 ~/.dsh/profiles/<profile>/cordis.patch.yml 中为对应条目增加 config:(键均可省略,缺省如下):
- id: diff-review
name: dsh-diff-review
config:
files: true # 拦 write/edit
shell: true # 拦 pwsh 里的破坏性命令
skipTemp: true # 跳过系统临时目录
skipScratch: true # 跳过工作区 .dsh 整个目录
skipSelf: true # 跳过插件自身(强烈建议保持 true)
trace: true # 写诊断日志到 ~/.dsh/logs/diff-review.log
timeoutMs: 300000 # 文件审查超时(毫秒)
shellTimeoutMs: 120000
类型不符的键会被忽略;插件自述零依赖、不做强制校验。
典型用法¶
- 安装插件并重启 DSH,在右侧边栏打开 diff 审查面板。
- 在对话中让模型修改工作区文件;弹出审查时切换「改动视图」或「全文视图」核对 diff。
- 确认无误点「接受」;若模型路径或改动不符合预期,点「拒绝」并可在后续消息中说明原因。
- 若本对话内信任模型批量改代码,可开「全部允许」,仍在删除、重命名等操作上保持拦截。
仓库提供离线自测(不连 GUI、不写真文件):
node test\gate.test.mjs
node test\render.test.cjs
适用场景与注意¶
适合谁:希望在 DSH 里保留「人机共管写盘」的团队或个人;尤其担心模型误删文件、误覆盖未提交改动、或通过 pwsh 绕道改盘的场景。分类落在 admin-security,侧重写操作审批而非事后审计。
注意:
- 插件与 DSH 同进程权限;拒绝只保证「未接受前不落盘」,不能替代操作系统级权限隔离。
- 社区插件目录(如 skillhub.cn)为独立站点,与 DeepSeek / 幻方无官方从属关系;安装来源以 GitHub 仓库为准,安装前请自行审阅源码。
- 本地软链开发时,在 profile
package.json的dependencies与dsh.profile.bundles中引用link:路径,改lib/*.js需重启 DSH。
卸载¶
- 删除
cordis.patch.yml里- id: diff-review段(若手动添加过)。 - 从 profile
package.json的dsh.profile.bundles与dependencies中移除。 - 重启 DSH。
自述未关闭任何内置插件,卸载不留 disabled 副作用。
结尾¶
dsh-diff-review 把文件改动的确认从「事后翻对话」变成「落盘前看 diff」:支持 write / edit 与可解析的 pwsh 写删命令,并提供命令级、删除级降级展示。若你正在用 DSH 0.2.x 且希望默认多一道写盘闸门,可按上文命令安装,并在 cordis.patch.yml 中按需调整 files、shell 与超时。