`dsh pm` 插件管理器:多源搜索(awesome 列表 + GitHub + npm)、按 profile 安装/移除/更新,以及 doctor 审计(清单、bundle patch、版本漂移)。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:Jesse-njx/dsh-plugin-manager#path:/packages/cli
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
dsh pm 是 DeepSeek Harness 的命令组,围绕官方
dsh plugin 流程补齐「发现 → 安装 → 管理」闭环:在 awesome 列表 / GitHub topic / npm keyword 中搜索,
一行命令从 npm 或 GitHub 安装,按 profile 查看已装内容,检查更新,并用 doctor 做全面审计。
它刻意是官方安装机制之上的薄而诚实的一层:绝不手改 profile 的 cordis.yml,而是通过 installer
驱动 dsh plugin --profile <p> add|remove,并把自有的侧带状态(一个纯 JSON 文件)记录下来,从而能够
列表、更新与审计 —— 官方流程若变化,只需改一个适配层,而不是四个包。
dsh pm search memory → 发现
dsh pm install dsh-memory → 安装到配置的 profiles
dsh pm list → pm 装了什么,按 profile 展示
dsh pm update dsh-memory → 有新版就重装
dsh pm doctor → 审计 manifest、patch、来源、版本漂移
安装
本包就是 pm 命令组本身,把它装进你运行 dsh pm … 的 profile:
dsh plugin --profile default add @dsh-pm/cli # npm(发布后)
dsh plugin --profile default add github:Jesse-njx/dsh-plugin-manager # 或直接来自 monorepo
然后调用:
dsh --profile default pm search memory
dsh --profile default pm install dsh-memory
bundle patch 同时把 pm 注册为 Web UI 斜杠命令(/pm search memory),聊天输入框里也能用。
配置
配置块就是 PmConfig(规范 §5.1),由导出的 schemastery schema(Config)校验。所有字段都有默认值,
下面展示的是文档化取值:
# 在 profile 的 cordis.patch.yml 中
- id: dsh-plugin-manager
config:
registry:
awesomeUrl: https://raw.githubusercontent.com/awesome-dsh-plugin/awesome-dsh-plugin/main/README.md
npmKeyword: dsh
profiles: [default] # install 的目标 profiles
stateFile: ~/.dsh/pm/plugins.json
gitInstall: { depth: 1, build: true }
| 字段 | 默认值 | 含义 |
|---|---|---|
registry.awesomeUrl |
awesome-dsh-plugin README 地址 | 发现源 1 |
registry.npmKeyword |
dsh |
npm 关键词搜索词 |
profiles |
['default'] |
install 的目标 profiles |
stateFile |
~/.dsh/pm/plugins.json |
pm 自己的侧带状态 |
gitInstall.depth / build |
1 / true |
GitHub 引用时传给 installer |
命令
| 命令 | 行为 |
|---|---|
dsh pm search <q> |
在合并后的注册表中搜索;输出 name、source、stars、category、description 表格 |
dsh pm install <name> |
解析并安装到配置的 profiles;打印结果行 |
dsh pm remove <name> |
从状态中提到的每个 profile 卸载 |
dsh pm list |
按 profile 分组显示状态行:版本、来源、是否启用、最近检查时间 |
dsh pm update [name|all] |
检查最新版(npm dist-tag 或 GitHub HEAD);有新版本则重装 |
dsh pm doctor |
只读审计;存在 error 级别发现时以非零码退出 |
Doctor
dsh pm doctor 审计每个已安装插件:
- (a) manifest 仍能解析(
ManifestParser), - (b) 其
dsh.bundle.patch文件在磁盘上可解析, - (c) 其 repo/npm 来源仍可访问,
- (d) 版本漂移(已装 vs 最新),
- (e) 跨 profile 的重复 / 冲突条目,
- (f) profile 中存在但不在状态库里的未托管插件,
- (g) 注册表整体可达性。
Doctor 只读:输出 ok / warn / error 发现并附一行修复提示,告诉你该执行哪条 dsh pm 命令 ——
它从不自行修复。
工作原理
dsh pm install <name>
→ @dsh-pm/installer 解析来源(npm / github / registry)
→ run seam 调用: dsh plugin --profile <p> add <ref>
→ @dsh-pm/core StateStore 记录该行(原子 temp+rename JSON)
dsh pm list
→ installer.list() 读取状态库
@dsh-pm/cli 是唯一同时引入三个兄弟包(core、registry、installer)的包;它按规范 §5 冻结的
跨包类型契约把它们接起来。
开发
pnpm install
pnpm --filter @dsh-pm/cli build # tsc → lib/
pnpm --filter @dsh-pm/cli typecheck # tsc --noEmit(src + 测试)
pnpm --filter @dsh-pm/cli test # node --test test/*.test.ts
单元测试覆盖:在真实 Cordis ctx.commands 上的命令注册(register/dispose 恢复初始表面)、输出渲染
golden、以及基于假 store + registry 的 doctor 退出码行为。跨包真实流程(真 installer + 真 dsh CLI,
针对临时 DSH_HOME)放在 integration-test 包中。
License
MIT
链接
同类插件
dsh-market/dsh-market★ 951
在 DeepSeek Harness 设置页内浏览、搜索并安装社区插件,支持分类筛选、一键更新与停用,以及主题切换与配置备份。
bradeGithub/DSH-Plugins-Marketplace★ 123
面向 GitHub dsh-plugin 话题的插件与技能市场:设置页内逛自动收录的全量索引(CI 每 2 小时刷新),一键安装带类型识别、安装脚本与宿主依赖遮蔽安全检查、环境变量密钥管理,并附 STANDARD.md 识别层规范。
Sanqi-normal/dsh-webui-market-plugin★ 85
dsh Web GUI 内的社区插件市场:浏览 awesome-dsh-plugin.com 目录,从 设置 → 插件 → 插件市场 安装/卸载插件到 profile。
awesome-dsh-plugin/dsh-find-plugin★ 55
会话内直接找插件:按关键词/分类搜索本精选 registry,返回描述与可直接执行的安装命令。
vlln/plugin-registry#console★ 55
插件生态基建:浏览器面板管理官方 repository 插件(0 patch)+ make-dsh-plugin 插件开发引导技能。
Noob-stupid/dsh-plugin-hub★ 51
插件管理面板:已安装插件一键启用/停用,内置 GitHub dsh-plugin 插件市场,支持详情查看与一键安装。