dsh-about-plugin
About panel and self-upgrade facade for DeepSeek Harness: version facts, channel-aware update checks, and a supervised source upgrade with restart, exposed to the Web Settings dialog over Typert Remote
安装
dsh plugin --profile web add github:yaways/dsh-about-plugin
需要可复现安装时,可在仓库后追加 #commit 固定提交。
About panel and self-upgrade facade for DeepSeek Harness: version facts, channel-aware update checks, and a supervised source upgrade with restart, exposed to the Web Settings dialog over Typert Remote
该插件未提供要点说明,请参考仓库 README。
- 安装并启动 DeepSeek Harness:
npx @deepseek-ai/dsh web - 在终端执行上面的安装命令(CLI 会解析插件并核验来源)
- 用 dsh plugins list 确认已安装,必要时重启 Harness 生效
插件以当前 dsh 进程的权限运行,安装时可能执行代码。请先通读仓库源码与许可证,确认无破坏性命令与越权访问;本站只做索引,不对第三方插件安全性作担保。
| 代码仓库 | github.com/yaways/dsh-about-plugin |
| 许可证 | MIT |
| 主要语言 | main |
| 下载量 | 1 |
| GitHub 星标 | 0 |
| 最近推送 | 2026-09-13 |
| 收录日期 | 2026-09-19 |
| 分类 | 界面增强 |
事实信息来自公开插件目录快照(2026-10-01),介绍文案由本站再加工。
以下为插件仓库 README 全文(原始内容,由公开目录抓取整理)。
# dsh-about-plugin
DeepSeek Harness 的「关于」面板与自助升级插件:在 Web 设置对话框中展示版本事实、按渠道检查更新,并通过受监督的脱离进程完成源码升级与重启。

