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

审批守护者 xlennart/dsh-auto-review-jev

DeepSeek Harness
xlennart34 天前有提交已提供中文文档扫描:含敏感能力

权限请求先由审查模型裁决,再决定是否打扰你

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xlennart/dsh-auto-review-jev
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · market
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 34 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/1) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 34 处,展示前 28 条)
  • 写入本地文件
    lib/audit.js:13
    await mkdir(path.dirname(file), { recursive: true });
  • 写入本地文件
    lib/audit.js:14
    await appendFile(file, JSON.stringify(line) + '\n', 'utf8');
  • 写入本地文件
    lib/trace.js:44
    await mkdir(path.dirname(file), { recursive: true });
  • 写入本地文件
    lib/trace.js:45
    await appendFile(file, JSON.stringify(record) + '\n', 'utf8');
  • 读取本地文件
    lib/facts.js:86
    const real = await realpath(resolved);
  • 读取本地文件
    lib/facts.js:91
    const parent = await realpath(path.dirname(resolved));
  • 读取本地文件
    lib/facts.js:103
    const root = await realpath(workspaceRoot).catch(() => workspaceRoot);
  • 读取本地文件
    lib/facts.js:129
    const st = await stat(real);
  • 读取本地文件
    lib/facts.js:138
    const head = await readFile(real).then((buf) => buf.subarray(0, 8000));
  • 读取本地文件
    lib/facts.js:143
    const text = (await readFile(real, 'utf8')).slice(0, options.contentMaxBytes);
  • 删除本地文件递归
    lib/facts.js:219
    await rm(hooksDir, { recursive: true, force: true }).catch(() => { });
  • 读取本地文件
    lib/reviewer.js:132
    const content = await readFile(expandHome(reviewer.apiKeyFile), 'utf8');
  • 发起网络请求
    lib/reviewer.js:153
    const res = await fetch(url, {
  • 发起网络请求
    lib/reviewer.js:238
    const res = await fetch(url, {
  • 写入本地文件
    src/audit.ts:35
    await mkdir(path.dirname(file), { recursive: true })
  • 写入本地文件
    src/audit.ts:36
    await appendFile(file, JSON.stringify(line) + '\n', 'utf8')
  • 读取本地文件
    src/facts.ts:100
    const real = await realpath(resolved)
  • 读取本地文件
    src/facts.ts:104
    const parent = await realpath(path.dirname(resolved))
  • 读取本地文件
    src/facts.ts:128
    const root = await realpath(workspaceRoot).catch(() => workspaceRoot)
  • 读取本地文件
    src/facts.ts:154
    const st = await stat(real)
  • 读取本地文件
    src/facts.ts:163
    const head = await readFile(real).then((buf) => buf.subarray(0, 8000))
  • 读取本地文件
    src/facts.ts:168
    const text = (await readFile(real, 'utf8')).slice(0, options.contentMaxBytes)
  • 删除本地文件递归
    src/facts.ts:234
    if (hooksDir) await rm(hooksDir, { recursive: true, force: true }).catch(() => {})
  • 读取本地文件
    src/reviewer.ts:180
    const content = await readFile(expandHome(reviewer.apiKeyFile), 'utf8')
  • 发起网络请求
    src/reviewer.ts:203
    const res = await fetch(url, {
  • 发起网络请求
    src/reviewer.ts:301
    const res = await fetch(url, {
  • 写入本地文件
    src/trace.ts:68
    await mkdir(path.dirname(file), { recursive: true })
  • 写入本地文件
    src/trace.ts:69
    await appendFile(file, JSON.stringify(record) + '\n', 'utf8')
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 审查模型裁决权限请求
  • 低置信度策略
  • 免审白名单
展开完整介绍(173 字)↓

DeepSeek Harness 审批守护者:权限请求先由审查模型裁决。内置 System One 决策 API 后端(TypeSafe Jev / 硅基流动 systemone / 自部署 Laya)、onLowConfidence 低置信度策略与 allowRules 免审白名单。fork 自 gbthui/dsh-auto-review。

README

由 DeepSeek 最新模型翻译生成
dsh-auto-review-jev DeepSeek Harness 的审批守护者:权限请求先由 reviewer 模型裁决,再决定要不要打扰你。 安装 ·快速开始 ·工作方式 ·配置 · System One ·策略 ·信任边界 ·验证 [!NOTE] 本项目 fork 自 gbthui/dsh-auto-review(Apache-2.0)。审查接缝、证据流水线、熔断器与审计落盘是上游工作;本 fork 增加 System One 决策 API 协议、onLowConfidence 策略、allowRules 免审白名单,以及两者的设置页编辑器。 为什么有这个 fork | | 上游 dsh-auto-review | 本 fork | | 审查协议 | chat completion(/chat/completions) | chat completion 或 System One 决策 API(POST {baseURL}/systemone,一次调用并行问两个 choice 问题) | | 后端 | 任意 OpenAI 兼容端点 | 另加 TypeSafe Jev、硅基流动 systemone、自部署 Laya(回环地址免 key) |
展开完整文档(README 剩余 1 节)
dsh-auto-review-jev

DeepSeek Harness 的审批守护者:权限请求先由 reviewer 模型裁决,再决定要不要打扰你。

安装 ·快速开始 ·工作方式 ·配置 · System One ·策略 ·信任边界 ·验证

[!NOTE]
本项目 fork 自 gbthui/dsh-auto-review(Apache-2.0)。审查接缝、证据流水线、熔断器与审计落盘是上游工作;本 fork 增加 System One 决策 API 协议、onLowConfidence 策略、allowRules 免审白名单,以及两者的设置页编辑器。

为什么有这个 fork

| | 上游 dsh-auto-review | 本 fork |
| 审查协议 | chat completion(/chat/completions) | chat completion 或 System One 决策 API(POST {baseURL}/systemone,一次调用并行问两个 choice 问题) |
| 后端 | 任意 OpenAI 兼容端点 | 另加 TypeSafe Jev、硅基流动 systemone、自部署 Laya(回环地址免 key) |
| 审查器犹豫时 | 一律拒绝 | policy.onLowConfidence: deny \| defer,defer 把请求交回人工,而不是静默拒绝 |
| 重复请求 | 每次都问审查器 | policy.allowRules 按「工具 + 操作前缀」精确预批,越权放行由 policy.allowDangerFullAccessRules 单独把关 |
| 设置页 | 只有 reviewer | reviewer 与 policy(置信度阈值、低置信度动作、免审白名单) |

安装

插件装在 web profile,三种来源任选:

1) 发行包(预构建,免构建步骤,也不需要放行构建脚本)
npx @deepseek-ai/dsh plugin --profile web add \
https://github.com/xlennart/dsh-auto-review-jev/releases/download/v0.2.0-jev.0/dsh-auto-review-jev-0.2.0-jev.0.tgz

2) 直接从 git 安装
npx @deepseek-ai/dsh plugin --profile web add https://github.com/xlennart/dsh-auto-review-jev.git

3) 本地目录(开发用)
npx @deepseek-ai/dsh plugin --profile web add /path/to/dsh-auto-review-jev

bundle 在 profile 进程启动时读取,所以装完要重启 profile(桌面端:托盘退出后重新启动;CLI:停掉再执行 npx @deepseek-ai/dsh web)——正在运行的宿主不会自动加载新装或重新构建的插件。

在会话里确认:

/auto-review status

它会输出守护者是否已武装、由哪个端点/模型裁决、审计文件在哪里。

快速开始

插件默认启用;未配置 reviewer 时跟随当前会话模型,无需任何设置。若要指定 System One 后端:

~/.dsh/settings.yaml
dsh-auto-review:
reviewer:
protocol: systemone # chat(默认)| systemone baseURL: https://api.typesafe.ai/v1 model: jev-latest apiKeyFile: ~/.dsh/reviewer.env # KEY=VALUE 文件;也支持 apiKey / apiKeyEnv systemone: confidenceThreshold: 0.8 # 决策答案低于此值即不予采信 policy: onLowConfidence: defer # deny(默认)| defer 交人工

Web UI 的 设置 → dsh-auto-review 里同样可以改。

工作方式

flowchart TD
A[agent 请求沙箱不允许的操作] --> B{守护者已武装?}
B -- 否 --> H[交互式审批:交给人]
B -- 是 --> C[证据:工具调用、沙箱状态、只读事实、有界上下文]
C --> R{命中 policy.allowRules?}
R -- 是 --> P[放行一次]
R -- 否 --> D[审查器:systemone 决策 API 或 chat completion]
D --> V{严格裁决解析}
V -- allow --> P
V -- deny --> X[拒绝 + 注入拒绝通知给 agent]
V -- 低置信度 --> W{policy.onLowConfidence}
W -- deny --> X
W -- defer --> H
V -- critical 风险 --> X
P --> Z[该操作重试一次]

* 审查器只替代审批提示。插件不改沙箱配置、也不会自行放宽沙箱:它只回答宿主已经抛出的请求。
* critical 风险一律拒绝,不受 decision 答案影响。
* 审查器出错时失败关闭(policy.denyOnReviewerError: true)。
* 熔断器能拦住反复试探被拒操作的 agent。
* 拒绝会以通知形式注入会话,来源使用生产方自有 kind(plugin:dsh-auto-review),因此 transcript 始终满足 v4 会话格式。

配置

设置段:dsh-auto-review。完整参考见 docs/configuration.md。

reviewer

| 键 | 默认值 | 说明 |
| protocol | chat | chat = OpenAI 兼容补全,systemone = System One 决策 API |
| baseURL | '' | 空 + chat = 当前会话模型;空 + systemone = 硅基流动 |
| model | '' | 空 + systemone = Kev-4b(硅基流动暂定默认) |
| apiKey / apiKeyEnv / apiKeyFile | '' | 三选一;回环端点不需要 |
| timeoutMs | 24000 | 单次审查调用超时 |
| thinking | default | 对不接受 thinking 的后端设 off |
| systemone.confidenceThreshold | 0.6 | 低于此值的决策答案不予采信(0.5–1) |
| factFinding.enabled / maxRounds / maxFacts | true / 2 / 3 | 审查器可调用的只读事实工具 |
| factFinding.content.enabled / maxBytes | false / 4096 | 是否允许把文件内容附进请求 |

policy

| 键 | 默认值 | 说明 |
| enabled | true | 总开关(/auto-review on │ off) |
| tools | [] | 限定守护者审查哪些工具 |
| allowRules | [] | 免审白名单:{ tool, operations[], escalationTarget } |
| allowDangerFullAccessRules | false | 必须显式打开,规则才允许授予 danger-full-access |
| onLowConfidence | deny | deny(失败关闭)或 defer(交人工) |
| denyOnReviewerError | true | 审查器崩溃/超时 ⇒ 拒绝 |
| context.enabled / maxMessages / maxChars | true / 10 / 6000 | 交给审查器的有界会话上下文 |
| breaker.consecutiveDenyLimit / windowDenyLimit | 3 / 10 | 连续拒绝达阈值即熔断 |
| audit.enabled / path / includeToolInput | true / ~/.dsh/auto-review-audit.jsonl / false | 每次裁决一行 JSON |

System One 决策 API 审查器

protocol: systemone 把一次审查变成一次决策 API 调用:

POST {baseURL}/systemone
{ "model": "<model>", "state": { "policy": "...", "request": "..." },
"questions": { "decision": {...}, "risk": {...} } }

两个 choice 问题(decision、risk)并行提出,返回的结构化答案被确定性地合成为与 chat 路径完全相同的裁决 JSON,并走同一套严格解析(critical 风险拒绝、未知选项判为格式错误、低置信度交由 policy.onLowConfidence)。置信度按 |p(allow) − 0.5| × 2 计算,所以 p(allow)=0.500 得到置信度 0.000——这是「无法判断」,而不是悄悄放行。
| 后端 | baseURL | model | 密钥 |
| TypeSafe Jev(推荐) | https://api.typesafe.ai/v1 | jev-latest | TypeSafe key(审计里记录裁决模型,如 jev-1.13.0) |
| 硅基流动 | (空) → https://api.siliconflow.cn/v1 | (空) → Kev-4b | 硅基流动 key |
| 自部署 Laya | 你的 Laya 端点 | 你的模型 | 回环地址免 key |

来自真实使用的标定结论:面对 escalation 类请求,Jev 常常刻意保持不表态(置信度接近 0.000)。此时 onLowConfidence: deny 等于「不批」,defer 等于「问人」——想少被打扰就提高 allowRules 覆盖率或下调 confidenceThreshold。

免审白名单与低置信度

与其让审查器揣摩你的习惯,不如把窄而重复的形态显式预批:

dsh-auto-review:
policy:
onLowConfidence: defer
allowRules:
- tool: write # 工具名精确匹配
operations: ['C:\work\notes\'] # 操作前缀(路径/命令)
- tool: bash
operations: ['git status', 'git log']
escalationTarget: workspace-write # "" | workspace-write | danger-full-access
allowDangerFullAccessRules: false # 无沙箱放行保持默认关闭

命中规则会跳过审查器并直接放行一次,所以规则必须保守:escalation 规则至少钉住一个操作前缀;未打开 allowDangerFullAccessRules 时,配置校验会直接拒绝 escalationTarget: danger-full-access。

onLowConfidence 决定「不可采信的审查结论」意味着什么:

| 取值 | 行为 |
| deny(默认) | 失败关闭——审查器不表态即拒绝,并告知智能体原因 |
| defer | 该请求落回人工审批;审计行记 source=reviewer-low-confidence |

信任边界

* 外发内容:待批工具调用、沙箱状态、审查器主动索取的只读事实,以及一段有界上下文(默认 10 条消息 / 6000 字符;文件内容默认关闭)。没有别的——不导出环境变量、不发送完整 transcript、不含凭据。
* 密钥不外流:API key 来自 apiKey、apiKeyEnv 或 KEY=VALUE 文件,并在审查请求、审计行与 trace 中被抹除。
* 回环特殊处理:自部署端点在 127.0.0.1/localhost/[::1] 上可免 key;其他地址缺 key 时拒绝启动。
* 本地产物:~/.dsh/auto-review-audit.jsonl(每次裁决一行,includeToolInput 默认关闭)与 ~/.dsh/auto-review-trace.jsonl(每次请求为何如此处理:谁裁决、端点、模型、置信度)。都是纯本地文件,随时可删。
* 插件无法给自己授权:它只回答宿主已抛出的请求,且从不修改沙箱配置。

验证

npm run build # tsc → lib/
npm test # 对构建产物跑零依赖的冒烟套件
npm run test:systemone # 针对本地 mock System One 决策 API 的集成测试

npm test 包含五个冒烟套件(模块与导出、答案裁决、消息来源准入、trace 落盘、前端契约)。test:systemone 会拉起一个本地 mock 决策 API,断言整条链路:请求形状、密钥处理、置信度到策略的映射,以及解析器的失败关闭行为。它直接引用 TypeScript 源码,因此需要能解析到 harness 包(在 checkout 或已装 harness 的 profile 内运行)。

排查

| 现象 | 原因 / 处理 |
| dsh plugin add 或重新构建后没有任何变化 | bundle 在进程启动时读取——重启 profile。 |
| /auto-review status 提示没有 settings provider | 在 profile patch 里设 dsh-auto-review.enabled,或用 Web 设置页。 |
| 安装报 ERESOLVE | 改用发行包(预构建)而非 git spec,或加 --legacy-peer-deps。 |
| 所有请求都落回人工 | 审查器结论低于 confidenceThreshold 且 policy.onLowConfidence: defer。提高 allowRules 覆盖率,或改为 deny。 |
| 审查器一律拒绝 | 看 audit.path——每行带 p(allow)、confidence、risk 以及裁决模型。 |
| 拒绝后会话损坏 | 0.2.0-jev.0 起不应再出现;注入使用生产方自有 source kind。若见到 format v4 message requires a producer-owned source kind,说明该构建早于修复。 |

兼容性

DeepSeek Harness 0.2.0-rc.x(声明为 engines.dsh: >=0.2.0-0 <0.3.0),Node.js ≥ 22。官方 @deepseek-ai/ 包由 profile 在运行时提供,因此刻意不声明为依赖(避免 profile 内出现重复运行时)。

文档

docs/configuration.md —— 全部设置项与默认值
* docs/deployment.md —— 多 profile、文件/registry 安装、手工接入
* docs/terminology.yaml —— 文档用词表
* CHANGELOG.md —— 本 fork 相对上游的变更

许可证

Apache-2.0。上游:gbthui/dsh-auto-review(Apache-2.0),本 fork 建立在其审查接缝、证据流水线、熔断器与审计落盘之上。
预览分享卡片长什么样 ↓xlennart/dsh-auto-review-jev
分享 · DeepSeek Harness Hub
xlennart/dsh-auto-review-jev

权限请求先由审查模型裁决,再决定是否打扰你

这是你的仓库?认领条目

回到顶部