dsh-market-sidebar:把 dshmarket 放进 DSH Web 左侧边栏

前言

在 DeepSeek Harness(DSH)里,第三方插件市场 dshmarket 可以通过设置页相关槽位完成安装与配置,但没有注册 sidebar.footer.action,因此在 Web 左侧边栏底部看不到入口。官方内置的 dsh-community-market 自带侧边栏入口,而桌面端在一个 profile 里对市场提供方是二选一,不能同时挂两套市场 UI。

dsh-market-sidebar 是 Palpitate1388 维护的独立配套插件:不修改 dshmarket 本体,只在侧边栏底部补一个入口,位置在 Agents-Anywhere「远程控制」的右侧。下面介绍它解决什么问题、如何工作,以及如何在 profile 里安装与调整。

这是什么

  • 名称:dsh-market-sidebar(npm 包名,GitHub:Palpitate1388/dsh-market-sidebar)
  • 版本(package.json):1.0.0
  • 许可证:MIT
  • 定位:把 dshmarket 的入口放进 DSH Web 左侧边栏底部;市场自我更新(例如 dshmarket -> dshmarket@x.y.z)不会动本包文件。

为什么需要它

dshmarket 已注册的槽位包括 settings.section、settings.plugins.tab、plugins.bundle.config、settings.plugin.item,以及仅用于安装提示的 shell.overlay,未注册 sidebar.footer.action。官方 dsh-community-market 有侧边栏入口,但 profile 内市场提供方由桌面端强制二选一。本包作为外挂配套,与 dshmarket 解耦,便于在选用 dshmarket 时仍能从侧边栏打开市场面板。

核心功能

侧边栏入口与排序

  • 注册 sidebar.footer.action 槽位;与 Agents-Anywhere「远程控制」共用底部一行。
  • 排序按 (priority, order) 升序:「远程控制」为 order: 26,本包为 order: 27,因此落在其右侧。
  • 通过 CSS 把宿主内联 display: contents 的锚点改为横向 flex,并用 :has() 配合本条目 data-icon="market-sidebar" 做 margin-left: auto,将入口推到该行最右端(不依赖宿主 CSS 模块类名)。

点击行为

点击后打开浮层,内容由市场服务提供:ctx.provide("market", marketControl) 后调用 market.render(),将市场面板嵌入宿主容器;bundle 经宿主模块表解析 React,与调用方共享同一 React 实例。

依赖 market 时的安全注册

注册逻辑在 ctx.inject(["market"], ...) 中:若未安装 dshmarket、被禁用,或桌面端已切到官方社区市场,则不注册任何 UI,避免出现无效按钮。

宿主端为空实现

lib/index.js 仅含空的 apply,刻意不在宿主端执行业务逻辑:DSH 启动全有全无,宿主端抛错会导致整个 profile 无法启动;功能均在客户端 lib/client.js(window.__ModuleLoader__.load)完成。

安装与启用

本插件没有文档中的 dsh plugin add github:... 一类命令;安装方式为把包放入 profile 的 local-plugins/,并在 profile 的 package.json 中声明 file: 依赖与 bundle 列表。

  1. 将本仓库内容放到目标 profile 的 local-plugins/dsh-market-sidebar/ 下。
  2. 在 profile 的 package.json 中增加依赖,并把包名写入 dsh.profile.bundles:
{
  "dependencies": {
    "dsh-market-sidebar": "file:./local-plugins/dsh-market-sidebar"
  },
  "dsh": {
    "profile": {
      "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-market-sidebar"]
    }
  }
}
  1. 执行 pnpm install(带 cordis.patch.yml 的 file: 依赖满足 reconcile 保留条件,不会被当成多余包清掉)。
  2. 重启 DSH 后生效。

cordis.patch.yml 会把本插件 insert 进 profile 层栈;package.json 中声明了 dsh.bundle.patch 与 dsh.client.platform: web。

典型用法与调整

打开市场

侧边栏底部(「远程控制」同一行、偏右)点击市场入口,浮层内即为 dshmarket 提供的完整市场面板(需 profile 中已启用 dshmarket 且桌面端未强制使用官方社区市场)。

调整入口位置

修改 lib/client.js 中的 ORDER 常量:

ORDER 位置
小于 26 「远程控制」左侧
大于 26 「远程控制」右侧

若希望紧贴「远程控制」而不是贴到行尾,删除 STYLE_TEXT 里最后一条针对 [data-slot="sidebar.footer.action"]>:has(...) 的规则即可。客户端 bundle 改动需重启 DSH 才会进入模块图。

卸载

从 profile package.json 删除 dsh-market-sidebar 依赖与 dsh.profile.bundles 中的同名条目,删除 local-plugins/dsh-market-sidebar/ 目录,然后重启 DSH。

适用场景与注意

适合谁:已在 profile 中使用 dshmarket、希望从 Web 左侧边栏快速打开市场,又不想改 dshmarket 源码或与其更新流程绑死的开发者。

权限与安全:插件随当前 DSH profile 与进程权限运行;安装前请阅读 GitHub 仓库 源码与 MIT 许可证,确认与您的环境策略一致。社区插件目录(如 SkillHub)为独立生态站点,与 DeepSeek / 幻方无官方从属关系。

构建说明:lib/client.js 为手写客户端 bundle,无单独构建步骤;react、@deepseek-ai/dsh-client-store、@deepseek-ai/dsh-client-ui-primitives 等平台 seed 可直接 require。

结尾

dsh-market-sidebar 用最小 patch 补上 dshmarket 缺失的侧边栏槽位,并与官方社区市场二选一的约束兼容(无 market 时不注册 UI)。需要细节时可查仓库 README 与 lib/client.js。

  • 目录页:https://www.skillhub.cn/plugins/Palpitate1388/dsh-market-sidebar
  • GitHub:https://github.com/Palpitate1388/dsh-market-sidebar
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