SnowAmberX/dsh-role-router ↗★ 0
@SnowAmberX/dsh-role-router
Route DeepSeek Harness agent requests by role: planner model in plan mode, default model otherwise, subagent model for subagents.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:SnowAmberX/dsh-role-router说明文档
阅读完整 README ↗@SnowAmberX/dsh-role-router
DeepSeek Harness 多角色模型路由插件:按 agent 角色自动切换模型。
路由语义
每次模型请求按角色路由,监听器注册在根上下文(同时覆盖主代理与所有进程内子代理):
| 角色 | 请求范围 | 模型来源 |
|---|---|---|
default | 默认模式下的主代理请求 | 官方会话级模型选择(composer 模型席位 / /model / agent-default-model 设置)。请求原样放行,不做任何改写——官方下拉切到什么模型,默认模式就用什么模型 |
planner | 计划模式(plan mode)下的主代理请求 | 插件配置(设置卡片 → role-router 设置命名空间,或 cordis.yml 的 planner 项);未配置时放行(跟随会话默认) |
subagent | 所有进程内子代理请求(任意嵌套深度) | 插件配置(subagent 项);未配置时放行 |
切换模型时剥离继承的 adapter-owned reasoningEffort(目标模型可能不支持原模型的推理档位;prepareCall 会拒绝未受支持的显式 effort)。default 角色从不改写,因此其 effort 恒保留。
计划模式状态从会话日志的 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自动刷新)。默认模型字段直接编辑官方agent-default-model设置(字段级写入,reasoningEffort不受影响)——配置的默认模型就是新建会话的默认选择。planner/subagent字段写入role-router设置命名空间,保存后下一请求即生效(无需重启)。
- 会话输入框旁(composer):胶囊摘要显示
默认模型: · planner:。官方模型席位(下拉选择)与/model命令保持原样。
配置
cordis.yml(composition 层)
- id: model-router
name: '@SnowAmberX/dsh-role-router'
config:
default: # 必填;仅作为 settings 服务缺失时的兜底
provider: deepseek-official
model: deepseek-v4-flash
planner: # 可选
provider: deepseek-official
model: deepseek-v4-pro
subagent: # 可选
provider: deepseek-official
model: deepseek-v4-flash
未知键、空白 provider/model 在加载期直接报错(fail loud)。default 必填(schema 兼容),但运行时 角色的实际值来自官方 agent-default-model 选择。