前言¶
DSH 采用插件化架构,开发者常需要精细控制模型对文件系统的操作。当模型调用 write、edit 或 str_replace_editor 等工具时,此插件在输入区插入确认条,拦截文件写操作,确保改动在执行前经过人工确认。
核心功能¶
- 拦截写操作:拦截
write、edit、str_replace_editor等文件写工具。 - Diff 预览:输入区出现确认条,直接展示 diff 红绿文本。
write显示新建内容(绿),edit显示行级对照(红删绿增)。 - 允许/拒绝机制:用户点「允许本次」放行,点「拒绝」则工具调用以失败结束,模型可据此调整策略。
- 长文本支持:长文本 diff 不截断,支持块内滚动查看。
安装与启用¶
使用官方命令安装:
dsh plugin --profile web add dsh-file-confirm
安装后需重启 dsh web 并刷新浏览器。
配置¶
在 cordis.patch.yml 中配置该插件,可调整拦截范围:
- insert:
- id: file-confirm
name: dsh-file-confirm
config:
tools: [write, edit, str_replace_editor] # 拦截的工具列表
# pathPattern: '^src/' # 可选:仅对匹配路径确认
# enabled: true
配置项说明:
* tools:默认拦截 write、edit、str_replace_editor。
* pathPattern:正则表达式字符串,用于限定文件路径。
* enabled:总开关。
工作原理¶
该插件利用 DSH 官方扩展点,分为 Host 和 Browser 两个半身,实现零侵入:
* Host 半身:监听 tools/pre-execute,对文件改动工具返回 { kind: 'ask', reason },其余工具调用委托。
* Browser 半身:在 conversation.composer chain slot 注册 priority 0 条目,selector 匹配文件改动类审批,接管渲染。
* 响应复用:复用内置 wait.respond 编码,审计记录照常写入。
注意事项¶
- 仅拦截文件写操作,
read、搜索、bash等工具调用不受影响。 - 其他工具的审批(如 bash 沙箱升级)仍走 DSH 内置面板。
- 零侵入设计,不修改任何内置包。
总结¶
该插件专注于文件写入这一高风险环节,通过内置 diff 预览和允许/拒绝机制,为 DSH 提供了简单直接的文件审查能力。