Repository navigation
Releases: qinyre/dsh-plugin-install
Release list
v0.4.12
dsh-plugin-install v0.4.12
修复:桌面端「重启」按钮静默无效的问题
在 DSH Desktop 中更新插件后,若未能热替换生效,更新按钮会翻转为「重启」。此前点击该按钮不会有任何反应:客户端调用的 window.dshDesktop.restartSidecar() 在官方桌面壳的预加载桥中从未存在(官方桥仅暴露 browser、deviceInfo、keyboard、shortcuts、updates 五个接口),属于静默空操作。
本版本的调整:
- 移除虚构的桥调用:
desktop-bridge.d.ts声明同步修正为官方真实表面,与 dsh-plugin-capabilities 0.4.1 保持一致; - 桌面端改为如实提示:更新就绪后,详情页与列表行不再显示无效的「重启」按钮,改为显示「已更新,重启后生效」,悬停提示请通过桌面客户端托盘菜单中的「重启服务」完成重启;
- 独立 dsh web 行为不变:自重启仍经由安装器自带的中继换班流程完成,并携带令牌交接以保持页面可用。
桌面端的进程重启自始至终由壳层监管与拥有,页面内不存在任何官方重启通道——本次修复使界面陈述与这一事实一致。
v0.4.11
新增功能
冷静期解锁开关
pnpm 11 会对每次操作执行「发布冷静期」全量审计:lockfile 中任何一条发布未满 24 小时都会使整个操作被拒绝;而 DSH Desktop 内置的 pnpm 11.7 在该审计中不读取豁免列表(minimumReleaseAgeExclude)。因此每当本插件这类刚发布的版本进入档案——每次自更新即是如此——官方插件页的安装、卸载、更新都会持续失败约 24 小时,直至该版本自然出窗。
本版本在插件自身的详情页新增「解锁官方页面 / 恢复冷静期」开关:
- 开启时向本档案的
pnpm-workspace.yaml写入minimumReleaseAge: 0。项目级配置对内置 pnpm 的审计同样生效(已针对 11.7 实测验证),档案内所有 pnpm 调用——包括官方页面的操作——随即恢复可用; - 关闭时移除该键,恢复默认的 24 小时供应链观察期保护;若检测到用户自行设置的非零策略值,则不予改动;
- 写入经由 YAML 文档树完成,档案中的其他配置(
packages、nodeLinker、allowBuilds、既有豁免列表等)原样保留。
配套新增 GET/POST /dsh-plugin-install/cooldown-relief 路由供界面读写开关状态。
适用建议
频繁发布并即时自更新的使用节奏下,可在每次自更新后开启本开关以保持官方页面可用,次日再行关闭;日常使用则无需开启。
v0.4.10
修复内容
本次版本修复了「强制卸载」在两处遗留的善后缺陷,均由真实事故验证定位。
一、卸载后清除插件台账中的失效行
此前的卸载流程仅清理补丁层中的挂载行,从不更新 dsh.profile.bundles 台账。被卸载插件的台账行因此残留,下次启动时引导流程仍会尝试导入一个已不存在的包,表现为「import failed」启动失败;在官方桌面端,该失败还会触发崩溃对话框,并进入会重置第三方插件配置的档案恢复流程。
现卸载成功后自动执行官方对账(app-boot 的 reconcileProfilePlugins,以卸载前的依赖清单与卸载后的实际状态进行差量比对,并保留用户主动停用的插件)。宿主运行时缺少该接口时,退化为直接从台账中移除该插件行。
二、卸载后校验其余插件的依赖完整性并自动补装
包管理器执行移除时会一并清除提升目录中不再被任何清单依赖引用的条目。桌面端档案以 autoInstallPeers: false 安装,剩余插件的 peer 依赖若此前仅由被卸载插件的提升副本提供,将随之失去解析来源,导致下次启动失败。
现卸载完成后,自动逐一校验剩余插件声明的依赖、peer 依赖与客户端注入项是否仍可按运行时的解析方式命中;可经显式安装修复的缺失项将绕过发布冷静期自动补装,无法自动修复的缺口以「依赖受损」状态在界面上明确列出,不再静默潜伏至下次启动。
其他
- 桌面端卸载后若个别依赖仍无法恢复,按钮将显示「依赖受损」并在悬停提示中列出缺失项,便于人工处置。
v0.4.9
修复
- 修复「强制卸载」在特定插件上掏空包目录并导致下次启动失败的问题。根因:部分插件(如 dshmarket)的挂载补丁结构不支持逐行暂停,卸载流程此前对此类插件不做任何暂停、直接执行包移除——移除与插件运行中的文件监视句柄竞速,Windows 拒绝删除被监视目录,pnpm 中途死亡:包的传递依赖被删而清单未保存,插件行残留在配置中,下次启动导入失败、Web 宿主无法启动。
- 现在此类「正在运行且不可运行时暂停」的插件会被直接拒绝卸载,按钮提示重启应用后再试(重启后实例不再运行,可干净移除);未在运行的插件不受影响,照常卸载。可暂停插件的卸载流程不变(先暂停再移除)。
验证
- 单元测试新增「不可暂停且在运行→拒绝并不执行移除」「不可暂停但未运行→照常移除」两景,共 132 项全部通过。
- 实机场景复现与修复验证基于真实桌面 profile(dshmarket 半途移除状态的完整修复)。
v0.4.8
新增
- 插件详情页新增「强制卸载」:通过安装器自带的免冷静期卸载通道执行完整卸载(包移除、挂载行清理),供官方「卸载」被发布冷静期拦截时使用——桌面端捆绑的 pnpm 会在每次操作时审计整个锁文件,且其审计不认豁免清单,只要锁文件中存在发布不满 24 小时的条目,官方卸载即被整体拦下;本按钮不受此限。两次点击确认(第一步点亮五秒后自动复原),执行前先暂停目标插件的运行实例(关闭其全部文件监视句柄,杜绝换装掏包),成功后页面自动刷新;失败时恢复原实例并将原因挂于按钮悬停。不对安装器自身提供该按钮。
修复
- 热更新与热卸载的活体重组机制修正为官方同款:此前依赖对 profile 补丁文件的监视触发重组,而普通 Web 启动中该监视实际处于休眠,导致暂停/恢复超时。现在写行后直接调用运行时
dsh-app-boot的readProfilePatches+reconcileProfilePatches(与官方插件管理器完全一致的调用路径,经 CLI 入口锚定解析宿主自身的包副本);宿主profileContext与根上下文经服务接口获取。 - 活性判定修正:cordis 会把已销毁(disposed/failed)的 fiber 保留在条目上,此前被误计为仍在运行,导致等待逻辑死锁;现在按 fiber 状态判定(与 app-boot 内置镜像一致)。
验证
- 真实运行时端到端两幕验证:强制卸载(暂停 → 移除 → 行清理,包目录与依赖项干净、二次卸载正确拒绝);热更新(安装 0.3.13 → 一键更新 →
hot: true,磁盘落至新版、新实例路由即时可用,全程无重启)。 - 单元测试 130 项全部通过,新增 fiber 状态与暂停租约场景;类型检查与产物校验通过。
说明
- 桌面端升级路径:经官方插件页或终端安装本版本后重启桌面应用即可;此后官方卸载被冷静期拦截时,使用详情页的「强制卸载」。
v0.4.7
修复
- 修复更新正在运行的插件时包目录被掏空的问题。根因:插件在运行期间持有对自身技能目录等路径的文件监视句柄,而 Windows 不允许删除处于监视中的目录——更新时的包替换与这些句柄竞速,pnpm 在移除旧版本的中途失败,包目录被部分删除(仅剩受监视的目录),插件进入「异常」状态且无法再解析。桌面端(Web 宿主以子进程运行、监视句柄常驻)稳定触发。
- 更新流程重排为「先暂停、后换盘、再恢复」:执行包替换前先卸载目标插件的运行实例(纤维销毁、全部监视句柄随之关闭),替换完成后再恢复挂载——重组按新包重新解析,新代码即时生效,无需重启。若插件未能按时暂停,则中止本次更新并提示重启后重试,不再冒险执行替换;替换失败时恢复旧实例。
- 安装器自身的更新不受影响(沿用原语义:更新完成后提示重启)。
验证
- 单元测试新增「暂停租约」三个场景(暂停期间行保持停用且无存活纤维、恢复立即重新启用、暂停超时报错并还原),共 127 项全部通过。
- 实机复现与修复验证基于真实桌面安装的 pnpm 操作日志与包目录状态。
升级说明
- 桌面端 0.4.6 已可正常完成更新操作;升级至 0.4.7 后,更新其他插件时的稳定性进一步增强。若此前出现过包被掏空的「异常」状态,重启应用前通过官方插件页重装该插件,或等待本版本就绪后直接更新。
v0.4.6
修复
- 修复官方桌面端中「更新」按钮无效果的问题。根因:桌面环境下此前将子进程的工作目录设置在 app.asar 归档内部,而 Windows 无法以归档内的虚拟目录作为进程工作目录,子进程启动即失败(ENOENT)——插件命令从未真正执行,这也是失败时 profile 中不留下任何 pnpm 操作日志的原因。现改为将子进程锚定在宿主可执行文件所在的真实目录。
- 桌面端的插件命令改用桌面自带的 CLI 入口(
dsh-desktop-host/lib/cli.js,与官方runtime/cli/bin/dsh.cmd完全一致的调用方式):自动接入桌面捆绑的 pnpm 与 Node,插件安装与更新不再依赖系统 PATH 中的 pnpm;普通 dsh 安装环境仍回退至原有的 bin.js 入口,行为不变。
验证
- 在真实桌面安装上、以完全剥离 PATH 的环境完成全链路验证:走查正确优先命中桌面 CLI 入口,插件安装命令成功执行(捆绑 pnpm 11.7.0 完成 12 个包的装载),进程正常退出。
- 单元测试新增桌面入口优先级与真实工作目录的回归断言,共 124 项全部通过。
升级说明
- 桌面端当前运行的 0.4.5 仍携带本缺陷,需先通过官方插件页或终端命令
dsh plugin --profile desktop add dsh-plugin-install@0.4.6完成本插件升级,并重启桌面应用;此后桌面端内的插件更新(含本插件自身)即可正常一键完成。
dsh-plugin-install 0.4.5
本版本修复绕过冷静期的更新会连带拦住官方管理器操作的问题。
经由冷却期豁免安装的更新会在 profile 锁文件中留下「24 小时内发布」的条目,但不会像显式版本安装那样自动写入 pnpm 的 minimumReleaseAgeExclude 豁免名单——此后所有尊重该策略的操作(包括官方插件管理器的安装与卸载)都会以 ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION 失败,直到该条目自然出窗。现在每次经豁免完成的更新后,安装器会向 profile 的 pnpm-workspace.yaml 追加同款豁免条目,即时恢复所有工具对该 profile 的可用性;文件的其他内容(packages、allowBuilds 等)经文档树原样保留,不可解析时拒绝改写。
dsh-plugin-install 0.4.4
本版本修复桌面端点击「更新」无效果的问题。
插件的更新操作通过重新调用 dsh CLI 完成。桌面宿主的命令行参数携带 Electron 开关且从不出现 CLI 入口,此前的解析因此回退到 GUI 环境的 PATH 上裸找 dsh——在桌面环境里不可靠,更新点击于是无声失败。现在会从启动参数中识别宿主脚本,按其所在 dsh 安装解析内置的 CLI 入口,并经由 Electron 自身可执行文件以纯 Node 方式执行,GUI 的 PATH 不再参与;裸 dsh 仍作为最后的回退。更新失败的状态现在持续可见:插件行的按钮与详情页按钮会显示「更新失败」,悬停可见原因,不再于六秒后自动还原。
dsh-plugin-install 0.4.3
本版本修复桌面端更新提示不出现的问题。
桌面宿主从不把 --profile 放进命令行参数,安装器据此回退的默认 profile 是 web:在桌面端,更新检测读取的是 web profile 的安装清单(桌面 profile 里的插件因此永远不显示更新点),更新与启停写入也可能落在错误的 profile 上。现改为从模块自身的物理安装位置识别激活的 profile——pnpm 安装的包必然解析到 <home>/profiles/<名称>/node_modules 之下,.pnpm 存储布局的真实路径同样在 profile 内。显式 cordis 配置仍然最优先;经 file: 安装的开发检出位于任何 profile 之外,继续沿用原有的命令行回退。