DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
M

dsh-model-hub

Model Hub

DeepSeek Harness model selector: a dropdown menu grouped first by API channel, then by model family, making it easy to quickly find models among the hundreds offered by relay platforms.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:awawuming/dsh-model-hub#ac3767dbc50fe7a98a84ef5c08afedb78795dd1d
READMECompatibilityVersions

Compatibility and provenance

Model Hub is published as dsh-model-hub and currently resolves to version 0.1.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
10/21/2026

Versions

0.1.0stable
10/21/2026

Related plugins

Loading related plugins…

Latest
0.1.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
10/21/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in models-usage.

Experimental Cot Translation Bundle@deepseek-ai/dsh-experimental-cot-translation-bundleExperimental machine translation of expanded reasoningWhale Widgetdsh-whale-widgetDeepSeek balance whale widget in the bottom-right corner of the DSH Web interface: balance/today’s usage/peak-off-peak pricing, customizable bubble click sequence (text/balance/today/peak-off-peak/image/random phrases and parallel weighted selection), per-line styles and fonts, floating quick editinOur Free Model@ebony-vinyl/dsh-our-free-modelOur Free Model — Install this plugin in dsh to use cutting-edge models including DeepSeek V4.1 Flash and Kimi K3, with no login, registration, or API Key required. The desktop version also offers an EAC co-payment channel; starting with 2.0, it supports ten account channels: LobsterAI, Qoder, TRAE, Usage@linxin666/dsh-usageUsage statistics plugin for the dsh web GUI: per-provider balance and coding-plan quota detection plus a live token usage ledger, with a compact price glance card above the sidebar's Settings row

README

dsh-model-hub

DeepSeek Harness 的模型选择器:先按 API 通道,再按模型家族 两级分组的下拉菜单。

把模型列表从「一长条平铺」变成「通道 → 家族」两层目录:DeepSeek 账号 / DeepSeek 官方 / 自建中转站 / 本地 Ollama 各占一行,进入通道后再按 DeepSeek、OpenAI GPT、Anthropic Claude、Google Gemini、Qwen、Kimi、GLM … 分组。OpenRouter 这类中转站动辄 400+ 个模型时,比原生列表好找一个数量级。

按 API 通道分组

为什么需要它

原生选择器是「provider 平铺 + 模型平铺」:同一个 DeepSeek 账号同时接受账号池与官方 API 两条通道,混在一起;接一个 OpenRouter key 就会突然多出几百个模型,全部塞在一层列表里。想找一个 Claude,却要在几百行里滚动 —— 这个插件只解决这一件事。

功能

  • 输入框右侧的下拉按钮:显示「当前通道 / 当前模型」,点开即用,与原生模型控件并存、共享同一份会话模型状态。
  • 两级分类
    1. 根面板 = API 通道,带类型标签(账号 / 官方 / 中转站 / 本地 / 自定义)与模型数量,当前通道打勾;
    2. 通道面板 = 该通道的模型按家族分组,组头吸顶;
    3. 「全部模型(按类别)」= 跨所有通道按家族聚合,行尾标出所属通道,适合「我只想随便找个 Claude」。
  • 搜索:根面板按通道名 + 模型名过滤并直接出模型;通道面板按模型名子串匹配(忽略大小写与 - / _ / . 分隔符)。
  • 选择即生效:点击模型行提交到会话(selectModel),原生控件同步更新;点当前模型只是关掉菜单。
  • 失败可见:会话被占用(session/writer-held)等错误以中文提示留在菜单底部,不会静默丢点。
  • 无障碍 / 交互:role=menu、role=menuitemradio、aria-expanded、aria-checked;点击外部或 Esc 关闭;菜单优先向上展开并夹在视口内。
  • 零依赖:只用平台基座提供的 react / react-dom,样式自动注入(style[data-plugin-css=dsh-model-hub]),不碰官方组件内部 API。

截图

输入框右侧按钮通道列表通道内的家族分组
triggerchannelsfamilies
家族分组滚动全部模型按类别切换后
scrollallselected

安装

方式一:本地 link(桌面端 profile,推荐)

  1. 克隆本仓库到任意位置,例如 D:\开源文件\dsh-model-hub:

    git clone https://github.com/awawuming/dsh-model-hub.git D:\开源文件\dsh-model-hub
    
  2. 建一个 junction 指向它(Windows 不需要管理员权限):

    cmd /c mklink /J "%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-model-hub" "D:\开源文件\dsh-model-hub"
    
  3. 在 %USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml 末尾追加:

    - insert:
        - id: model-hub
          name: dsh-model-hub
    
  4. 桌面端会热加载 profile 配置(dsh-hmr),浏览器页面按 Ctrl+R 刷新一次,输入框右侧就会出现按钮。

方式二:插件管理器

DSH 的「插件」页支持从本地路径 / git 地址安装插件包;安装后同样会在 profile 的配置层插入 id: model-hub 这一行,效果与方式一一致。

卸载

删掉 junction 与 cordis.patch.yml 里那三行,刷新页面即可。

使用

点输入框右侧的「通道 / 模型」按钮:

  1. 根面板选通道(顶部搜索可直接搜模型名,跨通道命中);
  2. 进入通道后按家族浏览,或继续输入关键字过滤;
  3. 点一行 → 菜单关闭,当前会话模型切换,原生控件同步;
  4. 「全部模型(按类别)」适合不知道模型在哪个通道、只认家族的时候。

