dsh-jev-interceptor

securityinstall failsnpmMIT

Classifies pending tool calls with Jev (TypeSafe AI's non-generative decision model) on tools/pre-execute — confident high-risk calls are denied, ambiguous ones escalated to approval — and auto-approves clearly-granted reversible calls on approval/request behind argument-evidence gating. Also subcla

下载量 / Downloads
3,331
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-jev-interceptor

Sandbox test results

StageResult
1 install✗
2 list—
3 mount—
4 boot—
First error
dsh: initialized profile web at /home/node/.dsh/profiles/web

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

dsh-jev-interceptor

![CI](https://github.com/AskTheWay/dsh-jev-interceptor/actions/workflows/ci.yml)

![npm](https://www.npmjs.com/package/dsh-jev-interceptor)

![License: MIT](LICENSE)

![Node >= 20.3]()

![dsh plugin](https://github.com/topics/dsh-plugin)

![Jev](https://typesafe.ai)

⚡ 每个工具调用、每条被召回的消息,毫秒级裁决——单次成本约百万分之二美元。
你的 agent 最烧钱的坏习惯:拿会写诗的 LLM 回答是非题,以及按年龄截肢你的上下文。本插件把 Jev——那个九月刷屏全网的非生成式"System One"模型——接进 DeepSeek Harness 里 LLM 大材小用、规则又全盲的判断点。

中文 | [English](README.md)

<p align="center">

<img src="imgs/image-3.png" width="32%" alt="决策记录:可筛选明细表">

<img src="imgs/image-4.png" width="32%" alt="阈值校准:建议与采纳历史">

<img src="imgs/image-5.png" width="32%" alt="设置:Provider 与连接测试">

</p>

Web 面板(侧栏 ⚡ → Jev 决策):实时 KPI 与净收益卡、可筛选的决策明细(每行带完整证据)、跟踪采纳情况的影子阈值建议、一键连接测试。以上全部是真实插件跑真实决策的截图。

一口气说完它做什么: 工具调用执行前,Jev 用一次约 $0.00002 的请求完成风险、可逆性、任务匹配度、注入嫌疑四重分类——高置信高危直接拒绝,中风险升级人工,明确授权且可逆的不再浪费你点审批弹窗。而当 @ 引用旧会话注入快照时,Jev 逐消息给它对当前任务的价值打分——让错误堆栈活过字节预算,而不是最旧的那句寒暄。任何存疑、超时、没 key,都降级回 dsh 原生行为。不需要配置任何"退路",也绝无放宽权限的可能。

为什么值得做

dsh 出厂没有任何逐调用风险分类——pre-execute 瀑布的兜底就是裸 allow。唯一的内置先例 experimental/auto-review 用生成式 LLM 干这活:每次工具调用一个完整模型请求、temperature 0、手写 JSON 文本协议,官方自认慢、贵、实验性。这是让 System-2 抄写员去干 System-1 反射的活:

· auto-review(生成式 LLM) · dsh-jev-interceptor(Jev)

决策形态 · 逐 token 生成 JSON 再解析,全靠祈祷 · 类型化 choice/noul 答案——类型错误结构性不可能

单次成本 · 一次完整 LLM 请求 · 约 $0.00002(实测:501 输入 token)

延迟 · 秒级 · provider 侧约 100ms(TypeSafe 报告的 p50);美西之外端到端约 1s

不确定性 · 藏在散文里 · 每问带概率分布 + 校准置信度

失败路径 · 解析兜底 → deny · 低置信 → next()——绝不硬拍

TypeSafe 官方宣称 Jev 在分类工作负载上比 LLM 快最高 200 倍、便宜最高 400 倍——本插件就是把这个数字落进真实 agent harness,收据在 /jev-stats 里。

我们相信这是 dsh 生态第一个 System-1 决策插件。决策模型在 dsh 中的完整地图——本插件的两个挂点 + 另外十一个已核实挂点(语义模型路由、上下文保留打分、图像卸载预规划、工人报告核验……)——见 [docs/jev-usage-points.zh.md](docs/jev-usage-points.zh.md)。

没人谈论的 FIFO 痛点

在 dsh 里 @ 引用一个旧会话时,harness 注入它的一份有界快照——当快照超出字节预算,就从最旧开始丢。纯 FIFO,零语义。你贴在会话开头的报错信息、开启整件事的三行提问?最先被丢。"谢谢!"和"好,继续"?留下了——因为更新。

dsh 官方的保留算法对此很坦诚:丢最旧的、再截最长的,完事。本插件的 jev-session-reference 行接管这个决策(子类化官方 resolver,@ 补全、预算、溢出存储、取消全部原样继承):一次 Jev fan-out 给每条可丢弃消息打分——噪音 / 背景 / 相关 / 关键——丢弃顺序变成最没价值的先走,截断时先砍废话再砍实质。checkpoint 和最新一条的保护与官方完全一致,字节预算的守恒与官方完全一致;sessionReferenceEnabled: false(默认)时这一行的渲染与原版逐字节相同。

shadow 模式先给你收据再谈信任:每次注入都记录反事实对照——FIFO 丢掉了哪些评分本会保住的消息——看清了再切 enforce。

60 秒上手

dsh plugin --profile <name> add dsh-jev-interceptor
# 在 profile 的 cordis.patch.yml 里
- id: jev-interceptor
  name: dsh-jev-interceptor
  config:
    enabled: true
    mode: shadow            # 先观察模式:记录每个决策,不执行任何干预
    provider: typesafe      # 或 'openrouter'(今天就能用,无需候补)| 'custom'

无需改 YAML。 装好后在聊天框里控制一切——命令持久化到 profile、下一个工具调用即生效、无需重启:

/jev-on                 # 启用(默认 shadow 模式——只记录,不执行)
/jev-stats              # 看它怎么判,含完整概率分布
/jev-log 20 --json      # 最近 N 条决策明细;--json/--csv 导出原始数据
/jev-impact             # 底线数字:省掉的点击、拦截、成本与延迟
/jev-calibrate          # 影子数据阈值建议(绝不自动应用)
/jev-mode enforce       # 数字满意后升级
/jev-off                # 回到原生行为

正常使用你的 agent。shadow 模式下每个决策(含完整概率分布)都落入遥测;/jev-stats 汇总:

[guard] calls: 41  degraded: 0  cached: 9
  actions: delegate=33 ask=6 deny=2
  input tokens: 18234  est. cost: $0.000766
  latency: p50 247ms  p95 512ms  max 611ms

数字满意?把 mode 改成 enforce。这就是全部的上线方案——先观察,再信任,绝不硬拍。

收据(真实使用数据,非跑分)

五周的自用(2026-09-22 → 10-27,15 个活跃日、7 个会话、272 次判断——/jev-impact 随时从你自己的遥测渲染这张表):

  • 预批准路径从未触发,误批指标尚无样本(0/0,如实显示「无样本」而不是「0」)——实际被检验的是:6 次不确定调用转人工、0 次高风险漏拦
  • 决策总成本 $0.0068(143 次计费判断共 162,425 input tokens;p50 1110ms、p95 1503ms——上面的截图正是同一窗口)
  • 128 次判断降级回原生行为(大部分窗口没配 key、9 次超时),行为零差异——fail-closed 说到做到

校准自带闭环:每次 /jev-calibrate 都会留一份报告快照;下次运行会告诉你上次哪些建议被采纳(✓)、未采纳(·)、被手动改写(↔),以及一致率桶怎么变。

安全模型(真正值得细读的部分)

  • 永不返回 allow。 "无异议"用 next() 表达,链上后续 listener(外部 hook、auto-review)的否决权完好无损。
  • 处处 fail-closed。 无 key / provider 冷却 / 超时 / 解析不匹配 / 内部错误 → 委托回原生行为。审批服务的 never 策略在任何 listener 之前执行,本插件在结构上就无法放宽它。
  • 证据门控的自动批准。 allowed-once 必须有参数证据:只有 guard 升级过的调用(新鲜条目、会话与工具都匹配)才可能被自动批;hook 请求与沙箱提级不携带参数,一律转人工。
  • 注入感知。 工具参数只进 Jev state 数据字段;instructions 是固定文案;疑似注入的答案触发升级而非压制。(Jev 官方承认可被对抗内容影响——所以本插件的拦截是加速器,永远不是最后防线。)
  • 输入限界。 参数头尾预览 + 尾部消息摘要——Jev 官方指引就是"代码先过滤,只发问题需要的字段"。
  • 构造级韧性。 每次尝试墙钟超时、429/529 单次重试、连续失败进冷却(超时也计数)、并发上限、LRU 决策缓存、排队有界的信号量。provider 挂掉的代价是零行为差异,不是你的 harness。
  • 接管行按层禁用。 jev-session-reference 行替换了上游 session-reference 行;在 Plugins 页单独关掉这一行会落得没有任何 session-reference 在运行。移除接管请禁用整个 dsh-jev-interceptor bundle 层(setBundleEnabled(false)),上游行随之恢复。
  • 拦截可解释。 每次 ask/deny 都带着人读理由和完整证据摘要直达审批卡与被拦工具行(jev-guard: 中风险调用,需人工确认(risk=medium 0.72 · irrev=0.30 · inj=0.01))。行首 jev-guard: 前缀是安全协议——预批钩子靠它拒绝自动批守门人自己的升级。
  • 可观测。 每个决策落入 <dsh-home>/plugins/dsh-jev-interceptor/telemetry.jsonl(遵循 $DSH_HOME),带 callId 关联与供校准重放的全精度 scores 数值;日志超 20MB 自动轮转。/jev-stats 按挂点汇总、/jev-log 看单条明细、Web 面板全部图表化。
  • 校准而非拍脑袋。 /jev-calibrate 把影子遥测喂给同一个决策矩阵做反事实重放,输出阈值调整建议(±0.05 步长、常规建议 ≥30 样本——出现误批危险信号时 ≥10 条即建议收紧,仅收紧方向;注入阈值永不放松、绝不自动应用)。

以上全部由 130 个测试锁定,包括对抗评审的回归用例(曾可能挂死工具管线的并发泄漏、跨会话 callId 碰撞、无证据自动批准)。

配置

一切皆配置项——超时、冷却、并发、缓存、各挂点阈值、工具名单——见 src/config.ts 的 Config schema。值得注意的默认值:

  • 只读工具(read、read_image、grep、glob、todo_write)零成本直通;
  • Auto 权限预设完全让位给 `auto-revi

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::11,最后更新 2026-11-03

Links

GitHub · Homepage · npm

Same category