Repository navigation
Releases
v0.1.4 — 准入只裁「扫一眼」型的输出
这一版修了什么
tool.admission 一直在裁你主动要的东西:用本机 55 天真实会话量,超过 4000 字符阈值的
964 条调用只占 8.1%,却背着 57.5% 的字节;而这些字节里重复噪音只有 7.7%,91% 是密集内容,
其中 read 独占 4.68 MB 且 100% 密集。
真实 provider 实测三条真实文件读取(24,859 / 17,616 / 16,141 字符),分别只还回
48% / 17% / 18%(合计 31%);同一条 decision.js、同一个任务判两次,一次 2,962 字符、
一次 11,954 —— 重读未必能捞回来。
代价是不对称的:漏判不花钱,误裁要重读、甚至让模型对着没看全的文件下判断。
改成什么
准入只对尺寸不是由你决定的输出动手:
["bash", "cordis_inspect_*", "mcp__*", "web_fetch", "webfetch", "web_search", "websearch", "fetch"]read / grep / glob / skill / write / edit 一律原样放行。工具名按大小写不敏感匹配
(harness 的 bash 与 Claude Code 的 Bash 是同一个工具),结尾 * 为前缀匹配。
要自己重写名单:
{ "options": { "admission": { "toolNames": ["bash", "mcp__*"], "minChars": 4000 } } }验证
打包产物实测:同一探针,read → 结果一字未改、账本零新增;bash → 照旧裁剪并落账本。
$ node host-probe.mjs dsh-jev-judge-0.1.4 read
结果被改写: false(4334 → 4334) 判定后账本行数: 16 ❌ 没有新增
$ node host-probe.mjs dsh-jev-judge-0.1.4 bash
结果被改写: true(4334 → 1344) 判定后账本行数: 17 ✅ 新增了记录测试 217 项全绿。完整数据见 docs/verification.md 的 R9。
安装
dsh plugin add https://github.com/HunterXing/jev-judge/releases/download/v0.1.4/dsh-jev-judge.tgz装完需重启 DeepSeek Harness。
v0.1.3 — 宿主行声明的账本路径生效
这一版修了什么
宿主(DSH 插件行、MCP、hooks 的调用方)在自己的配置行里声明账本路径,而 createJudgeRuntime
读的是未合并的 kernel.ledger.path,于是路径为空、createLedger 按契约返回 null:
判定一切照常,但一条账本记录都不落。
这是唯一一种看起来像成功的失效。内核判得完全正确(同一份 4334 字符的工具结果照样裁到
1344 字符、错误行保留、spill 文件照写),可决策点用来「挣到 active」的证据被静默丢掉。
0.1.1 为同样的原因修过 modes,账本这一处漏了。
修了什么
ledger.path/recordState/maxBytes改读合并后的配置(src/kernel/registry.js)- 新增
tests/registry.test.mjs:overrides(整个宿主适配面)此前零覆盖;该测试对着旧代码会失败
怎么发现的
桌面端装了 0.1.2 并重启后,问了一句「它是不是在主动用这个插件」:答案是在用
(同一个会话里连续两条命令的结果被现场改写成 [jev-judge] ...,spill 文件为证),
但账本里只有 1 条昨天的记录、今天 0 条。顺着查下去就落到这一行上。
安装
dsh plugin add https://github.com/HunterXing/jev-judge/releases/download/v0.1.3/dsh-jev-judge.tgz装完需要重启 DeepSeek Harness(桌面端尤其如此:运行中的实例拿着的还是旧版本)。
dsh-jev-judge 0.1.2
One more finding, from reading the ledger 0.1.1 had just written.
The ledger's own promise is that a record is comparable and countable without becoming a second copy of the user's content. Hashing the judged state had only made that half true: tool.admission's outcome carries the chunks it kept — 2995 characters of tool output in the record this fix was tested against.
With recordState off (the default), any string longer than 200 characters is now cut to its head plus a length and a digest, at any depth, and the record reports how many strings it elided. recordState: true still keeps everything.
This release supersedes 0.1.1, which already fixed the missing ledger and the admission head floor.
dsh-jev-judge 0.1.1
Fixes found by installing 0.1.0 into a real profile and using it.
The ledger is now written. The bundled cordis.patch.yml had set only modes, so the kernel ran with no ledger at all and every verdict was computed and dropped — which made "run in shadow, then read the ledger" impossible to follow. The patch now ships ~/.dsh/judge-ledger.ndjson.
Admission no longer reduces a result to a bare pointer. A 31 KB tool result the agent had asked for was judged chunk by chunk, nothing was kept, and the whole result became one line naming the spill file — a pointer an MCP-only client has no filesystem to follow. When no chunk earns its place the head now goes through, the outcome degrades to trimmed, and headKept is recorded in the ledger.
Install as in 0.1.0; the tarball URL below always resolves to the newest release.
dsh-jev-judge 0.1.0
A judgment kernel for coding agents: routine judgments go to a small Jev judge, and every verdict is recorded in a ledger.
Install (DeepSeek Harness)
dsh plugin --profile <profile> add github:HunterXing/jev-judge
# or the prebuilt tarball attached here:
dsh plugin --profile <profile> add https://github.com/HunterXing/jev-judge/releases/latest/download/dsh-jev-judge.tgzInstall (Claude Code, Codex, OpenCode, any MCP client) — see docs/agents.md.
Seven decision points — judge.items, tool.admission, tool.injection, tool.risk, turn.completion, turn.continue, memory.capture — with a deterministic fallback each, a JSONL ledger for every verdict, and no runtime dependencies and no build step.
Not published to npm: this release is the distributed artifact. See docs/market.md.