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.

Connection Rpc Fix — DSH Plugin for DeepSeek Harness
← Plugins

dsh-connection-rpc-fix

Connection Rpc Fix

Community bundle that restores the plugin-facing connection.rpc.handle() API in the dsh Web composition.

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

npx -y @deepseek-ai/dsh plugin --profile web add dsh-connection-rpc-fix@0.1.0
READMECompatibilityVersions

Compatibility and provenance

Connection Rpc Fix is published as dsh-connection-rpc-fix 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
any
Release source
npm
Registry updated
9/14/2026

Versions

0.1.0stable
9/14/2026

Related plugins

Loading related plugins…

Latest
0.1.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
11.4 kB
Files
6
Surface
any
License
MIT
Source
npm
GitHub
★ 0
Weekly downloads
0
Last push
9/14/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
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

Related plugins

More verified plugins in developer-tools.

DSCODE@toddzheng024/dscode-bundleA complete DeepSeek coding agent with persistent shell, Ultra collaboration and automatic permission review.Plugindsh-pluginA community plugin marketplace for DeepSeek Harness, built to the official plugin spec — browse, search and install 9000+ human-curated community plugins without leaving the app. · DeepSeek Harness 社区插件市场(遵循官方开发规范):9000+ 人工精选社区插件,每日更新。Web App@deepseek-ai/dsh-web-appThe dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)Sdk Minimal@deepseek-ai/dsh-sdk-minimalThe standalone minimal SDK profile bundle: JSON-RPC, one DeepSeek adapter, persistent shell, and JSONL sessions

README

dsh-connection-rpc-fix

English | 中文

A community bundle that restores the plugin-facing connection.rpc.handle() API in the DeepSeek Harness Web composition.

Maintained by @Robin1987China

The symptom

A third-party plugin registers a private Web RPC channel, and every browser-side call to it fails:

cannot get property "webServer" without inject

Nothing is logged where the plugin can see it, and the browser request falls through to the static handler and answers HTTP 405.

English: connection.rpc.handle not working · plugin RPC channel returns 405 · cannot get property webServer without inject

中文: 插件 RPC 通道注册不上 · 浏览器端一律 405 · cannot get property webServer without inject

Who this affects

Anyone shipping a plugin that needs a browser-reachable channel through connection.rpc.handle(channel, handler). The official /api transport is not affected — only the plugin-facing API is.

Root cause

In @deepseek-ai/dsh-client-connection:

const inject = ['credentials'];                       // the package's own injections

async function apply(ctx, config) {
  const connection = new HostConnectionService(ctx, ...);   // the service holds this ctx
  ctx.inject(['webServer'], (webCtx) => {
    webCtx.effect(() => webCtx.webServer.register(route), ...);   // official /api — works
  });
}

// inside the service:
const owner = this.ctx;                                // = apply's ctx: no webServer
  handle: (channel, handler) => this.register(owner, channel, handler),

register(owner, channel, handler) {
  return owner.effect(() => owner.webServer.register(route), ...);   // throws, swallowed
}

The plugin row declares inject: [webRuntime], so the service's context never carries webServer. The property access throws inside owner.effect, the throw is swallowed, and the channel is never mounted.

The package's own doc comment says it mounts the browser transport “When webServer is present” — the plugin-facing API assumes it unconditionally.

The fix

This bundle patches one row, giving the service's context the service it reads:

- id: connection
  inject: [webRuntime, webServer]

Install

As a bundle — the official distribution form:

cd ~/.dsh/profiles/web
npm install dsh-connection-rpc-fix

then add it to that profile's package.json:

{"dsh": {"profile": {"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-connection-rpc-fix"]}}}

Or, without installing anything, patch it yourself in ~/.dsh/profiles/web/cordis.patch.yml:

- id: connection
  inject: [webRuntime, webServer]

Verification

A probe plugin calls ctx.connection.rpc.handle('/lab-probe', handler) at startup, and the channel is then probed over HTTP. A registered channel sits behind the connection fence and answers 401 to an unauthenticated request; an unregistered one falls through and answers 405.

plugin logPOST /lab-probe
beforeTHREW: cannot get property "webServer" without inject405
afterreturned without throwing (disposer: function)401

Both runs used an isolated DSH_HOME on a separate port; the POST /api control answered 401 in both.

The patch was also confirmed to work when delivered as a bundle (listed in dsh.profile.bundles) rather than as an inline patch layer, which is the form this package ships.

Scope and limits

  • It patches a composition row, not the package. The underlying access is still unguarded, so read the upstream reports below before assuming a future release is fixed.
  • It targets the Web composition. A deployment that mounts connection without a web server was already broken for this API and gains nothing here.
  • It does not make rpc.handle() tolerate a missing web server; it makes the web server present.

Upstream reports

  • #6105 — connection.rpc.handle() cannot register plugin RPC channels (browser gets HTTP 405)
  • #6179 — always throws (cannot get property webServer without inject)
  • #6289 — cannot mount third-party Web RPC channels
  • #6081 — the Web bundle should declare a modules to webServer activation dependency

License

MIT