dsh-m — DeepSeek Harness 插件市场
English · 中文
可自定义收录清单(Registry)的 DeepSeek Harness (DSH) 插件市场:收录 · 安装 · 卸载 · 升级,全部本机完成。以 DSH web 插件形态运行——侧栏「插件市场」打开三视图面板,同时提供 dshm_* agent 工具与 dshm CLI。
30 秒上手
把下面整段贴给 agent 即可完成安装:
安装并启用 DSH 插件 dsh-m:
1. 执行 `dsh plugin --profile web add dsh-m`
2. 重启 DSH Web 使插件加载(按部署方式重启对应的 DSH user unit;unit 名称不要硬编码)
3. 轮询 `curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:3080`,直到恢复 200
4. 执行 `curl -s -X POST http://127.0.0.1:3080/dshm -H 'content-type: application/json' -d '{"method":"ping"}'`,确认返回 `plugin: dsh-m`
5. 完成后提醒我刷新页面,点击侧栏底部的「插件市场」
npm install -g dsh-m 只安装 dshm CLI(终端管理用),不会把插件注册进 web profile;与上面插件安装不冲突,可并存。
默认收录清单里的插件包括:DSH Skins、ModSearch、Lark / QQ / 微信 / 企业微信 / 钉钉通道桥,以及 dsh-m 自身。
界面(侧栏「插件市场」)
| 视图 | 能力 |
|---|
| 市场 | 收录卡片流;关键词搜索、分类筛选(服务端过滤 + 分页,每页 50 条,1,000 条清单也只探测当前页);卡片展开详情与「安装」;npm 源锁定最新精确版本,GitHub 源锁定 release/tag 指向的 commit |
| 已装 | web profile 实装列表,标注「市场安装 / 非市场安装」;可升级徽标、升级、两段式确认卸载;📖 README 预览(64KB 截断) |
| 设置 | registry 地址草稿 +「校验并应用 / 恢复默认 / 下载默认 registry.json / 检查条目可达性」;配置地址、生效来源与状态一目了然;强制刷新;dsh-m 自更新 |
安装 / 卸载 / 升级完成后,当前已打开的市场页与已装页会一起重新读取 profile 状态并同步徽标/卡片,不需要关闭后重新打开插件市场;随后出现「⚡ 一键重启」横幅——受 systemd 管理时通过 DSH launcher 的 appExit 交给服务的 Restart 策略,避免在待停止 unit 的 cgroup 内启动 systemctl helper;无 appExit 的 systemd 兜底改用 manager-owned transient systemd-run,最后才退回 detached-helper。客户端按 boot id 确认新进程已恢复后关闭横幅,交由 DSH Web 自身的后台连接重试恢复页面,不强制整页刷新,避免认证/路由切换期间白屏。已完成当前 DSH Web 0.1.5-rc.1 运行时的 live 核验:web profile 已加载 dsh-m 0.2.11,重启后 /dshm ping 返回 version: 0.2.11,携带当前认证 token 的页面请求流程为 303 → 200;无认证请求会被拒绝。此次白屏截图对应的 404 在服务稳定后未复现;journal 显示截图时段发生多次 status=75/TEMPFAIL 重启,当前暂判定为重启/认证过渡窗口现象,未发现 dsh-m Host 路由崩溃。DSH 0.1.2-rc.1 live E2E、transient fallback live E2E,以及连续安装/卸载实验仍是正式发布前的验证 gap。安装过程实时显示 pnpm 进度(解析 → 下载 → 链接 → 构建)。
Agent 工具(7 个)
| 工具 | 用途 |
|---|
dshm_search | 搜收录清单(对话内出卡片) |
dshm_list | 列已装插件(市场/非市场标注) |
dshm_install | 按收录 id 安装 |
dshm_uninstall | 卸载(先确认;不删数据,报告残留路径) |
dshm_outdated | 检查最新版本 |
dshm_upgrade | 升级到最新 |
dshm_restart | 一键重启 DSH Web(先征得同意) |
CLI
dshm search [--query 主题] [--category ui]
dshm list | outdated | registry
dshm install --id dsh-web-search
dshm upgrade --pkg dsh-web-search --yes
dshm uninstall --pkg dsh-web-search --yes
dshm restart --yes
清单不可用时 registry / search / outdated 打印配置与实际生效地址并退出码 1;list 仍列出已装插件。CLI 固定独立缓存命名空间,不影响 Web 端。
收录清单(registry)
registry.json 手工 curated,运行时按 GitHub 原始文件(raw @main)→ GitHub 镜像(jsDelivr CDN,备用线路)→ 本地 60 分钟 TTL 缓存 → 包内快照 的顺序获取——收录更新与插件发版解耦,push 后最多等一个缓存周期(可在设置页强制刷新)。收录 / 修订直接改 registry.json 发 PR,CI 自动校验:严格 schema、npm 包与 GitHub 仓库存在性、重复 id、URL 可达性。
自定义收录清单(可覆盖官方清单):设置页支持单一自定义 registry 地址,整体覆盖默认清单(不合并):
- 「下载默认 registry.json」得到一份官方清单副本;
- 自行编辑副本(增删条目);
- 在设置页填入副本地址并「校验并应用」——支持 HTTPS URL、本机绝对路径 /
file://(HTTP 仅限 127.0.0.1/localhost 本机调试);
- 校验失败(字段错误、路径不存在、超过 2 MiB / 1,000 条等)不会保存配置,当前生效清单保持不变;应用成功即时生效,无需重启(仅首次部署新版本 dsh-m 需要一次重启);
- 「恢复默认」一键回到官方清单。
规则与边界:严格 v1 schema(未知字段 / 非法 ID / 超限 / 重复一律拒绝,不截断);副本是独立快照,不会自动同步官方新条目;自定义源失败时保留其最近一次成功缓存,绝不静默回退官方清单;切换后旧自定义源缓存会被清理(默认缓存保留);自定义清单未经官方 CI 校验,请确认来源可信再安装;完整本地路径只在设置页显示,工具与卡片只显示短状态。
安全基线:拉取仅 HTTPS(loopback HTTP 除外)+ 重定向逐跳校验 + 体积上限 + 超时;npm 安装按精确版本 dist integrity 对照 pnpm lockfile 校验,不一致 fail closed 并回滚;GitHub 安装强制锁定 commit SHA;pnpm 构建脚本被拦时按策略放行并明确报告。
开发
npm ci
npm run build # tsc(host/core/cli)+ esbuild(client,tree-shaking 已关闭)
npm run typecheck
node scripts/validate-registry.mjs
本地调试推荐 link: 模式(与 dsh-skins 相同):profile 依赖指向本仓库目录,npm run build + 重启即生效。
发版:npm version patch|minor|major && git push --tags → OIDC trusted publishing 自动发布。
FAQ
1. 为什么 GitHub 来源的更新提示不走 main HEAD?
main 上的中间提交可能不稳定。dsh-m 只跟踪 release / tag(优先 releases/latest,无 release 回退 tags 列表),安装时锁定 tag 指向的 commit SHA。
2. 卸载 dsh-m 会删我的数据吗?
不会。只移除 profile 中的包引用(卸载前先下线运行中的界面),并把疑似残留路径报告给你。
3. 自定义清单会让市场变慢吗?
收录超过 200 条时会提示性能边界。市场列表是服务端分页(每页 50 条),1,000 条清单第一页也只查询当前页的最新版本,浏览仍然流畅。
4. 自定义源挂了怎么办?
优先使用该源最近一次成功的缓存并标记「缓存来源」;完全没有缓存时市场显示「收录清单不可用」,已安装插件仍可正常管理。修正地址或恢复默认即可。
5. 重启按钮支持哪些 DSH Web 版本?
已核对 0.1.2-rc.1 与 0.1.5-rc.1 的公开包契约;两版都提供 dsh-m 使用的 appExit launcher hook。当前 openbmc-dsh.service 的 0.1.5 运行时已实际加载 dsh-m 0.2.11 并完成 /dshm ping 与带认证页面的 303 → 200 核验;白屏期间的多次 status=75/TEMPFAIL 已记录,当前稳定服务未复现 404。0.1.2 live E2E、transient fallback live E2E 和连续插件安装/卸载实验仍需发布前补做。systemd 部署需要 unit 配置 Restart=on-failure 或 Restart=always,否则请使用部署方的手动重启方式。
License
MIT