dsh-model-pin: Pinning DSH New Session Default Model

前言

DeepSeek Harness(DSH)会给「没有显式指定模型」的新会话套用 profile 里的默认 provider 与 model。内置服务 @deepseek-ai/dsh-agent-default-model 在提供默认值的同时,还会把会话内模型选择器或 /model 的切换写回 profile,于是临时换模型也会改掉以后所有新会话的默认。若你希望长期固定某一组模型(例如配合 Codex 桥接器统一跑同一模型),又仍需要在单条会话里临时对比别的模型,就需要把「保存默认」和「当前会话生效」拆开。下面介绍社区插件 dsh-model-pin(维护者 SeyanaA,分类:模型推理)如何做到这一点。

这是什么

dsh-model-pin 是面向 DeepSeek Harness Desktop 的 Cordis / DSH profile bundle 插件(当前版本 0.2.0,MIT 许可证)。它替换总线上的 agentDefaultModel 服务,并把 saveSelection() 变成空操作:新建会话始终使用你在配置里固定的供应商、模型与可选推理强度;会话内模型选择器和 /model 仍可用,只影响当前会话,不会再改写默认值。README 写明其主要用途是与 Codex-to-DSH-Bridge 配合——桥接器在 DSH 里创建会话,本插件保证新会话默认模型与桥接器期望的一组一致,避免桥接过程中被别的操作改掉默认。

目录页:skillhub.cn/plugins/SeyanaA/dsh-model-pin
源码与文档:github.com/SeyanaA/dsh-model-pin

核心功能

资料中可核对的能力如下。

能力 说明
固定新会话默认 新对话使用 设置 → 模型固定 或 profile 里保存的 provider / model
固定推理强度 可选 reasoningEffort(如 max);留空则跟随模型自身默认
保留会话内切换 选择器与 /model 只作用于当前会话
不改写默认 会话内切换不再写入 profile,不会被下次新会话继承
可视化配置 设置页读取实时模型目录,下拉选择后保存即生效
配置即数据 固定值在 profile 的 cordis.patch.yml 里 dsh-model-pin 行的 config,可手工编辑
新模型提醒 按 modelCheckInterval 检查已配置 provider 是否有目录外的新模型;只提醒,不自动改配置
热更新 配置字段为 volatile,保存后新会话立即用新值,无需重启 DSH
可回滚 卸载插件后恢复系统自带的默认模型行为

插件为纯 JavaScript(ESM),无第三方依赖;除按周期访问已配置的 provider 端点外,不读取会话内容、也不发起其它网络请求。

环境要求

安装前请对照 README 中的约束:

  • DSH Desktop:>= 0.2.0-rc.3 且 < 0.3.0(engines.dsh 已限制上界;验证环境示例为 macOS 上 DSH Desktop 0.2.1-rc.5);
  • Node.js:>= 22(使用 DSH 自带运行时即可,无需在插件目录 npm install);
  • peerDependencies:@deepseek-ai/cordis、@deepseek-ai/schemastery 由 DSH 宿主提供。

本插件不发布到 npm,需通过本地目录以 link: 依赖注册到 profile;注册后须保留插件目录,不要删除或移动。

安装与启用

「注册」指在 profile 的 package.json 中加入 dsh-model-pin 依赖并在 dsh.profile.bundles 中登记 bundle;插件的 patch 会禁用内置 agent-default-model 并由本插件提供 agentDefaultModel 服务。资料给出三种获取目录的方式;下面以不依赖 git clone 的路径说明推荐流程。

获取插件目录

用浏览器下载 GitHub 仓库 的 ZIP 或 Release 源码包,解压到固定位置,例如:

~/.dsh/local-plugins/dsh-model-pin

后续注册均使用该目录的绝对路径。

方式一:让 DSH Agent 注册(推荐)

  1. 确认插件目录已在上述固定位置。
  2. 在 DeepSeek Harness 中新建对话,对 Agent 说明(路径换成你的绝对路径):
   把 ~/.dsh/local-plugins/dsh-model-pin 作为本地插件注册到当前 profile。

Agent 会通过 plugin_manager 的 install_bundle 完成依赖链接与 bundle 注册。

  1. 完全退出并重新打开 DeepSeek Harness。
  2. 打开 设置 → 模型固定,确认或修改固定值后点 保存。

方式二:手动注册

适合批量部署或不想让 Agent 代操作的情况。

  1. 编辑 profile 清单(Desktop 示例路径):
   ~/.dsh/profiles/desktop/package.json