> 截图:设置 → 关于。版本卡片(版本 / 源码安装形态 / 安装位置 / 插件版本)、双渠道检查结果(「已是最新」+「工作树有未提交修改」+ SHA 对比),以及底部的升级记录。此例中工作树有未提交改动,故「升级并重启」保持禁用。
```
设置 → 关于
├── DeepSeek Harness 版本 / 安装形态 / 安装位置 / 插件版本
├── 升级渠道 源码渠道(git)与 npm 渠道,检查按钮 + 待更新提交预览
├── 升级并重启 风险确认 → 受监督升级 → 自动重连
└── 升级记录 $DSH_HOME/update-log.jsonl 的尾部条目
```
## 安装
```bash
# 从 npm:
dsh plugin --profile web add dsh-about-plugin
# 或从 GitHub / 本地路径:
dsh plugin --profile web add github:yaways/dsh-about-plugin
dsh plugin --profile web add /path/to/dsh-about-plugin
# 重启 dsh 后生效(安装只是新增惰性依赖,不触碰运行中的进程)
```
> **源码检出的 dsh**(git clone 运行):命令需经 pnpm 脚本——`pnpm dsh plugin --profile web add dsh-about-plugin`,其余 `dsh ...` 命令同理(官方 [publish 教程](https://github.com/deepseek-ai/deepseek-harness/blob/main/docs/user/develop/basic/publish.md)的同一约定)。npm 安装的 dsh 直接用裸 `dsh`。
> pnpm 安装时会提示 peer dependencies 未满足(`@deepseek-ai/cordis` 等)——这是**预期行为**:对等依赖在运行时经 profile 模块回退解析到 dsh 安装本身,不从 registry 安装。
卸载:`dsh plugin --profile web remove dsh-about-plugin`(源码检出形态为 `pnpm dsh plugin ...`)。
## 架构
一个包、两半、五个构建产物(`pnpm run build` 先 tsc 输出到 `lib/types` —— 该趟同时把标准装饰器 `@Remote` 降级为 `__esDecorate` —— 再由 tsdown 打包):
| 产物 | 角色 |
| --- | --- |
| `lib/index.js` | 宿主半:`UpdateGateway extends TypertRemoteService`,服务键 `update`,方法 `status` / `check` / `apply` |
| `lib/typert.js` | 手写 TYPERT 宿主工件(`./typert` 导出),dsh-typert-loader 挂载 Loader 行时注册,为每个 `update/*` 端点提供严格网关校验 |
| `lib/remote.js` | 手写 TYPERT_REMOTE 客户端工件(`./remote` 导出),浏览器半自己 `ctx.remote.$mount()` 挂载 |
| `lib/supervisor.js` | 脱离的升级监督进程,仅 Node 内建依赖(它运行时正要改写自己所在的树) |
| `lib/client.js` | 浏览器闭包工厂包(`window.__ModuleLoader__.load`),除冻结平台表(React、cordis、静态 UI 库)外全部内联 |
手写工件逐字段对齐 `dsh-typert-generator` 为包内插件生成的形状(对照 `@deepseek-ai/dsh-host-plugin-inventory` 的 `lib/typert.host.js` / `lib/typert.remote-client.js`):独立插件没有仓库代码生成管线,但不损失严格校验。两份工件的 zod schema 同源于 `src/schemas.ts`,不会漂移。
### 升级时序(核心安全规则)
**源码树与 node_modules 绝不在活进程下被改动。** `apply` 依序:
1. 预检(干净工作树 + 源在允许清单内),失败即拒绝、不动任何东西;
2. 快照本次启动器调用(execPath + execArgv + argv + cwd)写入计划文件;
3. 向 `$DSH_HOME/update-log.jsonl` 追加 `started`;
4. 脱离式(detached)spawn `node lib/supervisor.js `;
5. 调用 `ctx.get('appExit')?.()` 让本面优雅退出。
监督进程等待记录的 pid 全部退出后,按**固定命令表**执行:`git fetch` → `git pull --ff-only` → `pnpm install` → `pnpm run build` → 重启快照的启动器。任一步失败则回滚到记录的 SHA(reset --hard + 重装 + 重建)再重启。每一步前后都写状态文件;重启后的新进程在挂载时把 `restarted` 补写为 `verified`,把死掉的半途尝试标记为 `orphaned`。
命令表只含 git/pnpm/构建/重启器,绝不执行来自远端内容的命令。默认允许清单钉死官方源:
```
https://github.com/deepseek-ai/deepseek-harness.git
git@github.com:deepseek-ai/deepseek-harness.git
```
## 配置(Loader 行 config)
| 键 | 默认 | 说明 |
| --- | --- | --- |
| `trackedRef` | `master` | 源码渠道跟踪的 ref |
| `originAllowlist` | 官方源清单 | 允许 fetch/pull 的 git origin |
| `npmPackage` | `@deepseek-ai/dsh` | npm 渠道读取的包 |
| `npmDistTag` | `latest` | npm 渠道读取的 dist-tag |
| `incomingLimit` / `dirtyFileLimit` | 20 | 变更预览上限 |
| `historyLimit` | 30 | 面板读取的状态文件条数 |
## 开发
```bash
pnpm install # prepare 链接同级 deepseek-harness 检出中的 @deepseek-ai/* 对等依赖(DSH_ABOUT_HARNESS_CHECKOUT 可覆盖)
pnpm test # 83 项:版本比较、安装识别、渠道探测、状态文件、监督进程(真实产物级集成)、RPC schema、组件
pnpm run build # tsc → lib/types,tsdown → 五个产物
node scripts/verify-browser.mjs "<带 token 的服务器 URL>" [截图目录] # 浏览器级端到端验证
```
`verify-browser` 的 playwright 取自同级 deepseek-harness 检出(`apps/web` 的 devDependency);`DSH_ABOUT_HARNESS_CHECKOUT` / `DSH_ABOUT_PLAYWRIGHT` 可覆盖解析锚点。
对等依赖在**运行时**通过 profile 模块回退(`$DSH_HOME/profiles/node_modules`)解析,与 `@yaways/dsh-subagent-claude-code-wrapper` 的先例一致;本地开发由 `scripts/link-dev-deps.mjs` 提供同样的解析(无同级检出时优雅跳过,git 克隆安装不受影响)。
## 已验证
- **npm 发布实装**:`dsh-about-plugin@0.1.0` 发布后从 registry 干净安装进一次性 profile,启动图行、`client.js` 下发、`update/status` RPC、浏览器级 9 项检查全部通过;
- 一次性 profile 本地/tarball 安装 + 启动;
- 启动图(`window.__DSH_BOOT__`)含 `dsh-about-plugin` 行与正确的 inject 边;`/plugins/??dsh-about-plugin/client.js` 可取;
- HTTP RPC:`update/status`(版本事实)、`update/check`(真实网络 fetch、领先/落后/脏树判定)、`update/apply`(脏树安全拒绝)全部往返;
- Playwright 浏览器级:设置 → 关于 打开、版本/形态/插件版本渲染、检查按钮真实 RPC、脏树提示、升级按钮禁用、零页面错误。
## 限制
- npm 渠道目前只做**比较展示**(不执行升级);打包可执行文件自带更新生命周期,插件只报告形态。
- 升级序列**只等本面自己的 pid**:同一源码 checkout 上若还跑着其他 dsh 面(headless、第二个 web),它们存活期间树仍会被改写。多面协调停机需要上游 pid 注册表(官方未规划);短期缓解是把同锚点进程纳入等待。
- `engines.dsh` 为 `>=0.1.0`,声明性下限(当前没有需要拒绝的旧版本)。
数据来源:公开的 DeepSeek Harness 插件目录与各插件 GitHub 仓库。本站为独立第三方目录,与 DeepSeek、幻方(High-Flyer)及插件作者均无隶属或背书关系。