DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-freeroute

Freeroute

DeepSeek Harness (dsh) 的免费层模型聚合:在一组免费配额上游之上注册 freeroute 提供商(内置 OpenCode Zen / B.AI / OpenRouter / SenseNova,另支持远程目录和自定义网关),此前提供透明故障转移

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:dushaobindoudou/dsh-freeroute#7cd996c5a430373929558f126e5e52f51b3b3244
README兼容性版本

兼容性与来源证明

Freeroute 以 dsh-freeroute 发布,当前版本为 0.10.3。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/11/4

版本

0.10.3stable
2026/10/22
0.10.2stable
2026/10/21
0.10.1stable
2026/10/21
查看其余 30 个版本收起版本
0.10.0stable
2026/10/21
0.9.1stable
2026/10/21
0.9.0stable
2026/10/21
0.8.24stable
2026/10/10
0.8.23stable
2026/9/30
0.8.19stable
2026/9/18
0.8.18stable
2026/9/17
0.8.17stable
2026/9/16
0.8.16stable
2026/9/11
0.8.15stable
2026/9/11
0.8.14stable
2026/9/11
0.8.13stable
2026/9/11
0.8.12stable
2026/9/11
0.8.11stable
2026/9/11
0.8.10stable
2026/9/11
0.8.9stable
2026/9/11
0.8.8stable
2026/9/11
0.8.5stable
2026/9/9

相关插件

正在加载相关插件…

最新版
0.10.3
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 17
周下载
659
最近提交
2026/10/22
查看源码 ↗项目主页 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
0.8.4stable
2026/8/27
0.8.3stable
2026/8/27
0.8.2stable
2026/8/26
0.8.1stable
2026/8/26
0.7.4stable
2026/8/26
0.8.0stable
2026/8/26
0.7.3stable
2026/8/26
0.7.2stable
2026/8/26
0.7.1stable
2026/8/25
0.7.0stable
2026/8/25
0.6.0stable
2026/8/25
0.1.0stable
2026/8/21

相关插件

继续浏览 models-usage 分类下经过校验的插件。

