DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

Local Plugin Switch — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
L

dsh-local-plugin-switch

Local Plugin Switch

设置页面 — 开启/关闭本地插件(实时生效,并通过 cordis.patch.yml 持久保存)。

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

npx -y @deepseek-ai/dsh plugin --profile web add github:jcleener/dsh-local-plugin-switch#b3b4c09702a11b492869343a683bb09e8dac6c67
README兼容性版本

兼容性与来源证明

Local Plugin Switch 以 dsh-local-plugin-switch 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

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

版本

0.1.0stable
2026/9/16

相关插件

正在加载相关插件…

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

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profile用于 Agent Teams Remote 和 UI 插件的实验性 Web 配置层Remote Web Ui@linxin666/dsh-remote-web-ui通过扫码配对访问 dsh Web GUI,共享一个官方界面:设置按钮旁的二维码可将手机和 PC 配对到同一个 Web GUI(手机采用竖屏触控适配层,PC 使用完整桌面界面),通过一次性令牌和 rClient Ui Task Board@linxin666/dsh-client-ui-task-board面向 DSH Web GUI 的主机权威任务面板,支持实际会话执行、主机 cron 调度以及可选的跨平台空闲睡眠保护;以挂载方式提供,无需修改 DSH 源代码。

README

dsh-local-plugin-switch · 设置页「本地插件开关」

在 DSH 设置页里列出所有本地已安装插件,每个配一个开关:拨动即实时启停该 Loader 条目的 fiber,并把 disabled: true|false 落盘到当前 profile 的 cordis.patch.yml,因此重启后仍然生效。 宿主基础设施行显示为「宿主」且不可开关——关掉它们会连带弄坏这个页面自己。

插件 = 宿主 HTTP 路由(/dsh-local-plugin-switch/list|toggle)+ 浏览器端设置分区 (Slot settings.section,id local-plugin-switch)。

特性

  • 实时开关:entry.update({ disabled: true | null }, false, true) 立即停/启目标条目 的 fiber(宿主侧服务与路由随之上下线),无需重启实例。
  • 持久化:同时把 - id: <rowId> + disabled: true|false 追加到 profile 的 cordis.patch.yml;重新启用时删除该行,并在文件被清空时还原空列表占位符 []。
  • 自包含补丁编辑器:不依赖 dsh-market,lib/index.js 自带一份最小行级 YAML 读写(跳过 - insert: 块内的行,拒绝在顶层 flow 结构后追加)。
  • 原生/宿主标记:模块名以 @deepseek-ai/ 或 cordis: 开头显示「原生」标签; 命中受保护清单的行显示「宿主」且不渲染开关。
  • 收藏置顶:行首 ☆/★ 收藏,存 localStorage["dsh-local-plugin-switch.favorites"]; 收藏行排最前,其余保持首次加载时的顺序(刷新不会跳行)。
  • 宿主零依赖:只用 node:fs / node:path / node:os / node:url,不引入 YAML 解析库。

环境要求

  • DSH 当前版本服务层:宿主 ctx.inject(['webServer', 'loader']),依赖这两个服务。
  • 客户端需要 slots 与 locale;package.json dsh.client 声明 platform: "web", inject 列出 locale / runtime / ui-settings / ui-primitives 四个客户端模块。
  • 需要 DSH 进程对 profile 目录有写权限(要改写 cordis.patch.yml)。

部署(重启实例 + 硬刷新)

  1. 拷贝插件到 profile 的 node_modules:
    Copy-Item -Recurse -Force D:\DSH\design\DSHPlugin-0831\dsh-local-plugin-switch $env:DSH_HOME\profiles\web\node_modules\dsh-local-plugin-switch
    
  2. 在 $env:DSH_HOME\profiles\web\cordis.patch.yml 追加本包自带的挂载行 (即包内 cordis.patch.yml,由 dsh.bundle.patch 指向):
    - insert:
        - id: dsh-local-plugin-switch
          name: dsh-local-plugin-switch
    
  3. 重启 DSH web 实例;浏览器硬刷新(Ctrl+F5)后,设置页出现「本地插件开关」分区。

之后即可用这个页面本身开关别的插件:宿主侧实时生效,带客户端半的插件需刷新页面, 提示文案会写明是哪一种。

配置项

没有 settings.register,因此没有设置页配置项。 唯一的入参来自加载行 config:

字段类型默认值含义
profilestring--profile 命令行值,再退到 'web'读写哪个 profile 的 cordis.patch.yml 与 node_modules

