🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

模型分派 kolawong/dsh-plugin-model-dispatch

DeepSeek Harness
kolawong19 天前有提交已提供中文文档扫描:含敏感能力

为主模型、子代理和规划模式分别指定模型与推理强度

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/13 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add kolawong/dsh-plugin-model-dispatch
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · model
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 19 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 8 处,展示前 8 条)
  • 发起网络请求
    src/client/session-label-store.ts:53
    const response = await fetch(SESSION_LABELS_ROUTE, { credentials: 'same-origin' })
  • 发起网络请求
    src/client/session-overrides-store.ts:81
    const response = await fetch(SESSION_OVERRIDES_ROUTE, {
  • 发起网络请求
    src/client/session-overrides-store.ts:107
    const response = await fetch(SESSION_OVERRIDES_ROUTE, { credentials: 'same-origin' })
  • 读取本地文件
    src/session-overrides.ts:70
    text = await readFile(this.path, 'utf8')
  • 写入本地文件
    src/session-overrides.ts:85
    await mkdir(dirname(this.path), { recursive: true })
  • 写入本地文件
    src/session-overrides.ts:88
    await writeFile(tmp, JSON.stringify(value, null, 2))
  • 写入本地文件
    src/session-overrides.ts:89
    await rename(tmp, this.path)
  • 删除本地文件
    src/session-overrides.ts:91
    await rm(tmp, { force: true }).catch(() => {})
扫描于 2026/11/1(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-api-gateway@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-api-workspace-controller@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-session
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 指定主会话模型
  • 指定子代理模型
  • 指定计划模式模型

DSH 插件:为主会话、子代理和计划模式分别挑选模型与推理强度。

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-model-dispatch 给主模型、子代理和 plan mode 各自指定模型与推理强度 —— 在聊天栏里,一个菜单搞定。 输入框上方的模型菜单:模型行、推理强度滑块,以及聊天栏里的两个 chip DeepSeek Harness 自带主模型的模型选择器。这个插件保留原有控制,再补上它没覆盖的两条路线 —— 委派给子代理时用的模型,以及 plan mode 思考时用的模型 —— 然后把三者放进同一个菜单,用起来和原生控件一样。 | 路线 | 从哪里设置 | 作用范围 | | 主模型 | 聊天栏主 chip · 设置第 1 行 | 当前会话,走 DSH 原生切换 API | | 子代理模型 | 聊天栏子代理 chip · 设置第 2 行 | 本会话中之后启动的子代理 | | 规划模型 | 设置第 3 行 | 仅 plan mode;退出后恢复进入 plan 前的主模型 | 目录 - 功能 - 安装 - 用法 - 聊天栏 - 设置 - Plan mode - 子代理 - 路由规则 - 持久化 - 兼容性 - 开发 - 疑难排查 - 已知限制 - 致谢 - 许可 功能 - 聊天栏里两个 chip,用的是宿主自己的材质。
展开完整文档(README 剩余 1 节)
dsh-plugin-model-dispatch

给主模型、子代理和 plan mode 各自指定模型与推理强度 —— 在聊天栏里,一个菜单搞定。

输入框上方的模型菜单:模型行、推理强度滑块,以及聊天栏里的两个 chip

DeepSeek Harness 自带主模型的模型选择器。这个插件保留原有控制,再补上它没覆盖的两条路线 —— 委派给子代理时用的模型,以及 plan mode 思考时用的模型 —— 然后把三者放进同一个菜单,用起来和原生控件一样。

| 路线 | 从哪里设置 | 作用范围 |
| 主模型 | 聊天栏主 chip · 设置第 1 行 | 当前会话,走 DSH 原生切换 API |
| 子代理模型 | 聊天栏子代理 chip · 设置第 2 行 | 本会话中之后启动的子代理 |
| 规划模型 | 设置第 3 行 | 仅 plan mode;退出后恢复进入 plan 前的主模型 |

目录

- 功能
- 安装
- 用法
- 聊天栏
- 设置
- Plan mode
- 子代理
- 路由规则
- 持久化
- 兼容性
- 开发
- 疑难排查
- 已知限制
- 致谢
- 许可

功能

- 聊天栏里两个 chip,用的是宿主自己的材质。 输入栏带一个主 chip(宿主的模型图标)和一个子代理 chip(分支图标);光看图标就能区分,而 tooltip 和无障碍名称仍保留完整的 Main · model · effort 标签。两个都是无边框的 28px chip,只在悬停时显示底色,和旁边的原生控件一模一样。子代理路线处于继承状态时,它的 chip 显示 Follows main,而不是重复主模型的名字。

聊天栏里的两个 chip

- 所有路线共用一个菜单。 可以搜索模型和服务商,还有服务商分组、收藏、最近使用和推理强度 —— 聊天栏和设置行用的是同一个菜单。它由宿主菜单的材质搭成(半透明模糊卡片、投影阴影、4px 内边距、34px 行高、13px 字号、l2 细线),所以看起来像一方控件,而不是插件浮层。
- 推理强度做成离散滑块。 每个等级一档,最前面再加一档 服务商默认值,让「不指定强度」变成看得见的状态,而不是藏起来的行为。刻度画在滑轨下方(这样不会把已填充的一段切开),当前等级在标题行里标出名字,控件可以拖动,也支持键盘操作。

推理强度滑块

- 即时生效——没有确认行。 选模型、拖滑块、恢复默认,都会立刻写入。拖动滑块时,松手后合并成一次写入;写入按顺序串行执行;写入失败就把这一行回滚,并显示真实错误。菜单保持打开,所以选完模型可以紧接着改强度;按 Esc 或点击菜单外只会关闭菜单,绝不会撤销已经生效的选择。

- 计划模式自动切换。 进入计划模式会切到规划模型;批准计划或执行 /plan off 后,会在发出第一个执行请求之前,恢复进入计划模式前的主模型和强度。审核面板会显示将要恢复哪个模型。

- 按会话覆盖子代理。 在聊天栏里选的子代理会存成该会话的持久覆盖项,绝不改动设置里的默认值;点一下就能恢复设置默认值。

- 目录里的每个模型都能委派。 子代理路由读取宿主的实时模型目录,所以即使 rc.2 记录的是旧的允许列表,显式子模型选择和 list_subagent_models 在已有会话里依然可用。之后新增的模型在下一次委派时就能用;已移除的路由和不支持的强度会提前拒绝。

- 保存前先校验路由。 覆盖项和创建子代理都会通过宿主的 resolveCallConfig 校验具体的 provider/model/effort;组合无效会立刻失败并给出真实原因,而不是等到运行中途才报错。

安装

需要 DeepSeek Harness 0.2.0-rc.2(其他 0.2.x 版本需要做兼容性检查——见兼容性)。

dsh plugin --profile web add git@github.com:kolawong/dsh-plugin-model-dispatch.git

把 web 换成你实际使用的配置档(desktop 等)。然后完全退出并重新打开 DSH:宿主那一半需要重新组合,只刷新页面只会重新加载客户端那一半。

本仓库的 lib/ 里放着预构建好的宿主和客户端 bundle,所以安装不需要本地构建。

手动安装(链接本地检出)

// <DSH_HOME>/profiles/<profile>/package.json
{
"dependencies": { "dsh-plugin-model-dispatch": "link:/path/to/dsh-plugin-model-dispatch" },
"dsh": { "profile": { "bundles": ["…", "dsh-plugin-model-dispatch"] } }
}

创建对应的 node_modules 链接(配置档目录是解析锚点),然后重启 DSH。

用法

聊天栏

输入框右侧、权限和预设控件旁边有两个 chip:

| Chip | 作用 |
| Main(模型图标) | 通过原生 API 切换当前会话的模型。chip 上显示生效的路由,工具提示里显示它的 effort。 |
| Subagent(分支图标) | 为本次会话后续启动的子代理挑选模型,以会话覆盖的形式保存。没有覆盖时显示 Follows main。 |

打开任一 chip 都会看到同一个菜单:搜索、服务商分组、收藏(★,悬停显示,按浏览器记忆)、最近使用、effort 滑块,以及——针对子代理路由——一行 restore to settings default。

深色模式下的同一个菜单

Settings

Web settings → 模型切换 / Model switch 下有三行,每行带一句范围提示:

| 行 | 含义 |
| New-session default model | 写入原生 agent-default-model 条目。在聊天里改模型不会改动它。 |
| Subagent default model | 供任何没有覆盖的会话的子代理使用。 |
| Planning model | 计划模式激活期间使用。 |

计划模式

1. 进入计划模式时,原子地保存会话当前的 provider / model / reasoningEffort,并切换到 planning model。
2. 批准计划(或 /plan off)后,在组装第一个执行请求之前恢复保存的路由。
3. 恢复失败可以重试,绝不会把会话困在 planning model 上;批准面板会写明将要恢复的模型。

子代理

- 带显式模型选项发起的委派会保留这些选项——插件只在原生调用留空的地方补上路由。
- 子代理 chip 和设置默认值只对新启动的子代理生效;正在运行的子代理保持自己的模型。
- 子代理会话本身不参与计划切换,也不参与子代理覆盖。

路由规则

| 决策 | 优先级(从高到低) |
| 子代理模型 | 会话覆盖 → 设置默认值 → 原生父模型继承 → 工具调用里的显式启动选项 |
| 计划模型 | 计划模式激活期间用 planning model → 之后恢复会话路由 |
| 主模型 | 会话选择(原生 API)→ 设置里的新会话默认值 |

默认值和会话彼此独立:设置里的几行存的是新会话默认值,而聊天里的选择和计划切换只影响当前会话。宿主适配器用 AsyncLocalStorage 隔离原生 selectModel 的「save as deployment default」副作用,因此只有那条调用链会被拦截。

持久化

| 数据 | 位置 |
| 设置默认值(子代理默认值、planning model) | DSH profile config(易变字段——可从设置页或配置文件编辑) |
| 新会话主模型默认值 | 原生 agent-default-model 条目 |
| 会话子代理覆盖 | $DSH_HOME/storages/model-switch/session-overrides.json |
| 计划前的主模型(恢复成功后清除) | $DSH_HOME/storages/model-switch/plan-main-models.json |
| 菜单收藏 / 最近使用 | 浏览器 localStorage(按浏览器隔离,不同步) |

兼容性

- 宿主: DSH 0.2.0-rc.2。插件只使用 0.2.x 的扩展接口(易变的 Config + configForms、会话投影、会话模型选择 API、planMode),不改动 DSH 核心,所以上游一键升级始终无痛。
- 更新的宿主需要 ≥1.1.0。 从 1.1.0 起,子代理路由覆盖全部三条原生启动路径 —— start / startContinuable(rc.2)和 startActivation(更新的宿主)。如果宿主只暴露 startActivation,1.0.x 会被静默绕过,退化为直接继承父模型。
- 客户端: 浏览器端以 DSH 客户端 bundle(lib/client.js)形式发布,需要宿主端一并加载;首次安装后只刷新页面不够。

开发

pnpm install
pnpm test # vitest — 69 tests
pnpm build # tsc (host + client projects) + tsdown client bundle

只迭代 UI:

./node_modules/.bin/tsc -p tsconfig.client.json && ./node_modules/.bin/tsdown

测试覆盖:路由合并优先级、会话覆盖的存储与并发写入、计划边界的进入 / 恢复 / 重启 / 拒绝路径、会话选择与默认选择的隔离、路由校验拒绝、客户端保存竞态、陈旧目录适配,以及并发委派隔离。

tsc -p tsconfig.json(宿主项目)按 配置档 解析出的 @deepseek-ai/* peer 做类型检查。如果本包自己的 node_modules 里恰好有这些包的第二份副本,两份副本的品牌类型会不一致,宿主项目就会报不匹配;客户端项目、bundle 构建和测试套件不受影响。

故障排查

| 现象 | 原因 / 修复 |
| 安装后芯片或设置行缺失 | 宿主端没有重新组装 —— 完全退出并重新打开 DSH(刷新页面只会重新加载客户端)。 |
| 子代理始终使用父模型 | 在比 rc.2 更新的宿主上需要 ≥1.1.0(见兼容性);同时确认没有残留只支持 start 的宿主。 |
| 菜单里缺少某个模型 | 服务商加载目录失败 —— 菜单标题会显示目录不完整的警告,服务商响应后模型就会出现。 |
| 保存时报路由无效 | 该组合不在服务商的实时目录里;从它所属的服务商分组中挑选模型再重试。 |
| 改了设置但某个聊天没变 | 符合预期:聊天选择与计划切换按会话生效,设置行只作为新会话的默认值。 |

已知限制

- 与 DSH 0.2.0-rc.2 内部实现紧密耦合(configForms、会话投影、会话控制器、计划模式)—— DSH 升级后请重新跑一遍测试套件。
- 计划边界检测依赖原生 exit_plan_mode 的结果措辞;DSH 改了措辞会延迟恢复(plan/mode 事件是兜底方案)。
- 子代理会话有意不参与方案切换,也不参与子代理覆盖。
- 菜单收藏和最近使用按浏览器保存(localStorage),不属于会话,也不属于配置档。

致谢

- 最初的设计和 0.1.x 实现:lincong1987/dsh-model-switch(MIT)——本插件基于这项工作构建。
- 0.2.x 适配、方案模式切换、会话覆盖、路由校验以及当前 UI,均在本仓库中重写并扩展。

许可证

MIT
预览分享卡片长什么样 ↓kolawong/dsh-plugin-model-dispatch
分享 · DeepSeek Harness Hub
kolawong/dsh-plugin-model-dispatch

为主模型、子代理和规划模式分别指定模型与推理强度

回到顶部