# 版本兼容与发布验证 ## 已验证版本 `dsh-theme 0.2.0` 的目标是 DeepSeek Harness `0.1.2-rc.1`,对应官方提交 [`a66e4702047846cdaa10c66c9d3df3951f5ea70d`](https://github.com/deepseek-ai/deepseek-harness/tree/a66e4702047846cdaa10c66c9d3df3951f5ea70d)。本机验证宿主为社区 DSH Desktop `2.0.5`,使用 `web` profile。该版本不再支持插件 `0.1.0` 依赖的旧 `dsh-client-runtime/client` 入口;更早的 Harness 版本不在本次兼容范围内。 ## 客户端依赖 状态存储从公开的 `@deepseek-ai/dsh-client-store` 导入,Context 类型从 `@deepseek-ai/cordis` 导入。`ctx.slots` 的类型扩展由 `dsh-client-ui-renderer/client` 提供,保持类型导入,不把 renderer 打入插件。 发布产物只允许请求以下已验证的 Web 平台模块: - `react` - `react/jsx-runtime` - `@deepseek-ai/dsh-client-store` 这些模块由目标版本的 Web 平台提供,不添加到 `dsh.client.external`。`dsh.client.inject` 是包级信息,不会让已移除的 runtime 模块重新出现。 ## 更新插件 使用实际启用插件的 profile;下面以 `web` 为例。关闭正在运行的 Harness 后执行: ```sh npx @deepseek-ai/dsh@0.1.2-rc.1 plugin --profile web add github:oil-oil/dsh-theme ``` 重新启动 Harness,再打开“设置 → 外观”。GitHub 安装使用仓库已提交的 `lib/`,不会在安装时重新构建。更新后需确认 profile 锁文件中的 Git 提交已变化,避免继续使用缓存产物;可在安装地址末尾追加 `#<完整提交 SHA>` 固定修复版本。 主题数据保存在当前浏览器 origin 的 `dsh-theme/settings/v1` 中,升级沿用该键和原有格式。无需新建 profile;更换地址或端口会改变浏览器存储范围。 ## 防止相同问题再次发布 旧构建检查只验证包体积和入口名称,未执行发布产物,无法发现“编译成功但宿主没有对应模块”的问题。当前 `pnpm build` 会先检查真实 `require(...)`,再使用官方 `dsh-client-modules` 加载器加载 `lib/client.js`:旧 runtime 引用必须失败,新产物必须成功,并验证主题更新、真实 store 通知、配置保存及覆盖释放。 发布前运行: ```sh pnpm install --frozen-lockfile pnpm typecheck pnpm test pnpm build npm pack --dry-run ``` CI 随构建运行相同的产物测试。更新兼容版本时,同步核对官方 Web 平台模块表、类型依赖及加载器行为,不能仅增加一个新的依赖允许项。 对 DSH Desktop 的实际运行产物再检查一次: ```sh DSH_SMOKE_RUNTIME_ROOT='/Applications/DSH Desktop.app/Contents/Resources/app.asar.unpacked' pnpm test:bundle ``` 这会使用该桌面安装目录中的真实 ModuleLoader、React 和 Store 包,不修改应用文件。产物测试覆盖模块加载和插件行为,不代替真实窗口的视觉检查。安装后还需检查最终 boot manifest、服务端返回的 bundle 与客户端加载报告。