dsh-update-status

uitested: passnpmMIT

Read-only DeepSeek Harness Web sidebar version chip that shows the running DSH version, npm latest/next/alpha channels, compatibility labels, and a copy-only upgrade command.

下载量 / Downloads
3,639
依赖体积 / node_modules
12.69 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-update-status

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount✓
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

<h1 align="center">DSH Update Status</h1>

<p align="center">DeepSeek Harness Web 的版本状态、仅复制升级提示,以及需用户级服务监督的安全重启。</p>

<p align="center">

<a href="https://www.npmjs.com/package/dsh-update-status"><img src="https://img.shields.io/npm/v/dsh-update-status?label=npm&color=CB3837" alt="npm 版本"></a>

<a href="https://github.com/idoall/dsh-update-status/actions/workflows/ci.yml"><img src="https://github.com/idoall/dsh-update-status/actions/workflows/ci.yml/badge.svg" alt="CI"></a>

<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-0F172A" alt="MIT"></a>

</p>

<p align="center"><a href="README.md">English</a> | 中文</p>

<p align="center">

<a href="#功能">功能</a> ·

<a href="#安装">安装</a> ·

<a href="#使用">使用</a> ·

<a href="#更新检查">更新检查</a> ·

<a href="#受监督的重启">受监督的重启</a> ·

<a href="#局域网非回环页面访问">局域网访问</a> ·

<a href="#可加载性与更新提示">可加载性</a> ·

<a href="#配置">配置</a> ·

<a href="#故障排查">故障排查</a> ·

<a href="#安全边界">安全边界</a> ·

<a href="#卸载">卸载</a> ·

<a href="docs/RELEASING.md">发布指南</a>

</p>

DSH Update Status 是 DeepSeek Harness 社区插件。它不修改 DSH 核心,不会安装或升级 DSH、回滚 DSH 包、下载 release 或替换 DSH 文件,也绝不会自行安装更新或自行重启 DSH;只有你显式安装并接管了当前 DSH Web 的用户级后台服务后,它才会请求一次受限的安全重启。

插件只把展开侧栏中的品牌名称换成适配 24px 品牌行的 DeepSeek + 版本芯片,官方鱼标保持不变。版本号旁的绿点表示线上没有更新的版本;橙色呼吸圆点表示线上至少有一个更新的版本——无论是稳定版、RC 还是 Alpha。点击芯片即可看到当前运行版本、每个更新版本一张卡片(各带自己的“仅复制”升级命令),以及只有装好用户级监督后才会出现的重启按钮。

<p align="center">

<img src="./assets/update-panel.zh.png" width="400" alt="DSH 更新状态面板:缓存时长、正在运行的 0.2.1-alpha.1 显示已是最新与上次检查时间、检查更新/发布说明/重启三个操作,以及“只有受用户级服务监督时才允许安全重启”的说明">

</p>

