DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

daha1216 /

daha1216/dsh-update-checker

Verified

🔔 DeepSeek Harness 第三方插件更新巡检器:一键/后台定时巡检上游版本,Release 变更深度解析,侧边栏角标提醒与一键「让 AI 更新」 (Plugin Update Checker for DSH)

★ 2 Stars3 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@6fcfffda

🔔 dsh-update-checker · 插件更新巡检器

DeepSeek Harness 第三方插件一键与后台智能巡检:上游探测、Release 变更深度解析、侧边栏角标提醒与一键「让 AI 更新」

Release License: MIT DSH plugin Tests Passing Node >=22

中文 · English


随着 DeepSeek Harness(DSH)生态的蓬勃发展,上下文压缩、技能管理、会话时光机等各类第三方插件极大地拓展了智能体的能力边界。然而在日常使用中:

  • 关键安全漏洞已修复、重要特性已发布,你却对上游新版本浑然不知?
  • 每次都要手动在 npm、GitHub Releases 与本地开发目录之间逐个比对版本,繁琐且费时?
  • 市面上的更新工具要么容易暗中破坏本地依赖环境,要么动辄消耗大量网络配额?

dsh-update-checker 是专为 DeepSeek Harness 打造的原生级「插件更新巡检器」。它坚守 「纯净只读巡检 · 绝不越权修改」 的安全铁律,不仅提供一键全景扫描与详尽的 Release 变更对比,更支持低开销的后台定时自动巡检与侧边栏轻量角标提醒。发现新版本时,轻轻一点即可将更新指令交由 AI 智能体在受控环境下安全完成。


📸 实机体验

侧边栏常驻提醒浮层(后台智能巡检) 设置中心「插件更新」全景管理面板
侧边栏角标与待更新浮层气泡 设置中心插件更新全景面板
后台定时巡检静默运行,发现新版本时在侧边栏底部展示数量角标,点击唤起交互气泡,支持一键「让 AI 更新」与版本忽略 一键全景扫描,按状态与安装来源即时筛选,后台巡检收成一行、按需展开配置,直观浏览 Release 变更日志

✨ 核心特性

