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

@apolenkov/dsh-provider-proxy

Provider Proxy

按提供商和模型进行出站代理路由,适用于 DeepSeek Harness

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

npx -y @deepseek-ai/dsh plugin --profile web add @apolenkov/dsh-provider-proxy@0.3.0
README兼容性版本
Proxy routes settings page: provider and Muse Spark model rules, an inline validation error, and a successful save

兼容性与来源证明

Provider Proxy 以 @apolenkov/dsh-provider-proxy 发布,当前版本为 0.3.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/10/30

版本

0.3.0stable
2026/10/30
0.2.7stable
2026/10/23
0.2.4stable
2026/10/23
查看其余 3 个版本收起版本
0.2.2stable
2026/10/23
0.2.0stable
2026/10/22
0.1.0stable
2026/10/22

相关插件

正在加载相关插件…

最新版
0.3.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
124.6 kB
文件数
21
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 1
周下载
0
最近提交
2026/10/30
查看源码 ↗
README Badge

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Experimental Cot Translation Bundle@deepseek-ai/dsh-experimental-cot-translation-bundle扩展推理的实验性机器翻译Our Free Model@ebony-vinyl/dsh-our-free-modelOur Free Model — 在 dsh 里装上这个插件即可,无需登录、注册或填 API Key,就能使用包括 DeepSeek V4.1 Flash、Kimi K3 在内的前沿模型,桌面端另有 EAC 协付渠道;2.0 起接入 LobsterAI、Qoder、TRAE、Cline、Loomy、Raccoon、MiniMax、ZCode、Gemini 十个账号渠道(原有匿名免费通道保留)(登录、账号池、积分领取、本地 OpenAI 网关与局域网转发、数据看板与运行日志),六页毛玻璃界面统一呈现。Usage@linxin666/dsh-usage用于 dsh Web GUI 的使用统计插件:检测各提供商的余额和编程套餐配额,并实时记录令牌使用情况;侧边栏 Settings 行上方显示紧凑的价格概览卡片Client Ui Model Capabilities@linxin666/dsh-client-ui-model-capabilities为自定义 pi-ai 提供商声明每个模型的能力(图像输入和推理力度),可直接在 Models 设置卡片中编辑;写入官方 llm-pi-ai 设置命名空间,不更改 DSH 源代码。

README

dsh-provider-proxy

English · Русский · 中文

dsh-provider-proxy: per-provider and per-model proxy routing

Per-provider and per-model outbound proxy routing for DeepSeek Harness.

DeepSeek Harness applies one proxy policy per process (HTTP_PROXY / HTTPS_PROXY / NO_PROXY / ALL_PROXY). This plugin layers two routing axes on top of it, configurable per provider host and per model ID — from a Plugins settings page, without touching YAML unless you want to.

flowchart LR
    A["ctx.llm.stream<br/>{provider, model}"] --> B["llm/stream waterfall<br/>AsyncLocalStorage per pull"]
    B --> C["adapter → fetch"]
    C --> D["RoutingDispatcher"]
    D -->|model rule| E["direct / proxy / inherit"]
    D -->|host rule| E
    D -->|loopback| F["always direct"]
    D -->|no match| G["process policy<br/>env + NO_PROXY"]
  • Host axis (providers): matches the request URL host — exact, subdomains, optional host:port. Applies to every fetch() in the process (LLM, web search, MCP).
  • Model axis (models): matches the provider/model pair of the model call that issued the request. Exact ids and trailing-* prefixes, with an optional provider pin.
  • Precedence: provider-pinned exact model → bare exact model → provider-pinned prefix → bare prefix → provider host rule → default (inherit or direct).

Install

Prerequisite: a DSH profile with a plugin manager (the Desktop app and dsh web both qualify).

From npm (recommended):

dsh plugin --profile <profile> add @apolenkov/dsh-provider-proxy

From git (a release tag, no registry involved):

dsh plugin --profile <profile> add git+https://github.com/apolenkov/dsh-provider-proxy.git#v0.1.0

From a local checkout:

dsh plugin --profile <profile> add /absolute/path/to/dsh-provider-proxy
# or: link the directory in the profile's package.json and run pnpm install there

Then restart DSH. The bundle inserts the provider-proxy row; routes live in that row's config.

npm note: the package is @apolenkov/dsh-provider-proxy; the unscoped name dsh-provider-proxy belongs to an unrelated package on the public registry, so never pnpm add dsh-provider-proxy.

Configure

In the UI (recommended)

