
SnowAmberX/dsh-role-router
dsh-role-router
Role-based model routing plugin for DeepSeek Harness: planner/subagent roles plus a settings card and composer summary
Install
npx @deepseek-ai/dsh plugin --profile web add @snowamberx/dsh-role-routerRestart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/dsh-role-router)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from SnowAmberX/dsh-role-router, cleaned of badges and images.
中文 | English
多角色模型路由插件(dsh-role-router)
还在为计划与执行阶段手动切换模型而烦恼?dsh-role-router 替你自动完成:输入 /plan 进入计划模式,请求即自动路由到配置的 planner 模型;退出计划模式自动切回默认模型——全程无需手动干预。
- 角色路由:
default/planner/subagent三种角色独立配置——配置了强制使用该模型,未配置则跟随官方模型选择器;planner由计划模式(/plan等)自动触发。 - Web UI:设置页「多角色模型路由」卡片提供三个模型下拉框(并可单独指定推理强度),选项与
/model同源(host 实时模型目录,provider 分组,自动刷新);composer 旁附模型摘要胶囊,当前选择一目了然。 - 两级配置:支持 cordis.yml(composition 层)与
role-routersettings 命名空间(用户层,后者优先);保存即生效,无需重启。
预览
路由语义
每次模型请求按角色路由,监听器注册在根上下文(同时覆盖主代理与所有进程内子代理):
| 角色 | 请求范围 | 模型来源 |
|---|---|---|
default | 默认模式下的主代理请求 | 已配置 → 强制使用配置的模型;未配置 → 请求透传,跟随官方逐层选择 |
planner | 计划模式(plan mode)下的主代理请求 | 已配置 → 强制使用配置的模型;未配置 → 请求透传,跟随官方逐层选择 |
subagent | 所有进程内子代理请求(任意嵌套深度) | 已配置 → 强制使用配置的模型;未配置 → 请求透传,跟随官方逐层选择 |
未配置角色的"跟随官方"是完全透传:插件不改动请求,由 harness 官方的每会话模型选择层按既有优先级决定——本次会话内显式切换(composer / /model)> 会话最近一次请求记录 > 全局默认模型(agent-default-model 设置)。因此会话内切换模型对未配置角色在下一个 turn 生效(官方选择层在请求装配时快照当前选择,turn 进行中的切换不改变进行中的 turn),composer 摘要与实际请求保持一致。
切换模型时,若角色未配置显式 reasoningEffort,则剥离继承的 adapter-owned effort(目标模型可能不支持原模型的推理档位;prepareCall 会拒绝未受支持的显式 effort);配置了显式强度则写入并由 prepareCall 校验。透传的请求保留官方层装配的一切,包括推理强度。
计划模式状态从会话日志的 plan/mode 事件折叠(foldPlanMode);ctx.planMode 可见时优先读取(含 pending 意图)。
辅助模型调用(compaction、session-title)不经 agent/request 派发,不受影响;进程外子代理 provider(acp、codex 等)的请求不经过本进程,同样不受影响。
Web UI(client 半区)
插件声明了 dsh.client(platform: web),向 Web GUI 提供两处界面:
- 设置 → 插件配置 →「多角色模型路由」卡片:三个模型下拉框(默认模型 / planner / subagent),选项来自 host 实时模型目录(provider 分组,与
/model同源,llm/adapters-updated自动刷新);每个字段选中模型后还可单独指定推理强度,档位来自该模型在目录中的reasoning.efforts(适配器声明,非硬编码)。- 三个角色字段(默认模型 / planner / subagent)都写入
role-router设置命名空间,保存后下一请求即生效(无需重启);未配置的角色跟随官方模型选择器,配置了则强制使用所选模型。
- 三个角色字段(默认模型 / planner / subagent)都写入
- 会话输入框旁(composer):胶囊摘要显示
默认模型: <配置的 default 或当前会话选择> · planner: <配置的 planner 模型>。官方模型席位(下拉选择)与/model命令保持原样。
配置
cordis.yml(composition 层)
- id: model-router
name: '@snowamberx/dsh-role-router'
config:
default: # 可选;不写键则保持未配置(透传)
provider: deepseek-official
model: deepseek-v4-flash
reasoningEffort: high # 可选;未配置时遵循目标模型默认
planner: # 可选
provider: deepseek-official
model: deepseek-v4-pro
reasoningEffort: max # 可选
subagent: # 可选
provider: deepseek-official
model: deepseek-v4-flash
未知键、空白 provider/model/reasoningEffort 在加载期直接报错(fail loud)。三个角色均为可选:未配置的角色请求透传,跟随官方逐层选择;配置了则强制使用。
settings(用户层)
role-router 命名空间:{ default?, planner?, subagent? },每个角色为 { provider, model, reasoningEffort? }。设置文档值优先于 composition 层。
安装
dsh plugin --profile web add @snowamberx/dsh-role-router
# 本地开发:
dsh plugin --profile web add link:/path/to/this/repo
重启 dsh web 后生效(client-modules 的包元数据在重启时重新扫描)。
标准 DSH 社区插件包
本包是一个标准 DSH 社区插件包(bundle):manifest 声明 dsh.bundle 配置层 + dsh.client web 半区,与官方 打包与安装插件 文档及 packages/client/* 各 client 插件包的约定一致。
…

