Skills Plugins MCP Prompt Model 导航 博客 资讯 我的中心
模型与提供方 #deepseek#deepseek-harness#dsh#dsh-plugin#anthropic-api#deepseek-harness-plugin

dsh-llm-hub

给 DSH 模型页补上官方适配器缺的那半:网关可达性探测、模型目录拉取并勾选写回、余额/配额常驻、协议与接入地址可见。零运行时依赖,不改动 DSH 安装。

webkubor @webkubor ⬇ 1 ★ 3 main

安装

dsh plugin --profile web add github:webkubor/dsh-llm-hub
下载安装清单

需要可复现安装时,可在仓库后追加 #commit 固定提交。

给 DSH 模型页补上官方适配器缺的那半:网关可达性探测、模型目录拉取并勾选写回、余额/配额常驻、协议与接入地址可见。零运行时依赖,不改动 DSH 安装。

该插件未提供要点说明,请参考仓库 README。

deepseekdeepseek-harnessdshdsh-pluginanthropic-apideepseek-harness-plugin
  1. 安装并启动 DeepSeek Harness:npx @deepseek-ai/dsh web
  2. 在终端执行上面的安装命令(CLI 会解析插件并核验来源)
  3. 用 dsh plugins list 确认已安装,必要时重启 Harness 生效

插件以当前 dsh 进程的权限运行,安装时可能执行代码。请先通读仓库源码与许可证,确认无破坏性命令与越权访问;本站只做索引,不对第三方插件安全性作担保。

代码仓库github.com/webkubor/dsh-llm-hub
许可证MIT
主要语言main
下载量1
GitHub 星标3
最近推送2026-09-15
收录日期2026-09-19
分类模型与提供方

事实信息来自公开插件目录快照(2026-10-01),介绍文案由本站再加工。

以下为插件仓库 README 全文(原始内容,由公开目录抓取整理)。

[图片: dsh-llm-hub]

  [图片: npm]

  [图片: zero deps]

  [图片: MIT]

   ·  English · 更新日志

DSH 的模型页上,官方适配器有一半事情没做。这个插件把它补上:

| | 官方适配器 | dsh-llm-hub |
|---|---|---|
| DeepSeek 有哪些模型 | 看不到 | **一键拉取在售列表** |
| 账户还剩多少钱 | 看不到 | **卡片下常驻余额** |
| 网关通不通、多快 | 按钮点了没反应 | **实测延迟与状态** |
| 网关上有多少模型 | 看不到 | **实测 71 个**(手填只有 11) |
| 为什么探测不了 | 无提示 | **写明「没配 baseURL」** |

## 装

```sh
dsh plugin --profile web add dsh-llm-hub
```

再把 `dsh-llm-hub` 加进 `~/.dsh/profiles/web/package.json` 的 `dsh.profile.bundles` 数组,
然后 `~/.dsh/restart.sh`。打开**设置 → 模型**,provider 卡片下方会多出一行。

boot graph 变了必须重启,热载不生效;`cordis.patch.yml` 由 bundle 机制自动 insert。

---

## 它补的是什么

DSH 自己已经具备全部机制,缺的只是"官方适配器没去用它们":

| 能力 | 官方机制 | 官方直连的现状 |
|---|---|---|
| 模型发现 | `llm` 服务的 `registerModelDiscovery(ns, discover)` + Models 页「获取可用模型」 | `@deepseek-ai/dsh-llm-deepseek` **从未注册**(`0.1.2-rc.1` 与 `0.1.5-rc.2` 两版实测 `discover` 均零命中) |
| provider 卡片扩展 | `settings.models.provider-card`(按 `settingsNs` 做 key 分发) | 无注册者 → 该区域不渲染 |
| 账户余额 | DeepSeek `GET /user/balance` | 适配器不暴露 |

**发现注册表每个 settings 命名空间只允许一个注册**(第二次抛 `DUPLICATE_DISCOVERY`),
而 `llm-deepseek` 这个槽是空的 —— 本插件占上即可。官方 `slot-contract.d.ts` 也明确:
那两个扩展位就是给**本仓库之外分发的插件**用的。

## 用法

**模型发现**:设置 → 模型 → **DeepSeek(官方直连)** → **「获取可用模型」**。
点下去会实时 `GET https://api.deepseek.com/models`,列出官方在售模型供勾选加入。

**余额**:同一张 DeepSeek 卡片下方会出现余额行(挂载即查,可手动刷新)。

**pi-ai 旁路卡**:设置 → 模型 → 任一 pi-ai provider(modelgo / minimax / zai-coding-cn …)卡片下方:

- 常驻行:`pi-ai · 显示名 · 已配 N 个模型 · Key ✓/✗`
- **探测网关**:实时 GET 网关目录端点(`/v1/models` 与 `/models` 按 baseURL 形态自动回退),报告可达性、延迟与在售数量
- **modelgo 专属**:**拉取目录**列出网关在售模型(实测 71 个,手填仅 11 个),**复制全部 id** 后可直接粘贴整理
- zai-coding-cn 这类没写 baseURL 的 provider 显示"无法探测"提示,模型仍走手填