工作原理(写 DSH 客户端插件可参考)

插件是标准的 DSH 客户端 bundle:cordis.patch.yml 插入一条 Loader 记录,宿主把 lib/client.js 以 window.__ModuleLoader__.load(...) 形式加载进 Web 壳。真正踩过的坑都在这段契约里:

// 1) 必须显式声明服务依赖:第三方插件拿到的是受保护 ctx,
//    未声明的服务访问会抛 cannot get property "remote.session" without inject
export const inject = ['slots', 'modelDirectories', 'sessions', 'remote', 'remote.session'];

export function apply(ctx) {
  const slots = ctx.slots;
  const resolver = ctx.modelDirectories;

  // 2) slots.inject 的注册器必须是 generator(yield 出登记项):
  //    槽位由父级登记项的 children 表声明,generator 才能被槽服务在声明变更时恢复重跑;
  //    普通函数返回登记项会静默不渲染、也不报错。
  slots.inject('conversation.input.right', function* () {
    yield slots.register({
      name: 'conversation.input.right',
      id: 'model-hub',
      order: 60,
      label: () => '按 API 通道选择模型',
      inject: (sessionId) => ({ resolver, sessionId }), // 会话作用域插槽靠 inject 拿 sessionId
    }, ModelHubControl);
  });
}

模型数据来自 ctx.modelDirectories.directoryFor(sessionId):它不是 store,而是持有 directory.store(subscribe / getSnapshot 的快照 store)以及 directory.load() / directory.select({ provider, model })。load() 可能 reject、select() 可能抛错,两处都必须兜住,否则整个格子渲染成空。

分类规则

分类器是纯函数,构建时内联进 lib/client.js:

  • classifyChannel(provider) -> { key, label, short, kind, accent }
    • deepseek-account → DeepSeek 账号(账号);deepseek-official → DeepSeek 官方(官方);
    • openrouter / 名称含 relay、gateway、oneapi / 非官方 baseURL → 中转站;
    • 127.0.0.1 / localhost / :11434 / ollama → 本地;
    • 其余按 displayName 原样展示,类型记为自定义。
  • classifyModel(channel, model) -> { family, vendor, label }
    • 先看 OpenRouter 风格的 vendor/model 前缀(openai/gpt-5、anthropic/claude-sonnet-4、qwen/qwen3-235b-a22b、z-ai/glm-4.6…);
    • 再按模型 id / 名称里的关键字判断(gpt、claude、gemini、qwen、kimi、llama、mistral、grok、glm、command-r…);
    • 最后按通道兜底:DeepSeek 通道下的未知模型归 DeepSeek,绝不跨通道瞎猜;认不出的宁可 other。
  • 家族顺序:DeepSeek → OpenAI GPT → Anthropic Claude → Google Gemini → Qwen → Meta Llama → Mistral → Moonshot Kimi → xAI Grok → 智谱 GLM → Cohere → MiniMax → NVIDIA → Microsoft → Amazon → AI21 → Perplexity → 百度 → 字节豆包 → 其他。
  • 已处理的中转站 id 坑:~openai/… 变体前缀、accounts/ 前缀、nvidia/amazon/azure/@cf/together 这类平台段落、Bedrock 点号 id(meta.llama3-1-70b-instruct-v1:0、us.anthropic.claude-*)、z-ai / zai-org / x-ai 等别名。

目录结构

dsh-model-hub/
├─ package.json            # dsh.client.platform=web + dsh.bundle.patch
├─ entry.js                # 宿主半侧:空实现(本插件只做 UI)
├─ cordis.patch.yml        # bundle 层:insert id=model-hub
├─ lib/client.js           # 浏览器半侧(构建产物,已提交,安装时不需要构建)
├─ src/client.main.js      # 浏览器半侧源码(手写 ModuleLoader bundle,含 @MH_CLASSIFY@ 标记)
├─ src/classify.mjs        # 分类器(单一事实来源)
├─ src/classify.inline.js  # 构建生成:去掉 export 前缀的版本(供单测比对)
├─ src/classify.test.mjs   # 分类器单测,100+ 真实模型 id
├─ scripts/build.mjs       # 构建:内联分类器 + 语法校验 → lib/client.js
└─ docs/                   # 截图

开发

npm run build   # src/classify.mjs + src/client.main.js -> lib/client.js
npm test        # 分类器单测(node src/classify.test.mjs)

改分类规则:编辑 src/classify.mjs → npm test → npm run build → 刷新页面(HMR 按文件 mtime 重新加载客户端 bundle,无需重启桌面端)。

兼容性

  • 平台:DSH Web / 桌面端(dsh.client.platform = web);
  • 开发与验证版本:DeepSeek Harness 0.2.1-rc.2;
  • 依赖服务:slots、modelDirectories(模型选择 UI 自带),无需额外安装。

已知限制

  • 不接管原生的单槽模型控件(conversation.input.model),而是新增一个并列按钮:接管单槽会连带失去原生的推理等级(High 等)交互;
  • 菜单里不提供推理等级切换,切完模型可在原生控件里调;
  • 分类是启发式的,冷门模型可能落到「其他」,欢迎提 PR 补关键字。

License

MIT © 2026 awawuming