Repository navigation
Replies: 3 comments
|
我今天遇到了相同的问题 |
|
补充一个跨平台、跨版本的独立复现,以及一条实测可用的临时绕法。 环境:macOS 27.0.1 (26A434) arm64,Desktop 0.2.1-rc.2(nightly feed,构建 2026-10-17T02:59:53Z),内置 同一现象,四个包全数失败( 主帖的三例都是第三方插件;这里补两点:官方 影响面比"更新按钮坏掉"更严重,可以量化: 这批官方实验包的 临时绕法(已在本机验证生效,仅作恢复手段,不建议长期使用):
对主帖源码定位的独立印证:macOS 0.2.1-rc.2 的 |
|
太可怕了,不知道1.0版什么时候能定版 |
Uh oh!
There was an error while loading. Please reload this page.
环境
DeepSeek Harness.exeFileVersion 0.2.1-rc.1,安装/更新时间 2026-10-17 12:49)desktop(官方 Electron profile)现象
更新 DSH 客户端之后,插件市场里更新任何插件都失败,而且失败后的回滚也失败,界面提示:
三个插件表现完全一致。
复现与日志
~/.dsh/profiles/desktop/.dsh-market/log.ndjson中出现:{"level":"error","event":"update","detail":"dshmarket -> dshmarket@1.66.32 exit=1 err={\"code\":\"already-installed\"}"}{"level":"error","event":"update-rollback","detail":"dshmarket: failed update command and restoration of the previous build could not be verified — {\"code\":\"already-installed\"}"}~/.dsh/profiles/desktop/.plugin-manager/logs/下没有对应时间点的 pnpm 日志(最新那条早于客户端更新),说明这次根本没跑到 pnpm,就在管理器里被拒了。定位
市场在官方 Desktop 上不自己跑 pnpm,而是调用进程内插件管理器:
dshmarket/lib/official-desktop.js:93-95只把add映射到manager.installBundle(spec, …)、remove映射到manager.removeBundle(target),update不在这张表里(该文件第 70 行附近的注释也这么写)。@deepseek-ai/dsh-plugin-manager的lib/index.js:1970installBundle(),在跑 pnpm 之前有一道拦截(第 1991 行):if (this.ownerContext.get("hmr") !== void 0 && known !== void 0 && Object.hasOwn(before, known)) throw new ManagementFailure("already-installed");其中
before是 profilepackage.json的dependencies。也就是说:HMR 服务存在时,只要该包已写在 profile 依赖里,安装请求就直接被拒。同包
lib/types/tools.js:12的说明也是这个顺序:已安装该包;要装另一个版本,先remove_bundle,再install_bundle。HMR 从哪来:新版客户端把
dsh-hmr、dsh-client-hmr打进了app.asar,而该 profile 的cordis.patch.yml、package.json、pnpm-workspace.yaml里没有任何 hmr 配置 —— 所以 HMR 是客户端默认提供的,用户无法从配置里关掉。客户端更新之前的日志显示市场能通过同一个管理器完成安装,因此这道拦截是更新之后才生效的。影响
installBundle,同样被拒,于是市场自己的「恢复更新前构建」校验也失败,用户看到的是双重报错而非一条明确提示。.plugin-manager/logs/operation-*/pnpm.log里出现ERR_PNPM_NO_MATCHING_VERSION No matching version found for dshmarket@1.66.32 while fetching it from https://mirrors.cloud.tencent.com/npm/,该镜像最新只到 1.66.29。期望行为
removeBundle(target)→installBundle(spec)(官方要求的顺序);或installBundle允许覆盖已安装包(至少对「同包换版本」放行),并给调用方一个可区分的错误码,便于自行走 remove → install。already-installed属可预期的拒绝,不该让市场侧报出「构建恢复未验证」。All reactions