# 历史版本验证报告:@rvaim/dsh-compat 0.4.4 > 本文保留 2026-08-15 的 rc.6 发布验证事实,包括当时的包名、API 和设置页名称,不代表本轮工作区或当前 Desktop 已完成相同验证。当前名称为“插件桥 / Plugin Bridge”,npm 包名为 `@rvaim/dsh-plugin-bridge`,详见[包更名说明](<包更名说明.md>);协议修订结果见[插件协议兼容验证报告](插件协议兼容验证报告.md)。 验证日期:2026-08-15 交付版本:`0.4.4` 目标 DeepSeek Harness:`0.1.0-rc.6` Plugin parser:`2.0.1` Source parser:`2.0.0` ## 1. 结论 0.4.3 首次以公开 npm 组织包交付后,0.4.4 在 Web 设置页加入 Source 更新检测与在线更新:刷新时探测各 Source 的最新 revision,有更新即显示“更新”按钮。包清单、Cordis resolver、浏览器 ModuleLoader 与 Typert 生成目标均使用同一个 scoped 包名;内部 Cordis 行 ID、服务名和 `$DSH_HOME/dsh-compat/` 数据目录保持稳定。README 将 npm 安装与 Web 使用流程移至最前,并随包发布设置页截图。Claude Code / Codex 旧插件解析与运行语义未改变。 已验证的关键结果: - “兼容插件”按 DSH `settings.section` 机制出现在 Agent 预设之后; - 浏览器 bundle 由 DSH `/plugins/@rvaim/dsh-compat/client.js` 提供,并以 `@rvaim/dsh-compat` 进入 `window.__DSH_BOOT__`; - 添加弹窗、多插件复选列表、插件列表、卸载确认、Toast 和暗/浅主题均沿用 0.3.1 的 Web 基线; - 多插件确认后复用第一次固定的 Source 快照,不重复拉取; - 同一运行进程内启停状态实际完成 `true → false → true`,不需要重启; - 当前页面的 list、beginAdd、completeAdd、setEnabled、checkUpdates 和 update RPC 无浏览器错误或 Host 错误; - 刷新会检查已安装 Source 的最新 revision,共享 Source 的全部插件都会显示更新状态; - 发布包不声明 `bin`,不依赖 `@clack/prompts`,并包含 npm/GitHub 元数据与 README 截图; - `source.json` / `install.json` / `state.json` / `scan.json` 不再包含 `schemaVersion`,`install.json` 不再写冗余 `pluginPath`; - 多插件 Source 未显式选择时,`ctx.compat.install` 明确列出全部候选 ID 并拒绝默认全装。 ## 2. 自动化验证 执行: ```bash npm run verify npm run verify:dsh ``` `npm run verify` 包含: 1. 清理 `dist/`; 2. Typert Host/Remote 生成; 3. TypeScript strict 编译; 4. DSH Client closure-factory bundle; 5. Node test runner; 6. 发布清单和 `npm pack --dry-run` 白名单检查。 本轮结果:**104/104 自动化测试通过**,发布包检查通过,共 368 个发布文件。自动测试覆盖 parser、Source/Plugin manager、事务回滚、runtime/adapters、Hook/MCP/Skill、安全边界、Web gateway 与发布包清单。其中与本轮变更直接相关的检查包括: - 多插件 Source 未显式选择时拒绝安装并列出候选 ID; - Web 单插件自动安装与多插件二阶段选择; - 原输入目录删除后仍可从固定快照完成安装; - 取消选择清理临时 Source; - 同一 Source 并发选择的清理责任转交; - 在线启用、停用和卸载映射; - 目录 Source 的 revision 变化检测,以及更新后检查结果收敛; - Web 共享 Source 更新会标记全部受影响插件并在线完成更新; - 磁盘记录无 `schemaVersion`,且旧记录可被直接读取(多余字段不影响 JSON 解析); - `package.json` 的包名、版本、公开 registry 与 GitHub repository 元数据正确; - Cordis patch、Client ModuleLoader 与 Typert artifact 使用 scoped 包名; - 发布包包含 `docs/assets/compat-settings.png`,且不包含 `bin`、`@clack/prompts`、`src/`、`test/`、`dist/test/` 或 `node_modules/`。 `npm run verify:dsh` 额外导入真实 rc.6 包并核对: - Cordis `Service`; - Schemastery schema API; - Hook Protocol 关键函数; - MCP Client 可挂载形态; - `CompatWebGateway` 与 `CompatManager.prepareInstall()`; - `compatAdmin/{beginAdd,cancelAdd,checkUpdates,completeAdd,list,setEnabled,uninstall,update}` 的 Typert Host/Remote descriptor。 ## 3. 真实 DSH Web 验证 使用 `npm pack --ignore-scripts` 生成 `@rvaim/dsh-compat@0.4.3` tarball,并安装到全新的隔离 `DSH_HOME` / `web` profile。实际启动 DSH Web 后得到: ```text profile dependency: @rvaim/dsh-compat@0.4.3 dump-config: Cordis id=dsh-compat, name=@rvaim/dsh-compat boot manifest: id=@rvaim/dsh-compat client URL: /plugins/@rvaim/dsh-compat/client.js?rev= client route: HTTP 200, content-type=text/javascript bundle handoff: window.__ModuleLoader__.load({ id: "@rvaim/dsh-compat", ... }) ``` 这证明 scope 中的 `/` 能被当前 DSH Client Modules 正确路由,且 Host patch、boot manifest、URL 与浏览器注册 ID 没有分叉。 0.3.1 报告中的交互式浏览器实测继续作为 UI 行为基线:0.4.4 未修改 `CompatSettingsSection`、Typert Remote schema、`CompatWebOperations` 或 `CompatRuntimeManager`,因此设置导航、添加弹窗、多选、安装后 `running`、动态开关、卸载确认、诊断 disclosure 及暗/浅主题结论仍然适用。 0.3.1 验证观察: ```text profile dependency: dsh-compat@0.3.1 dump-config: 包含 dsh-compat bundle 条目 boot manifest: 包含 dsh-compat client 条目及四个 inject 边 client route: HTTP 200,内容为 ModuleLoader closure-factory Typert Remote: 六个 compatAdmin 方法均被严格挂载 ``` 浏览器实测路径: ```text 设置 → 兼容插件 → 添加本地多插件 Marketplace → 显示两个候选并勾选 → 添加所选插件 → web-alpha / web-beta 均显示运行中 → 停用 web-alpha → aria-checked=false,运行实例停止 → 再启用 web-alpha → aria-checked=true,状态恢复运行中 ``` 还检查了: - 空列表,以及读取失败分支的实现与可展示错误映射; - 添加输入、取消与 Enter 提交; - 不可安装候选禁用; - 拉取/安装按钮和正文中的进行中状态; - 卸载二次确认; - 中文/英文词典结构; - DSH 深色与浅色 Token; - 图标按钮、switch、checkbox 的可访问名称和焦点状态。 ## 4. 动态加载边界 ### 兼容插件操作 以下操作调用当前 Host 进程中的 `ctx.compat`,会立即驱动 `CompatRuntimeManager`: - Web/服务 API 添加旧 Plugin; - 启用; - 停用; - 卸载。 这些操作不修改 DSH Client 启动图,所以不需要重启。 ### @rvaim/dsh-compat bundle 操作 首次安装、升级或删除 `@rvaim/dsh-compat` 本身会改变 profile 的 Host Loader 条目与 `dsh.client` 图。DSH Typert Loader 和 Client Modules 都缓存包级判定,因此这类变化需要重启 profile,并让 Web 页面重新加载新的 boot manifest。 ## 5. 安全与一致性 - Web 不暴露自定义任意 HTTP handler,统一走 DSH Typert `/api` carrier; - 所有参数和结果使用生成的 Zod v4 strict codec; - Source 输入继续经过原有 Git、归档、路径、符号链接和凭据安全检查; - 分步选择只向浏览器返回公开候选字段,不返回 Marketplace 原始配置或凭据; - request ID 使用随机 UUID,并在取消、页面卸载、插件停止或十分钟过期时清理; - 安装失败不会提交部分 Plugin;运行启动失败沿用 manager 的原子回滚规则; - UI 只使用 DSH primitives、locale、Settings Slot 和 `--dsw-*` Token; - 不再存在的 CLI 不会作为 bin 进入 profile,减少一个未接入 DSH 生命周期的离线入口。 ## 6. 已知验证边界 本报告不扩大声明以下内容: - 未对任意第三方远端 MCP 服务完成网络端到端握手; - 未在真实模型会话中执行所有第三方 Hook; - 未通过真实公网超慢 Git 仓库逐帧捕获 loading 动画;本地 Source 完成过快,但进行中 DOM、按钮禁用与 loading 图标已进入编译后的 Client bundle,并通过实现审查; - 不支持的 Claude Code/Codex 能力仍以结构化诊断公开,不会被描述为已兼容; - 0.4.3 已重新执行隔离 tarball 安装、DSH Web 启动、boot manifest 与 scoped Client 路由验证;0.4.4 新增更新检测后未重复执行设置页逐项点击回归,UI 行为验证继承 0.3.1 基线。 ## 7. 历史发布命令 以下命令保留当时的包身份;当前工作区包名及发布状态见[包更名说明](<包更名说明.md>)。 ```bash npm run verify npm run verify:dsh npm pack --ignore-scripts dsh plugin --profile add @rvaim/dsh-compat@latest ``` 安装或升级 `@rvaim/dsh-compat` 后重启该 profile。之后可直接在“设置 → 兼容插件”中在线添加和管理旧 Plugin。