1. 🔍 一键全景扫描与多源状态精准识别

  • 全依赖自动穿透:智能解析当前 Profile 的 package.json,自动区分第三方扩展,自动跳过官方内置的基础包(@deepseek-ai/*)。
  • 全源格式兼容:
    • npm 版本依赖(^1.2.3、~0.1.6、精确版本):优先查询 npm 官方镜像源,并支持 npmmirror 智能回退。
    • GitHub 远程引用(github:owner/repo#tag):精准比对 GitHub Releases 最新稳定版本;未写 #ref 时用已装版本与最新 tag 比较,落后即判「有更新」,版本号无法排序时才判「跟踪分支」(v0.4.1 起)。
    • 本地开发安装(file: / link:):若项目声明了 GitHub 仓库,自动比对本地与上游差异,清晰标明「本地领先」、「本地落后」或「与上游一致」。
  • 状态细分与统计筛选:状态筛选提供 全部、有更新、已是最新、需关注;安装来源(npm / GitHub / 本地)是另一个独立下拉筛选,因为本地检出同样可能落后上游。列表支持一键按状态或名称排序。
  • 紧凑列表:每行合并名称、状态与版本,介绍默认一行,安装 spec 与发行说明展开查看——一屏能看到更多插件(v0.7.0 起)。

2. 🔔 智能后台调度巡检与侧边栏实时气泡

  • 灵活的后台巡检机制:支持在设置中心自定义巡检频率(每 30 分钟 / 1 小时 / 2 小时 / 6 小时或自定义分钟数)。
  • 非侵入式轻量提醒:发现新版可更新(含 npm/GitHub 安装的 update 与本地安装落后的 local-behind)后,仅在左下角侧边栏底部显示低调的待更新数量角标(如 ↑ 插件更新 2),绝不弹窗打扰当前对话与编码心流。
  • 丰富的气泡操作:
    • 版本迁移直观对比:清晰展示每个待更新插件的 当前安装版本 → 最新稳定版本。
    • 忽略本次提醒:本次暂不提醒,待检测到更高版本或手动点击检查时重新触发。
    • 全部忽略:将当前所有待更新插件标记为已阅,跳过当前版本的持续提醒。
    • 状态持久化防丢失:即便重启 DSH 桌面端或重载宿主,忽略列表与待更新状态完整保留。

3. 🤖 无缝联动智能体:「让 AI 更新」与「一键更新」

  • 坚守只读安全底线:插件自身绝不静默运行任何安装脚本、绝不修改 node_modules 与配置文件。
  • 一键智能委托:在气泡弹窗或插件列表点击「让 AI 更新」,插件会自动在当前会话输入框填入标准化提示词(例如 帮我更新 billion-context 插件)。未聚焦或无会话时自动回退为剪贴板复制,由 DSH 智能体遵循该插件的官方规范完成环境备份、版本更新与重启验证。
  • 一键更新(批量):当检测到多个插件可更新时,气泡底部与设置页头部出现「一键更新」按钮。点击后新建一个对话,把整份更新清单填进它的输入框但不发送——清单含插件名、已装 → 最新版本、安装来源(file: / link: / github: / npm)与 profile 名,AI 据此逐个更新并回报结果。发送与否始终由你决定;新会话无法创建时回退当前输入框,再回退剪贴板。

4. 📖 深度 Release 变更日志解析(Changelog Diff)

  • 区间化更新呈现:自动抓取并聚合「当前安装版本 → 最新版本」之间的所有 Release 发行记录,不漏掉任何中间修复。
  • 纯原生 Markdown 渲染:内置自主实现的高性能轻量 Markdown AST 解析器(涵盖多级标题、列表、代码围栏、引用块、粗体与链接等)。
  • 零 XSS 隐患:纯字符串到 AST 再到安全 React 节点,全程不使用 innerHTML;链接额外做协议白名单,仅 http(s): 可成为可点击锚点(v0.4.0 起)。
  • 按需惰性渲染:默认保持折叠,展开单行时才解析渲染正文,即便长达数万字的更新日志也能瞬间展开,丝滑流畅。

5. ⚡ 工业级统一出站网络层与零配额浪费

  • 单飞并发合并(Single-Flight Coalescing):同一时刻对相同 URL 的并发探测合并为单一网络请求(如多个插件引用同一上游仓库时共享一次请求)。
  • TTL 内存缓存 + ETag 条件请求(304 Not Modified):
    • 响应结果在 5 分钟内直接由内存返回;
    • 缓存过期后自动附带 If-None-Match 发起条件验证,GitHub 304 响应完全不消耗匿名 API 配额(60次/小时/IP)!
  • 支持高额 API Token:在宿主环境配置 GITHUB_TOKEN 或 GH_TOKEN,自动以 Bearer 头鉴权,配额提升至 5,000 次/小时。
  • 全局并发限流与熔断保护:出站并发上限严格控制为 6;若遭遇上游 403/429 限流,自动按 x-ratelimit-reset 进入静默冷却,并平滑降级至 jsDelivr CDN 保证可用性。
  • npm dist-tags 极速路径:优先请求仅 ~200B 的轻量级 dist-tags,绝大多数已是最新版的插件一击即中,省去下载 MB 级完整 packument 的巨额带宽与时间。

6. 🛡️ 架构稳定性与原生设计融合

  • 严格遵循 Cordis 4 生命周期:清理逻辑全部通过 ctx.effect 挂载;调度器状态使用闭包隔离,杜绝向 ctx 挂载私有属性导致宿主崩溃的风险。
  • 原子化落盘与 Profile 隔离:状态写入采用临时文件(tmp)+ 重命名(rename)的原子操作;缓存按 Profile 严格分离存储,多 Profile 环境下绝不串台。
  • 进程内串行写锁(withStateLock):彻底解决后台巡检落盘与用户前端操作(如点击忽略)之间的并发竞态问题。
  • 深度融合 DSH Design Tokens:经历 v0.3.2 配色全量重构,深色模式下按钮文字、高亮链接、卡片阴影与边框完全对齐官方无障碍标准。

🧭 状态含义一览

状态标识 界面展示 详细含义
update 有更新 上游存在比当前安装版本更新的正式稳定版,可展开查看多版本 Release 日志。
local-behind 本地 · 上游有新版 本地开发安装(file: / link:)声明的版本低于上游最新版;v0.4.0 起同样计入侧边栏角标提醒。
local-ahead 本地 · 领先上游 本地安装版本高于上游最新正式版(处于前沿开发中或上游发生版本回滚)。
local-latest 本地 · 与上游一致 本地安装版本与上游最新正式版完全吻合。
latest 已是最新 npm 安装版本与上游最新稳定版一致。
branch 跟踪分支 安装来源为分支或特定 Commit(如 #main、commit sha),且已装版本号无法与 tag 排序;可排序时改判「有更新」或「已是最新」(v0.4.1 起)。
unknown 无法比较 引用形式无法识别出标准版本号(如非标准 tag)。
local 本地安装 本地安装且未声明上游 GitHub 仓库,无参考基准。
error 检查失败 查询上游失败(网络超时、域名无法解析或触发限流等),卡片内展示具体原因。

📦 安装与配置

前置要求:已安装 DeepSeek Harness 且 Node.js 版本 ≥ 22。

方式一:推荐通过 Profile 安装(GitHub 远程源)

在终端中执行以下命令(以桌面版 Profile 为例):

# 桌面版安装
dsh plugin --profile desktop add github:daha1216/dsh-update-checker

# Web 独立服务部署安装
dsh plugin --profile web add github:daha1216/dsh-update-checker

💡 重要说明:

  1. 安装完成后,请完全退出并重新启动 DSH 桌面端(使宿主模块加载生效),然后刷新一次 GUI 页面(加载设置页脚本)。
  2. 后续若要更新巡检器自身,重新运行上述相同的 add 命令即可。

兼容性:engines.dsh 声明 ^0.2.0-rc.1,即 DSH 0.2.0-rc.1 及以上、0.3.0 之前。装到不匹配的版本时,插件管理器会以 incompatible-version 明确拒绝;确实要在别的版本上试,可用 dsh plugin allow-version 加一次性豁免。DSH 升到 0.3.x 后需要本插件发新版放开范围。

方式二:本地开发安装(Checkout 模式)

如果你希望在本地克隆并进行调试修改:

git clone https://github.com/daha1216/dsh-update-checker.git "D:/dsh work/dsh-update-checker"
dsh plugin --profile desktop add "file:D:/dsh work/dsh-update-checker"

🔑 环境变量与限额优化

环境变量 作用说明
GITHUB_TOKEN / GH_TOKEN 用于以 Bearer 格式鉴权 GitHub API。未设置时保持匿名模式(60 次/小时/IP);设置后配额提升至 5,000 次/小时。

🏗️ 项目架构与技术细节

dsh-update-checker/
├── index.js          # Cordis 宿主插件核心:路由注册、RPC 通信、后台定时巡检调度器、生命周期管理
├── lib/
│   ├── http.js       # 统一出站网络层:单飞并发合并、TTL 缓存、ETag 304 条件复用、主机熔断与降级
│   ├── checker.js    # 纯函数检查逻辑:package.json 解析、多源版本探查、Release 聚合对比
│   ├── reminder.js   # 提醒状态管理:指纹计算、忽略策略、多 Profile 原子化落盘与并发串行写锁
│   └── md.js         # 零依赖轻量 Markdown 解析器:安全 AST 构建与 React 元素映射
├── client/
│   └── client.js     # 客户端设置中心与侧边栏渲染面板:双语国际化、UI 状态机、交互反馈
├── locale/           # 插件元信息多语言配置(zh.json / en.json)
├── assets/           # 实机界面展示资源
└── test/             # 详尽的自动化测试套件

1. 通信机制与安全栅栏

  • 客户端设置页与侧边栏浮层通过 Connection RPC 通道(/dsh-update-checker)与宿主端通信。
  • 宿主端将通道以 kind: 'prefix' 路由挂载至受信任的 webServer 上,逐分支遵循官方 /api 传输规范,并使用严格的同源与 Loopback 校验作为请求安全防护栏。

2. 调度器容错与并发保证

  • 调度器完全闭包化,杜绝属性逃逸污染。定时器在纤维失效前即被 ctx.effect 严格清理。
  • 运行中修改检查频率支持即时重排,任意时刻保证全局仅有一个活跃的巡检定时器。
  • 扫描结果落盘与用户前台点击「忽略」通过 withStateLock 排队处理,杜绝数据覆写。

🧪 自动化测试

项目遵循严格的测试驱动开发规范,内置 11 个独立测试套件、覆盖 362 项断言,涵盖纯函数、出站层、HTTP 桥、端到端集成与宿主生命周期验证:

# 首次运行先装开发依赖(lifecycle / reminder-scheduler 需要真实的 @deepseek-ai/cordis)
npm install

# 运行离线全量单元测试
npm test

# 运行真实环境端到端测试(临时隔离环境)
npm run test:e2e

@deepseek-ai/cordis 在插件运行时是 peer 依赖(由宿主提供),这里作为 devDependency 只为让两个需要真实 Cordis 上下文的套件能在任意机器上跑起来。若想复用宿主自带的 cordis 而不是 npm 装的那份,设置 DSH_CORDIS_PATH 指向它的 lib/index.js 即可,会优先生效;两个套件在拿不到 cordis 时会打印明确的 SKIP 提示,而不是静默通过。

测试矩阵包含:

  • test/checker.test.mjs:69 项断言,覆盖版本比较精度/范围、来源判定、精确 pin 与状态流转;
  • test/http.test.mjs:28 项测试,覆盖 TTL 缓存、单飞合并、ETag 304、容量上限、错误体释放与熔断降级;
  • test/host.test.mjs:30 项测试,loopback 栅栏与 node:http → fetch 桥的真实 socket 行为(超大请求、断连、错误收敛);
  • test/integration.test.mjs:33 项测试,脚本化网络模拟下的复杂检查流(含 #semver: 范围、404 不回源镜像、两个 registry 传输失败时改用 CDN 备用源);
  • test/md.test.mjs:23 项测试,深度校验 Markdown 语法解析保真度;
  • test/render-harness.mjs:客户端设置页与浮层气泡离线渲染冒烟测试;
  • test/lifecycle.test.mjs:真实 Cordis 4 环境下插件加载、卸载与资源释放测试;
  • test/reminder.test.mjs:77 项断言,后台提醒状态机、忽略语义、指纹防碰撞与原子读写校验;
  • test/reminder-panel.test.mjs:19 项源码守卫,锁定强制刷新、计时/看门狗与状态行文案;
  • test/batch-update.test.mjs:43 项断言,一键更新清单构造、可更新判定与「新建对话只填不发」的交接链;
  • test/reminder-scheduler.test.mjs:35 项断言,调度器防重排竞态、强制刷新下限与 RPC 降级回归测试。

📝 更新日志

v0.7.3(2026-10-30)

  • 「一键更新」在 0.2.1-rc.3 宿主上真的会新建对话了:rc.3 的 startSession 原生支持草稿({ prompt },经 conversation.input.requestDraftInitialization 落到新会话的输入框)。插件此前是自己调 startSession(),再等「主会话绑定换成另一个 session」才填草稿——但宿主新建会话时可能复用已有的空白会话,绑定不会变,这个等待永远不成立,10 秒后提示词被丢进剪贴板,而面板早已关闭,看起来就是点了没反应。现在优先走宿主原生草稿接口,一次调用完成「新建 + 预填 + 不发送」,失败也由宿主自己的通知通道报出来。
  • whenDraftExists: 'replace':一次点击一个结果——不管会话是新建的还是复用的空白会话,点完输入框里就是那份清单。旧宿主忽略选项参数时退回自填路径,并加了 500 毫秒宽限期:绑定没变(即复用了空白会话)就填当前输入框,不再空等。
  • 测试:test/batch-update.test.mjs 增至 54 项断言,新增「走原生草稿接口」「参数与 whenDraftExists 正确」「原生路径不直接写 composer」「复用空白会话时草稿落到当前会话」「两条路径都不提交」等断言。

未发布(安全与健壮性巡检,2026-10-27)

  • 宿主进程不再可能被一次断连打崩:node:http → fetch 桥的全部异步路径(读请求体、fetch、写响应、waitForDrain)现在收敛在一个 try/catch/finally 里;客户端在响应中途断开时取消响应体并停止写,500 响应只回 update check failed,不再把内部错误文本或绝对路径带回渲染层。新增 test/host.test.mjs 用真实 socket 覆盖超大请求、断连与抛错。
  • loopback 栅栏改为解析 Host 而不是 split(':'):127.0.0.1:56185@evil.example 这类 userinfo 前缀不再被当作回环,IPv6 [::1]:56185 恢复正常;Origin 比较走规范化 authority。
  • 请求 URL 不再取自 Host:桥接层用固定内部 origin + req.url 的 pathname/search 构造 Request,absolute-form 请求行与畸形 Host 不再让 new Request() 抛错。
  • check.run 的强制刷新加了 30 秒下限:连点「立即检查」复用在途/刚完成的扫描,避免一轮又一轮烧掉 GitHub 匿名配额(90 秒非强制新鲜窗口保留)。
  • 扫描器的输入边界收紧:profile package.json 不可读/非法 JSON 现在显式失败,不再伪装成「没有插件」;依赖名按 npm 形状校验,../ 之类的键不会被拼进 node_modules 路径;packument 名称统一 encodeURIComponent;主 registry 404 不再回源 npmmirror(避免泄露私有包名)。
  • 版本判定修正:超过 2^53 的版本段按字符串比较不再丢精度;1/1.2 视为 npm 范围而非精确 pin;#semver:^1.2.0 按范围选最高满足 tag,不再建议跨大版本;git+ssh / ssh:// / git:// / scp 形式的 GitHub 依赖恢复识别。
  • npm 侧多了 CDN 备用源:当两个 registry 都连不上(企业 TLS 解密网关、DNS 污染、registry 故障)时,改用 unpkg / jsDelivr 的 package.json 读最新版本号,npm 包不再整行变红;registry 明确 404(包不存在)时仍然不向任何第三方主机回源,传输失败的主机冷却 60 秒避免每条包都撞一次超时。新增集成测试覆盖普通名、scoped 名与「404 不走 CDN」。
  • 进程级内存与文件卫生:HTTP 响应缓存加 400 条上限并在 fiber 卸载时清空;每次扫描的缓存结果按 profile 释放;提醒 ignored 表随扫描结果裁剪;配置/状态/快照文件以 0700/0600 写入且失败时清理临时文件;配置写失败不再回报「保存成功」。
  • 客户端定时器与指纹:checkNow 的 500ms ticker / 90s watchdog 在成功、超时、卸载时都会被清理;draftInNewSession 先订阅再首次填充,同步挂载的新会话不会再留下永久监听;提醒指纹改为 JSON 数组编码,插件名里的 @/| 不再造成误判。测试矩阵扩到 11 个套件、362 断言。

v0.7.1(2026-10-27)

  • 修复:侧栏入口被同一行的其它插件挤掉。侧栏底部是多个插件共用的 flex 行,本插件此前写死 width: 100% 且 flex: none——只要同一行还有别的入口(例如「破甲」的状态点),空间就被本插件全额占走,另一个入口被压成几像素宽的灰点。改为 flex: 1 1 0%; min-width: 0:有空间就铺开,没空间就自己收,标题过长交给既有的省略号;折叠态(只剩图标)显式 flex: 0 0 36px,宽度与改动前一致。
  • 纯客户端 CSS 改动,刷新页面即生效,不需要重启宿主;后端、状态机与存储格式均未变动。

v0.7.0(2026-10-26)

  • 设置页改为「更新优先、设置收起」:低频的后台设置不再占满首屏,插件列表的信息密度也不再被长介绍挤掉。四件事:
    • 后台提醒收成一条:开关、当前状态与检查频率并排一行(自动检查 · 已开启 · 每 2 小时),频率选择器、说明与保存错误收进「设置」展开区。日常只看不改的人,一屏就能扫完。
    • 插件行瘦身:名称、状态、版本合并进同一行,介绍默认只留一行(悬停有完整文本,展开可见全文),安装 spec 与发行说明移进展开区。同屏可看的插件明显变多。
    • 状态与来源分开筛:安装来源(npm / GitHub / 本地)从状态 Chips 里拆出来,改为独立下拉框,只列出当前实际装了的来源。原先「本地」与「有更新」混在一排,读起来像互斥,而本地检出同样可能落后上游。
    • 按钮说人话:「一键更新」下方常驻一行「新建对话并填入更新清单,由你发送」,不再只藏在悬停提示里。
  • 本地落后行补上更新按钮:local-behind(file: / link: 本地安装、上游有新版)此前会进「有更新」筛选与批量清单,却没有行内的「让 AI 更新」按钮。现在行内按钮与批量清单共用同一个 isActionable 判定,两类可更新行操作一致。
  • 健康状态安静下来:「已是最新」等正常状态从绿色改为中性色,红色只留给真正失败的行;一眼看过去,需要处理的才显眼。
  • 测试:test/render-harness.mjs 的状态种子随新增的 sourceFilter / expanded 更新,行内按钮断言改为锁定 isActionable 判定。

v0.6.0(2026-10-26)

  • 「一键更新」改为新建对话、只填不发:此前点一下就把整份清单拼成提示词塞进当前会话并直接发送,等于替你按了发送键。现在改为新建一个对话、把清单填进它的输入框,不发送——发送时机由你决定。填的是新会话的输入框而不是当前那个,所以不会污染正在进行的对话;新会话的 composer 尚未挂载时,等它就绪再填(最长 10 秒),期间不会退而填到旧会话。新会话无法创建时回退到当前输入框,再回退剪贴板。
  • 实现:新增 draftInNewSession(订阅 uiSession.adapter.current,等主绑定切到新会话且其 inputActions 就绪后 setDraft),取代原先的 sendComposerText(setDraft + submit);batchUpdateHint / batchUpdateSent 中英文案同步改为「新建对话并填好,由你发送」。
  • 测试:test/batch-update.test.mjs 重写为 43 项断言,新增「会新建会话」「草稿不落到旧会话」「新会话无 composer 时不乱填」「无 workspace 服务时回退当前输入框」「批量路径绝不调用 submit」等回归,并断言旧的 sendComposerText 已彻底移除。

v0.5.0(2026-10-26)

  • 一键更新(批量):检测到多个插件可更新时,侧边栏气泡底部与设置页头部出现「一键更新」按钮,把整份待更新清单整理成一条提示词交给 AI。
  • 清单带安装来源:每行含插件名、已装 → 最新版本、安装来源 spec(file: / link: / github: / npm 版本范围)与 profile 名——file: / link: 是本地检出,AI 必须去对应目录拉取而不是重新 add,缺了这条信息很容易空跑。
  • 覆盖范围与角标一致:update(npm / GitHub 安装)与 local-behind(本地安装但上游有新版)都算可更新。
  • 测试:新增 test/batch-update.test.mjs。

v0.4.3(2026-10-25)

  • 「立即检查」按钮现在每次点击都真的有反应:此前点击后服务端在 90 秒新鲜窗口内直接返回缓存结果、客户端也不作区分,连续点击看起来完全没反应。现在手动点击会带 force: true 跳过新鲜窗口(仍在途扫描复用,不会重复烧 GitHub 配额),设置页的「检查更新」同样如此。
  • 检查过程可见、按钮不会卡死:检查中按钮显示已用秒数(检查中… 3s),并新增一行状态提示(刚刚已检查 / 上次检查:5 分钟前);原实现里 reload() 抛错会跳过 setBusy(false),按钮会永久停在禁用态——现改为一定会复位,并加了 90 秒看门狗兜底超时提示。
  • 测试:新增 test/reminder-panel.test.mjs(16 项源码守卫,锁定强制刷新、计时/看门狗、状态行与中英文案键),已接入 npm test。

v0.4.1(2026-10-24)

  • 未 pin 版本的 GitHub 安装不再漏报更新:github:owner/repo 这类没有 #ref 的安装,此前只要上游存在 tag 就一律判为「跟踪分支」——即使已装版本明显落后(实测 dsh-retrace 0.4.55 对上游 v0.4.56 仍显示跟踪分支,既不算「有更新」也不进角标)。现在改为拿已装版本与最新 tag 比较:落后判「有更新」并带出版本区间,追平或领先判「已是最新」;只有已装版本号无法排序(如 dev、commit sha)时才保留「跟踪分支」。
  • 测试:新增三个夹具场景(无 ref 落后 → update、无 ref 追平 → latest、版本号不可排序 → branch),并修正分支引用的既有断言;integration 断言 21→24。

v0.4.0(2026-10-24)

  • 角标提醒覆盖本地落后安装:local-behind(file: / link: 本地安装、上游已有新版)此前只进设置页列表、不进侧边栏角标——列表显示「有更新」而角标沉默的口径不一致就此消除,两类行现在统一进入待更新角标与忽略流程。
  • 链接协议白名单(安全加固):Release 正文与仓库链接属上游可控的不可信输入,渲染层现在仅放行 http(s): 协议的链接,javascript: / data: 等伪协议一律降级为纯文本展示,杜绝经由 Release 正文注入可点击危险链接的可能。
  • 测试矩阵增补:新增 safeHref 单元断言与渲染树级链接白名单回归(恶意 markdown 链接必须渲染为纯文本),提醒断言增至 57 项。

v0.3.5(2026-10-19)

  • 修复巡检重排竞态:解决在扫描执行期间修改间隔可能遗留两个定时器的问题。重排请求统一由收尾时处理,保证任意时刻仅有一个定时器,新间隔即刻生效。
  • 引入状态写串行锁(withStateLock):将后台扫描结果记录与用户前台「忽略」操作纳入队列,彻底避免状态并发覆盖。
  • RPC 回退路径增强:connection.rpc.handle 回退路径在无 webServer 环境下优雅降级,防止激活失败。
  • 自定义间隔智能适配:手动写入非预设检查间隔时,设置面板自动动态添加对应项并正确选中。
  • 测试矩阵增补:增补调度器重排与容错回归断言,总断言数增至 33 项。

v0.3.4(2026-10-19)

  • 修复待更新状态持久化读回丢失:重构状态反序列化校验逻辑,解决从 reminder-<profile>.json 读回时待更新列表被清空的偶发问题。
  • 一键「让 AI 更新」体验落地:卡片与浮窗按钮升级为「让 AI 更新」,点击后自动向会话输入框填入标准化提示词。
  • UI 布局优化:将「后台提醒」卡片提升至设置页顶部,配置更直观。

v0.3.3(2026-10-18)

  • Cordis 4 架构深度重构:修复 DSH 0.2.1-rc.2 宿主上的崩溃问题;调度器状态收敛为闭包私有;清理函数移至定时器启动前注册。
  • 正式引入侧边栏浮层提醒:实现设置中心定时轮询配置、侧边栏底部待更新角标与交互气泡浮窗。

v0.3.2(2026-10-18)

  • 深色模式全量重构:全面对齐 DSH 官方 Design Tokens(--dsw-alias-button-primary-fill、--dsw-alias-link、--ds-font-family-code),彻底解决深色模式下白底白字与按钮糊团问题。

v0.3.1(2026-10-18)

  • Profile 隔离与状态增强:缓存文件按 Profile 隔离;新增 local-ahead(本地领先上游)状态;修复 Release 过滤区间;支持 GITHUB_TOKEN 高额鉴权。

v0.3.0(2026-10-17)

  • 统一出站网络层重构:引入限流、单飞合并、TTL + ETag 缓存、主机熔断与 npm dist-tags 极速路径。

🙏 贡献者

感谢为项目提交代码与改进建议的贡献者:

  • @lanslot4n93r — 深色模式主按钮配色修复(改用 label-primary-inverted)。

📄 开源协议

本项目基于 MIT License 协议开源。

🔗 相关项目

  • 收录于 dsh-plugin-collection(DSH 精选第三方插件索引)。
  • 欢迎探索同作者的其他 DSH 实用工具:
    • dsh-retrace — 会话时光机:消息撤回、原地编辑重发与产物版本化回退。
    • dsh-skills-manager — 本地技能可视化管理面板:一站式配置模型与用户调用策略。
    • dsh-watcher — 跨会话环境变更监控器。
—/ 5

No ratings yet

Verified DSH bundle

Commit 6fcfffda1293

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout