🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

智能审批兜底 cuddly-guacamole/dsh-auto-approval-llm

DeepSeek Harnessv0.0.43
cuddly-guacamole17 天前有提交已提供中文文档扫描:含敏感能力

DeepSeek Harness Auto 预设支持 LLM 辅助自动批准,超时自动回退

41.4/100
综合分
13
GitHub 星标
609
npm 周下载
—/5
用户评分

数据截至 2026/10/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @quill507/dsh-auto-approval-llm
npm 源 · @quill507/dsh-auto-approval-llm 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · security
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 17 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@quill507/dsh-auto-approval-llm @ 0.0.43
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 22:58:05

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 68 处,展示前 48 条)
  • 发起网络请求
    lib/client.js:2290
    globalThis.fetch(REVEAL_ROUTE, {
  • 发起网络请求
    lib/client.js:2403
    const feedback = globalThis.fetch(FEEDBACK_ROUTE, {
  • 发起网络请求
    lib/client.js:2511
    const res = await g.fetch(REVIEW_STATUS_ROUTE, {
  • 发起网络请求
    lib/client.js:2643
    const res = await g.fetch(SESSION_REVIEW_STATUS_ROUTE, {
  • 发起网络请求
    lib/client.js:3723
    globalThis.fetch(SETTINGS_ROUTE, { credentials: "same-origin" }).then((r) => r.json()).then((data) => {
  • 发起网络请求
    lib/client.js:3736
    const data = await (await globalThis.fetch(SETTINGS_ROUTE, { credentials: "same-origin" })).json();
  • 读取本地文件
    lib/auto/artifacts.js:45
    .filter(path => isArtifactArea(path, roots) && !existsSync(path));
  • 读取本地文件
    lib/auto/audit.js:117
    if (statSync(file).size > MAX_AUDIT_BYTES) {
  • 读取本地文件
    lib/auto/audit.js:118
    const content = readFileSync(file, 'utf8');
  • 写入本地文件
    lib/auto/audit.js:126
    writeFileSync(tmp, rotated);
  • 写入本地文件
    lib/auto/audit.js:127
    renameSync(tmp, file);
  • 读取本地文件
    lib/auto/latency.js:68
    if (!existsSync(latencyReadPath()))
  • 读取本地文件
    lib/auto/latency.js:70
    const lines = readFileSync(latencyReadPath(), 'utf8').split('\n').filter(Boolean);
  • 读取本地文件
    lib/auto/latency.js:107
    if (statSync(file).size > 1_048_576) {
  • 写入本地文件
    lib/auto/latency.js:113
    writeFileSync(tmp, `${samples.map((s) => JSON.stringify(s)).join('\n')}\n`);
  • 写入本地文件
    lib/auto/latency.js:114
    renameSync(tmp, file);
  • 读取本地文件
    lib/auto/latency.js:118
    if (existsSync(tmp))
  • 删除本地文件
    lib/auto/latency.js:119
    unlinkSync(tmp);
  • 写入本地文件
    lib/auto/latency.js:144
    writeFileSync(file, '');
  • 读取本地文件
    lib/auto/latency.js:145
    if (statSync(file).size !== 0)
  • 读取本地文件
    lib/auto/learning.js:384
    const parsed = JSON.parse(readFileSync(path, 'utf8'));
  • 写入本地文件
    lib/auto/learning.js:406
    writeFileSync(tmp, JSON.stringify(store));
  • 写入本地文件
    lib/auto/learning.js:407
    renameSync(tmp, path);
  • 读取本地文件
    lib/auto/learning.js:421
    const buf = readFileSync(path);
  • 读取本地文件
    lib/auto/review-mode.js:23
    const obj = JSON.parse(readFileSync(resolveRuntimeReadPath(REVIEW_MODE_FILENAME), 'utf8'));
  • 写入本地文件
    lib/auto/runtime-paths.js:160
    mkdirSync(dir, { recursive: true });
  • 读取本地文件
    lib/auto/runtime-paths.js:170
    if (stateDirUsable && existsSync(dir))
  • 写入本地文件
    lib/auto/runtime-paths.js:210
    appendFileSync(file, text);
  • 写入本地文件
    lib/auto/runtime-paths.js:247
    writeFileSync(tmp, content);
  • 写入本地文件
    lib/auto/runtime-paths.js:248
    renameSync(tmp, file);
  • 读取本地文件
    lib/auto/runtime-paths.js:254
    if (existsSync(tmp))
  • 删除本地文件
    lib/auto/runtime-paths.js:255
    rmSync(tmp, { force: true });
  • 读取本地文件
    lib/auto/route-table.js:87
    const text = readFileSync(file, 'utf8');
  • 读取本地文件
    lib/auto/route-table.js:143
    text = readFileSync(file, 'utf8');
  • 写入本地文件
    lib/auto/route-table.js:170
    writeFileSync(tmp, content);
  • 写入本地文件
    lib/auto/route-table.js:171
    renameSync(tmp, file);
  • 读取本地文件
    lib/auto/route-table.js:175
    if (existsSync(tmp))
  • 删除本地文件
    lib/auto/route-table.js:176
    unlinkSync(tmp);
  • 读取本地文件
    lib/auto/route-installers.js:464
    if (path === '' || !existsSync(path))
  • 读取本地文件
    lib/auto/route-installers.js:466
    return readSettingsSegment(readFileSync(path, 'utf8'), ns);
  • 写入本地文件
    lib/auto/route-installers.js:697
    writeFileSync(historyWritePath(), '');
  • 读取本地文件
    lib/auto/route-installers.js:698
    truncated = statSync(historyWritePath()).size === 0;
  • 读取本地文件
    lib/auto/approval-history.js:71
    if (!existsSync(historyReadPath()))
  • 读取本地文件
    lib/auto/approval-history.js:73
    const lines = readFileSync(historyReadPath(), 'utf8').split('\n').filter(Boolean);
  • 读取本地文件
    lib/auto/approval-history.js:107
    if (file !== undefined && statSync(file).size > 1_048_576) {
  • 读取本地文件
    lib/auto/debug-and-decisions.js:33
    if (statSync(file).size > 1_048_576) {
  • 读取本地文件
    lib/auto/debug-and-decisions.js:34
    const lines = readFileSync(file, 'utf8').split('\n').filter(Boolean);
  • 读取本地文件
    lib/auto/symlink.js:131
    const anchoredToWorkspace = existsSync(roots.workspace)
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/dsh-tools@deepseek-ai/dsh-session@deepseek-ai/dsh-permission-presets@deepseek-ai/dsh-user-approval@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

3 张 · 点击查看大图

功能亮点

  • LLM辅助自动批准
  • 超时自动回退
v0.0.432026-10-18
· v0.0.43(2026-10-18) 宿主承诺面收成单线 0.2.1-rc.2;peer 区间随之收成单臂,此前全部 alpha 与 0.2.0-rc.2 退出承诺面。 破坏性变更:宿主 peer 区间收成 >=0.2.1-rc.2 <2;在 0.2.0-rc.2、0.2.1-alpha.1–alpha.5 与 0.2.1-rc.1 上不再可安装 升级需动手:宿主升到 0.2.1-rc.2 后无需其它操作 · ✨ 新功能 · (host-lines) 宿主承诺线收成单线 0.2.1-rc.2,0.2.0-rc.2 与 0.2.1 的 alpha、rc.1 退出承诺面,peer 区间收成单臂 (7d3b9c4) @cuddly-guacamole · 📚 文档 · README 中英、文档站与项目指令同步单线承诺面与单臂区间 (7d3b9c4, a1ee87d) @cuddly-guacamole · 🧪 测试 · (host-lines) 退役线集合、每行的两种读法、lock 的 peer 镜像各自钉住 (dd1eb9a, d3d2413) @cuddly-guacamole Full changelog:
v0.0.422026-10-17
· v0.0.42(2026-10-17) 自定义端点协议从 2 个扩到 4 个(新增 OpenAI Responses 与 System One,后者仅服务快速判断通道,深度评审选到它时显式报错);宿主承诺线更新为 0.2.0-rc.2、0.2.1-alpha.4 与 0.2.1-alpha.5;自定义端点「不再维护」字样移除。 破坏性变更:无 升级需动手:无 · ✨ 新功能 · (host) 自定义端点新增 responses 与 systemone 协议;systemone 把类型化 answers 映射成既有三态裁决,任何畸形响应一律抛错收敛为询问(fail-closed) (5c96335) @cuddly-guacamole · (host-lines) 宿主承诺线更新为 0.2.0-rc.2 / 0.2.1-alpha.4 / 0.2.1-alpha.5,alpha.3 退出承诺面,0.2.1 臂下界随之抬到 alpha.4 (5613bc3, d58997e) @cuddly-guacamole · 🐛 Bug修复 · (host) 深度评审选到 systemone 时不再静默空文本,改为点名限制的显式报错 (5c96335) @cuddly-guacamole · (host) systemone 快速判断的通过理由只引用类别白名单实际评估过的危险因子,不再打印与阈值相矛盾的读数 (b4fbb5c) @cuddly-guacamole · 📚 文档 · 设置卡自定义端点提示与相关注释、文档对齐四协议词汇 (25db0d0, f419f7f) @cuddly-guacamole · 🧪 测试 · (client) 两处协议归一化点按编译产物断言,存值侧钉到赋值本身 (eaef11a, 5c3cdf7) @cuddly-guacamole · (host) systemone 危险因子答案必须声明 noul 类型,否则按畸形响应抛错 (6dfa09b) @cuddly-guacamole Full changelog:
v0.0.412026-10-04
· v0.0.41(2026-10-04) 权限菜单与标题栏的自动审批图标改用官方外壳并与相邻行对齐,纯文字菜单不再误注入图标。 破坏性变更:无 升级需动手:无 · 🐛 Bug修复 · (client) 设置区「权限」纯文字下拉不再误注入图标 (0410439) @cuddly-guacamole · (client) 权限菜单「自动审批」图标改用官方外壳,线宽与尺寸对齐相邻行 (899f725) @cuddly-guacamole · (client) 会话标题栏状态芯片的勾与叉不再被画布边缘裁掉 (a4b6394) @cuddly-guacamole · 📚 文档 · 刷新由源码派生的文档计数 (ce1e10c) @cuddly-guacamole · 🧪 测试 · (client) 图标契约经独立复核后收紧 (a519d91) @cuddly-guacamole Full changelog:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
@quill507/dsh-auto-approval-llm 为 DeepSeek Harness 的 Auto 权限档提供 LLM 辅助自动审批 + 超时自动兜底 常规操作静态放行 · 危险与模糊操作走 LLM 评审 + 人工倒计时 · 默认 fail-closed Awesome DSH Plugin 文档站 · English · Issues Auto 档(machine value auto-approval;host 显示名 Auto approval;中文客户端显示 自动审批)= sandbox: danger-full-access + approval: ask。本插件在本档会话里充当 approval/request 的唯一终结裁决者:常规操作经静态规则直接放行,危险/模糊操作走「静态规则 → LLM 分类 → LLM/人工裁决 → 倒计时兜底 → 熔断」,全程保留人工与审计兜底。宿主 >= 0.1.6 的 auto 归上游 @deepseek-ai/dsh-experimental-auto-review(Auto review / EXP),本插件只接管 auto-approval 档、上游只接管 auto 档(按 derived preset 判档),两者作用于不同档位、可同时启用。
展开完整文档(README 剩余 1 节)
@quill507/dsh-auto-approval-llm

为 DeepSeek Harness 的 Auto 权限档提供 LLM 辅助自动审批 + 超时自动兜底

常规操作静态放行 · 危险与模糊操作走 LLM 评审 + 人工倒计时 · 默认 fail-closed

Awesome DSH Plugin

文档站 · English · Issues

Auto 档(machine value auto-approval;host 显示名 Auto approval;中文客户端显示 自动审批)= sandbox: danger-full-access + approval: ask。本插件在本档会话里充当 approval/request 的唯一终结裁决者:常规操作经静态规则直接放行,危险/模糊操作走「静态规则 → LLM 分类 → LLM/人工裁决 → 倒计时兜底 → 熔断」,全程保留人工与审计兜底。宿主 >= 0.1.6 的 auto 归上游 @deepseek-ai/dsh-experimental-auto-review(Auto review / EXP),本插件只接管 auto-approval 档、上游只接管 auto 档(按 derived preset 判档),两者作用于不同档位、可同时启用。

特性

1. 静态规则 + LLM 分类器 —— 只读/会话/工作区常规操作直接放行;危险、外部写、凭据外泄、受保护路径直接拒绝;模糊操作交 LLM 预分类。
2. 写向量完整性加固 —— 含真实文件写重定向的命令段脱离只读快径;POSIX tee / dd of= / sed -i / truncate / install 以操作数目标参与按目标闸门;直写插件运行态文件无条件硬拒。
3. 12 分类三态开关 + 信任目录双模式 —— 每类可配 auto / ask / deny,默认全部 inherit(HARD_LOCKED 的 delete / disk 除外——未配置也恒被接管为 ask 倒计时);delete / disk / privilege / protected 四类保持锁定,trustedDirs 与 categoryMode 控制「常规位置」范围(分层细节见 docs/17)。→ docs/17
4. 双通道模型来源 —— 快速判断与深度评审各可独立选择:跟随会话模型(默认)/ DSH 已配置模型 / 自定义端点。端点密钥存 DSH 凭据存储,前端只显示「已配置」、永不回显。
5. 分级倒计时 + 超时兜底 + LLM 接管 —— 低/中/高三档倒计时(默认 5 / 8 / 10 秒);超时按 timeoutAction(拒绝 / 通过 / 低风险自动同意)结算;中风险下 LLM 在窗口内给出明确结论即接管。关浏览器也不悬挂(host 计时器独裁)。
6. 熔断与循环防护 —— 连续/累计被 LLM 拒绝达阈值则转人工(/approval-reset 重置);循环防护(默认关)把「被自动放行面连续放行的同一调用」转为钉死拒绝倒计时。
7. 声明式规则 rulesText —— 工具(正则) | allow|deny|human [| 字段],支持 [agent:…] / [workspace:…] 维度限定;解析出错时整段失效(设置卡有警示)。
8. 确认制学习(默认关)—— 同一签名被人工反复确认达阈值后自动放行,每次放行前仍过一次标准在线评审;条目可查看与吊销。→ docs/18
9. 可审计、可观测 —— history.jsonl + append-only audit.jsonl;LLM 评审真实耗时统计;瞬时网关故障自动重试一次(认证类错误不重发凭据)。

工作方式

flowchart TD
A["模型发起工具调用"] --> B["② tools.guard:同步硬拒闸门凭据 / 受保护路径 / shell 熔断 / symlink 逃逸"]mermaid
B -->|"命中"| X["拒绝结案"]
B -->|"通过"| C["③ tools/pre-execute:静态评估 + 类别收紧"]
C -->|"deny"| X
C -->|"allow"| Y["放行执行"]
C -->|"ask"| D{"LLM 预分类器快径"}
D -->|"allow"| Y
D -->|"deny"| X
D -->|"不确定"| E["④ approval/request:唯一终结裁决规则 → 名单 → 类别 → 评审模式 → 熔断 → 学习 → 风险分档"]
E -->|"LOW / LLM 接管"| Y
E -->|"MEDIUM / HIGH"| G["人工面板 + 倒计时LLM 复审并行,超时按 timeoutAction"]
G -->|"允许一次"| Y
G -->|"拒绝 / 超时"| X
Y --> H["⑥ tools/post-execute:结果与拒绝理由回灌模型"]
X --> H

- LOW:不送评审就静默放行;送评审时按结论裁决;ESCALATE 转人工。
- MEDIUM:面板 + 倒计时并行跑 LLM;llmTakeoverScope 覆盖且结论明确 → 立即跟随。
- HIGH:面板 + 倒计时,LLM 只给建议;超时严格按 timeoutAction。
- 超时标记的唯一作者是 host 计时器,客户端只上报 outcome,伪造不了。

完整五段钩子时序(含 ⑤ 产物登记、⑦ 通知投递)见 docs/02 · 一次工具调用的完整生命周期;两层静态面经宿主 tools/pre-execute 瀑布征询生效,对端监听的短路形态见 docs/09 · 可达性前提。

安装

前置:会话/预设处于 Auto 档(machine value auto-approval = danger-full-access + approval: ask,用 /permission auto-approval 切换);DSH 0.2.1-rc.2;Node ^22.19.0 || >=24.0.0。

兼容窗口:auto 是上游 @deepseek-ai/dsh-experimental-auto-review(Auto review / EXP)的保留名,本插件只定义/接管 auto-approval,两者分档并存、可同时启用。宿主承诺一条线:0.2.1-rc.2 为完整支持(peer 区间 >=0.2.1-rc.2 <2)。长期规则:宿主线跟着用户实际在跑的宿主走,上游发布新线时改这一行(HOST_LINES 同步改行),键名以 tuple 前缀起头、同 tuple 多行时才带序数后缀(line021)。peer 区间是安装准入面——区间内未测的线不受支持,上界 <2 只是范围上界。承诺面只剩一个 tuple,故区间只留一臂:一臂足够让承诺线在朴素读法(semver.satisfies(v, range))与宿主门禁的带标志读法(includePrerelease: true)下都被放行,标志对本包的承诺不承重;多一臂只会承认一个没有承诺的 tuple。0.2.0-rc.2、0.2.1-alpha.1…alpha.5、0.2.1-rc.1 与 0.1.7-rc.2 全部已退出承诺面,并被单臂区间在两种读法下一并拒装——单臂比旧的双臂更强:旧区间在带标志读法下仍放行 0.2.1 的预发布,新区间不再放行。旧机器值 auto 别名与 legacy/unknown 能力分支已随下限抬升移除(shipped patch 只定义 auto-approval)。

上游提示:0.2.0-rc.1 起未发布破坏性变更清单、未发弃用通知、其 AGENTS.md 与 0.1.7-rc.2 是同一个 git blob(37cfd8d2…),即「未稳定、消费者需自行跟进」的立场未变。社区同时报告该次升级后 13 个第三方插件中有 6 个报错徽标、无维护者回复。上述与本插件的契约面结论不冲突:本插件只测自己实际使用的 50 个符号(48/50 不变、0 删除/改名/移位,唯一新增是 dsh-session 的 ToolCallRecovery),而非一个插件可能触及的全部面;且本插件的探针能发现符号的消失或改名,发现不了符号含义的改变。
bash
dsh plugin --profile web add @quill507/dsh-auto-approval-llm

- 安装后重启 dsh,host 侧才生效。
- 只作用于 Auto 档(其他权限档不介入);切换用 /permission auto-approval。本插件是 auto-approval 档 approval/request 的唯一终结者 —— 同一档位不要再叠加第二个审批裁决者;上游 @deepseek-ai/dsh-experimental-auto-review 的 auto(Auto review / EXP)是另一个档位,两者可同时启用。
- 平台:Windows + Git Bash 为主开发/测试基线;macOS / Linux / WSL 代码已适配但无真实用户验证;Android 原生环境不支持。→ docs/19
- 反馈:到 GitHub Issues 报告,注明平台、dsh 版本、插件版本、复现命令与预期行为。
- 本地开发:npx tsc -p tsconfig.json + npx tsdown,用 link: 加载(host 改动需重启,client 改动自动热载)。→ docs/14

从旧 auto 档升级

- 同签名门槛:所有宿主只迁移 raw preset = auto 且 sandbox = danger-full-access 且 approval = ask 的存量会话;其它 auto 签名(含 danger-full-access + never)一律不迁移并告警。
- modern host 的主体变化:宿主 >= 0.1.6 上若上游 auto-review 层持有同一签名的 auto,该会话同样会被改写成 auto-approval——沙箱/审批旋钮不变,但应答主体从上游换成本插件(上游不再接管该档)。这是同签名 rescue 语义的一部分,不是旋钮放宽。
- 迁移时机:归档会话不处理,只在 resume 进入 live 时懒迁移(session/created prepend);插件加载时对已 live 会话做一次启动扫描,agent/created 兜底。迁移只重写 durable raw identity(permission/preset),不写旋钮、不调用 permissionPresets.set()。
- 自有档 spec enforcement:auto-approval 会话的 effective-never(approval: never,或 approval: null + base policy never)由插件写回 ask(preset-spec-restore 审计);不会再翻转上游 auto。
- fail-closed:宿主 >= 0.1.6 且未装上游 auto-review、且该存量会话在 permissionPresets 服务构造期已 live(插件来不及先迁移)时,宿主 pin 会先于插件拒绝该会话——会话打不开,不是静默放行。处置:停 dsh → 用可选离线迁移工具或手工导出/导入 → 再启动;也可在 profile 保留上游 auto-review 层。该 boot 期缺口在插件侧无法自动修复。
- 官方权限选择器的风险确认只覆盖宿主内置的 danger-full-access;自定义 auto-approval 档由插件客户端自行弹确认。

快速开始

1. 把会话/预设切到 Auto 档:/permission auto-approval。
2. 打开侧边栏 插件 → auto-approval-llm,在该插件的行列表里点「配置 <行名>」打开行配置页,确认设置表单出现(宿主未交出该命名空间的配置表单时,该页只读展示当前生效值)。默认配置即可工作(常规操作静态放行;模糊操作走会话模型评审;超时按 timeoutAction 兜底,默认拒绝)。
3. 想让审批走指定模型:在「在线评审模型」卡把通道来源设为「DSH 模型」并从列表选,或选「自定义端点」填协议 / 地址 / 模型 / 密钥 → 保存 → 测试连接。
4. 嫌弹窗频繁:调大「中风险倒计时」,或把「超时动作」改为 拒绝 / 低风险自动同意。

会话命令(默认不注册):/approval-mode 查看当前会话模式、/approval-mode manual|smart|unattended 设置、/approval-reset 与 /approval-reset-all 重置熔断 —— 需在设置卡开启 slashCommandsEnabled 并重启。

界面预览

设置卡总览

审批面板

会话审批统计

其余界面的结构说明(计时器与熔断 / 安全规则列表 / 分类开关与信任模式 / 确认制学习 / 在线评审模型 / 权限预设)见 docs/10 · 客户端 UI。

配置项

下表只列常用键;全部键、完整语义与裁决例外见 docs/12 · 配置全景。

| 键 | 默认 | 说明 |
| enabled | true | answerer 总开关:关=本插件不再终结 approval/request(静态硬拒与 guard 仍生效) |
| timeoutAction | reject | 超时动作:拒绝 / 通过 / 仅低风险放行(删除与磁盘恒拒,不受此键影响) |
| llmReviewScope | low-or-above | 哪些风险档送 LLM 复审 |
| llmTakeoverScope | medium-or-below | 哪些档允许 LLM 结论直接接管 |
| lowRiskSeconds / mediumRiskSeconds / highRiskSeconds | 5 / 8 / 10 | 三档倒计时(秒) |
| defaultReviewMode | smart | 每会话评审模式:manual / smart / unattended |
| maxConsecutiveDenials / maxTotalDenials | 3 / 20 | 熔断阈值(0 关闭) |
| loopDetectionThreshold | 0 | 循环防护阈值(0 = 关;仅 YAML 可配) |
| rulesText | '' | 声明式规则(支持 [agent:…] / [workspace:…]) |
| allowlist / denyList / humanOnlyList | [] | 工具名精确匹配名单 |
| classifierSource / reviewerSource | session | 两通道模型来源:session / preset / endpoint |
| endpointUrl / endpointModel / endpointProtocol | '' / '' / openai | 共享自定义端点;协议四值:openai · anthropic · responses · systemone(systemone 仅服务快速判断通道) |
| categoryPolicy / categoryMode / trustedDirs | {} / standard / [] | 分类三态、位置模式与信任目录 |
| privilegeAutoReview / protectedAutoReview | false | 分别解锁 privilege / protected(差别见 docs/17) |
| learningEnabled / learningThreshold | false / 3 | 确认制学习开关与阈值(2–10) |
| slashCommandsEnabled / directHumanEnabled | false | 注册 /approval- 命令 / 直接人工通道(agent 可把操作路由给人;均需重启生效) |
| debug / redactResults / notifyUser | false / false / true | 调试日志 / 结果脱敏 / 通过通知进会话 |

设置卡为可折叠子卡 + 顶层开关即时保存,非法配置值有红色横幅 +「尝试修复」→ docs/10。host-only 键(workspaceRoot、trustedDshSubpaths、maintenanceDshPaths、rulesDryRun、breakerAntiHijackMs、reviewMaxRetries 等)用 patch / YAML 配置,设置卡保存不会抹掉;「高级」子卡把它们连同当前生效值列为只读清单(无控件),并说明 DSH_HOME 写入的操作者开口与没有开口的族。

数据文件

规范位置:<DSH_HOME>/auto-approval-llm/(刻意放在插件包目录之外 —— npm 升级会替换整个包目录)。

| 文件 | 语义 |
| history.jsonl | 审批历史(内存窗口 200 条 + 落盘,>1MB 轮转) |
| audit.jsonl | append-only 审计:decision + clear 墓碑 + 非决策观测事件 |
| review-mode.json | 每会话评审模式快照 |
| llm-latency.jsonl | LLM 真实响应耗时统计(最近 100 次,>1MB 轮转) |
| approval-debug.jsonl | 仅调试模式开启时写入的评审/审批时序 |
| learning.json | 学习条目(SHA-256 签名键 + 脱敏骨架;TTL 30 天,按工作区隔离) |

目录不可写时 fail-closed:审计闸拒绝全部裁决并打印一次性告警,不回退、不迁移。查询 node scripts/audit-query.mjs;只读摩擦报告 node scripts/friction-report.mjs。→ docs/11

安全模型摘要

- 唯一终结者:命中本插件档(auto-approval)的 approval 由本插件终结(prepend + global),不双弹窗、不双写;上游 auto-review 的 auto 档与本档互不接管,可并存。
- fail-closed:评审超时 / 垃圾 / 失败 → 拒绝或转人;ESCALATE 一律转人,不被 timeoutAction=allow 自动放行。
- reasoning-blind:评审只看工具名 + 结构化脱敏参数 + 有界直接用户消息(唯一授权证据)+ 工作区事实。
- 密钥不出 host:在线评审密钥存 DSH 凭据,每操作解析,前端仅显「已配置」。
- 审计不可手改:append-only,清空留 tombstone;tools/guard 的硬拒也先落审计再拒绝(审计失败不软化拒绝)。
- 超时标记唯一作者是 host 计时器,客户端只上报 outcome,伪造不了。

已知局限

- 对端插件短路时,静态两层与 guard 均不被征询:另一插件若在 tools/pre-execute 瀑布先行返回非决策对象且不带 reason,宿主直接派发执行 —— 这是插件侧无法启动期自检的形态。→ docs/09
- 循环防护不是安全边界:只防「卡死空转」,微调参数即可绕过。
- rulesText 解析出错 = 整段失效(fail-open 方向);设置卡有警示但不阻断保存。
- protectedAutoReview 开启且类别未显式配置时,受保护询问为无倒计时人工询问、永不自动结算 —— 无人值守会一直等。
- 凭据物质不受解锁开关影响:.env / .npmrc 这类读取即便开启 protectedAutoReview 仍保持锁定(方向偏严,可能误拒)。
- opaque 行(含 ( / { / $( / heredoc 的复合命令)在类别层归为 unknown:既不被解锁、也不进凭据读取地板,即不额外收紧也不额外放宽。
- 非 Windows 平台未经真实用户验证。

致谢

- 代码衍生:@nanmicoder/dsh-auto-mode(MIT License)—— 核心审批管线移植自该项目,并在 src/auto/ 重写为独立实现;MIT 版权与许可声明随源文件及编译产物 lib/auto/.js、lib/client.js 保留。
- 设计范式参考:@anionex/dsh-vision-toolkit。
- 机制对标:@moon09300731/dsh-approval-gate(确认制学习)、@a903067276-rgb/dsh-perm-guard(分类三态 + 信任目录)、@PerryLink/dsh-permission-rules(规则维度限定)。
- 贡献者:@daveycodez、@MikotoMyWife。

许可

BSD-3-Clause | LICENSE
预览分享卡片长什么样 ↓cuddly-guacamole/dsh-auto-approval-llm
分享 · DeepSeek Harness Hub
cuddly-guacamole/dsh-auto-approval-llm

DeepSeek Harness Auto 预设支持 LLM 辅助自动批准,超时自动回退

这是你的仓库?认领条目

回到顶部