dsh-command-permission:用会话与工作区规则减轻 DSH 命令审批负担

前言

在 DeepSeek Harness(DSH)里,Agent 通过 pwsh / bash 等工具执行命令时,常会触发「升级审批」(エスカレーション):每次都要在面板里点允许或拒绝。开发节奏一快,同类命令反复出现,就容易变成「审批地狱」——要么一直点,要么靠记忆去改全局策略,又容易过宽或过窄。

社区插件 dsh-command-permission(维护者 yukieiji,分类 admin-security)在 DSH 自带的审批流程之上,增加「一键把当前命令登记为允许模式」和「按工作区维护允许/拒绝列表」两类能力。下面介绍它做什么、怎么装、怎么用,以及判定顺序与限制。

这是什么

dsh-command-permission 是 DSH 插件,npm 包名 @yukieiji/dsh-command-permission(资料中版本 0.2.0,MIT 许可证)。它不改变 DSH 核心,而是在命令升级审批与侧边栏工作区菜单里扩展 UI 与规则存储,让「这条命令以后还要不要问」可以在审批当下或工作区设置里一次性定好。

规则写入各工作区下的 .dsh/command-permissions.json;会话级允许按会话 ID 持久化(主机重启后仍保留,且不影响其他会话)。

核心功能

1. 审批面板的一键允许按钮

当 pwsh / bash 的升级审批弹出时,在命令字符串下方会出现两列允许按钮(README 以 uv run app.py 为例):

  • 会话行:在本会话中允许「uv run app.py」/「uv run *」/「uv *」等粒度之一
  • 工作区行:把工作区允许列表设为「uv run app.py」/「uv run *」/「uv *」等之一

任一点击都会登记对应模式,并对当前这一次审批直接返回「允许」,无需再点主面板上的允许。

  • 会话允许写在 .dsh/command-permissions.json 的 session 段,按会话 ID 分键保存
  • 工作区允许对该工作区下所有会话生效

2. 工作区「…」菜单里的命令权限

侧边栏工作区行的 「…」菜单(与重命名、删除等并列,项加在菜单最下方)→ 「コマンド権限…」(界面文案以插件 locale 为准),可编辑该工作区专属列表:

  • 允许列表:匹配的命令升级审批自动通过(不再询问)
  • 黑名单:匹配的命令自动拒绝(不再询问;优先级高于允许)

3. 模式语法与判定顺序

保存位置:<工作区>/.dsh/command-permissions.json。示例结构:

{
  "allow": ["uv run *", "git status"],
  "deny": ["git push", "rm *"],
  "session": {
    "s0123456789abcdef": ["uv run app.py"]
  }
}

一行一个模式:无 * 则完全匹配;* 为可在任意位置使用的通配符。空白会规范化后再比较(例如 git push 与 git push 视为相同)。除 * 外,.、+ 等按普通字符处理。

模式 会匹配 不会匹配
uv run app.py 仅 uv run app.py uv run other.py
uv run * uv run app.py、uv run anything deep.py uv run(末尾需空格等,见 README 表)
uv * uv add requests uvx add x
* --force git push --force git push
git * origin git push origin git push

出现升级审批时,判定顺序为:

  1. 工作区拒绝列表
  2. 工作区允许列表
  3. 会话允许
  4. 若都不匹配,仍按 DSH 默认行为向用户询问

4. /cmdperm 会话命令

在 DSH 会话中可用下表命令管理列表(与 UI 写入同一 JSON 文件):

命令 含义
/cmdperm session list 列出本会话的允许模式
/cmdperm session add <模式> 添加会话允许(持久化)
/cmdperm session remove <模式> 删除
/cmdperm session clear 清空本会话相关条目
/cmdperm workspace allow add <模式> 加入工作区允许列表
/cmdperm workspace deny add <模式> 加入工作区拒绝列表
/cmdperm workspace <id> list 查看指定工作区列表
/cmdperm workspace <id> save <json> 保存列表(供内部对话框使用)

安装与启用

插件以当前 DSH 进程权限运行;安装前建议阅读 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全策略。

官方 README 给出的 Git 仓库安装方式:在 Plugin Manager 中使用「路径/URL 指定」:

github:yukieiji/dsh-command-permission

本地开发构建时,README 说明可在克隆仓库后执行 pnpm install && pnpm build,再在 Plugin Manager → 添加 → 路径指定 指向该目录 → 启用 → 刷新页面。日常用户以 URL 安装即可。

DSH 生态强调「一切皆插件」;SkillHub 目录页 是社区站点,与 DeepSeek / 幻方无官方从属关系。

典型用法

  1. 安装并启用插件后,当 Agent 首次执行 uv run app.py 触发审批时,在命令下方点工作区行的「uv run *」或会话行中更窄的模式,完成本次允许并登记规则。
  2. 对必须禁止的操作(如 git push、rm *),打开工作区「…」→ 命令权限,加入拒绝列表,之后同类命令将自动拒绝。
  3. 临时放宽仅本会话:用 /cmdperm session add 'uv run tests/*',结束会话或 /cmdperm session clear 清理。

适用场景与注意

适合:在同一工作区反复跑测试、包管理、只读 git 命令等,希望减少重复点击,又需要比「全局全开」更细的工作区/会话边界。

限制(来自 README):

  • 工作区菜单项通过 DOM 注入实现(ui-workspace 暂无专用槽位);若 DSH 前端 DOM 变更,菜单项可能消失,需等插件更新。
  • 模式仅作用于带 command 参数的 shell 类工具;文件系统工具的升级审批仍按默认询问。
  • session 段会按会话 ID 累积;不需要时用 /cmdperm session clear 或手动编辑 JSON。

结尾

dsh-command-permission 把「审批当下登记模式」和「工作区允许/拒绝表」接到 DSH 现有升级流程上,并用明确的匹配顺序避免 allow/deny 打架。若你主要痛点是 bash/pwsh 命令反复弹窗,可在目录页查看简介后,按上面的 github:yukieiji/dsh-command-permission 安装试用。

  • 目录页:https://www.skillhub.cn/plugins/yukieiji/dsh-command-permission
  • GitHub:https://github.com/yukieiji/dsh-command-permission
羽毛球分组比赛记分
小程序二维码

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

小夜