给 DeepSeek Harness 的独立裁判插件。
42.7/100
综合分
21
GitHub 星标
1,187
npm 周下载
—/5
用户评分
数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-llm-verifiernpm 源 · dsh-llm-verifier 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · security
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 6 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-llm-verifier @ 0.11.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 22:57:44
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 70 处,展示前 64 条)
- 读取本地文件lib/index.js:540
return existsSync(candidate) ? candidate : void 0; - 读取本地文件lib/index.js:560
if (override) return existsSync(override) ? override : void 0; - 读取本地文件lib/index.js:574
for (const entry of readdirSync(profiles, { withFileTypes: true })) { - 读取本地文件lib/index.js:586
files = readdirSync(dataDir).filter((name) => name.endsWith(".json")); - 读取本地文件lib/index.js:591
mergeProviderDocument(file.slice(0, -5), JSON.parse(readFileSync(join(dataDir, file), "utf8")), table); - 发起网络请求lib/index.js:1736
const response = await fetch(url, { - 读取本地文件lib/index.js:1771
constructor(load = (path) => readFile(path, "utf8")) { - 写入本地文件lib/index.js:2550
await mkdir(dirname(this.file), { recursive: true }); - 写入本地文件lib/index.js:2552
await writeFile(temporary, JSON.stringify(snapshot), "utf8"); - 写入本地文件lib/index.js:2554
await rename(temporary, this.file); - 删除本地文件lib/index.js:2556
await unlink(temporary).catch(() => {}); - 写入本地文件lib/index.js:4126
await mkdir(dirname(this.file), { recursive: true }); - 写入本地文件lib/index.js:4128
await writeFile(temporary, JSON.stringify(snapshot), "utf8"); - 写入本地文件lib/index.js:4130
await rename(temporary, this.file); - 删除本地文件lib/index.js:4132
await unlink(temporary).catch(() => {}); - 删除本地文件lib/index.js:4345
await unlink(temporary).catch(() => {}); - 发起网络请求lib/client.js:4862
const body = await (await fetch("/api/llm-verifier/statistics", { - 发起网络请求lib/client.js:4896
const body = await (await fetch("/api/llm-verifier/statistics", { - 发起网络请求lib/client.js:4943
const response = await fetch("/api/llm-verifier/statistics", { - 发起网络请求lib/client.js:6174
const body = await (await fetch("/api/llm-verifier/statistics", { - 发起网络请求lib/caller-WKl-RXYy.js:153
const send = (temp) => fetch(endpoint(route.baseURL), { - 写入本地文件lib/caller-WKl-RXYy.js:260
await rename(temporary, target); - 读取本地文件lib/caller-WKl-RXYy.js:307
const document = JSON.parse(await readFile(this.file, "utf8")); - 写入本地文件lib/caller-WKl-RXYy.js:374
await mkdir(dirname(this.file), { recursive: true }); - 写入本地文件lib/caller-WKl-RXYy.js:376
await writeFile(temporary, JSON.stringify(snapshot), "utf8"); - 删除本地文件lib/caller-WKl-RXYy.js:380
await unlink(temporary).catch(() => {}); - 读取本地文件lib/auto-DNZnQiuV.js:65
const document = JSON.parse(await readFile(this.file, "utf8")); - 写入本地文件lib/auto-DNZnQiuV.js:124
await mkdir(dirname(this.file), { recursive: true }); - 写入本地文件lib/auto-DNZnQiuV.js:126
await writeFile(temporary, JSON.stringify(snapshot), "utf8"); - 删除本地文件lib/auto-DNZnQiuV.js:130
await unlink(temporary).catch(() => {}); - 写入本地文件lib/auto-DNZnQiuV.js:154
await rename(temporary, target); - 读取本地文件src/config/criteria.ts:32
constructor(private readonly load: (path: string) => Promise<string> = path => readFile(path, 'utf8')) {} - 读取本地文件src/engine/cache.ts:80
const document = JSON.parse(await readFile(this.file, 'utf8')) as CacheDocument - 写入本地文件src/engine/cache.ts:128
await mkdir(dirname(this.file), { recursive: true }) - 写入本地文件src/engine/cache.ts:133
await writeFile(temporary, JSON.stringify(snapshot), 'utf8') - 删除本地文件src/engine/cache.ts:134
try { await replaceFile(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error } - 写入本地文件src/engine/cache.ts:156
await rename(temporary, target) - 发起网络请求src/judge/images.ts:65
const response = await fetch(url, { redirect: 'error', headers: { accept: 'image/*' }, signal: signal === undefined ? AbortSignal.timeout(FETCH_TIMEOU - 读取本地文件src/judge/pricing.ts:133
return existsSync(candidate) ? candidate : undefined - 读取本地文件src/judge/pricing.ts:154
if (override) return existsSync(override) ? override : undefined - 读取本地文件src/judge/pricing.ts:168
for (const entry of readdirSync(profiles, { withFileTypes: true })) { - 读取本地文件src/judge/pricing.ts:182
files = readdirSync(dataDir).filter(name => name.endsWith('.json')) - 读取本地文件src/judge/pricing.ts:188
mergeProviderDocument(file.slice(0, -'.json'.length), JSON.parse(readFileSync(join(dataDir, file), 'utf8')), table) - 发起网络请求src/judge/top-logprobs.ts:136
const send = (temp: number | undefined) => fetch(endpoint(route.baseURL), { - 写入本地文件src/judge/top-logprobs.ts:208
await rename(temporary, target) - 读取本地文件src/judge/top-logprobs.ts:250
const document = JSON.parse(await readFile(this.file!, 'utf8')) as CapabilityDocument - 写入本地文件src/judge/top-logprobs.ts:325
await mkdir(dirname(this.file!), { recursive: true }) - 写入本地文件src/judge/top-logprobs.ts:327
await writeFile(temporary, JSON.stringify(snapshot), 'utf8') - 删除本地文件src/judge/top-logprobs.ts:328
try { await replaceFile(temporary, this.file!) } catch (error) { await unlink(temporary).catch(() => {}); throw error } - 读取本地文件src/process/process-selection.ts:751
const document = JSON.parse(await readFile(this.file, 'utf8')) as ProcessStoreDocument - 写入本地文件src/process/process-selection.ts:822
await mkdir(dirname(this.file), { recursive: true }) - 写入本地文件src/process/process-selection.ts:824
await writeFile(temporary, JSON.stringify(snapshot), 'utf8') - 写入本地文件src/process/process-selection.ts:825
try { await rename(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error } - 删除本地文件src/process/process-selection.ts:825
try { await rename(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error } - 读取本地文件src/telemetry/decisions.ts:212
const document = JSON.parse(await readFile(this.file, 'utf8')) as Partial<DecisionsDocument> - 写入本地文件src/telemetry/decisions.ts:232
await mkdir(dirname(this.file), { recursive: true }) - 写入本地文件src/telemetry/decisions.ts:234
await writeFile(temporary, JSON.stringify(snapshot), 'utf8') - 写入本地文件src/telemetry/decisions.ts:235
try { await rename(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error } - 删除本地文件src/telemetry/decisions.ts:235
try { await rename(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error } - 读取本地文件src/telemetry/statistics.ts:711
const document = JSON.parse(await readFile(this.file, 'utf8')) as Partial<StatisticsDocument> - 写入本地文件src/telemetry/statistics.ts:731
await mkdir(dirname(this.file), { recursive: true }) - 写入本地文件src/telemetry/statistics.ts:733
await writeFile(temporary, JSON.stringify(snapshot), 'utf8') - 写入本地文件src/telemetry/statistics.ts:734
try { await rename(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error } - 删除本地文件src/telemetry/statistics.ts:734
try { await rename(temporary, this.file) } catch (error) { await unlink(temporary).catch(() => {}); throw error }
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools@deepseek-ai/dsh-agent@deepseek-ai/dsh-session@deepseek-ai/dsh-llm@deepseek-ai/dsh-attachment@deepseek-ai/dsh-settings@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 配置LLM校验器
- Web设置页
可配置的 DSH 原生 LLM 校验器,带 Web 设置页
最近更新
在 GitHub 查看全部 →v0.11.02026-10-24
· [DSH 0.2.1-rc.3 / 本机 master] 对齐宿主版本与新增会话边界
- engines.dsh 与 8 条 DSH peer 同步追加 || ^0.2.1-rc.3,全部 DSH 开发依赖精确锁定至 0.2.1-rc.3,pnpm 发布年龄豁免同步更新;Cordis 保持 4.0.5
- 审查本机 22ddee37924(rc.3 后 1533 个提交):工具执行器拆包、条件工具、会话写入收紧与图标 sprite 化未移除本插件消费的接口;新增 model/selection 不进入裁判证据
- 普通 fork 不再携带 parentSession,isSubagentSession() 明确以 origin: 'subagent' 为现行标识、仅为历史记录保留 parent 兼容读取;回归测试钉住无 parent/origin 的独立 fork 不会被误分类
- verify:release、peer 检查、宿主 engines/peer 回退兼容调用与构建产物加载均通过;本机 HEAD 的 Host/Client 调用面通过独立声明镜像类型检查
Full Changelog:
v0.10.12026-10-17
· [DSH 0.2.1-rc.1 / 0.2.1-rc.2] 对齐宿主预发布候选线与 vendor cordis 4.0.5
- engines.dsh 与 8 条 @deepseek-ai/dsh-* peerDependencies 同步追加 || ^0.2.1-rc.1 || ^0.2.1-rc.2,@deepseek-ai/cordis peer 追加 || ^4.0.5
- 全部 DSH 开发依赖精确锁定至 0.2.1-rc.1(与 0.2.1-rc.2 在消费的 16 个包上源码与类型逐字节一致,且已在 npm 全量就绪),@deepseek-ai/cordis 同步锁定至 4.0.5,pnpm peers check 全绿
- alpha.5 → rc.1 宿主仅晋升包版本号;rc.1 → rc.2 新增 ui-deepseek-model-label-1017 与设置开关后的 DeepSeek Search / Fetch API(web/web-deepseek-api、ui-settings-web-search),本插件消费的 16 个宿主包源码零改动
Full Changelog:
v0.10.02026-10-17
· [DSH 0.2.1-alpha.5] 对齐宿主并采用新版兼容声明
- 新增顶层 engines.dsh,供 0.2.1-alpha.3+ 宿主与插件市场优先读取;8 条 @deepseek-ai/dsh-* peer 保留为旧宿主回退,两套范围均覆盖 0.2.1-alpha.1–alpha.5 且由回归测试强制一致
- DSH 开发依赖精确锁定 0.2.1-alpha.5,避免 npm next 的 0.2.1-rc.1 被未审查地纳入类型门禁;@deepseek-ai/cordis 同步到 4.0.5-alpha.2,pnpm peers check 全绿
· [修复] 子 Agent 动态在途探针改用真实执行状态
- 不再把 subagents.listChildren() 的持久目录项误读为 kind/activity 活动记录;改用 AgentRegistry.list() 按父子关系发现运行中的后代,并以 visited 集合防环
- 旧 Job-backed 回退按宿主契约修正为 jobs.list(agent.id);新版 managed activation 继续复用既有启动回执与 subagent-settled 日志判定,不把所有后台 Job 纳入门控
· [新能力评估] 不为换新而替换稳定路径
- 话题侧车不迁到实验性的 appendPluginRecord();裁判传输不改写为 prepareCall();PTC 展示 meta 不作为模型证据;working-directory/change 不改变侧车归属
- index.test.ts 新增清单一致性与 Agent/Job 动态探针回归
Full Changelog:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成DSH LLM Verifier
给 DeepSeek Harness 的独立裁判插件。
主智能体干活,另一个模型验收:比候选、看进度、判交付,并在宿主生命周期边界上自动门控。
它做什么
- 裁判不是主模型。判官在设置里任选服务商与模型,只看观测到的 stdout/stderr 与真实文件 diff,不看智能体的自我陈述。
- 五档能力:两个候选做比较、多个候选择优、长任务看进度、还没有候选时自己起草、整个会话判交付。
- 自动门控。smart / strict 策略在智能体准备停止时自行判断该复核什么,不通过就 steering 让智能体修复,而不是指望模型主动想起工具。
- 判决可解释。每次调用都有逐判据分数、实际走的评分通道、token 与费用,看板能回答「这次为什么没通过」。
- 数据不出本地之外的边界之外。证据先脱敏限长,只发给你选定的判官。
安装
dsh plugin --profile web add dsh-llm-verifier
dsh web
打开 设置 → LLM Verifier,选判官模型即可。默认只启用显式工具;需要自动门控时把调用策略切到 smart。
展开完整文档(README 剩余 1 节)
DSH LLM Verifier 给 DeepSeek Harness 的独立裁判插件。 主智能体干活,另一个模型验收:比候选、看进度、判交付,并在宿主生命周期边界上自动门控。 它做什么 - 裁判不是主模型。判官在设置里任选服务商与模型,只看观测到的 stdout/stderr 与真实文件 diff,不看智能体的自我陈述。 - 五档能力:两个候选做比较、多个候选择优、长任务看进度、还没有候选时自己起草、整个会话判交付。 - 自动门控。smart / strict 策略在智能体准备停止时自行判断该复核什么,不通过就 steering 让智能体修复,而不是指望模型主动想起工具。 - 判决可解释。每次调用都有逐判据分数、实际走的评分通道、token 与费用,看板能回答「这次为什么没通过」。 - 数据不出本地之外的边界之外。证据先脱敏限长,只发给你选定的判官。 安装 dsh plugin --profile web add dsh-llm-verifier dsh web 打开 设置 → LLM Verifier,选判官模型即可。默认只启用显式工具;需要自动门控时把调用策略切到 smart。 五个工具 | 工具 | 什么时候用 | | verifier_compare | 恰好两个候选,需要一个独立判断 | | verifier_select | 三个以上候选,需要排名 | | verifier_track | 多步任务,想知道真实进度 | | verifier_best_of_n | 还没有候选,且选错的代价高 | | verifier_current_session | 显式验收当前会话 | verifier_best_of_n 是唯一会自己生成候选的工具,也是最贵的;其余四个只在已有材料上判断。 文档 | 文档 | 说什么 | | docs/ARCHITECTURE.md | 仓库形状、数据流、跨模块不变量 | | docs/DESIGN.md | 评分、赛制与运行策略的取舍 | | docs/HOST-COMPAT.md | 支持的 DSH 版本线、兼容读取点、升级流程 | | docs/adr/ | 一条决策一页 | | docs/CHANGELOG.md | 版本历史 | | docs/NOTICE.md | 上游授权与致谢 | 开发 pnpm install pnpm run build # 生成 lib/,宿主加载的就是这份产物 pnpm test # vitest,测试在 test/<域>/ pnpm run verify:release 提交前跑 pnpm run verify:release。其余约定见 CONTRIBUTING.md。 许可 MIT。算法移植自 llm-as-a-verifier,见 docs/NOTICE.md。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Aa728848/dsh-llm-verifier
给 DeepSeek Harness 的独立裁判插件。
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 422,036已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,619已汉化MCP
71.8
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
主动编码智能体deepseek-ai/dsh-superagent-prototype
研究原型,仅供参考,不是 DeepSeek 官方产品。…
★ 15,535已汉化DSH
71.6
破甲一键通z91772524-ai/pojia-next
十五个 AI…
★ 1,004已汉化DSH
71.6
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 653已汉化DSH
70.7
这是你的仓库?认领条目