🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

版本状态徽章 idoall/dsh-update-status

DeepSeek Harnessv0.5.0
idoall6 天前有提交已提供中文文档扫描:含敏感能力

只读查看 DeepSeek Harness Web 版状态与发布渠道指引的插件

36.5/100
综合分
2
GitHub 星标
1,137
npm 周下载
—/5
用户评分

数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-update-status
npm 源 · dsh-update-status 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · ui
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 6 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-update-status @ 0.5.0
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 18:24:42

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 46 处,展示前 39 条)
  • 读取本地文件
    lib/index.js:34
    const parsed = JSON.parse(readFileSync(path, "utf8"));
  • 读取本地文件
    lib/index.js:56
    if (existsSync(manifest)) {
  • 发起网络请求
    lib/index.js:249
    value: await restart.request(restartContext, request.force, request.expectedInstanceId)
  • 读取本地文件
    lib/index.js:329
    if (!existsSync(path) || !statSync(path).isFile()) return void 0;
  • 读取本地文件
    lib/index.js:329
    if (!existsSync(path) || !statSync(path).isFile()) return void 0;
  • 读取本地文件
    lib/index.js:330
    return readFileSync(path, "utf8");
  • 执行外部命令来自配置/变量
    lib/index.js:383
    execFile(file, [...args], {
  • 读取本地文件
    lib/index.js:994
    const parsed = JSON.parse(readFileSync(manifestPath, "utf8"));
  • 发起网络请求
    lib/index.js:1324
    const response = await fetch(url, {
  • 发起网络请求
    lib/client.js:507
    restart.request(hasActivity);
  • 写入剪贴板
    lib/client.js:631
    await navigator.clipboard.writeText(command);
  • 发起网络请求
    lib/client.js:1155
    await this.request(false, cacheTtlMinutes);
  • 发起网络请求
    lib/client.js:1159
    await this.request(true, cacheTtlMinutes);
  • 发起网络请求
    lib/client.js:1172
    await this.request(false, cacheTtlMinutes);
  • 发起网络请求
    lib/client.js:1372
    const response = await fetch(new URL(".", window.location.href), {
  • 写入本地文件
    lib/plan-D9Ybaj-3.js:49
    mkdirSync(dirname(path), {
  • 写入本地文件
    lib/plan-D9Ybaj-3.js:54
    appendFileSync(path, `${JSON.stringify({
  • 读取本地文件
    lib/plan-D9Ybaj-3.js:66
    if (!existsSync(path) || statSync(path).size <= BOOT_STAMP_MAX_BYTES) return;
  • 读取本地文件
    lib/plan-D9Ybaj-3.js:66
    if (!existsSync(path) || statSync(path).size <= BOOT_STAMP_MAX_BYTES) return;
  • 读取本地文件
    lib/plan-D9Ybaj-3.js:67
    const kept = readFileSync(path, "utf8").split("\n").filter((line) => line.trim() !== "").slice(-100);
  • 写入本地文件
    lib/plan-D9Ybaj-3.js:68
    writeFileSync(path, kept.length === 0 ? "" : `${kept.join("\n")}\n`, {
  • 读取本地文件
    lib/plan-D9Ybaj-3.js:76
    text = readFileSync(path, "utf8");
  • 读取本地文件
    lib/plan-D9Ybaj-3.js:108
    names = readdirSync(logDir);
  • 读取本地文件
    lib/plan-D9Ybaj-3.js:116
    const age = now - statSync(join(logDir, name)).mtimeMs;
  • 执行外部命令来自配置/变量
    lib/service-cli.js:82
    const result = spawnSync(file, [...args], {
  • 读取本地文件
    lib/service-cli.js:128
    if (!existsSync(path)) throw new Error(`${description} does not exist: ${path}`);
  • 读取本地文件
    lib/service-cli.js:130
    if (!statSync(path).isFile()) throw new Error(`${description} is not a regular file: ${path}`);
  • 读取本地文件
    lib/service-cli.js:131
    accessSync(path, constants.R_OK);
  • 读取本地文件
    lib/service-cli.js:140
    accessSync(path, constants.X_OK);
  • 读取本地文件
    lib/service-cli.js:210
    if (!existsSync(spec.workspace) || !statSync(spec.workspace).isDirectory()) throw new Error(`workspace is not a directory: ${spec.workspace}`);
  • 读取本地文件
    lib/service-cli.js:210
    if (!existsSync(spec.workspace) || !statSync(spec.workspace).isDirectory()) throw new Error(`workspace is not a directory: ${spec.workspace}`);
  • 写入本地文件
    lib/service-cli.js:214
    mkdirSync(dirname(path), {
  • 写入本地文件
    lib/service-cli.js:219
    writeFileSync(temporary, content, {
  • 写入本地文件
    lib/service-cli.js:223
    renameSync(temporary, path);
  • 执行外部命令来自配置/变量
    lib/service-cli.js:328
    const result = spawnSync(spec.nodePath, [
  • 写入本地文件
    lib/service-cli.js:423
    mkdirSync(spec.logDir, {
  • 删除本地文件
    lib/service-cli.js:461
    rmSync(plan.paths.definitionFile, { force: true });
  • 删除本地文件
    lib/service-cli.js:462
    if (plan.paths.wrapperFile !== void 0) rmSync(plan.paths.wrapperFile, { force: true });
  • 删除本地文件
    lib/service-cli.js:463
    rmSync(plan.paths.stateFile, { force: true });
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-settings@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

2 张 · 点击查看大图

功能亮点

  • 只读查看版本状态
  • 发布渠道指引
v0.5.02026-10-28
中文 | English 插件 0.5.0 — 一个可升级版本一张卡片,删除兼容台账 · 版本对应 | 插件 | 该版本是什么 | npm | | --- | --- | --- | | 0.5.0 | 一个可升级版本一张卡片,各带该版本自己的只复制命令;删除已验证发布机制 | 本次发布,latest | | 0.4.8 | 上一次发布:在旧机制下为 DSH 0.2.1-rc.4 追加清单条目 | 已发布 | · 你会看到什么变化 · 一个可升级版本一张卡片。 面板列出所有严格新于当前运行版本的已发布版本,最新的排在最上面;每张卡片带的是该版本自己的只复制升级命令。没有更新的版本时不显示任何卡片,面板只说明当前版本最新。 · 只有最新那张被强调。 最高版本用琥珀色描边加「最新」标签,其余卡片保持中性;没有手动排序控件,顺序就是版本顺序。 · 兼容标签不再出现。 面板里没有“已验证兼容”“尚未验证兼容”,也不再因为某个 DSH 版本没被测过而给出提示。 · 依然不会自动安装、不会自动重启,复制命令仍然要靠你自己执行。 · 迁移说明 改动只发生在面板展示的信息模型上,不涉及配置:没有任何设置项、profile 里保存的值、服务凭据或命令发生变化,升级不需要做迁移。如果你以前靠兼容标签决定要不要升级,现在改看这两处声明:dsh.engines.dsh 与 @deepseek-ai/dsh-settings peer 都是 >=0.1.7-alpha.2 Plugin 0.5.0 — one card per upgradable version, compatibility bookkeeping removed · Version matrix | Plugin | What it is | npm | | --- | --- | --- | | 0.5.0 | One card per upgradable version, each with its own copy-only command; the verified-release mechanism is removed | This release, latest | | 0.4.8 | Previous release: a verified-list entry for DSH 0.2.1-rc.4 under the old mechanism | published | · What changes for you · One card per upgradable version. The panel lists every published version strictly newer than the running one, newest first; each card carries that version's own copy-only upgrade command. When nothing is newer there are no cards at all — the panel just says the running release is the newest. · Only the newest card is emphasized. The highest version gets an amber border and a Newest pill; every other card stays neutral. There is no sort control: the order is version order. · Compatibility labels are gone. No "verified compatible" or "not verified compatible" in the panel, and no notice because a DeepSeek Harness release was untested. · Nothing installs itself and nothing restarts itself; copying a command is still up to you. · Migration The change is in the panel's information model only, not in configuration: no setting, stored profile value, service receipt or command changes, and upgrading needs no migration.
v0.4.82026-10-27
插件 0.4.8 — 已验证 DeepSeek Harness 0.2.1-rc.4 · 版本对应 | 插件 | 已验证 DSH | npm | | --- | --- | --- | | 0.4.8 | 0.2.1-rc.4 及此前十一个已验证版本 | 本次发布,latest | | 0.4.7 | 0.2.1-rc.3 及此前十个已验证版本 | 已发布 | · 更新原因与调整 · 为 DSH 0.2.1-rc.4 追加兼容声明。 0.2.1-rc.4 是 npm 上最新的发布版——目前由 next 标签承载,latest 仍指向 0.2.1-rc.2——加入已验证清单后,面板不会再把你正在运行的版本标成「尚未验证兼容」。功能代码没有任何改动。 · 为什么需要这次发布: 宿主已经升级到比清单最后一项更新的版本,面板的兼容标签因此落后一档,尽管插件依赖的接口并没有变化。 · 是核对过的,不是假设的。 把其注入依赖闭包里的十六个包(dsh-api-remotes、dsh-client-connection、dsh-client-ui-{layout,sidebar,settings,settings-general,slots,renderer,theme}、dsh-settings、dsh-client-modules、dsh-api-gateway、dsh-api-settings-controller、dsh-home-paths、dsh-terminal、dsh-agent)的 rc.3 与 rc.4 发布包逐一比对,未发现类型声明或导出变化,差异只有 package.json 的版本号和三处构建时写入的版本/提交号(侧栏构建标记、设置 → 通用里的版本行、client-modules 的提交号)。在实际运行的 rc.4 宿主上,POST /api/dsh-update-status.get-status 返回 200 且 currentVersion 为 0.2.1-rc.4,重启状态接口同样有应答,启动记录里的 instanceId 与该进程一致;__DSH_BOOT__ 中本插件的客户端入口存在、六个注入包齐全,宿主下发的浏览器包除末尾两行 source map 重写(补 ;、改写 //# sourceMappingURL=??…&rev=…)外与本次构建一致。宿主日志里没有与本插件相关的兼容拒载或报错。另外两个声明为 peer 的 @deepseek-ai/cordis 4.0.5 与 @deepseek-ai/schemastery 3.18.5 走独立版本线,也都落在本插件声明的范围内。 · 引擎范围本来就接纳 rc.4。 >=0.1.7-alpha.2 <0.3.0。已验证:0.2.1-rc.4、0.2.1-rc.3、0.2.1-rc.2、0.2.1-alpha.5、0.2.1-alpha.4、0.2.1-alpha.3、0.2.1-alpha.1、0.2.0-rc.2、0.2.0-rc.1、0.1.7-rc.2、0.1.7-rc.1 和 0.1.7-alpha.2。 dsh plugin --profile web add dsh-update-status@0.4.8 升级后刷新页面。宿主若要求重启,等手头工作做完再重启。219 个测试、两项类型检查、构建、依赖守卫全部通过,打包产物在打标签前解包比对过——除 package.json 外 19 个文件与工作区逐字节一致,package.json 只差发布时的规范化(prepack 脚本被去掉、本地 packageManager 字段被删);本次构建没有跑刷新页面的视觉验收。
v0.4.72026-10-24
中文 | English 插件 0.4.7 — 精简版本更新入口 · 版本对应 | 插件 | 已验证 DSH | npm | | --- | --- | --- | | 0.4.7 | 0.2.1-rc.3 及此前十个已验证版本 | 本次发布,latest | · 更新原因与调整 · 移除重复的「设置 → 版本与更新」菜单。 安装插件后本来就默认显示版本状态和更新提示,点击侧栏版本芯片即可查看详情;独立设置页重复了这些功能,因此删除该菜单、页面及其专用样式和文案,让设置列表更简洁。 · 版本提示和主要操作保持不变。 当前版本、更新提示、检查更新、升级说明、缓存时长和受保护的安全重启仍在版本芯片的详情面板中。仅属于旧设置页的侧栏显示开关和服务启动时间展示随页面一起移除;没有新增自动升级、自动重启或定时检查。 · 已有配置仍然兼容。 不会在升级或挂载时自动改写偏好。旧 profile 若保存了 sidebarEnabled: false,仍会保持隐藏;把该值改为 true 或删除该覆盖值即可恢复默认显示。新安装无需先到设置中开启。 · 验证与文档同步。 219 项测试、类型检查、构建和依赖防护检查通过;恢复指引渲染测试改为覆盖保留的详情面板,中英文 README 同步更新。 · 兼容性与升级 DSH 范围保持 >=0.1.7-alpha.2 Plugin 0.4.7 — a simpler version-update entry · Version matrix | Plugin | Verified DSH | npm | | --- | --- | --- | | 0.4.7 | 0.2.1-rc.3 and the ten previously verified releases | This release, latest | · Why this update and what changed · Removes the redundant Settings → Version & updates menu. Installation already shows version status and update notices by default, and clicking the sidebar version chip opens the details. The separate settings page duplicated that functionality, so its menu, page, dedicated styles and translations are removed to simplify Settings. · Version notices and primary actions are unchanged. The running version, update notices, manual checks, upgrade guidance, cache duration and guarded safe restart remain in the chip's detail panel. The sidebar visibility toggle and service-start-time display belonged only to the removed settings page and are removed with it. No automatic upgrades, automatic restarts or scheduled checks are added. · Existing configuration remains compatible. Upgrading or mounting never rewrites preferences. An older profile with sidebarEnabled: false stays hidden; set it to true or remove the override to restore default visibility. New installations require no settings-page opt-in. · Verification and documentation stay synchronized. All 219 tests, type checks, build and dependency guard pass. Recovery-guidance rendering tests now exercise the rem
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
DSH Update Status DeepSeek Harness Web 的版本状态、仅复制升级提示,以及需用户级服务监督的安全重启。 功能 ·安装 ·使用 ·更新检查 ·受监督的重启 ·局域网访问 ·可加载性 ·配置 ·故障排查 ·安全边界 ·卸载 ·发布指南 DSH Update Status 是 DeepSeek Harness 社区插件。它不修改 DSH 核心,不会安装或升级 DSH、回滚 DSH 包、下载 release 或替换 DSH 文件,也绝不会自行安装更新或自行重启 DSH;只有你显式安装并接管了当前 DSH Web 的用户级后台服务后,它才会请求一次受限的安全重启。 插件只把展开侧栏中的品牌名称换成适配 24px 品牌行的 DeepSeek + 版本芯片,官方鱼标保持不变。版本号旁的绿点表示线上没有更新的版本;橙色呼吸圆点表示线上至少有一个更新的版本——无论是稳定版、RC 还是 Alpha。点击芯片即可看到当前运行版本、每个更新版本一张卡片(各带自己的“仅复制”升级命令),以及只有装好用户级监督后才会出现的重启按钮。 功能 - 侧栏版本状态:展开侧栏显示当前 DSH 版本。
展开完整文档(README 剩余 1 节)
DSH Update Status

DeepSeek Harness Web 的版本状态、仅复制升级提示,以及需用户级服务监督的安全重启。

功能 ·安装 ·使用 ·更新检查 ·受监督的重启 ·局域网访问 ·可加载性 ·配置 ·故障排查 ·安全边界 ·卸载 ·发布指南

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

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

功能

- 侧栏版本状态:展开侧栏显示当前 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 比较。 |

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

更新检查

插件按缓存周期向 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 脚本——那个进程会占着端口,而你的服务会一直启动失败。插件会直接问操作系统「这个服务真正拥有的是哪个进程」,所以这种情况下重启按钮会保持禁用,而不是承诺一个做不到的恢复;同时它会给出两条只复制的命令:一条找出谁占着端口,一条把服务交还回去。生成的服务在连续几次启动失败后也会停下来(不再无限重拉),并把原因写进自己的日志。更多细节见用户服务监督说明。

| 平台 | 用户级拥有者 | 启动时机 | 接管后页面重启 | 说明 |
| macOS | launchd LaunchAgent | 用户登录 | 可以 | 已真机验证;不需要管理员。 |
| Linux | systemd --user | 用户登录 | 已实现;请在你自己机器上验证 | 想在登出后继续运行,可自行开启 loginctl enable-linger(本插件不会替你开)。 |
| Windows | 任务计划程序 + 当前用户 wrapper | 用户登录 | 已实现;请在你自己机器上验证 | 不需要管理员。 |

生成的服务文件里只有绝对路径、一条可审计的 PATH,以及没有密钥——不会带上你终端里的 API key、npm token、cookie 或代理凭据。默认情况下,install 会保存执行安装命令的终端 PATH,因此 Homebrew、MacPorts、Nix、asdf、Conda、Cargo 和手工安装走的是同一套规则;--path-source minimal 保留固定环境,--service-path 则使用你明确给出的完整 PATH。plan --dry-run 会在写文件前列出最终值和全部提示。原生文件、日志、状态与卸载见用户服务监督说明;想在 Linux 或 Windows 上自己确认,见跨平台验收步骤。

重启会中断正在跑的工作,且不会保存。如果 DSH 列不出正在跑什么、无法确认当前进程确实由你装的服务拥有,或者它本来就是终端直启、桌面应用托管的,它会直接拒绝重启——网页端说什么都没用。

局域网(非回环页面)访问

较早的 DSH 会把非回环页面的设置表单限制为仅内存状态。DSH 0.2.1-rc.3 及之后的表单快照不再提供该 mode 字段,官方按条目寻址的表单直接调用设置 Remote。不能仅根据页面来源判断当前的持久化或授权行为;写入是否获准由正在运行的 Host 设置策略决定。

从 0.1.2 起,本插件在局域网页面同样可用:

- 版本/更新状态照常读取。早先的版本把整个功能压在 connection.isLoopback === true 上,于是经局域网转发(dsh-bridge、dsh-lan-proxy 等)打开的页面从不发送 POST /api/dsh-update-status.get-status、详情面板打不开,还会把本包构建时所针对的版本当成"当前运行版本"显示。该判断已移除——Connection RPC 本身是已认证的,Host 路由也是本插件自己的路由。
- 偏好设置(sidebarEnabled、cacheTtlMinutes)继续读写 Host 上共享的那一份 dsh-update-status 设置条目,走的是与官方设置表单相同的公开 Remote(settings.describe / settings.mutate)。写入仍受 revision 栅栏保护,被拒时明确提示冲突而不会静默覆盖。直连通道只在官方表单报 unavailable 时才打开,所以回环页面仍走官方路径,不会多发一次线上读取。

局域网转发必须保留 DSH 的已认证传输和 Host 授权策略。本插件不会修改转发配置或授予设置访问权;Host 拒绝访问时,应由部署维护者处理。

可加载性与更新提示

本插件不为任何 DeepSeek Harness 版本背书。能不能加载由 DSH 决定,而 DSH 只看两处声明:dsh.engines.dsh 是 >=0.1.7-alpha.2 <0.3.0,@deepseek-ai/dsh-settings 的 peer 范围与之相同。在这个范围内,你想跑哪个 DSH 版本都行,不需要插件再发一版来“批准”它。

0.5.0 把原来那套机制整个删掉了:没有已验证发布清单、没有 dsh.compatibility 元数据、面板里没有“已验证兼容/尚未验证兼容”标签,也不会因为某个 DSH 版本没被测过而给出提示。插件的职责只有一条——告诉你有更新的版本,以及怎么升级;维护兼容台账本来就不在范围内,而它 13 天里发过六个以兼容声明为标题的版本。

剩下的就是更新提示:每个比当前运行版本新的版本各一张卡片,各带自己的命令。插件对某个版本知道的信息只有 npm 公布的那些——版本号、tag、发布时间——它不对“这个版本对你是否合适”下结论。

下表中 0.5.0 以下的行仍会提到那份已删除的清单,那是历史,现在已经没有版本需要等某个清单收录。

npm 上的插件版本

| 插件版本 | npm 发布状态 | 该版本是什么 |
| 0.5.0 | latest | 一个可升级版本一张卡片、各带自己的只复制命令;已验证发布机制被删除,能否加载只由 DSH 的引擎范围与 peer 范围决定 |
| 0.4.8 | 已发布 | 在当时那份已验证清单中为 DSH 0.2.1-rc.4 追加条目——那套机制已在本次发布删除;功能代码不变 |
| 0.4.7 | 已发布 | 移除重复的设置菜单;安装后默认显示版本与更新提示,详情统一由侧栏版本芯片打开 |
| 0.4.6 | 已发布 | 在当时那份已验证清单中为 DSH 0.2.1-rc.3 追加条目;后台维护和启动中的终端也需重启确认,并恢复重启风暴的原因与恢复指引 |
| 0.4.5 | 已发布 | 在当时那份已验证清单中为 DSH 0.2.1-rc.2 追加条目;功能代码不变 |
| 0.4.4 | 已发布 | 在当时那份已验证清单中为 DSH 0.2.1-alpha.5 追加条目;功能代码不变 |
| 0.4.3 | 已发布 | 在当时那份已验证清单中为 DSH 0.2.1-alpha.4 追加条目;功能代码不变 |
| 0.4.2 | 已发布 | 在当时那份已验证清单中为 DSH 0.2.1-alpha.3 追加条目;功能代码不变 |
| 0.4.1 | 已发布 | 安装服务时保存当时使用的 PATH,不论工具由哪种包管理器安装,受托管后仍能找到 |
| 0.4.0 | 已发布 | 重启变得靠得住:服务连续失败会停下而不是无限重启;按钮要求系统服务真正托管当前进程;禁用时会给出两条可复制的恢复命令 |
| 0.3.2 | 已发布 | 只改文档:版本对照表和历史发布说明都改成人话。功能与 0.3.1 完全一样 |
| 0.3.1 | 已发布 | 小补丁:面板也说明了重启前提,长任务名不再把按钮挤走。 |
| 0.3.0 | 已发布 | 面板新增重启,以及它需要的那条服务安装命令;没装服务时按钮保持禁用并说明原因。 |
| 0.2.1 | 已发布 | 隐藏版本芯片后,品牌行恢复成 DSH 官方的名称与鱼标,而不是变成空白。 |
| 0.2.0 | 已发布 | 从「通道目录」改成「一条发布线」:面板只报 npm 上最新的已发布版本,没有需要配置的东西。 |
| 0.1.12 | 已发布 | 把 DSH 0.2.0-rc.2 加入当时那份已验证清单;代码无改动。 |
| 0.1.11 | 已发布 | 声明 DSH 0.2.0 线并放宽支持范围,避免更新的 DSH 一声不响地把插件丢掉。 |
| 0.1.10 | 已发布 | 收起侧栏的窄轨里不再放按钮——那里放不下,还会把相邻插件的图标挤开。 |
| 0.1.9 | 已发布 | 修复升级 DSH 后插件消失(安装目录里残留的共享库副本会把它带崩);面板现在会告诉你要删哪个目录。 |
| 0.1.8 | 已发布 | 把 DSH 0.1.7-rc.2 加入当时那份已验证清单;代码无改动。 |
| 0.1.7 | 已发布 | 英文界面不再混入中文:状态提示改由浏览器按自己的语言渲染。 |
| 0.1.6 | 已发布 | 适配 DSH 0.1.7:插件的两个偏好改存成它自己的设置条目。 |
| 0.1.5 | 已发布 | 一颗圆点承载全部状态(绿=最新、灰=检查中、橙=有更新),提示性说明不再重绘芯片。 |
| 0.1.4 | 已发布 | 修复「正在运行的版本」显示成不可选。 |
| 0.1.3 | 已发布 | 带上局域网页面的修复,并在当时的 DSH 0.1.6 上核对过。 |
| 0.1.2 | 未发布 | 去掉「仅回环」的限制,局域网页面也能用。 |
| 0.1.1 | 已发布 | 此前的 npm 最新版;局域网页面上插件不工作。 |
| 0.1.0 | 已发布 | 首个版本。 |

- 哪个版本配哪个 DSH? 0.1.6–0.1.10 是为 DSH 0.1.7 线构建的;0.1.11 及以后同时接纳 0.2.0 线。DSH 0.1.7 改了插件设置的存储方式,所以在更早的 DSH(含 0.1.6-alpha.2)上请留在插件 0.1.5。
- 能不能加载由 DSH 判定,不看标签。 如果某个 DSH 版本拒绝加载本插件,请禁用或卸载插件,不要去改 DSH 本体——也请顺手反馈。现在已经没有“已测清单”,也没有清单条目可等。
- npm 发布状态 指 dsh plugin --profile web add dsh-update-status@latest 实际会装到的版本;只存在于仓库、尚未发布的版本属于开发状态。

- 需要固定插件版本时显式指定:

dsh plugin --profile web add dsh-update-status@0.5.0
dsh plugin --profile web add dsh-update-status@0.4.8
dsh plugin --profile web add dsh-update-status@0.4.7
dsh plugin --profile web add dsh-update-status@0.4.6
dsh plugin --profile web add dsh-update-status@0.4.5
dsh plugin --profile web add dsh-update-status@0.4.4
dsh plugin --profile web add dsh-update-status@0.4.3
dsh plugin --profile web add dsh-update-status@0.4.2
dsh plugin --profile web add dsh-update-status@0.3.2
dsh plugin --profile web add dsh-update-status@0.2.0
dsh plugin --profile web add dsh-update-status@0.1.12
dsh plugin --profile web add dsh-update-status@0.1.11
dsh plugin --profile web add dsh-update-status@0.1.10
dsh plugin --profile web add dsh-update-status@0.1.9
dsh plugin --profile web add dsh-update-status@0.1.8
dsh plugin --profile web add dsh-update-status@0.1.7
dsh plugin --profile web add dsh-update-status@0.1.6
dsh plugin --profile web add dsh-update-status@0.1.5
dsh plugin --profile web add dsh-update-status@0.1.4
dsh plugin --profile web add dsh-update-status@0.1.0

- 有两处声明决定插件能不能加载,DSH 在 profile 加载时会检查:
- dsh.engines.dsh 与 peerDependencies['@deepseek-ai/dsh-settings'] 都声明 >=0.1.7-alpha.2 <0.3.0。下界特意写成这个 alpha:按 node-semver 默认的预发布规则,>=0.1.6-0 <0.2.0 这样的范围并不接纳 0.1.7-alpha.2。上界在 0.1.11 从 <0.2.0 放宽到 <0.3.0 是同一件事的镜像:DSH 会在 profile 加载时拒绝不兼容的 bundle,而裸的 <0.2.0 恰好排除 0.2.0 正式版——DSH 0.2.0 发布当天插件就会被静默丢弃。DSH 判定时使用 includePrerelease: true,所以 0.2.0-rc.2 本来就在这个范围内。这两个边界只决定能否加载,并不表示范围内的每个版本都被测过。
- @deepseek-ai/schemastery 是 peer,不是普通依赖:DSH 0.1.7 只从运行安装解析 link 插件的 peer 依赖,否则 link: 安装会连 Host 半边都 import 失败。
- 每个版本的中英文详细说明(改了什么、影响谁、需要做什么)手写后直接作为 GitHub Release 正文:v0.5.0 · v0.4.8 · v0.4.7 · v0.4.6 · v0.4.5 · v0.4.4 · v0.4.3 · v0.4.2 · v0.4.1 · v0.4.0 · v0.3.2 · v0.3.1 · v0.3.0 · v0.2.1 · v0.2.0 · v0.1.12 · v0.1.11 · v0.1.10 · v0.1.9 · v0.1.8 · v0.1.7 · v0.1.6 · v0.1.5 · v0.1.4 · v0.1.3(含从未发布的 0.1.2)。

配置

| 选项 | 默认值 | 范围 / 行为 |
| cacheTtlMinutes | 360 | 30–1,440 分钟;仅在下一次按需读取时判断是否到期,绝不启动后台定时器 |
| sidebarEnabled | true | 只隐藏本插件自己的侧栏入口;隐藏期间品牌行恢复为 DSH 官方鱼标与字标 |

插件安装后默认显示版本状态与更新提示。点击侧栏版本芯片即可查看当前版本、检查结论、升级说明并调整缓存时长,不再提供单独的设置 → 版本与更新菜单。已有 profile 中的 sidebarEnabled 配置仍然兼容;若旧配置隐藏了芯片,将其设为 true 或删除该覆盖值即可恢复默认显示。修改缓存时长不会请求网络;只在之后普通读取且缓存已到期时更新,“检查更新”始终是立即手动检查。

缓存偏好只会在你于面板中主动选择时写入。插件没有任何自动写入路径——没有 effect、定时器,也不在挂载时写入,并由 tests/client/entry.spec.ts 挂载真实客户端入口长期守住这一点。在 DSH 0.1.7 上,上面两个偏好就是本插件条目 Config 的 volatile 字段,因此以该条目的 config 落在当前 profile 的 patch 里(~/.dsh/profiles/<profile>/cordis.patch.yml);要重置某个偏好,直接修改或删除该段即可,DSH 会在下次变更时重新加载 profile。Config 的其余字段只用于部署、不会出现在表单中:cacheTtlHours(默认 6)、timeoutMs(默认 15000)与 autoCheckOnMount(默认 true),同样写在同一份 profile patch 中。

故障排查

胶囊显示的版本不是我刚装的,而且点了没有反应。 这是插件 0.1.1 及更早版本的 connection.isLoopback 门控:在非回环页面(如 dsh-bridge、dsh-lan-proxy 这类局域网转发)上整个插件会失效,胶囊显示的是本包构建时所针对的版本,而不是正在运行的版本。先确认已装版本再升级:

node -p "require(process.env.HOME + '/.dsh/profiles/web/node_modules/dsh-update-status/package.json').version" # 需要 0.1.3 或更新
dsh plugin --profile web add dsh-update-status@latest

升级 DSH 之后芯片变红了。 在 0.1.5 及更新版本上,红色只代表一件事:插件无法判定状态——registry 读取失败,或两个版本无法按 SemVer 比较。0.1.4 及更早版本的判定更宽:客户端把任何警告都当成故障,所以当 DSH 比插件清单更新时,哪怕读取其实成功了,芯片也会被涂红。0.1.5 把两者分开——failure 仍然重绘,提示只留在面板;0.5.0 则把那条提示彻底删除,所以更新的 DSH 版本再也不会产生它:

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

明明知道有更新的 DSH,面板却一张卡片都没有。 列表是检查那一刻按 npm 上已发布的版本、与你正在运行的版本比较得出的。点检查更新重新读一次。如果某个版本只存在于插件看不到的 registry,或者你运行的版本已经是已发布的最高版本,那就没有卡片可显示——不显示卡片正是正确答案。

版本一直不变。 Host 会缓存一次 registry 响应,默认 360 分钟,且只有普通读取才会判断到期。点检查更新可立即刷新,或调小 cacheTtlMinutes。检查失败时会保留上一次成功缓存,并在版本号旁显示警告。

完全连不上 npm registry。 插件会报告失败,并仍然显示本地检测到的运行版本。registry 访问只允许 HTTPS 的 registry.npmjs.org;代理或离线环境会给出这条警告,而不是编造一个版本号。

升级之后插件整个消失了,宿主日志里是 volatile is not a function。 0.1.5 及更早版本把 @deepseek-ai/schemastery 声明为普通依赖;从 0.1.6 起它是由 DSH 提供的 peer,而 DSH 给它加的 volatile() 正是把两个偏好变成这个条目设置表单的机制。如果该包的一份旧副本被留在插件自己的安装目录里(用本地目录安装时被一起拷进来的 dev node_modules,pnpm 永远不会清理),Node 就会解析到那份旧副本,缺失的方法在宿主半 import 阶段直接抛错,插件在来得及报告任何信息之前就消失了。新版本改为显式解析平台那份,两种情况都能加载;只找得到旧副本时,面板会给出 stale-schemastery 提示并指出该删除哪个目录。删除残留目录后重启 DSH:

rm -rf ~/.dsh/profiles/<profile>/node_modules/dsh-update-status/node_modules

安全边界

- registry 访问只允许 HTTPS registry.npmjs.org,并拒绝重定向。
- Host 只通过 DSH 已认证的 Connection RPC 返回普通 JSON。
- 不注册公共 Remote Service,也不注册模型 Tool。
- 插件代码不会启动 npm/pnpm 子进程。
- canApplyInPlace 恒为 false。
- 插件不会安装、升级、回滚或替换 DSH 文件。单独、显式执行的服务 CLI 只会落盘当前用户的服务定义,绝不会杀掉占用端口的 DSH。
- 重启只接受 POST 的已认证 Connection RPC,并由服务端同时检查明确的原生服务标记与平台身份;终端直启、桌面版、未知环境或无法完整检查活动工作时均拒绝退出。
- 刷新失败时保留最后一次成功缓存并显示警告;冷启动失败也会保留本地版本信息。

卸载

dsh plugin --profile web remove dsh-update-status

重启 DSH 并刷新 Web GUI。卸载不会删除偏好:要清空偏好,请从当前 profile 的 cordis.patch.yml 中删除 dsh-update-status 条目的 config 段。

开发

pnpm install --frozen-lockfile
pnpm run test
pnpm run build
pnpm pack --dry-run

发布 tag 使用 npm Trusted Publishing 与 GitHub OIDC。请按 docs/RELEASING.md 在 npm 网站一次性绑定 Trusted Publisher,随后推送匹配的 vX.Y.Z tag;仓库不保存长期 npm token。

MIT,详见 LICENSE。
预览分享卡片长什么样 ↓idoall/dsh-update-status
分享 · DeepSeek Harness Hub
idoall/dsh-update-status

只读查看 DeepSeek Harness Web 版状态与发布渠道指引的插件

这是你的仓库?认领条目

回到顶部