中文EN

dsh-auto-approval-frame

security已测通过npmBSD-3-Clause

DSH 工具调用的审批框架:一张四档规则表(拒绝/问人/AI 评审/放行)按工具、命令、文件与网络作用面逐条匹配,之后是 AI 快评与深评、人工审批,并带哈希链审计台账和设置页。目标文件只查元数据、不打开文件正文;评审端看到的是命令、目标与裁剪后的写入内容,发出前先做敏感信息脱敏。

下载量 / Downloads
1,021
依赖体积 / node_modules
1.36 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-auto-approval-frame

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-auto-approval-frame

[English summary](#english) · 中文完整说明(默认)

DeepSeek Harness 的审批与审计插件。每次工具调用,它替你先看一眼:能按你的规则放行的直接放行,需要判断的交给模型,模型也说不准的再问你。每次判定都记进同一本可校验的台账。

「不用模型费直接放行」不是代码里的特权,它就是你规则表里的一行:能停用、能换档、能调序,台账里说得出是哪一行放的。

目录

[五分钟上手](#五分钟上手) · [安装](#安装) · [权限档](#权限档) · [拦截梯](#拦截梯) · [配置](#配置) · [审计库](#审计库) · [它到底看什么](#它到底看什么隐私边界) · [边界](#边界这个插件保证什么不保证什么) · [秘密回填](#秘密回填占位符怎么换回原值) · [AI 审查怎么判](#ai-审查怎么判) · [明确不做](#明确不做) · [English](#english) · [开发说明](#开发说明)

五分钟上手

装完到能干活,四步。后面是使用说明,装完能跑就可以跳过,出问题再回来查。

一、装。 插件市场搜包名 dsh-auto-approval-frame,装完重启 DSH;或命令行 dsh plugin --profile <你的 profile> add dsh-auto-approval-frame。细节见下一节。建议同时装 dsh-gitbash-shell——本插件的解析和测试是按 Git Bash 打磨的,原生命令这条路验证得少,见「安装」。

二、开。 设置 → 插件 → 找到 dsh-auto-approval-frame,确认开关是开的。再回到会话,打开权限菜单选「自动审批」这一档——没选这一档,插件不接管你的任何会话,既不拦也不记。

三、写第一条规则。 设置页的命令表加一行:git status,档位选「允许」。之后在会话里让它看 git 状态,这次调用既不弹窗也不花模型费,台账里写得出是这一行放的。想管住一族命令就写 git;写得更具体的那行优先,git push 压 git。

四、看。 每次拦截、每次人工答复都在设置页的「审计中心」:时间、动作、落在哪一层(规则/快判/深评/人工)、你当时答了什么。想先问「这条命令会被怎么判」,用设置页的「模拟审批」贴进去,它走的是和真判定同一条链,不会对同一件事说两套话。

先说一个坑:模型档位里的 off: null。 如果 llm-pi-ai 的模型条目把 off 写成 null 或干脆不写,宿主发请求时会省略 reasoning_effort;有些服务端把「省略」当成「用我的默认档」,默认档若是最高思考,本来标着「关闭思考」的调用反而会先跑完一大段思维链,审批卡上「AI 解读」从不到一秒变成好几秒,额度小的时候甚至只剩「模型没有返回解读」。本插件默认会替你把这一格补成 none(设置页「AI 审查 → AI 解读跳过思考」),但补的是当前 profile 的用户层配置、而且是模型级的:凡是选「关闭思考」档的调用都会跟着变,你会话选的高思考档不受影响。卸载插件不会把它还原成 null,也不会删除你自己改过的值;想恢复就手工改回,并先把那个开关关掉,否则下次启动又会被补上。

安装

本插件 dsh-auto-approval-frame

插件市场搜包名 dsh-auto-approval-frame,或:

dsh plugin --profile <你的 profile> add dsh-auto-approval-frame

装完重启 DSH。另外还要做两件事——确认插件是启用状态、在会话权限菜单里选「自动审批」档,见上一节第二步。

建议同时装 dsh-gitbash-shell

本插件对命令、文件和路径的解析,以及测试,都以 Git Bash(POSIX)语法为主路径。dsh-gitbash-shell 让 agent 在 Windows 上直接用 Git Bash 执行命令,是与本插件配合最完整的组合。插件市场搜 dsh-gitbash-shell,或:

dsh plugin --profile <你的 profile> add dsh-gitbash-shell

装完重启 DSH。

说直白一点:原生 PowerShell/cmd 也在支持范围内(命令表里有专门的原生命令行),但那条路的真实样本少得多,很多写法还没在真机会话里跑过。没暴露不等于没问题——用原生命令时,遇到解析没覆盖的写法、判定偏离预期的概率会更高。两套都能用,但 Git Bash 这条路的修复密度、回归覆盖和稳定性都更好;能装就装。

权限档

插件只接管你在 gatedPresets 里勾选的权限档,默认是「自动审批」(auto-approval)。这个档由插件自带,装完就能在权限菜单选到。

  • 如果你的 profile 自己定义了 permission 表,它会整行覆盖插件自带的表。这时保留你已有的档,把 auto-approval 加进去;或者直接在设置页的「受管权限档」里勾选你已有的档。
  • 受管档不存在时,设置页会红字报出名字,并给出可复制的 profile 片段;在它修好之前,插件不接管任何会话。
  • 前提:宿主审批策略必须是 ask。如果设了 DSH_PERMISSION_MODE=danger-full-access,宿主会被钉成 never,没有审批请求,插件也不接管。

拦截梯

一次工具调用从上往下走。会给出结论的只有中间四格 L1 规则 → L2 快判 → L3 深评 → L4 人工:谁先给出结论,就按它办——放行就执行这次调用;拒绝就只拦这一次、不执行,会话照常;说不准就交给下一格。四格都没说住,才落到人工。

L0 和 L5 不是关卡。 L0(备料)只把命令拆开、看清要动哪些文件和网络,自己不下结论。L5 只做一件事:跑完命令,命令正常输出的敏感信息换成占位符后,再进入上下文。图上这两格的边框是虚的,就是提醒你它们不参与判定。

梯子外面还有两件事。 一是读别的项目根(同层或向上有 AGENTS.md/.git)而你的话里没点名它——直接问人,模型判放行也不放;你提到的名字能唯一解析到某个目录时,它就把那个目录记成这次会话的根,根内的读直接放行。二是日志审计:它不在梯子上,而是包住整条梯——每一格、每次人工答复、每次配置变更,都写进同一本可校验的库。

每格判什么、能给出哪几种结论,见设置页「模拟审批」的逐步显示;它和真判定走同一条链,不会对同一件事说两套话。

配置

一般不用动,默认值就能用。要改,优先在设置页改;下表是全部键,直接改 profile 时用。

键 · 默认 · 含义

enabled · true · 总开关。关掉只停判定(拦/问/放),结果脱敏和台账照常。

mode · auto · off 全交宿主面板/advise AI 只给建议/auto AI 可放行。

gatedPresets · ['auto-approval'] · 接管的权限档,默认「自动审批」;设置页只列它和你的自定义档。

reviewerSource · session · session 跟随当前会话的模型/preset 指定模型。

reviewerProvider reviewerModel · '' · preset 时填。

reviewerMaxTokens · 2048 · 深评输出上限;别低于 512,容易截断。

reviewerTimeoutMs · 20000 · 深评超时,默认 20 秒,不重试。

evidenceBudget · 16000 · 给模型看的证据总字数上限;超了从低优先级裁。

reviewRules · [] · 你附加给模型的审查规则,只能收窄,不能放宽。

commandRules networkRules toolRules · [] · 每行 {action, match};动作四档 release/ai/ask/deny,从上往下第一条命中即停。

fileRules · [] · 每行 {match, read, write, delete};读/写/删三列各选四档或留空(留空=这行不管这个操作)。

sensitiveRules · [] · 敏感信息检测规则;预设 10 行,可改正则/档位/停用;命中取最严,不看顺序。

sensitiveDetect · true · 检测与脱敏总开关;关掉=工具结果原样进模型。

autoRestoreSecrets · true · 写文件后把占位符换回原值;默认开,但要有回写证。

fastJudge · true · 单段写/删先让快判模型判一句。

fastJudgeMaxTokens · 256 · 快判输出上限。

fastJudgeTimeoutMs · 3000 · 快判超时,默认 3 秒;超时转深评。

retentionDays · 90 · 台账保留天数。

maxTotalBytes · 512MB · 台账总大小上限。

maxSegmentBytes · 50MB · 单个台账文件上限。

debug ⓟ · false · 补丁专属,设置页只读。

ⓟ = 补丁专属。

规则怎么写

  • 命令:写「程序名 + 参数前缀」。git push 管住 git push origin main,不管 git pull; 匹配一个参数;整行只写 就是所有命令;re: 开头按正则。
  • 文件:写路径。~ 是家目录;* 只匹配当前一层,** 匹配任意层;路径以 / 结尾表示这个目录及其内容。读/写/删三列分别表态,留空=这行不管这个操作,后面的行仍可管。
  • 网络:写主机名或 IP,如 api.example.com、.example.com、;不写端口和路径。
  • 工具:写工具名通配,如 mcp:*。
  • 旧的三键 trustedDirs/dshOpen/neverAutoExtra 会在启动时自动迁成文件行,之后不再是配置键。

规则谁先说话

  • 所有行——预设行(插件自带)和你的行——在同一张表里,从上往下,第一条给出结论的行算数。档位就是允许/AI/人工/拒绝四档。
  • 预设行不再永远压你一头:把你的允许行放在它上面,就能放开它;拖回去就恢复保守。
  • 「拒绝」行只要命中就拒,跟先后无关。
  • 「AI」行命中就交模型判一次,后面的行不再看。
  • 想改某条预设:能直接改那条行;也可以在你的表里用更具体的行盖住它。

升级提示: 旧版的 AI 行是「本层不拦、继续往下走」,现在改成「交模型判一次,后面的行不再看」。插件不会自动改你的行,只在设置页提示一次;有 AI 行的配置请自己确认一遍。

允许行意味着什么

  • 允许是真放行:不调模型、不弹面板,但会写一条台账;写不进去就转人工。
  • 允许行也是信任声明:命中的路径不再算「工作区外」,删除也不再按「内容不可恢复」处理;~/.dsh 的子树也可以被开口。整棵 ~/.dsh 和含凭据的子树仍会被拒绝开口。
  • 敏感面的允许只放这一次调用,结果该遮还是遮。
  • 盘根和家目录没有特殊开关:它们就是普通目录。rm -rf C:\、rm -rf ~ 都会落「删除·工作区外,问你」;要更严就写一条普通路径行,盘根写成 C:\。
  • 预设表具体有多少行,以设置页显示为准。

默认档会把什么交给模型

  • 改工作区根、改到信任区外、改符号链接目标:先交 AI 判。
  • 改 ~/.dsh 的档位配置、台账、审批记录:仍然问你。
  • 客户端产物目录的读:不再无条件放行。

配置写坏了会怎样

  • 保存时只要有一行档位非法、正则编译不过,或行里缺 match/preset,整次保存被拒,盘上配置原样不动。
  • 读进来时如果有坏行,整份配置按「损坏」处理:继续用你上一份合法配置,不退回默认档。
  • 设置页会明确提示「当前生效的是上一份合法配置」,并指出坏在哪几行;坏行不会被悄悄丢掉。
  • 留空是合法的:留空=这行不管这个操作,不会被默认值填回。

审计库

台账在 ~/.dsh/auto-approval-frame/audit/,按天分文件,一行一条 JSON,带哈希链,能校验有没有被改过。

  • state.json:当前写到哪个文件、链尾在哪。
  • manifest.jsonl:每次分段关闭、裁剪、清空都记一笔。
  • 2026-10-27.jsonl:当天的记录;同一天写满一个段,就接 .1.jsonl。
  • legacy/:旧版单文件台账,升级时原样移进来。

每条记录有时间、类别、事件、结论、落在哪一层,加上这次事件的字段(命令预览、命中的规则、原因、耗时等)。设置页的「审计中心」读的是同一份库,不另存副本;可以查询、导出、清空。默认隐藏启动和配置变更两类簿记,人工答复默认显示;隐藏只影响列表和导出,记

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:8,最后更新 2026-11-06

链接

GitHub · Homepage · npm

同类插件