🔔 dsh-update-checker · 插件更新巡检器
DeepSeek Harness 第三方插件一键与后台智能巡检:上游探测、Release 变更深度解析、侧边栏角标提醒与一键「让 AI 更新」
中文 · 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 版本依赖(
- 状态细分与统计筛选:状态筛选提供
全部、有更新、已是最新、需关注;安装来源(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
💡 重要说明:
- 安装完成后,请完全退出并重新启动 DSH 桌面端(使宿主模块加载生效),然后刷新一次 GUI 页面(加载设置页脚本)。
- 后续若要更新巡检器自身,重新运行上述相同的
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 — 跨会话环境变更监控器。


No comments yet. Be the first to write one.