前言¶
DSH(DeepSeek Harness)的理念是「一切皆插件」,插件可以挂载工具、子代理、网络模块。问题随之而来:一个插件在 package.json 里说自己只读文件,但它的预设顺手挂了 bash、web 和子代理;沙箱策略又是在会话里逐层组合出来的。等到出事再去翻几十个压缩会话日志,已经晚了。
feely0208/dsh-agent-permission-audit(npm 名 @deepwhale-cn/dsh-agent-permission-audit,版本 0.1.0,MIT)就是做这件事的:读本机已装插件和预设的声明,读本机会话日志里的真实调用,然后列出差集——哪些调用超出了声明(红),哪些声明了却一直没用(黄,可以收窄)。它只读本机、不联网,也可以不装插件直接用 CLI 跑。
谁维护、解决什么问题¶
仓库由 feely0208 维护,作者行是温州深鲸智能科技有限公司,许可证 MIT。它解决的问题很具体:权限是组合出来的,声明和实际之间没人说得清。已有做法是出事之后人工翻日志;这个插件把它变成一次静态读取加一次文本报告。
核心功能¶
声明侧。读取本机已装插件的 package.json(dsh 字段、peerDependencies、dependencies)、cordis.patch.yml 挂载的模块,以及 .agent-presets/* 里的 agent preset 和随包 insert 行,提取每套声明的工具白名单和文件范围。
实际侧。读取本机会话日志 session.v4.jsonl.zstd(用系统 zstd 解压),提取真实发生的工具调用、命令、读写路径和访问域名。
差集。按预设或插件给出「声明项 → 实际命中 → 声明外调用 → 声明了但未使用」,并汇总声明外总数和最高风险类别。
风险计数。单独统计执行命令、写系统路径、访问外部网络、读凭据四类;对 workspace-write、read-only 沙箱还会列出会话策略违规。
输出。文本和 --json 两种;退出码 0 表示没有声明外调用,1 表示有,可以挂在脚本或检查流程里。
能力口径¶
插件把它们折算成八类概念,够用即可:exec 执行命令、fs.read 读文件、fs.write 写文件、net 访问网络、skill 加载技能、agent 子代理/团队、memory 记忆读写、plan 计划/待办。
插件作者可以在 package.json 里显式声明能力白名单,这是可选字段,本插件会识别;宿主会忽略它不认识的字段。带 : 的部分是范围,支持前缀和 * / ** 通配:
没写显式声明时,插件从依赖和 patch 挂载的官方模块推断能力。推断结果不是白名单,所以不会把别人挂载的调用算成这个插件的「声明外」。实际调用按会话的 agentPreset 精确归属到预设;找不到预设声明时(例如内置预设),只做会话策略审计并明确标注,不伪造差集。
安装与启用¶
用官方目录里的安装命令:
dsh plugin --profile web add @deepwhale-cn/dsh-agent-permission-audit
装好后侧栏多一个「深鲸权限审计」图标。要求 dsh >=0.1.0-rc.6 <0.3.0、Node.js >=18。
同一仓库还提供 CLI,不装插件也能跑:
node bin/cli.mjs --days 7 # 文本报告
node bin/cli.mjs --days 30 --json # 机器可读
CLI 另有 --home <目录>、--sessions <目录>、--no-color 等参数。
常见配置¶
默认读取 ~/Library/Application Support/DeepWhale Desktop/dsh-home,其中包含 profiles/、plugins/、.agent-presets/、sessions/。三个环境变量可覆盖:
| 变量 | 作用 |
|---|---|
DSH_AUDIT_HOME |
DSH_HOME(含 profiles/、plugins/、.agent-presets/、sessions/) |
DSH_SESSIONS_DIR |
会话日志根目录 |
DSH_ZSTD_BIN |
zstd 可执行文件路径 |
插件全程只读:不写文件、不修改日志、不联网、不调第三方接口。报告对 sk-*、Bearer/Authorization、token/secret 赋值、邮箱、用户名路径打码。
适用场景与注意¶
适合装了多个插件和预设、需要定期核对实际权限的使用者,也适合插件作者在发布前自查未使用的能力。审计本身只覆盖工具体调用层;插件在宿主进程内直接读写文件的行为不会出现在日志里,审不到。
几处需要留意的边界:
- 「写系统路径」「读凭据」是启发式识别(看命令与路径),可能误报,报告给了样例,按样例核对后再改。
- 没有会话日志时只做声明侧统计,报告明确显示「无实际数据」,不会把「没数据」说成「没风险」。
- 内置预设在本机没有声明文件,无法做预设级差集,只做会话策略审计。
- 「声明外」按预设组成和插件显式白名单判定;宿主全局提供的工具可能不在预设声明里,报告附带样例,先核对再改。
安装前应检查源码与许可证,确认它对你的会话日志存放位置和 zstd 可执行文件路径适用。它以当前 dsh 进程的权限运行,只是读本机文件,不修改任何内容。
结尾¶
这个插件的价值不在于替你收紧权限,而是把「声明了什么」和「实际用了什么」摆在同一张报告里,让收窄有依据、误配能被发现。它只读本机、不联网、不改日志,可以反复跑。
目录页:https://www.skillhub.cn/plugins/feely0208/dsh-agent-permission-audit
仓库:https://github.com/feely0208/dsh-agent-permission-audit
注:社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系,不是官方应用商店。