按每轮任务难度自动调整推理强度,不换模型
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add prgrmrwy/dsh-auto-model-routing该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · security
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/24) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 39 处,展示前 38 条)
- 读取本地文件eval/live.mjs:5
const questions = JSON.parse(readFileSync(new URL('../src/rubric.json', import.meta.url))) - 读取本地文件eval/live.mjs:6
const cases = JSON.parse(readFileSync(new URL('./cases.json', import.meta.url))) - 读取本地文件eval/live.mjs:9
assert(!existsSync(output), 'Result file already exists; refusing duplicate paid execution') - 读取密钥环境变量eval/live.mjs:10
const key = process.env.OPENROUTER_API_KEY - 请求外部主机openrouter.aieval/live.mjs:12
const meta = await fetch('https://openrouter.ai/api/v1/models/typesafe/jev-1.13/endpoints', { signal: AbortSignal.timeout(20_000), redirect: 'error' } - 发起网络请求eval/live.mjs:12
const meta = await fetch('https://openrouter.ai/api/v1/models/typesafe/jev-1.13/endpoints', { signal: AbortSignal.timeout(20_000), redirect: 'error' } - 写入本地文件eval/live.mjs:19
const save = () => writeFileSync(output, JSON.stringify(report, null, 2), { mode: 0o600 }) - 请求外部主机openrouter.aieval/live.mjs:28
const response = await fetch('https://openrouter.ai/api/alpha/decisions', { method: 'POST', redirect: 'error', signal: AbortSignal.timeout(20_000), he - 发起网络请求eval/live.mjs:28
const response = await fetch('https://openrouter.ai/api/alpha/decisions', { method: 'POST', redirect: 'error', signal: AbortSignal.timeout(20_000), he - 读取本地文件src/feedback.ts:25
try { text=readFileSync(file,'utf8') } catch(error) { if((error as NodeJS.ErrnoException).code==='ENOENT')return;throw error } - 写入本地文件src/feedback.ts:61
private append(record:unknown){mkdirSync(dirname(this.file),{recursive:true});appendFileSync(this.file,JSON.stringify(record)+'\n',{mode:0o600})} - 写入本地文件src/feedback.ts:61
private append(record:unknown){mkdirSync(dirname(this.file),{recursive:true});appendFileSync(this.file,JSON.stringify(record)+'\n',{mode:0o600})} - 发起网络请求src/jev.ts:71
const response = await fetch(this.service ? service.endpoint : this.url, { - 写入本地文件src/policy-store.ts:39
mkdirSync(this.directory, { recursive: true, mode: 0o700 }) - 写入本地文件src/policy-store.ts:40
writeFileSync(`${this.path(id)}.bound`, id, { flag: 'wx', mode: 0o600 }) - 读取本地文件src/policy-store.ts:43
try { if (readFileSync(`${this.path(id)}.bound`, 'utf8') !== id) throw new Error('绑定标记损坏'); return true } - 读取本地文件src/policy-store.ts:48
const raw: unknown = JSON.parse(readFileSync(this.path(id), 'utf8')) - 写入本地文件src/policy-store.ts:66
mkdirSync(this.directory, { recursive: true, mode: 0o700 }); chmodSync(this.directory, 0o700) - 写入本地文件src/policy-store.ts:66
mkdirSync(this.directory, { recursive: true, mode: 0o700 }); chmodSync(this.directory, 0o700) - 写入本地文件src/policy-store.ts:68
writeFileSync(temp, JSON.stringify(checked), { flag: 'wx', mode: 0o600 }) - 写入本地文件src/policy-store.ts:69
renameSync(temp, target) - 读取本地文件src/settings.ts:39
try { raw = JSON.parse(readFileSync(this.path, 'utf8')) } - 读取本地文件src/settings.ts:69
try { disk = JSON.parse(readFileSync(this.path, 'utf8')) } catch { disk = {} } - 写入本地文件src/settings.ts:72
mkdirSync(directory, { recursive: true, mode: 0o700 }); chmodSync(directory, 0o700) - 写入本地文件src/settings.ts:72
mkdirSync(directory, { recursive: true, mode: 0o700 }); chmodSync(directory, 0o700) - 写入本地文件src/settings.ts:75
writeFileSync(temporary, `${JSON.stringify(persisted, null, 2)}\n`, { mode: 0o600, flag: 'wx' }) - 写入本地文件src/settings.ts:76
renameSync(temporary, this.path) - 删除本地文件src/settings.ts:79
try { unlinkSync(temporary) } catch {} - 读取本地文件src/state.ts:26
try { return stateSchema.parse(JSON.parse(readFileSync(this.path(id), 'utf8'))) as SessionState } - 写入本地文件src/state.ts:34
mkdirSync(dirname(target), { recursive: true }) - 写入本地文件src/state.ts:36
writeFileSync(temporary, JSON.stringify(value), { mode: 0o600 }) - 写入本地文件src/state.ts:38
renameSync(temporary, target) - 读取本地文件src/usage-report.ts:51
try { text = readFileSync(file, 'utf8') } catch { return [] } - 读取本地文件src/usage-report.ts:64
try { dirs = readdirSync(root) } catch { return paths } - 读取本地文件src/usage-report.ts:67
try { ids = readdirSync(join(root, dir)) } catch { continue } - 读取本地文件src/usage-report.ts:68
for (const id of ids) { const file = join(root, dir, id, 'session.v4.jsonl.zstd'); if (existsSync(file)) paths.set(id, file) } - 读取本地文件src/usage-report.ts:76
try { decoded = decode(readFileSync(file)) } catch { decoded = undefined } - 读取本地文件src/usage-report.ts:282
try { stateFiles = readdirSync(join(state, 'sessions')).filter(f => f.endsWith('.json')).sort() } catch { }
扫描于 2026/10/31(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
涉及外部主机:openrouter.ai
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-ui-chat@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-credentials给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 插件:用 Jev 按轮调整推理强度,不用切换已选模型,子代理路由可配置
README
由 DeepSeek 最新模型翻译生成dsh-auto-model-routing
English · 简体中文
AUTO 实际效果:「重构并调试」被判为 complex,用 high;随后的「改个名」被判为 simple,降到 low;悬停 AUTO 芯片查看判档,点击切到 MANUAL
不必每条消息都手动调高或调低推理强度。AUTO 下,每个用户回合由 Jev 决策模型(经 OpenRouter)判为 simple / standard / complex / escalated,插件只调整你已选模型的推理强度,不换 provider 和模型。Jev 任何失败都会让 AUTO 自动停用,芯片上显示原因。
安装:DSH 0.2.0-rc.2,Node.js >=22.19。
dsh plugin --profile web add dsh-auto-model-routing
或从源码安装(出现提示时批准本地构建):
dsh plugin --profile web add prgrmrwy/dsh-auto-model-routing
重启 DSH、刷新页面,再到设置 → 自动模型路由配置 OpenRouter key。配套 skill 已包含,提供委派指引,但不强制拦截每次派发。与模型池路由或本地分类器不同,本插件用外部 Jev 判档,始终不换主模型。
展开完整文档(README 剩余 1 节)
dsh-auto-model-routing English · 简体中文 AUTO 实际效果:「重构并调试」被判为 complex,用 high;随后的「改个名」被判为 simple,降到 low;悬停 AUTO 芯片查看判档,点击切到 MANUAL 不必每条消息都手动调高或调低推理强度。AUTO 下,每个用户回合由 Jev 决策模型(经 OpenRouter)判为 simple / standard / complex / escalated,插件只调整你已选模型的推理强度,不换 provider 和模型。Jev 任何失败都会让 AUTO 自动停用,芯片上显示原因。 安装:DSH 0.2.0-rc.2,Node.js >=22.19。 dsh plugin --profile web add dsh-auto-model-routing 或从源码安装(出现提示时批准本地构建): dsh plugin --profile web add prgrmrwy/dsh-auto-model-routing 重启 DSH、刷新页面,再到设置 → 自动模型路由配置 OpenRouter key。配套 skill 已包含,提供委派指引,但不强制拦截每次派发。与模型池路由或本地分类器不同,本插件用外部 Jev 判档,始终不换主模型。演示来自隔离 Host,使用本地模拟的 Jev 和模型响应。 在 ohmydsh 中只需启用 local auto-model-routing 条目并运行 dsh build,不再单独启用 skill 条目。 使用 | 位置 | 操作 | | AUTO / MANUAL 芯片(模型选择器左侧) | 点击切换;悬停查看本回合 effort、最近一次 Jev 决策及其分布 | | 判档提示 | 每次判档后在芯片上方显示 3 秒,例如 complex → high · 0.70s | | 回复下方的仪表按钮 | 悬停看判档,点击标注「这轮应该用哪档」 | | 设置 → 自动模型路由 | OpenRouter key、默认模式、强度上限、判档等待上限、提示开关、路由映射(见下图) | 设置 → 自动模型路由:判档服务、会话默认值,以及 Claude / GPT 分页下每档的主会话推理等级与子会话推荐 缺省强度:从各模型的官方推荐起点出发。standard 取起点,simple 降一级,complex 升一级,escalated 升两级;受上限约束(缺省 xhigh),AUTO 永不选 max。路由映射可逐格覆盖:主会话等级作用于同体系所有模型,子会话格为完整的 model + effort。 子会话:route_subagent 工具用同一套判档,返回 provider/model/effort(Claude:Haiku → Sonnet → Opus → Opus;GPT:Luna → Sol → Sol → Sol)。只有根会话为 AUTO 时才判档,否则返回 routed: false。这些路由须在官方子智能体允许列表中,该列表在会话创建时固定。 须知 - 新会话缺省 MANUAL,可在设置中改。 - 失败即关闭:无 key、余额不足、限流、地区受限、超时或响应无效时,会话切到 MANUAL · Jev 停用 并显示原因,点 AUTO 重试。没有本地降级,也不重试。 - MANUAL 只停止调整:会话保持 AUTO 最后设定的 effort。AUTO 也会把它写入官方模型选择,所以新会话会从这个值开始。 - 外发数据:AUTO 下每个用户回合会把你的消息(最多 8000 字符)和上一轮的少量片段发给 OpenRouter / TypeSafe(typesafe/jev-1.13)。外发前先按形态脱敏(密钥、token、URL 凭据、IP),这是尽力而为,不保证去掉所有敏感信息。 - key 经官方 DSH 凭据服务保存,不写进插件配置。启动环境里的 OPENROUTER_API_KEY 优先且只读;要迁到 GUI,先从启动环境删掉它,重启一次,再在设置页保存。 - 文件:设置在 $DSH_HOME/plugins/dsh-auto-model-routing/config.json;每个会话的模式与判档记录在 $DSH_HOME/state/auto-model-routing/。改动在下一次请求生效,无需重启。 架构 auto-model-routing 架构图:芯片与 RPC 端点、agent/pre-step 钩子经 OpenRouter 请求 Jev、agent/request 钩子只改推理强度、route_subagent 工具共用同一判断 agent/pre-step 钩子在每个用户回合的第 1 步判档;随后以 prepend 注册的 agent/request 钩子只改写 reasoningEffort,并同步到官方模型选择。入口 src/index.ts,判档规则 src/rubric.json,强度表 src/effort.ts,界面 src/client/,回归用例 eval/,图源 docs/architecture.json(archify)。 开发验证 npm test npm run typecheck npm run build 测试使用真实 AgentLoop、假 LLM 流和本地回环假 Jev,不访问 OpenRouter。node scripts/label-report.mjs 按规则版本汇总你的档位标注。 规范与设计:当前规范见 openspec/specs/auto-model-routing。归档 change 记录了设计演进:路由(决策 D1–D14)与设置。配套 skill 见 skills/subagent-model-routing。修改钩子前先读 DSH 插件集成陷阱。 移除 运行 dsh plugin --profile web remove dsh-auto-model-routing,重启 DSH 并刷新页面;ohmydsh 则设为 enabled: false 并构建。插件提供的 skill 与工具一并撤销,设置和日志保留。会话保持 AUTO 最后设定的 effort,直到在模型选择器里另选。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
prgrmrwy/dsh-auto-model-routing
按每轮任务难度自动调整推理强度,不换模型
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 415,267已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,414已汉化MCP
71.9
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
破甲一键通z91772524-ai/pojia-next
十五个 AI…
★ 967已汉化DSH
71.6
AI 代理虚拟终端strukto-ai/mirage
Mirage 是给 AI 智能体用的虚拟终端:一层 shell,统管数据、命令行和运行时。Unix…
★ 3,756已汉化DSH
70.8
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 649已汉化DSH
70.7