daha1216/dsh-update-checker ↗★ 1

dsh-update-checker

一键检查已安装插件的上游更新并展示更新日志 适合安装了较多第三方插件的用户,方便快速掌握更新动态,不自动安装更安全。

套件
dsh-update-checker
相容性
待驗證
Cordis 依賴範圍
>=4.0.0
版本
0.2.3
授權
MIT
最近更新
2026年10月1日

同名套件的其他儲存庫

安裝

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:daha1216/dsh-update-checker

dsh-update-checker

DSH 插件:在设置的「插件更新」页一键检查本机已安装的第三方插件是否有上游更新,并展示更新内容(changelog)。

只做检查,不负责安装或更新。

工作方式

  • 宿主端读取当前 profile 的 package.json,找出第三方依赖(跳过 @deepseek-ai/* 官方内置包)。
  • 按安装来源分类检查:
    • npm 版本号(^1.2.3、0.1.6 等):查询 npm registry(npmjs → npmmirror 依次回退)的 dist-tags.latest。
    • GitHub 引用(github:owner/repo#tag):查询 GitHub Releases 最新版本;#tag 缺省时仅展示最新 Release 供参考。
    • 本地安装(file:...):标记为本地开发安装;若包声明了 GitHub 仓库,附带展示上游最新版本作参考。
  • 更新内容来自 GitHub Releases(当前版本到最新版本之间的所有条目)。GitHub API 不可达时回退 jsDelivr 的 tag 列表(只有版本号,无正文);GitHub API 匿名限额 60 次/小时/IP。
  • 客户端设置页通过 Connection RPC 通道(/dsh-update-checker)调用宿主端。宿主端把该通道以 kind:'prefix' 路由挂到自身 inject 的 webServer 上,逐分支复刻官方 /api 传输协议(client-request → server-response 信封),并用 connection.requestRejection 做请求栅栏(旧版回退 loopback 校验)。不使用 ctx.connection.rpc.handle:当前 dsh 桌面构建中该方法内部访问 owner.webServer 会抛 cannot get property "webServer" without inject(dsh-pocket lib/web-rpc.js 记录了同一回归),仅作为无 webServer 的 headless 环境兜底。

性能与健壮性设计

  • 单请求超时 8s(registry 正常 disposer)` 注册全部清理;harness 有「dispose 移除路由 + 重载干净注册」回归测试。若活宿主已残留旧版孤儿路由,重启 DSH 一次即清。

设置页 UI(v0.2.3 重设计)

  • 状态筛选 chips:全部 / 有更新 / 已是最新 / 本地 / 需关注,兼作统计摘要;点击过滤,仅显示有内容的分组。
  • 默认按状态排序(有更新 → 本地落后 → 异常 → 最新 → 本地 → 其他,同级按名称),可一键切换"按名称"。
  • 发行说明 markdown 渲染:标题/有序无序列表/引用/分隔线/代码围栏/粗体/行内代码/链接(图片降级为链接)。纯字符串→AST→React 元素,全程无 innerHTML;解析器有独立测试(node test/md.test.mjs,23 例)。
  • 完整状态反馈:缓存读取骨架屏、从未检查过的居中 CTA、错误横幅带"重试"、缓存超过 24h 提示"建议重新检查"、相对时间(悬停显示绝对时间)。
  • 展开状态提升到页面级:重新检查后已展开的行保持展开;"展开全部/收起全部"(可展开行 ≥2 时出现)。
  • 待更新卡片左侧品牌色竖条一眼可辨;卡片头部整行可点击展开(带旋转箭头);计数为 0 时不再显示 (0)。
  • 检查中按钮内置旋转 spinner(keyframes 由插件注入,fiber 卸载时清理)。

安装

dsh plugin --profile web add github:daha1216/dsh-update-checker

(--profile 按需替换;开发态可直接 dsh plugin add "file:")

开发

  • index.js — 宿主端 Cordis 插件(webServer 路由 + RPC 信封 + 请求栅栏)
  • lib/checker.js — 检查逻辑(纯函数 + fetch,可独立测试)
  • client/client.js — 设置页(module-loader factory 格式,手写 React.createElement)
  • locale/ — 插件卡片显示文案
  • test/harness.mjs — 独立端到端验证:真实 cordis + mock webServer/connection + 真实 profile,node test/harness.mjs 运行(17 项断言)
  • test/md.test.mjs — 设置页 markdown 解析器测试(23 例)

无运行时依赖;peer 仅 @deepseek-ai/cordis。

注意:修改代码后重新 install_bundle 需先升 package.json 版本号(pnpm 按 name+version 缓存 file: 打包)。宿主端自 v0.2.2 起清理经 ctx.effect 正确接线,remove+install 热换已验证无需重启;设置页(client/client.js)改动需刷新一次 GUI 页面加载新脚本。