功能

  • 侧栏版本状态:展开侧栏显示当前 DSH 版本。收起侧栏时不渲染任何入口——DSH 的 sidebar.footer.action 是「设置」上方的一格 36px 位置,第二个注册者会把这一行撑破(实测把相邻插件的入口顶出了屏幕左缘),所以品牌行芯片是唯一入口。
  • 安静的更新提示:有新版本时不改变版本 Badge 的背景,只在版本号旁保留一个带小光晕的橙色圆点做放大缩小的呼吸动画(prefers-reduced-motion 下停用动画),让新版本表现为一盏小灯,而不是整条品牌行换色。
  • 一眼三态:没有可做的事时,版本号旁是纯绿色小圆圈(取主题 success 色,不再跟随文字色——暗色外壳下不会再出现一个看起来像「熄灭」的深色点);检查中是中性灰呼吸点;有新版本才是橙色光晕呼吸点。只有更新态会动、会发光,也只有状态读取失败才会把 Badge 重绘成红色。
  • 中性版本底框:Badge 在明暗两套主题下都用灰色二级面(浅色 #f1f3f5 / 深色 #353638)配主题常规文字色,所以暗色下是「深灰底 + 白字」,不再是会把橙色光晕吃掉的白框。
  • 浅色 / 深色 / 跟随系统,自动适配:插件渲染的每个颜色都是 DSH 语义令牌,Badge、圆点、光晕与面板都按 DSH 当前外观解析。DSH 设为浅色、深色或跟随系统,插件就跟着切换——插件侧没有自己的主题开关,也没有需要同步的媒体查询。hover 在两个方向上都是「抬起」:浅色下压深、深色下提亮(把主题文字色按比例混进底色实现)。
  • 一个可升级版本一张卡片:凡是严格新于当前运行版本的已发布版本,各占一张卡片,最新的排在最上面;每张卡片带的是该版本自己的只复制命令。没有任何更新版本时不显示卡片,面板直接说明当前版本最新。
  • 只有最新那张卡片被强调:最高版本用琥珀色描边加最新标签突出,其余卡片保持中性。没有手动排序控件:顺序就是版本顺序,只有最上面那张被强调。
  • 只有一条发布线、零配置:一次 registry 请求读取 npm 的全部 dist-tags,保留所有比当前运行版本更新的版本——稳定版、RC、Alpha 一视同仁。没有需要关注的通道,也没有需要做的选择。
  • 诚实的预发布比较:运行版本与每个候选版本按 SemVer 排序,因此 0.2.1-rc.4 高于 0.2.0-rc.2,而 RC 仍然低于它自己的正式版。
  • 按版本给命令,只复制不执行:每张卡片上的命令都钉在该卡片的确切版本上,不用会移动的 dist-tag,插件也从不执行它。
  • 不再维护兼容台账:面板不再声称某个 DeepSeek Harness 版本“与本构建一起测过”。能不能加载由 DSH 自己按声明的引擎范围与 @deepseek-ai/dsh-settings peer 范围判定。
  • 缓存但不轮询:Host 挂载时检查一次,缓存可设为 30–1,440 分钟并合并并发请求;前端没有轮询,只有“检查更新”按钮绕过缓存。
  • 移动端可靠:详情使用浏览器 modal top layer;底部 sheet 可滚动、适配 safe area,并保持在 DSH 抽屉上方。
  • 受监督的安全重启:一次性装好后台服务后,面板就能替你重启 DSH——它会先提醒会中断哪些工作,而终端直启或桌面应用托管的 DSH 会被直接拒绝。

安装

要求:

  • 带 Web profile 的 DeepSeek Harness
  • DeepSeek Harness >=0.1.7-alpha.2 <0.3.0——这是插件在 dsh.engines.dsh 中声明的范围,@deepseek-ai/dsh-settings peer 范围与之相同。超出范围的 bundle 会在 profile 加载时被 DSH 拒绝。没有“已验证发布清单”需要你对照:在范围内,插件不需要等某个版本被“批准”。
  • Node.js 20 或更新版本

已经安装 dsh 命令:

dsh plugin --profile web add dsh-update-status@latest

直接使用 DeepSeek Harness 源码:

corepack enable
pnpm install
pnpm dsh plugin --profile web add dsh-update-status@latest

安装后重启原有 DSH 进程,再刷新 Web GUI。不要为本插件启动第二个 Web server。

本地开发 link:

pnpm install --frozen-lockfile
pnpm run build
dsh plugin --profile web add "link:$(pwd)"

使用

1. 打开 DSH 左侧抽屉。官方鱼标仍在;名称行显示 DeepSeek + 当前版本 Badge。

2. 点击 Badge。面板打开时不会触发外层“新建会话”按钮。

3. 看当前运行版本。线上没有更新的版本时,面板会说明当前就是最新版本,并且没有任何卡片可点。

4. 否则每个更新的已发布版本各有一张卡片,最新的在最上面。卡片显示版本号、承载它的 dist-tag(npm 有报告时)、所属发布线和发布时间。

5. 复制你想装的那张卡片上的命令(每条都钉在该卡片的确切版本上),在运行 DSH 的那台电脑的终端中自行执行。

6. 包管理器命令完成后,只有已完成[受监督的重启](#受监督的重启)接管时才使用面板里的重启;否则仍由你自行重启 DSH。

全局安装时,卡片上的命令可能长这样:

npm install -g @deepseek-ai/dsh@0.2.1-rc.4

每张卡片只显示一条与检测到的安装方式匹配、并写明该卡片确切版本号的命令,插件不会运行它。当这种安装方式给不出包管理器命令时(例如源码检出),面板只在整块面板上给一次说明,而不是给每张卡片配一个复制按钮去编造命令。

圆点含义

版本号旁那颗圆点承载全部状态,且只有更新态会动:

圆点 · 状态 · 含义

绿色小圆圈 · 已是最新 · 线上没有更新的已发布版本,芯片保持原底色。

灰点呼吸 · 检查中 · 状态读取正在进行(首次挂载,或点了检查更新)。

橙色圆点 + 光晕 · 有更新 · 线上至少有一个更新的版本。复制某张卡片的命令、自行执行,然后重启 DSH。

芯片变红 · 读取失败 · 插件无法判定状态:registry 读取失败,或两个版本无法按 SemVer 比较。

<p align="center">

<img src="./assets/sidebar-chip.png" width="300" alt="版本芯片在浅色外壳(浅灰底、深色字)与深色外壳(深灰底、白字)下的样子,右侧都是表示已是最新的绿点">

</p>

芯片本身是中性二级面——两套主题都是灰色,文字用主题常规色——所以橙色光晕始终看得清,而且它绝不会为了宣布更新而改变颜色。

更新检查

插件按缓存周期向 npm registry 请求一次 @deepseek-ai/dsh,收集所有被 dist-tag 指向的已发布版本,保留严格新于当前运行版本的那些,并按从新到旧列出。latest、next、alpha 是 npm 自己的记账方式,不是需要用户做的选择:哪个 tag 上挂着更新的版本,就计入哪个。

  • npm 返回的每个 tag 都算,包括插件没听说过的 tag。同一个版本可能带多个 tag,卡片上只显示一个,按 latest、next、alpha、beta、rc、其他的顺序取。
  • 按 SemVer 从高到低排列(含预发布):因此跑到稳定版前面的 alpha 会被列出,而不是被藏起来。
  • 比较是精确的:0.2.1-rc.4 比 0.2.0-rc.2 新,两者都低于 0.2.1。
  • 列表以当前运行版本为准:升级 DSH 后重新检查,卡片会变少;装回旧版本则会变多。
  • npm 网页只在包首页显示 latest 那个 tag,其他 tag 上的版本要到 Versions 页面才看得到。面板不照搬这个简化,它们都会被列出。
  • 这里不会安装任何东西,也不会自动应用任何更新。跟随某条通道——以及保存它的 channel 偏好——已在 0.2.0 移除。

受监督的重启

插件没法自己重启 DSH:它就住在那个要被换掉的进程里。所以只有让操作系统来托管这个进程,按钮才有意义——而每个系统本来就自带这个能力。

最短且安全的接管流程是显式在终端执行:

# 1. 只预览完整的原生服务计划:不写文件,不启动服务。
dsh plugin --profile web exec dsh-update-status-service plan \
  --workspace "$PWD" --dry-run

# 2. 只落盘用户服务定义:仍然不会启动它。
dsh plugin --profile web exec dsh-update-status-service install \
  --workspace "$PWD"

# 3. 由你自己在旧终端停止直启的 dsh web,再激活服务。
dsh plugin --profile web exec dsh-update-status-service activate

activate 发现端口还被占着就停手,绝不去杀进程,所以你正在用的 DSH 不会被突然掐掉;激活之后它还会确认服务真的接管了——一启动就不停失败的服务会被当作失败报出来,而不是假装成功。这之后就交给重启按钮:它先列出正在跑的东西,有东西在跑时再问一次,然后才让 DSH 退出;服务把新的拉起来,页面自己回来。

同一个端口只允许一个启动者。如果别的工具自己拉起了 dsh web——另一个插件的重启助手、nohup 脚本——那个进程会占着端口,而你的服务会一直启动失败。插件会直接问操作系统「这个服务真正拥有的是哪个进程」,所以这

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::27,最后更新 2026-10-28

Links

GitHub · Homepage · npm

Same category