![pi-ai 行:协议、接入地址、已配模型数、余额/配额,以及探测与目录拉取](https://img.webkubor.online/oss/dsh-llm-hub/v052/models-piai-cards.png)

![DeepSeek 卡片上的余额行](https://img.webkubor.online/oss/dsh-llm-hub/v051/models-deepseek-balance.png)

## 行为细节

### 连接事实

baseURL 与 apiKey 的解析顺序与适配器自身一致,且**每次调用惰性重读** `llm-deepseek`
设置段 —— 插件 apply 时该段可能尚未注册(启动竞态),而适配器本身也按请求重解析:

| | 解析顺序 |
|---|---|
| baseURL | `request.baseURL` → 设置段 `baseURL` → `$DEEPSEEK_BASE_URL` → `https://api.deepseek.com` |
| apiKey | `request.apiKey`(表单里现填的一次性 key)→ 设置段 `apiKeyEnv` 指定的凭据 → 该环境变量 |

### 余额路由

`GET /api/dsh-llm-hub/balance` → `{ ok, isAvailable, balances: [{ currency, total, granted, toppedUp }] }`

金额**原样保留 DeepSeek 返回的字符串**(上游是字符串,避免浮点误差)。
只接受 `GET`/`HEAD`(否则 405),并拒绝跨站读取(`Sec-Fetch-Site` 非 same-origin/none 时 403)
—— 余额属账户信息,即使服务绑在 loopback 也不该被跨站页面读走。

### pi-ai 旁路路由

官方 `@deepseek-ai/dsh-llm-pi-ai` **自己占用了** `llm-pi-ai` 的 discovery 坑(抢注会
`DUPLICATE_DISCOVERY`),且其 `LISTABLE_PROTOCOLS = {openai-completions, openai-responses}`:

| provider | api | baseURL | 官方发现 | 本插件 |
|---|---|---|---|---|
| minimax | openai-completions | ✓ | **已可用**(无需本插件) | 探测卡 |
| modelgo | anthropic-messages | ✓ | 天然失效(协议不可列) | 探测卡 + 目录拉取/复制 |
| zai-coding-cn | — | ✗ | 不可用(无端点) | 提示手填 |

三条只读路由,全部 `GET`/`HEAD` 限定 + 同源校验(与余额路由同一套纪律),
provider profile 每次调用惰性重读 `llm-pi-ai` 段:

- `GET /api/dsh-llm-hub/pi-ai/status?provider=` → `{ ok, displayName, api, baseURL, apiKeyEnv, keyConfigured, modelCount }`
- `GET /api/dsh-llm-hub/pi-ai/probe?provider=` → `{ ok, reachable, latencyMs, remoteCount?, sample?, code?, error? }`
- `GET /api/dsh-llm-hub/pi-ai/catalog?provider=` → `{ ok, latencyMs, models: [{ id, name?, contextWindow?, maxTokens? }] }`

密钥解析与官方一致:凭据服务(`apiKeyEnv` 引用)→ 进程环境变量。

### 前端挂载点

`settings.models.provider-card`,`key = 'llm-deepseek'`。owner props 的
`keyConfigured` 决定是否发起查询:未配置密钥时显示提示而不请求。

## 已知限制

**发现候选承载不了 `inputModalities`。** llm 服务只保留
`id`/`name`/`contextWindow`/`maxTokens` 四个字段。所以通过按钮加入的 `deepseek-flash`
会落成**纯文本**条目,而它实际支持图像输入。加入后请手动补:

```yaml
llm-deepseek:
  models:
    - id: deepseek-flash
      inputModalities: [ text, image ]
```

这是 harness 发现契约本身的限制(官方 pi-ai 那条路同样如此),插件层无法修正。

## 开发

```sh
npm run check     # 两半语法
npm run deploy    # 同步到 web profile
```

- **host 半** `lib/index.js`:ESM(cordis loader 按 ESM 读)。
- **client 半** `lib/client.js`:**源码即产物**,classic script(无顶层 import/export),
  经 `window.__ModuleLoader__.load({ id, factory })` 注册。`id` **必须与 package.json 的
  `name` 完全一致**,否则 DSH 拒绝注册。React 由 `factory(require)` 提供,不打包进产物。
  当前体量无需构建步骤;若将来拆多文件,再加 esbuild(`format: 'iife'`,React 等标 external)。

## 同一台 DSH 上的另一半

这个插件管模型页**用**起来顺不顺手;**看**起来顺不顺眼是另一件事 ——
[Bloom](https://github.com/webkubor/dsh-bloom-theme)(`@kubor/dsh-bloom-theme`)是同作者的
DSH 主题:10 套诗词命名的莫兰迪配色、磨砂玻璃面板、顶栏一键切换,20 组配色实测全部达 WCAG AA。

## License

MIT

数据来源:公开的 DeepSeek Harness 插件目录与各插件 GitHub 仓库。本站为独立第三方目录,与 DeepSeek、幻方(High-Flyer)及插件作者均无隶属或背书关系。

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。