@gestaltrun/dsh-plugin-updater
v0.1.1
Published
In-app updates for Gestaltrun product bundles from the Plugins detail page
Readme
插件更新
English | 中文
@gestaltrun/dsh-plugin-updater 为可被更新的 profile 副本覆盖的产品 bundle,在插件详情页提供 更新 控件。Desktop 携带此包并为新 profile 默认启用。更新资格由 Desktop 的产品 bundle 声明经安装清单的 dsh.profile.optionalBundles 派生;更新器不维护另一份包名清单。
使用
打开 插件,再打开产品 bundle。页面向 Host 的 plugin-manager 读取 bundle 清单,并为可覆盖的 bundle 查询注册表的 <package>@latest。当 Host 报告该 bundle 可覆盖(installationVersion)且 latest 的 SemVer 严格高于 profile 加载所选副本时,头部操作区在开关旁显示 更新,标题在版本后显示 有更新。latest 缺失、相同、更低或无法解析时不显示任何内容。领域 bundle peer 不满足的更新 latest 在详情正文显示 需先升级 <包名>(要求 <范围>) 和不兼容版本标签,不提供更新按钮。每个被拒绝的 peer 都会列出,并保留完整版本范围。运行版本拒绝其 DSH peer 的更新 latest 只显示带版本的不兼容标签;悬停或聚焦时列出被拒绝的 peer 和运行版本。
更新 从作答的注册表把所提供的精确版本装入 profile。运行期间,按钮显示 正在更新 并标记为忙碌,取消 请 Host 停止并恢复 profile 文件。取消请求进行中和进入应用阶段后该按钮禁用。成功后要求退出并重新打开,并在版本旁标注 重新打开后生效,因为运行中的 Host 仍持有安装副本的模块和引擎。取消后保留 更新,并在旁边显示 更新已取消。失败时保留更新按钮,并在旁边显示简短原因:版本不兼容、无法连接注册表或其他失败。失败或取消后,当前 Host 恢复操作前保存的 profile 和 overlay 状态:首次安装回到内置选择,更新回到原 overlay 选择。该恢复不承诺完整回滚 hoisted 依赖树。恢复内置版本会移除覆盖根链接及没有其他已安装包引用的 pnpm generations。恢复失败时显示修复诊断。密封安装文件保持不变。
Host 返回的 failed 或 cancelled application 记入 origin localStorage;restart-required 使用 sessionStorage,因此应用重启会丢掉该提示,下一状态重新以 live listBundles 为准。每条脱敏 JSON 不超过 2 KiB,每种存储在一个 origin 最多保留八条。存储键组合稳定 Remote authority、loopback 类别和 $host.home 摘要,但不保存这些值。loopback authority 忽略临时端口,因此重新打开同一应用和 Host home 后,失败或取消会对同一 latest 候选恢复;不同 Host 和 home 仍相互隔离。重建 controller 只会在同一应用会话中恢复 restart-required,并要求 listBundles 仍选中同一 overlay。当前领域 peer 或 DSH peer 拒绝优先于所有已存结果。更新的 latest、不再更高的答复、任何不兼容答复、恢复内置版本 或改选另一 overlay,会在公开 bundle 和 inspection 事实报告变化时清除旧记录。bundle 清单丢失或 $host.home 未就绪时不显示成功。
每次打开页面都会检查,安装运行中或等待重启时除外。Host 调用失败或被拒绝的检查不显示任何内容,报告到浏览器控制台,并在下次打开页面时重新检查。Host 通知 profile 变更且 profile 不再持有覆盖副本时(例如在同一页面执行 恢复内置版本 后),重启提示和标签消失并重新检查,插件页的恢复状态成为唯一的重启提示。列表卡片没有更新标记。
构建与组合
此包发布不带 Gestaltrun 后缀的普通三段 SemVer 版本;Desktop 的归档和插件页使用同一个 manifest 版本。独立工作区位于 product/。运行 pnpm --dir product install --frozen-lockfile --ignore-scripts,再执行 pnpm --dir product run build、test 或 typecheck。pnpm --dir product run pack 将 npm 归档写入 product/dist。Desktop 在 apps/desktop/src/product-profile.ts 中列出此包,该清单同时把它放入安装清单的 dsh.profile.optionalBundles。
Host 半部没有行为。Client 半部注册到插件页的 plugins.detail.actions、plugins.detail.badge 和 plugins.detail.section 槽,调用 pluginManager Remote 的 listBundles、inspect、installBundle、waitForInstall 和 cancelInstall,按自己的请求 id 跟随 plugin-manager/install-state,并在更新等待重启期间于 plugin-manager/changed 时重新读取 bundle 清单。它使用现有 carrier authority 和 ctx.remote.$host,且只用于 origin 记录分区。领域拒绝要求来自 Host 的 accepted inspect 回答中的 incompatibleBundlePeers.peers。Client 使用依赖名和要求范围,不自行判断兼容性。Host 以 installationVersion 报告覆盖资格,该字段由 apps/desktop/src/product-profile.ts 中的 Desktop 声明经安装清单的可选 bundle 派生。在此声明中新增产品 bundle 即可登记,无需修改更新器。不支持覆盖的 Host 不报告 installationVersion,页面因此不提供任何更新。
Model Experience
无。本包只渲染插件页控件,不改变任何模型请求、工具或 Session 事件。
KV Cache effect
无。
Known Limitations and Deferred Work
注册表使用 plugin-manager 的配置;页面不提供注册表选择。详情页不显示安装输出。listBundles.version 是下次启动选中的副本,因此同一已选 overlay 会保持重启提示,直到另一项公开 bundle 清单事实或当前拒绝事实取代它。