profile 目录解析:$DSH_HOME(缺省 ~/.dsh)+ profiles/<profile>。补丁文件优先取 加载器里 cordis:include 条目的 config.path(file:// 去协议、cordis.yml → cordis.patch.yml),找不到才退回 <profileDir>/cordis.patch.yml。

主要能力

宿主注册两条 webServer 精确路由(kind: 'exact',挂在 ctx.effect 上随 fiber 释放):

路由方法说明
/dsh-local-plugin-switch/listGET / HEAD返回所有非分组条目 {entryId, moduleName, enabled, fiberPhase, protected};其它方法 405
/dsh-local-plugin-switch/togglePOST请求体 {name, enabled};非 POST 405;跨源 403 untrusted origin;请求体上限 4096 字节

toggle 的处理顺序与返回:

  1. 拒绝关闭本插件自身(400),避免关掉页面赖以运行的行。
  2. 命中受保护清单 → 403(宿主基础设施,禁止开关)。
  3. 对 options.name === name 的每个非分组条目执行实时 entry.update;任一失败 → 502。
  4. 按 rowIdsForPackage 找出该包名对应的行 id,写入或删除补丁行。
  5. 返回 { ok, restart, refresh, reason, rows }:restart 表示实时状态与期望不一致; refresh 表示 <profileDir>/node_modules/<name>/package.json 声明了 dsh.client (即有客户端半,需刷新页面)。

客户端注册 Slot settings.section(id local-plugin-switch,order 90,label 取自 locale 命名空间 settings.localPluginSwitch,含 zh/en 两套文案),每个条目一行: 状态点按 fiberPhase 着色(0 pending / 1 loading / 2 active / 3 failed / 4 null / 5 unloading),切换请求进行中所有开关置灰(aria-busy)。

文件结构

dsh-local-plugin-switch/
├── package.json      # 包清单:main/exports、dsh.bundle.patch、dsh.client(platform web + 4 个 inject)
├── cordis.patch.yml  # 本包提供的挂载行(insert id/name = dsh-local-plugin-switch)
└── lib/
    ├── index.js      # 宿主半:两条 webServer 路由 + loader 实时开关 + cordis.patch.yml 行级读写 + 受保护清单
    └── client.js     # 浏览器半(预打包 __ModuleLoader__ bundle):设置分区 UI、收藏、locale、内联 CSS

验收清单

  1. 设置页出现「本地插件开关」分区,标题右侧显示条目数(N 个)。
  2. 每行显示模块名 + 条目 id;@deepseek-ai/*、cordis:* 行带「原生」标签。
  3. 宿主基础设施行显示「宿主」,没有开关。
  4. 关掉一个带客户端半的插件 → 提示「已切换,刷新页面生效」;刷新后其 UI 消失。
  5. 重启实例后被关掉的插件仍是关闭状态(补丁行已写入)。
  6. $env:DSH_HOME\profiles\web\cordis.patch.yml 末尾应出现 - id: <rowId> + disabled: true。

备注 / 已知限制

  • 只处理非分组条目:entry.options.group 为真的条目在列表与开关里都被跳过。
  • 补丁写回是行级启发式,不是 YAML 解析器:只识别 - id: X 紧跟两空格缩进的 disabled: true|false;行 id 必须匹配 /^[A-Za-z0-9_.-]+$/,否则写入失败并返回 reason。 文件末尾若是顶层 flow 结构(以 [/{ 起头)会拒绝追加。
  • 受保护清单硬编码在 lib/index.js(注释说明移植自 dsh-market),按 cordis:、@deepseek-ai/cordis-plugin-、@deepseek-ai/dsh-* 等前缀匹配; 清单没覆盖到的内置模块在页面上是可开关的。
  • toggle 只做同源校验(Origin 的 host 等于 Host),本机任意工具都可直接 POST。
  • 客户端 lib/client.js require('@deepseek-ai/dsh-client-ui-primitives') 取到 primitives 后未使用(UI 全部用 react/jsx-runtime 手写);dsh.client.inject 里的 dsh-client-locale / dsh-client-runtime 也未在该 bundle 中 require——属声明与实现 不一致,不影响运行。
  • 部署现状(撰写本 README 时的快照):本机 $env:DSH_HOME\profiles\web\cordis.patch.yml 中尚无本插件的 insert 行,profiles\web\node_modules\ 下也没有该包目录;工作区 config\profiles-web\cordis.patch.yml 模板里已列出该行——需先按上面「部署」拷贝并挂载。