Open Plugins in the sidebar → open the dsh-provider-proxy bundle → Configure. The page shows:

  • Default route (inherit or direct);
  • Provider rules: label, hosts (comma or newline separated), proxy (inherit / direct / custom http(s):// URL);
  • Model rules: model id (exact or trailing *), optional provider pin, proxy.

Edits are staged locally and applied on Save with revision fencing: if someone changed the config meanwhile, the save is refused instead of silently overwriting. Clearing the form is never written; leaving the page drops staged edits.

In YAML

Add or edit the row in the profile’s cordis.patch.yml (HMR applies it live, no restart):

- id: provider-proxy
  name: "dsh-provider-proxy"
  config:
    default: inherit
    providers:
      corp:
        hosts: ["llm.internal.example"]
        proxy: direct
      opencode-go:
        hosts: ["opencode.ai"]
        proxy: "http://127.0.0.1:1301"
    models:
      "muse-spark-1.3-contributor":
        provider: opencode-go
        proxy: "http://127.0.0.1:1301"
      "longcat-*": inherit

An invalid entry refuses the whole configuration (fail-closed): the plugin logs the reason, keeps the previous routes, and never partially applies them.

Injected headers

A rule can add headers to the requests it matches. The token {{opencodeSession}} becomes a fresh OpenCode-shaped session id (ses_…) on every dispatch — useful for anonymous gateways that demand a per-conversation header the model adapter does not send for hand-declared models:

    models:
      "beam-free":
        provider: opencode-go
        proxy: "http://127.0.0.1:1301"
        headers:
          x-opencode-session: "{{opencodeSession}}"

Proxy values

ValueMeaning
inheritUse the launcher’s process proxy policy (env + NO_PROXY).
directConnect to the origin directly, ignoring the process proxy policy.
http(s)://…Route through that proxy (ProxyAgent). SOCKS and PAC are rejected.

The UI additionally refuses proxy URLs with embedded credentials — keep secrets out of the profile patch.

Muse Spark example

Route one model through its own proxy while everything else follows the launcher policy:

- id: provider-proxy
  name: "dsh-provider-proxy"
  config:
    default: inherit
    models:
      "muse-spark-1.3-contributor":
        provider: opencode-go
        proxy: "http://127.0.0.1:1291"

See examples/models-muse-spark.yaml (sanitized: loopback endpoints, no credentials). The same rule can be created in the Plugins page — the walkthrough is captured with assets/scripts/record-proxy-ui.sh into assets/gifs.

Verify it works

The plugin writes its last apply outcome (never secrets) to $DSH_HOME/provider-proxy/state.json:

{
  "appliedAt": "2026-10-22T07:59:22Z",
  "pid": 42120,
  "status": "active",
  "routes": "muse-spark-1.3-contributor→http://127.0.0.1:1301, llm.internal.example→direct, default→inherit"
}

A live rule can be proven by pointing it at a dead proxy (http://127.0.0.1:9) and watching the request fail with ECONNREFUSED 127.0.0.1:9 instead of reaching its target — then restore the real proxy.

Limits

  • WebSocket transports are not guaranteed to pass through the undici dispatcher; use an http/https transport for strict routing.
  • web_fetch pins validated addresses through the launcher's own policy and may bypass these routes; model traffic is covered.
  • Model rules apply only inside llm/stream; web search and MCP use the host axis.
  • A model rule never fires for non-model traffic that happens to hit the same host, and a host rule never overrides localhost / loopback.
  • Proxy URLs with credentials are accepted by the transport but rejected by the UI; prefer credential-free proxy endpoints.

Walkthrough

Proxy routes settings page: provider and Muse Spark model rules, an inline validation error, and a successful save

Recorded in a scratch profile with a loopback proxy: open the bundle’s Configure page, add the Muse Spark model rule, trigger and fix a validation error, save. Individual frames live in assets/screenshots/en/; reproduce or re-record with assets/scripts/record-proxy-ui.sh.

Publishing

Owner-side checklist for the first public release (repository URL, npm scope, market index, hub listing): docs/publishing.md. Automated gates:

pnpm check:release   # strict manifest + secrets + generated market index + tests
pnpm release:market  # writes market/dsh-market.json from package.json + HEAD

Development

pnpm install --ignore-scripts   # or: pnpm install --frozen-lockfile
pnpm test                       # node:test, 44 tests: matching, precedence, ALS isolation, egress, wiring, volatile updates, agent retirement, client contract, UI form logic
pnpm check                      # manifest + secrets + market validation + full test suite

See CONTRIBUTING.md (workflow, commit style, release checklist), CODE_OF_CONDUCT.md, and docs/ — an index with architecture, configuration reference, UI guide, publishing checklist, marketplace notes, troubleshooting, and a glossary.

Marketplace

To list this plugin in a DSH market, ship a format-1 index validated with pnpm check:market. A documented example lives in market/dsh-market.example.json; production indexes must replace the example repository URL and commit. Listing on community hubs (e.g. dsh.market) additionally requires the dsh-plugin topic on the GitHub repository or a submission through the hub’s own flow — see docs/marketplace.md.

License

MIT — see LICENSE. DeepSeek Harness itself is a separate project by DeepSeek; this plugin is community work and is not affiliated with or endorsed by them.