@mrweicodes/dsh-permgate
Fine-grained permission gateway: per-category tool-call review (outside-workspace directories, commands, file read/write, subagents, repeated actions) with global & per-project allow/deny exceptions, quick-tool defaults, custom rules, a bilingual approval modal with inline diff details, custom rejec
Install
dsh plugin --profile web add @mrweicodes/dsh-permgate
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
dsh-permgate — DSH 权限网关
为 DeepSeek Harness(DSH)提供的细粒度权限控制插件
🌏 中文 | [English](README_EN.md)
dsh · dsh-plugin · plugin · permission control · approval · sandbox · security · AI agent · 权限控制 · 审批 · 沙箱 · 权限网关
<!-- keywords: dsh, dsh-plugin, deepseek harness, plugin, permission control, approval, sandbox, security, ai agent, 权限控制, 审批, 沙箱, 权限网关, 自定义审查 -->
简介
当前 DSH 仅有 [Read only]、[Workspace Write]、[Full access] 三档权限,权限粒度较粗。本插件新增 「自定义审查」(Custom Review) 权限网关,对工具调用进行逐项审查。
权限按分类(目录访问 / 执行命令 / 读取文件 / 读取图片 / 编辑文件 / 撤销操作 / 启动子代理 / 重复操作)逐项审查工具调用,支持全局/项目双级配置、例外(白/黑名单)、快捷工具默认值、自定义规则、兜底策略,以及中英文双语审批弹窗与沙箱升级流程。
功能特性
- 八大权限分类:工作区外目录、执行命令、读取文件、读取图片、编辑文件、撤销操作、子代理、重复操作八类分开管控,每一类都能独立设置「询问 / 允许 / 拒绝 / 自动审批」——敏感操作从严、日常操作从宽,按你的习惯划定 AI 的边界。
- 自动审批:把某一类(或某条规则、某个快捷工具、某个破坏性命令档位)设成「自动审批」后,每次调用先问模型,模型说行就直接过、说不行就拒,只有模型拿不准的才弹窗问你。可以只对部分操作开启,其余分类照旧人工审批——既减少打扰,又不至于整类放权。每个「自动审批」还能单独指定「模型失败后怎么办」(询问 / 允许 / 拒绝),失败路径始终在你手里。
- 全局 / 项目双级配置:一份全局规则管所有项目,再按项目单独微调;项目里没设置的项目自动跟随全局,不用重复配置。
- 例外(白/黑名单):把「经常要放行」或「绝对不允许」的路径、命令加进例外,命中后直接放行或直接拒绝,不再每次弹窗打扰你。
- 快捷工具:
web_search、skill等没法按文件或命令分类的工具,也能单独设定默认是询问、直接允许还是直接拒绝。 - 自定义规则:按工具名、文件路径、参数内容任意组合出规则(例如「任何工具都不得执行
rm -rf」),比分类例外更灵活;优先级 规则 > 例外 > 默认值,用最少的规则管住最多的情况。 - 审批弹窗:一次弹窗看全所有信息——AI 想做什么、为什么、具体参数;编辑/写入文件会直接展示改动前后的 diff(+N/-N 行),撤销操作会展示本次撤销将恢复的内容,不用再点开文件比对。觉得某类操作以后都不用问了,还能一键把它加进项目白/黑名单。
- 自定义拒绝意见:拒绝时可以直接告诉 AI「为什么不行、应该怎么做」,AI 收到明确的理由后会立即调整方案,而不是对着一个冰冷的「用户拒绝」反复试错。
- 底层沙箱升级:即使你放行了,文件操作仍被 DSH 底层沙箱拦下(比如写工作区外的文件)时,会再次弹窗询问是否临时放开——一次授权、执行完自动收回,多一层保险。
- 中英文双语:界面跟随 DSH 语言自动切换,中英文用户都能顺畅使用。
- 决策留痕:每次自动审批都写一条会话记录——模型放行 / 模型拒绝 / 模型拿不准 / 模型调用失败 / 失败后按你的设置直接执行,五类分别可辨。在会话流里点开就能看到模型给的理由与判定的风险等级;这些记录不进入模型上下文,重启后仍可查。
- 持久化:所有设置保存在用户目录,重启不丢失。
使用
- 会话权限选择器:在输入框下方的权限选择器中选择「自定义审查」,即由权限网关按分类逐项审查工具调用。
- 新会话默认权限设置:在设置里把「自定义审查」设为新对话的默认权限,之后每次新建对话自动启用,不用手动重复选择。
- 审批弹窗:编辑/写入类审批可以看到 diff 详情,快速判断改动是否合理;命令类审批展示命令与参数——命中例外直接放行、未命中则询问,并给出可一键添加的规则候选(如
git status *),常放行的命令顺手就加进例外。
- 自定义拒绝意见:拒绝时填写意见,AI 会收到「为什么不行、应该怎么做」的明确理由,立即调整方案。
- 自动审批记录:模型替你放行的、拒绝的、拿不准的,都会在会话流里留一条记录,写明判定理由、风险等级和这次用的推理强度——想复查「刚才那次凭什么放行」,往上翻就能看到。
- 设置 → 权限网关:一站式管理所有权限——每个分类的默认行为、白/黑名单、快捷工具、自定义规则、底层沙箱,全局与项目分开配置,还能查看最近决策记录。无需再手动编辑配置文件,通过设置界面即可快速调整。
安装
方式一:插件市场安装(dsh-market,推荐)
已安装 dsh-market(DSH 插件市场)的用户:打开 设置 → 插件市场(Plugin Market),搜索 dsh-permgate,点卡片上的「安装」并按提示确认来源(npm:@mrweicodes/dsh-permgate;若卡片显示 GitHub 源则为 github:MrWeiCodes/dsh-permgate)。安装完成后重启 dsh web。然后在会话的权限选择器(/permission)中选择 「自定义审查」。
方式二:让 AI 安装(最简单)
把本仓库地址告诉 DSH 的 AI 助手即可,例如:「安装 https://github.com/MrWeiCodes/dsh-permgate 这个插件」。AI 会替你完成插件装载、依赖与补丁处理;之后重启 dsh web,在会话的权限选择器(/permission)中选择 「自定义审查」(每个对话独立记忆;也可在 设置 → Permission 里设为新会话默认)。
方式三:一行命令(自助安装)
宿主侧插件为纯 ESM JavaScript,浏览器注册脚本也作为运行时文件随仓库直接提交。本包没有 build、prepare 或 install 脚本,因此从 Git 安装时不需要授权 pnpm 执行构建。
从 npm 安装(推荐):
dsh plugin --profile web add @mrweicodes/dsh-permgate
从 GitHub 安装:
dsh plugin --profile web add -w github:MrWeiCodes/dsh-permgate
从本地 checkout 安装(仅当 checkout 位于 profile 目录内时依赖才能解析;否则请用方式四):
dsh plugin --profile web add -w ./dsh-permgate
重启 dsh web,然后在会话的权限选择器(/permission)中选择 「自定义审查」(每个对话独立记忆);也可在 设置 → Permission 里把它设为新会话默认。
已按「方式四」手动安装过的,请先按「卸载」清掉旧的手动行与依赖,再使用方式三,避免重复注册。
方式四:手动安装
无 pnpm 或离线环境时的备选路径:
1. 把本仓库放入你的 DSH profile 插件目录:
# 示例:web profile $dst = "$HOME\.dsh\profiles\web\packages\dsh-permgate" git clone https://github.com/MrWeiCodes/dsh-permgate.git $dst
2. 在 profile 的 package.json 的 dependencies 中加入:
"@mrweicodes/dsh-permgate": "file:./packages/dsh-permgate"
3. 把 cordis.patch.yml 的内容并入 profile 的 cordis.patch.yml(在文件末尾追加)。
4. 重新安装依赖并重启:pnpm install(或 npm install)、dsh web。
更新
⚠️ 2.1.0 起新增「自动审批」:动作值域多了auto一档,设置页新增自动审批卡片。升级不需要重新配置——存量配置按原样读取,默认不开启自动审批;想用就去设置页把某个分类的动作改成「自动审批」。该功能需要 DSH0.2.1起(决策留痕用到appendPluginRecord,更旧版本上自动停用、审批照常)。
⚠️ 1.3.9 起包名变更为@mrweicodes/dsh-permgate(原dsh-permgate)。
- 插件市场安装的:在市场点「更新」即可——市场会自动完成源迁移(移除旧包名、装入新包名),失败会自动回滚。
- 手动安装的(方式三/方式四):请先移除再重新安装:
```powershell
dsh plugin --profile web remove dsh-permgate
dsh plugin --profile web add -w github:MrWeiCodes/dsh-permgate
```
- 配置($DSH_HOME/dsh-permgate/config.json)不受影响,无需重新设置。
按安装方式对应操作,配置($DSH_HOME/dsh-permgate/config.json)在更新后都会保留,无需重新设置。
- 方式一(dsh-market 安装)的:打开 设置 → 插件市场,在 dsh-permgate 卡片上点「更新」(或按市场提示一键/批量更新)。
- 方式二(AI 安装)安装的:直接告诉 AI「更新 dsh-permgate 插件」即可。
- 方式三(dsh plugin)安装的:
dsh plugin --profile web update @mrweicodes/dsh-permgate
若没有拉到最新提交(git 依赖有缓存),先移除再添加一次:
dsh plugin --profile web remove @mrweicodes/dsh-permgate dsh plugin --profile web add -w github:MrWeiCodes/dsh-permgate
然后重启 dsh web。
- 方式四(手动)安装的:
cd "$HOME\.dsh\profiles\web\packages\dsh-permgate" git pull # 或重新拷贝新版本覆盖 pnpm install # 依赖声明有变化时执行
然后重启 dsh web。
卸载
方式一(dsh-market 安装)的:插件市场卸载
打开 设置 → 插件市场,在 dsh-permgate 卡片上点「卸载」(两步确认),本会话安装的插件会即时移除。配置目录 $DSH_HOME/dsh-permgate/ 不会被自动删除,按下方「残留位置清单」决定保留或清理。
方式二(AI 安装)安装的:让 AI 卸载
直接告诉 AI 助手「卸载 dsh-permgate 插件」。AI 按下方「残留位置清单」移除插件、清理补丁与依赖,并删除配置目录(如需保留配置请提前说明)。
方式三(dsh plugin)安装的
dsh plugin --profile web remove @mrweicodes/dsh-permgate
dsh plugin remove 只移除插件本体与补丁层,不会删除配置目录——需按下方清单删除 $DSH_HOME/dsh-permgate/。
方式四(手动)安装的
1. 从 profile 的 cordis.patch.yml 中删除 - insert: permgate 行;permission 预设覆盖整行可一并删除(恢复平台默认预设表)。
2. 从 profile 的 `package.js
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::18,最后更新 2026-11-06