dsh-plugin-market
DeepSeek Harness 插件社区,支持插件浏览、搜索、排序与便捷安装。
- Stars
- 1
- Language
- TypeScript
- Created
- Aug 18, 2026
- Updated
- Aug 18, 2026
Introduction
DSH Plugin Market
DeepSeek Harness 的 Web 插件社区。它在设置页左侧增加独立的“插件社区”入口,右侧通过“插件 / 已安装”两个标签页分页浏览 GitHub dsh-plugin topic 的完整本地快照,并直接安装或卸载当前 profile 中的插件。
界面只使用 Harness 的 --dsw-* 语义化样式变量,因此会自动跟随“浅色 / 深色 / 跟随系统”设置。
“插件社区”导航项使用 Harness 公开的地球图标。当前 settings.section 契约尚未提供图标字段,因此 Client 只对本插件的中英文导航标签替换设置壳的 fallback 齿轮;设置界面重挂载或切换语言时会自动重新应用,插件卸载时会还原原图标。
市场页右上角的“配置”按钮可以直接管理 GitHub Token:输入后会先向 GitHub 验证,再写入 Harness 的 $DSH_HOME/.credentials.yaml 凭据存储。页面只读取“是否已配置、来源、是否可写”,不会把已保存的 Token 返回给浏览器。也可以从同一弹窗清除 Token。若 Token 来自启动进程的环境变量,该来源优先且不可由页面覆盖。
安装包内置了一份包含 1876 条社区记录的默认渠道 assets/plugins-cache.json。市场会排除其中已明确标记为 Skill 的记录,并将 DSH 插件按 GitHub 星数从高到低展示;星数相同则按最近更新时间和仓库名稳定排序。用户缓存不存在时,页面直接读取内置渠道,无需首次联网同步。内置文件是只读发布资产,永远不会被同步操作修改。
“同步渠道”按钮会读取 GitHub topic 的最新数据,并原子覆盖 $DSH_HOME/plugins/dsh-market/plugins-cache.json。用户缓存一旦存在就优先于内置渠道;删除用户缓存即可回退到随包发布的默认数据。GitHub Search 对单次查询最多返回 1000 条,插件会自动按仓库创建时间拆分查询、逐页拉取并按仓库名去重,因此不受单次 1000 条结果限制。日常打开、翻页和筛选只读取本地 JSON,不消耗 GitHub API 配额。
“已安装”标签页只展示通过插件社区安装成功的插件。Host 会在安装命令成功后把 profile、仓库和实际包名原子记录到 $DSH_HOME/plugins/dsh-market/installed-plugins.json,卸载成功后移除对应记录;通过命令行或其他方式加入 profile 的依赖不会出现在这里,已经从 profile 外部移除的记录也不会继续展示。
同步作为 Host 后台任务运行:按钮请求会立即返回,页面每秒读取进度,展示已经完成的请求批次和发现的记录数。GitHub 搜索限流重置前的等待也不会让按钮请求超时;同步完成后页面自动刷新本地渠道。
市场安装按钮不会执行渠道或 README 中的任意 shell 命令。Host 会先验证仓库、默认分支 commit 与包身份,然后按以下顺序选择安装源:
- 若 npm registry 中存在声明
dsh.bundle、且repository指向同一 GitHub 仓库的包,则安装固定的 npm 版本。 - 否则,若该 commit 的仓库根目录包含有效
dsh.bundlemanifest,则安装固定到该 commit SHA 的 GitHub 源。 - 只有本地目录、tarball 或 monorepo 子目录安装方式的项目不会被猜测安装;页面会提示按仓库 README 手动执行对应命令。
无论使用 npm、GitHub、tarball 还是本地源码目录,DSH 的公开安装入口都是 dsh plugin --profile <name> add <package-spec>;源码 checkout 中可使用等价的 pnpm dsh plugin --profile <name> add <package-spec>。dsh plugin 会在目标 profile 中把参数原样转发给 pnpm,并根据安装后 manifest 中的 dsh.bundle 更新 bundle 层。
安装市场本身
从本仓库的父目录执行:
dsh plugin --profile web add ./dsh-plugin-market
如果从 GitHub 安装,pnpm 首次会要求明确允许本包的 prepare 构建脚本。按终端提示把准确的包名加入该 profile 的 pnpm-workspace.yaml 中,再重试:
allowBuilds:
dsh-plugin-market: true
随后启动或重启 Web profile(当前 DSH 中 web 是 --profile web 的别名,二者不能同时传入):
dsh web
配置
默认配置位于 cordis.patch.yml:
profile:安装和卸载的目标 profile,默认web。topic:GitHub topic,默认dsh-plugin。pageSize:每次检查的最近更新仓库数,范围 1–30。operationTimeoutMs:一次安装或卸载的超时。githubTokenEnv:GitHub token 所在的环境变量名。未配置令牌时使用匿名额度。cliPath:可选的 dsh 可执行文件绝对路径;默认复用当前 Node 启动器。
安全说明
- 渠道展示 topic 中的全部仓库;GitHub topic 本身不保证仓库确实是 DSH 插件。
- 安装时会校验仓库根目录存在有效
dsh.bundlemanifest,并把 GitHub 安装源固定到当时默认分支的 commit SHA;无效仓库不会被安装。 - 安装 Git 依赖可能执行仓库的
prepare脚本。pnpm 的allowBuilds是明确的本机代码执行授权;只应授权已审查并信任的仓库。 - 市场不会从自身界面卸载自己。
- 安装或卸载后需要重启当前 Web profile,避免运行中的插件树与磁盘依赖状态不一致。
开发
pnpm install
pnpm run check
本地联调:
dsh plugin --profile web add ./dsh-plugin-market
dsh web
数据来源
社区目录来自 GitHub dsh-plugin topic,插件格式与安装行为遵循 DeepSeek Harness 插件开发文档。