在 dependencies 中增加(路径改为本机绝对路径):

   {
     "dependencies": {
       "dsh-model-pin": "link:/Users/你的用户名/.dsh/local-plugins/dsh-model-pin"
     },
     "dsh": {
       "profile": {
         "bundles": [
           "dsh-model-pin"
         ]
       }
     }
   }
  1. 在 profile 目录安装依赖:
   cd ~/.dsh/profiles/desktop
   pnpm install

若无全局 pnpm,可使用 DSH 应用内自带的 pnpm(macOS 路径示例,版本以本机为准):

   node "/Applications/DeepSeek Harness.app/Contents/Resources/runtime/primary-runtime/dependencies/pnpm/bin/pnpm.cjs" install
  1. 完全退出并重新打开 DSH,再到 设置 → 模型固定 确认配置。

注册成功的标志

  • 设置 导航中出现 模型固定,含「当前固定」「模型检索周期」等卡片;
  • plugin_manager 的 list_plugins 中 dsh-model-pin 为 enabled: true 且 fiberPhase: active,内置 agent-default-model 为 enabled: false;
  • 新开对话时,模型选择器默认显示你固定的那组模型。

首次注册后,种子配置(可在设置页修改)为:

字段 种子值
provider opencode-go
model deepseek-v4.1-flash
reasoningEffort max
modelCheckInterval 7d(可改为「手动」)

典型用法

日常固定默认模型

  1. 打开 设置 → 模型固定,在「默认对话模型」中选择 供应商 / 模型 / 推理强度,点 保存。
  2. 新建会话:默认即为你固定的一组;在会话内用选择器或 /model 临时换模型,只影响当前会话。
  3. 需要长期改默认时,只改设置页或 cordis.patch.yml 中的 dsh-model-pin 配置,不要依赖会话内切换来「顺便」改默认。

配置也可直接编辑 profile 内 cordis.patch.yml 里 dsh-model-pin 行的 config,与设置页写入的是同一套字段;字段为 volatile,保存后新会话立即生效。

与 Codex-to-DSH-Bridge 对齐

若使用桥接器,README 建议把固定值设成与桥接器一致的一组。桥接器侧固定 DeepSeek-V41-Flash / MAX,在 DSH 中对应 deepseek-official / deepseek-flash,推理强度 max。桥接器升级若更换模型,同步修改本插件固定值即可。新模型提醒与桥接器任务无关,不会改动桥接器配置。

不装桥接器时,本插件仍可单独用来固定默认模型;不装本插件时桥接器也能工作,只是 DSH 新会话默认可能被会话内切换写回 profile。

新模型提醒

按 modelCheckInterval(默认 7 天)检查你已配置的 provider 端点是否出现模型目录里没有的新模型;仅在侧边栏、官方模型页或模型固定页提醒,不会自动修改任何模型配置。详情与状态文件说明见仓库 README「模型检索周期」一节。

工作原理(简要)

本插件通过 bundle patch 禁用内置 agent-default-model,自行注册 agentDefaultModel:getDefault() 返回固定配置,saveSelection() 为空操作。因此系统仍暴露会话内选择器,但「写回默认」路径被切断。已有会话、子代理与 headless 等行为以 README「已有会话 / 子代理 / headless 行为」为准;完整机制见仓库「工作原理」章节。

适用场景与注意

适合谁

  • 希望新会话始终从固定 provider / model / 推理强度开始,又需要单会话内临时换模型对比;
  • 使用 Codex-to-DSH-Bridge、需要 DSH 默认模型与桥接器一致且不被会话内操作覆盖;
  • 希望配置可版本管理(cordis.patch.yml),并收到 provider 上新模型的被动提醒。

务必注意

  • 插件在 当前 DSH 进程的权限 下运行,会按配置访问 provider 端点做模型目录检查;安装前应阅读 源码 与 LICENSE,确认符合你的环境与合规要求。
  • DSH 0.3.0 及以上不在当前 engines.dsh 支持范围内,跨 minor 升级可能需要插件重新适配。
  • 社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态本身是「一切皆插件」,本插件是社区维护的 profile bundle,不是 DSH 内置组件。
  • 卸载并恢复内置默认模型行为的方式见 README「卸载与回滚」;已知限制见「已知限制」。

结尾

dsh-model-pin 解决的是「新会话默认模型」与「会话内临时切换」混在同一条写回路径上的问题:固定前者,不劫持后者。若你正在 DSH 上跑固定模型策略或 Codex 桥接工作流,可在安装前核对版本与源码,再通过 设置 → 模型固定 或 profile 配置落地。

  • 目录页:https://www.skillhub.cn/plugins/SeyanaA/dsh-model-pin
  • GitHub:https://github.com/SeyanaA/dsh-model-pin
  • 问题反馈:https://github.com/SeyanaA/dsh-model-pin/issues
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye