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-plugin/dsh-loader

Loader

面向 dsh (DeepSeek Harness) cordis bundle 插件的运行时兼容层:通过支持版本感知的适配器注册表,将第三方插件与 dsh 的实际内部服务名称、模块路径和 RPC 细节解耦。

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

npx -y @deepseek-ai/dsh plugin --profile web add @dsh-plugin/dsh-loader@1.3.5
README兼容性版本

兼容性与来源证明

Loader 以 @dsh-plugin/dsh-loader 发布,当前版本为 1.3.5。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

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

版本

2.0.0stable
2026/10/30
1.3.5stable
2026/9/7
1.3.4stable
2026/9/3
查看其余 32 个版本收起版本
2.0.0-dev.41617773595dev
2026/11/3
2.0.0-dev.41601555194dev
2026/11/3
2.0.0-dev.41598372185dev
2026/11/3
2.0.0-dev.41593642283dev
2026/11/3
2.0.0-dev.41589942436dev
2026/11/3
2.0.0-dev.41579637746dev
2026/11/3
2.0.0-dev.41575861066dev
2026/11/3
2.0.0-dev.41570953193dev
2026/11/3
2.0.0-dev.41183752794dev
2026/10/31
2.0.0-dev.41183446862dev
2026/10/31
2.0.0-dev.41151102394dev
2026/10/31
2.0.0-dev.41148988532dev
2026/10/31
2.0.0-dev.41037890182dev
2026/10/30
1.3.5-dev.34144744842dev
2026/9/7
1.3.4-dev.33728330554dev
2026/9/3
1.3.4-dev.33725063929

相关插件

正在加载相关插件…

最新版
1.3.5
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
768.5 kB
文件数
115
Surface
web
许可证
LGPL-3.0-only
发布源
npm
GitHub
★ 2
周下载
2,355
安全扫描
✓ v1.3.5 扫描通过
最近提交
2026/11/3
查看源码 ↗项目主页 ↗
README Badge

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

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

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

认领这个 Plugin →
报告问题
dev
2026/9/3
1.3.4-dev.33723587769dev
2026/9/3
1.3.3-dev.33722395196dev
2026/9/3
1.3.3stable
2026/8/29
1.3.3-dev.33218986978dev
2026/8/28
1.3.3-dev.33217535464dev
2026/8/28
1.3.2stable
2026/8/28
1.3.2-dev.33147555949dev
2026/8/28
1.3.1-dev.33147177576dev
2026/8/28
1.3.1stable
2026/8/27
1.3.1-dev.33057703930dev
2026/8/27
1.3.0stable
2026/8/26
1.3.0-dev.32934417958dev
2026/8/26
1.2.0stable
2026/8/24
1.2.0-dev.32741629392dev
2026/8/24
1.1.0-dev.32287576957dev
2026/8/19
1.1.0-dev.32278873528dev
2026/8/19

相关插件

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

Client Ui Git Graph@linxin666/dsh-client-ui-git-graph外部 dsh Web GUI 插件:空会话 Git 分支选择器和 Git 图,包含实际的主机端 Git 操作与防护,作为 dsh 配置文件包Ssh@linxin666/dsh-sshdsh Web GUI 的远程 SSH 操作:主机配置存储(~/.dsh/dsh-ssh.json,可从 ~/.ssh/config 导入)、支持跳板主机的持久化 ssh2 连接池、exec / PTY Web 终端 / SFTP 传输 / 本地端口转发隧道 / 集群执行Opsdsh-ops适用于 Windows x64、Linux x64 和 macOS arm64/x64 的原生文件和 PTC 工具;仅限 Windows 的可选 Bash 负载和主机 PowerShell 集成Update@linxin666/dsh-update用于 dsh Web GUI 的自更新插件:探测 npm 上是否有更新的系列版本,并在原地运行所属配置的 pnpm 更新;可通过设置图标旁侧边栏中的触发器启动,并显示发布说明面板

README

Banner

dshloader

A version-aware runtime compatibility shim that keeps third-party plugins working unchanged across dsh (DeepSeek Harness) upgrades.

English | 简体中文

English

A runtime compatibility shim for dsh (DeepSeek Harness) cordis bundle plugins. dshloader decouples third-party plugins from dsh's internal service names, module paths, package names, and RPC details through a version-aware adapter registry, so that when dsh upgrades and breaks internal APIs, you only upgrade dshloader — plugins keep working unchanged.

Why

dsh is moving fast and its internal surface changes between releases:

  • httpServer was renamed to webServer — old plugins that inject httpServer hang forever.
  • Deep source imports like @deepseek-ai/dsh-client-runtime/src/client/sessions/context-provenance.ts break when dsh ships no src/.
  • Client UI packages like @deepseek-ai/dsh-client-ui-primitives could be renamed in future dsh versions, breaking every plugin that imports them directly.
  • The official dsh-host-apiproxy hardcodes a settings namespace whitelist, so third-party settings cards never appear in the Web UI.

dshloader absorbs these (and future) breaks behind a stable API: ctx.dshLoader on the host, window.__dshLoader__ in the browser, and @dsh-plugin/dsh-loader/* stable subpaths for package imports.

Quick start

1. Install dshloader into a profile

dsh plugin --profile <name> add /path/to/dshloader
# or
DSH_HOME=~/.dsh npx dshloader setup <name>

2. Plugin package.json — only depend on dshloader

{
  "dependencies": {
    "@dsh-plugin/dsh-loader": "link:..."
  }
}

Plugins must NOT declare any @deepseek-ai/* dependency. All dsh packages are accessed through dshloader's stable subpaths.

3. Host side — use ctx.dshLoader

export const inject = ['dshLoader'];

export async function apply(ctx) {
  // Settings: register a namespace
  const scope = ctx.dshLoader.settings.register('my-plugin', schema);

  // Web: register routes and WebSocket upgrades
  ctx.dshLoader.web.get('/api/my-plugin/status', (req, res) => res.json({ ok: true }));
  ctx.dshLoader.web.registerUpgrade({ path: '/ws/my-plugin', handler: fn });

  // Services: read cordis services
  const sessions = ctx.dshLoader.services.get('sessions');
}

4. Import dsh packages via stable subpaths

// Host packages
const { defineTool } = require('@dsh-plugin/dsh-loader/tools');

// Client UI packages (in client bundle source)
import { IconCloseFill14 } from '@dsh-plugin/dsh-loader/ui-primitives';

Stable subpath → real dsh package mapping (dsh 1.x):

Stable subpathReal dsh package
@dsh-plugin/dsh-loader/tools@deepseek-ai/dsh-tools
@dsh-plugin/dsh-loader/llm@deepseek-ai/dsh-llm
@dsh-plugin/dsh-loader/agent@deepseek-ai/dsh-agent
@dsh-plugin/dsh-loader/settings@deepseek-ai/dsh-settings
@dsh-plugin/dsh-loader/ui-primitives@deepseek-ai/dsh-client-ui-primitives
@dsh-plugin/dsh-loader/ui-slots@deepseek-ai/dsh-client-ui-slots
@dsh-plugin/dsh-loader/ui-settings@deepseek-ai/dsh-client-ui-settings/client
@dsh-plugin/dsh-loader/web-react@deepseek-ai/dsh-client-web-react
@dsh-plugin/dsh-loader/schema-form@deepseek-ai/dsh-client-schema-form
@dsh-plugin/dsh-loader/runtime@deepseek-ai/dsh-client-runtime/client

When dsh renames a package, only the dshloader adapter changes — plugin source and bundle stay the same.

5. Client side — use window.__dshLoader__

// Read cordis client services
const conv = window.__dshLoader__.services.get('conversation');

// Register a package alias at runtime (fallback)
window.__dshLoader__.registerPackageAlias('@old/pkg', '@new/pkg');

6. Build config — mark stable subpaths as external

const CLIENT_EXTERNALS = [
  'react', 'react/jsx-runtime', 'react-dom', 'react-dom/client', 'cordis',
  '@dsh-plugin/dsh-loader/ui-primitives',
  '@dsh-plugin/dsh-loader/ui-slots',
  '@dsh-plugin/dsh-loader/ui-settings',
  '@dsh-plugin/dsh-loader/web-react',
  '@dsh-plugin/dsh-loader/schema-form',
  '@dsh-plugin/dsh-loader/runtime',
]

How it works

plugin ──▶ ctx.dshLoader.{settings,web,services} ──▶ dshloader adapter
                                                         │
                                                         ▼
                                               real dsh (current version)

plugin bundle ──▶ require('@dsh-plugin/dsh-loader/ui-primitives')
                         │
                         ▼ (__ModuleLoader__ wrapper maps stable name)
                   require('@deepseek-ai/dsh-client-ui-primitives')
                         │
                         ▼
                   dsh module table
  1. Version detection reads node_modules/@deepseek-ai/dsh/package.json (or DSHLOADER_DSH_VERSION for tests/override).
  2. AdapterRegistry selects the best adapter for the detected version (exact → range → nearest-low fallback → clear error).
  3. The selected adapter registers service aliases, installs package-name mapping hooks (host: Module._resolveFilename; client: __ModuleLoader__.load wrapper), and (only when opted in) the settings whitelist bypass bridge. All registrations use ctx.reflect.provide / ctx.effect, so cordis auto-recycles them on fiber unload.

Load order does not matter. cordis is reactive dependency injection: plugins declaring inject: [...] stay PENDING until the alias is provided, regardless of where dshloader sits in cordis.patch.yml.

Settings whitelist bypass (exposeAllNamespaces)

By default dshloader does not bypass the official settings namespace whitelist. Opt in explicitly:

  • env: DSHLOADER_EXPOSE_ALL_SETTINGS=1
  • profile package.json: dsh.dshloader.exposeAllNamespaces: true

Security trade-off: enabling this removes the official default-deny boundary for browser settings access. Only enable it in profiles where you trust every installed plugin.

CLI

dshloader setup <profile>        Inject dshloader into a profile (dep + patch).
dshloader dump-config <profile>  Run `dsh --profile <name> --dump-config`.
dshloader info [profile]         Print loader version, detected dsh version,
                                 selected adapter.

Rollback / disable

  • Disable per launch: DSHLOADER_DISABLE=1 dsh web
  • Remove: dsh plugin --profile <name> rm @dsh-plugin/dsh-loader

Project layout

src/
  index.ts            host bundle entry (name / inject / apply)
  client.ts           client bundle entry (immediately tier)
  api.ts              DshLoaderHostAPI construction
  registry.ts         AdapterRegistry + version detection
  types.ts            shared host/client TypeScript types
  version.ts          loader version + log prefix
  stable/             stable subpath re-exports (ui-primitives, tools, ...)
  services/
    settings.ts       settings stable API
    web.ts            web stable API
    services.ts       services stable API (get / alias)
  adapters/
    dsh-1-x.ts        dsh 1.x adapter
    index.ts          adapter registration
  setup.ts            profile injection + dump-config + info
bin/dshloader.mjs     CLI entry
dist/                 compiled host build (tsc output, git-ignored)
lib/                  compiled client bundle (tsdown output, git-ignored)
tsconfig.json         typecheck config
tsconfig.build.json   host build config (emits dist/)
tsdown.client.config.mjs  client bundle build config
docs/
  api.md              full API reference (Chinese)
  design.md           design document (Chinese)
tests/                L1 (unit) / module (L2) / integration (L3)
examples/
  sample-plugin/      minimal example plugin
  dsh-aux-state/      example using ctx.dshLoader only

Develop

pnpm install
npm run typecheck   # type-check src/**/*.ts
npm run build       # compile host (dist/) + client bundle (lib/)
npm test            # all tests
npm run test:l1     # unit
npm run test:l2     # module
npm run test:l3     # integration

Node.js >= 18, node --test, no extra test framework.

License

LGPL-3.0-only (GNU Lesser General Public License v3 only). See LICENSE.