Connect Workbuddydsh-connect-workbuddy把本机登录的 WorkBuddy 模型(国内版与国际版)接入 DeepSeek Harness:每次刷新按上游目录自动读取每个模型的积分倍率,支持逐模型图片输入开关、多账号切换与账号池自动换号,并提供每日签到、卡片与输入框里的胶囊积分读数等只读积分概览。Cost Meterdsh-cost-meterDeepSeek Harness 会话费用统计插件:本会话成本、当日费用、历史记录与官方价格同步,支持多厂商多模型价格计费(内置 170+ 模型 ID 价格目录与自动匹配)、主流 Coding Plan 订阅额度查询与显示(16 家,含 WorkBuddy 官方积分、OpenDesign 工作区查询、含小米 MiMo Token Plan 控制台 Cookie 查询、SCNet Token Plan 本地 Credits 计量与火山方舟 Volcano Ark Coding Plan AK/SK 签名查询Codex Subscriptiondsh-codex-subscription在 DeepSeek Harness 中通过 OAuth 使用 ChatGPT 和 Codex 订阅,支持配额、安全重置、网络搜索、图像和快速模式,并可通过 ChatGPT 移动应用(Beta)控制 DSHXdpooldsh-xdpool将你拥有的所有免费额度汇聚为一个 DSH 模型池:合并所有本地登录的 WorkBuddy 账户并自动故障转移,通过二维码/网页登录 13 个供应商,汇总 76 个供应商的免费层额度,此外还提供用量仪表盘、模型路由和本地 OpenAI 兼容网关

README

dsh-freeroute

English | 简体中文

Free-tier model aggregation for the DeepSeek Harness (dsh): registers a freeroute model provider backed by a pool of free-quota upstreams (OpenCode Zen / B.AI / OpenRouter / SenseNova built in, plus remote catalogs and custom gateways; other vendors join via the remote catalog). Configure any one API key and you are running; when an upstream rate-limits, dies, or loses its key, requests fail over to the next one before the first token reaches your session. A local OpenAI-compatible endpoint is included.

Free here means providers' legitimate free tiers, with keys you register yourself. This is not a shared-account pool and does not bypass paid APIs.

Key management

  • Multi-key rotation — free quotas are per-account, so each upstream accepts up to 8 keys (separated by newlines/commas in the field, or KEY_2…KEY_8 env vars). AUTH / rate-limit failures cool down that single key and rotate to the next one before any upstream is penalized. A working key stays in use until it fails (same account across turns, so provider-side prompt caches keep hitting); the key rotated to then sticks the same way. 403s that gate a single model ("only available on…", region / plan limits) are model-level: no key rotation, no upstream cooldown — that model is just skipped for 30 minutes.
  • Privacy by default — the key field shows a read-only •••••• mask until you click 显示 (show), which opens the editor prefilled with the full key ring (one key per line) ready to edit; saving returns straight to the masked state. Keys live only in the credentials service, never in plaintext config.
  • Failure visibility — when a key is detected as dead mid-rotation, the panel warns 「第 N 把 Key 失效」 (which key failed and why), so a dying account is obvious without digging through logs.

How it works

  1. Adapter registration — llm.registerAdapter(['freeroute'], adapter) exposes freeroute/auto (automatic failover) and freeroute/<upstream>/<model> (pinned model) in the model picker.
  2. Translation — dsh internal messages ⇄ OpenAI Chat Completions SSE, with reasoning, tool_calls, and usage passed through. Keys live only in the credentials service, never in plaintext config.
  3. Health & failover — failures cool down by class (auth/config 10 min, rate limit 60 s, others exponential backoff capped at 10 min). auto ranks candidates in four layers: the anchor model (the one shared by the most upstreams; declared quality only breaks ties) on every vendor that fits the current context, largest window first → other models whose window is no smaller than the chain head → other models that fit the current context → everything else (sunk, never dropped). Windows are judged per vendor, not per model, since the same model ships with very different windows on different gateways. A pinned single model degrades to the auto chain when all of its providers fail (or sit in cooldown) instead of aborting the turn — picking one model is a preference, not exclusivity. An upstream that emits no token within 90 s (queued, or only sending SSE keep-alives) also fails over (the last candidate gets 600 s), and slow-to-first-token providers sink to the end of their layer. Once tokens flow, a stream is only cut after 120 s with no new content. Tune with FREEROUTE_FIRST_TOKEN_SECONDS (0 disables) and FREEROUTE_CONTENT_IDLE_SECONDS. Keys rotate individually on AUTH / rate-limit, and a per-key failure is surfaced in the panel.
  4. Three-layer config — builtin catalog → remote catalog (JSON hosted on Cloudflare Pages/R2 for ship-free updates; native format or models.dev api.json, zero-cost models auto-filtered) → user patch persisted under the free-proxy settings namespace.
  5. Local endpoint — http://127.0.0.1:<port>/freeroute/v1 is an
  6. Global proxy (off by default): set one http://127.0.0.1:7890-style proxy under Settings → Models → Free → Advanced; every upstream without its own proxy (chat requests and model probing) goes through it. Per-upstream custom.proxy and catalog-declared proxy win over the global one; catalog sync always connects directly. One entry covers Clash/v2ray users — no per-upstream configuration needed. OpenAI-compatible base URL (chat/completions with streaming, tools and usage; models; health). No API key required, CORS enabled — any other agent or client (CLI or browser) can ride the same free pool.

Settings panel

dsh's built-in Settings -> 模型 (models) page is reversibly wrapped: the title and intro stay in place, and a 默认 | 免费 tab bar sits right below the intro (structure mirrors the Settings -> 插件 page: underline tabs, ARIA roles, arrow-key navigation, visited panels stay mounted):

  • 默认 keeps the stock model settings untouched;
  • 免费 hosts the full freeroute panel in the same shape as the Plugins settings page — one expandable card per upstream (header: name, status summary, priority controls, enable toggle; click to expand keys / connectivity test / model probe / signup links), with Models and Advanced (global proxy + remote catalog) as cards of the same form. Non-standard gateways are supported in the config file via custom.chatPath (override /chat/completions) and custom.requestExtra (extra scalar body fields; model: null omits the model field — e.g. GMI's /autoroute).

There is no sibling freeroute item in the settings nav (a standalone section appears only if the host ships no wrappable models entry). The /freeproxy command prints a text status.

Per-message model attribution

In auto mode the UI only ever shows "⚡ Auto", so you cannot tell who actually answered. Every reply now carries a ⚡ <served model> chip to the right of its timestamp (after 13:17); hovering shows the upstream name and the requested model (auto). It reuses the action row's existing hover reveal, so no new interaction is introduced. After a failover you can see at a glance which upstream and model served that message.

Attribution lives in host memory only — it is not written to the session log (dsh's persistence read path rejects unregistered event types), so history stops showing chips after a dsh web restart; new messages are unaffected.

Let other agents / tools use the pool (always auto)

While dsh web runs, the plugin serves an OpenAI-compatible endpoint on the same port — any agent or tool that accepts a custom base URL can reuse the free pool:

  • Base URL: http://127.0.0.1:<dsh web port>/freeroute/v1 (default port 3080; the Free panel footer shows the exact URL)
  • API key: none needed (loopback only). Tools that demand a non-empty key accept a placeholder like sk-freeroute
  • Model: set auto, or omit it entirely (auto is the default) — picks enabled free upstreams by priority, fails over across the whole chain on errors / rate limits / pre-first-token drops, and degrades single-model requests to chain fallback automatically
  • Capabilities: stream, tools (function calling), stop, temperature, max_tokens pass through; CORS is open for browser extensions
  • Health: GET /freeroute/health; model list: GET /freeroute/v1/models (auto is the first entry)

Minimal curl (no model field = auto):

curl http://127.0.0.1:3080/freeroute/v1/chat/completions \
  -H 'content-type: application/json' \
  -d '{"messages":[{"role":"user","content":"hello"}]}'

Notes: the endpoint lives as long as the dsh web process (same machine); configure at least one upstream key in the Free panel so the auto chain has a usable node.

Install

dsh plugin --profile web add dsh-freeroute

Requirements: Node.js ≥ 18; the host provides llm / timer; settings / credentials / subprocess / webServer / commands / agentDefaultModel are optional and degrade gracefully when absent.

Development

Layered sources (see src/README.md):

  • src/ is the single hand-edited authority, split into src/host/ (20 fragments: constants → catalog parse → context/state → keys/probe/models/ health → transport/router/http → takeover/rpc/commands/endpoint/boot) and src/client/ (10 fragments: styles/context → panel state/header/upstreams/ advanced/models → models page/integration/plugin tail).
  • npm run build:dynamic assembles src/** into freeroute-dynamic/ {host,client}.js (single-function-body form for the dynamic plugin loader, with the version injected from package.json).
  • freeroute-dynamic/ carries a 137-assertion integration suite: node freeroute-dynamic/test/integration.mjs.
  • npm run build:static mechanically generates lib/ from those assembled sources (the dynamic RPC layer is swapped for a Typert Remote + Connection carrier) — never hand-edit just one side; npm run build:static runs both.
  • npm run lint && npm test — lint plus a smoke test on a real cordis root.
  • Module-instance rule: @deepseek-ai/dsh-typert-protocol must resolve to the SAME physical copy the dsh host uses. The host gateway reads Remote method markers from a WeakMap private to ITS copy of the module; a private pnpm copy in the plugin workspace registers into a different WeakMap, so /api/freeroute/* silently registers zero routes (client sees HTTP 404, no error anywhere). Since v0.7.3 lib/index.js resolves the host's own copy at load time (running dsh CLI entry → global npm layout → fallback), so no postinstall, symlink, or host version is required. If you ever see transport failure for /api/freeroute/state: HTTP 404 on an older version, upgrading to ≥0.7.3 fixes it permanently.

Honest limits

This plugin aggregates free tiers you register yourself. If you need multi-tenant billing or channel management, run uni-api, new-api, or LiteLLM yourself and mount it as a custom upstream here — the two complement each other instead of reinventing.

Web panel (optional)

lib/client.js registers a "Free Models" settings section in dsh web with the same ranking and one-click default. dsh's web frontend ships pre-built, so surfacing the panel requires adding this package to the dsh-web-frontend client bundle and rebuilding it. free-models-preview.html mirrors the panel standalone (serve the repo root over HTTP and open it) for iteration without that rebuild.

License

MIT © dushaobindoudou