dsh 第四个权限预设:进程全权限(GPU 可用),同时工作区外与受保护文件(.git/**、.env*)的写入逐次向用户审批;纯插件实现,零核心改动。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:zjuhbh/dsh-full-with-approval
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
[!WARNING] ⚠️ 本项目已停止维护(no longer maintained)。 不再提供任何更新、Bug 修复或安全补丁, Issue / PR 不再受理。代码按 MIT License 原样提供,如需继续开发请自行 fork, 使用风险自负。
This project is no longer maintained. No further updates, bug fixes, or security patches will be provided. The code is provided as-is under the MIT License; fork it if you want to continue development. Use at your own risk.
DeepSeek Harness (DSH) 的 profile 插件,新增第四个权限预设 full-with-approval:
全能力计算 —— 会话沙箱模式为
danger-full-access,进程不隔离:CUDA/GPU、设备、网络以及本机可运行的一切二进制都可用。文件修改逐次审批 —— 该预设激活期间,每次
write/edit若涉及- 工作区外的文件(平台临时目录与配置的 scratch 目录除外),或
- 工作区内受保护文件(默认
.git/**、.env*),
都会在执行前向用户申请一次性授权。审批走的是沙箱升级重试所用的同一交互通道(
ctx.approval,allowed-once)。拒绝/取消 ⇒ 工具失败,不写入任何内容;无可用审批通道时 fail-closed 拒绝。shell 修改逐次审批 ——
bash/pwsh命令若带有修改工作区外文件迹象(出现工作区外路径 + 写标记:重定向、chmod、rm、python、curl -o等),也会先弹审批;明显只读的调用(cat、ls、grep、env等且无写标记)与仅涉及工作区内相对路径的命令直接放行。静态启发式宁可多问:解释器(python/node)与命令替换中出现工作区外路径必问。bashGuard: false可整体关闭该层;extraBashTokens可追加"出现即问"的子串。
其余情况——工作区内普通文件写入、临时/scratch 文件、所有读取与一切命令执行——不受打扰。
原理
插件只是 DSH 现有扩展点上的薄薄一层,不改任何核心包:
cordis.patch.yml的full-with-approval条目挂载本插件。- 同一 patch 按 id 覆盖
permission预设表,加入第 4 档full-with-approval = { sandbox: danger-full-access, approval: ask }。GUI 权限选择器与/permission命令都读这张表,新档位自动出现。 - 插件监听工具注册表的
tools/pre-execute瀑布(官方 allow / deny / ask before dispatch 钩子)。当会话有效预设为full-with-approval且调用是write/edit、目标在工作区外或受保护时,返回{ kind: "ask", reason };注册表通过ctx.approval.request(...)处理询问,仅在allowed-once后派发。
安装
# 在 git 检出的父目录执行(pnpm file: 安装:复制包并安装其声明的依赖)
dsh plugin --profile web add ./dsh-full-with-approval
# 或按绝对路径指向本地目录(link: 形式不会管理插件自身的依赖,检出目录里需先 npm install)
dsh plugin --profile web add /path/to/dsh-full-with-approval
# 发布为 npm 包后
dsh plugin --profile web add dsh-full-with-approval
dsh plugin add 会执行 pnpm 并协调 profile 的 bundle 列表:声明了 dsh.bundle 的包自动进入叠加层。下次启动 profile 时生效(重启应用 / HMR 后刷新)。
若 pnpm 报
ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION(profile 锁文件的供应链策略,与本插件无关),安装时可放宽:dsh plugin --profile web add ./dsh-full-with-approval --config.minimum-release-age=0
使用
- 在 Web UI 权限选择器里选 Full With Approval(第 4 项),或:
/permission full-with-approval - 激活期间,受保护写入会弹审批;批准则该次写入放行。
- 随时可切回
workspace-write/danger-full-access/read-only;闸门跟随预设。
配置
插件条目配置(写在 profile 的 cordis.patch.yml 里覆盖):
- id: full-with-approval
config:
# glob,匹配相对会话工作区的 POSIX 路径;绝对 pattern 匹配绝对目标路径
protectedPaths:
- ".git/**"
- ".env*"
- ".env/**"
# 绝不弹窗的绝对 scratch 根目录(平台临时目录之外)
extraWritableRoots: []
# shell 守卫层(默认 true):bash/pwsh 命令带工作区外修改迹象即弹审批
bashGuard: true
# 追加"命令中出现即弹审批"的子串
extraBashTokens: []
修改 protectedPaths 在重载/重启后生效。
刻意不拦的部分
- 读取永远放行(所有模式都允许读)。
- 临时区(
/tmp、os.tmpdir())与extraWritableRoots从不弹窗。 - shell 写由启发式而非内核把关 —— 命令仍可绕过静态检查(运行时拼路径、
cd后相对写、解释器隐藏文件操作)。启发式倾向多问;请把它当作"疑似即提醒"层,而非安全边界。内核级边界仍是workspace-write模式(代价是 GPU 不可用)。
已知边界
- 选择器图标:核心 Web UI 的权限图标来自
@deepseek-ai/dsh-client-ui-conversation客户端包内按值硬编码的表;插件新增的预设没有图标(客户端模块图是扁平的,插件包无法覆盖该表)。在上游支持之前,用一条命令补上第 4 档的「盾牌+对勾」图标(幂等、会备份包文件、web 应用实时提供该文件——刷新页面即可看到;每次升级 dsh 后重跑):node tools/patch-ui-glyph.mjs - 第 4 项预设不显示核心 UI 中
danger-full-access那一档的额外风险确认门(该确认按预设值硬编码在核心客户端);不过每一笔受保护写入仍会逐次审批。 run_code/代码模式执行不做文件效果检查;原生write/edit调用与bash/pwsh命令被闸门覆盖。- 路径分类是"规范化后与工作区比较";在符号链接别名怪异(Windows 8.3、大小写不敏感)的文件系统上,工作区边界请视为建议性——在受限模式下,内核级围栏才是权威。
发布
npm pack # 打包
开发
npm ci # picomatch + harness 依赖
node --test # 分类器单元测试
DSH_AI_NODE_MODULES=/path/to/node_modules/@deepseek-ai \
node test/pre-execute.harness.mjs # 真实注册表 ask→审批→派发全链路
另可参考 examples/cordis.patch.yml(显式旋钮值)与 SECURITY.md / CONTRIBUTING.md(信任模型与改动规则)。
License
MIT
链接
同类插件
toby-bridges/api-relay-audit★ 872
从 DeepSeek Harness 对 AI API 中转站和 LLM 代理运行本地安全审计,生成 Markdown 报告,覆盖提示词注入、模型替换信号、工具调用改写、错误泄漏、流完整性和按 profile 启用的 Web3 风险。
SeaOf0/dsh-redteam-model★ 671
面向授权安全研究的 DSH 合集:九个工作模式(redteam 总控、渗透测试、代码审计、二进制分析、攻防评估、免杀对抗、应急溯源、云安全攻防、CTF 解题)与十五个运行时插件,设置页管理台支持一键部署、安装、更新与卸载。
howmp/dsh-pentest★ 603
面向 DeepSeek Harness 的授权渗透模式:以探索链路记录目标、线索、资产与漏洞,并在 Web 中可视化展示。
PerryLink/dsh-auto-review★ 234
审批链上的第二模型自动审查:只读审查子代理返回带理由的 allow/deny 结构化裁决,默认 fail-closed。
NanmiCoder/dsh-auto-mode★ 164
在 Workspace Write 与 Full access 之间增加 Auto 权限档:日常操作留在官方 workspace-write 沙箱内,由当前会话模型复核升权与破坏性调用,精确的越界访问按次放行一次,意图不明时询问,命中关键路径则拒绝。
PerryLink/dsh-permission-rules★ 120
Claude Code 风格的声明式权限规则:按序 allow/deny/ask 的 YAML 规则,在 tools/pre-execute 瀑布上匹配工具名、参数、工作区路径与 agent 身份,带完整会话日志审计、干跑模式与热重载。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。