Repository navigation
Replies: 4 comments
|
这条修复确实不在 rc.3 里,你判断对了。 我按 tag 核了一遍: 在下一个 rc 之前,可以试两个绕法: 一是更新前先把插件都停掉再触发更新,减少遗留句柄,让 Host 在 10 秒内退出;二是确认更新包已经下载校验完后,手动结束 host 进程再点更新——安装器不会重下,校验值你已经比对过。 另外你提到的 rc.3 构建提交 |
|
补一条硬确认:该修复到 0.2.1-rc.5 仍未随包分发。
|
|
复核了,你的 tag 结论对,代码也支持。
所以 rc.5 里宿主只能等事件循环自己排空,排不空就超时 → 如果需要把报告说得更硬,建议直接贴这两行对照(master |
|
按建议补上同一文件的源码对照,比"未包含该 commit"更好核。 master( 64: const running = await application.catch(() => undefined)
65: await running?.shutdown.shutdown(0)
66: await send({ type: 'shutdown-complete' })
67: if (process.connected) process.disconnect()
68: // A handle a disposed plugin left open would otherwise keep the Host alive past the shell's graceful
69: // deadline; a startup failure keeps its own diagnostic exit.
70: if (running !== undefined) process.exit()
52: const stop = (): Promise<void> => stopping ??= (async () => {
53: // Startup failure is reported by main; shutdown only owns a tree that booted.
54: const running = await application.catch(() => undefined)
55: await running?.shutdown.shutdown(0)
56: await send({ type: 'shutdown-complete' })
57: if (process.connected) process.disconnect()
58: })() // ← disconnect 之后直接结束;无 line 68-70 等价物即 rc.5 发包在 ack + disconnect 后只能指望事件循环自然排空,任一插件遗留的引用句柄都会拖过壳层 10 秒宽限——与我们两侧(macOS/Windows 用户)的观测全部吻合。 诉求:请随下一个桌面端构建带上 master 的 |
Uh oh!
There was an error while loading. Please reload this page.
在 Windows 上,桌面端应用内更新会在 Host 已回报 shutdown-complete、但进程没有在 10 秒优雅期内退出时拒绝安装,界面提示:
“未能安全停止任务,更新尚未安装,请稍后重试。” 技术详情:desktop update: Host did not complete graceful task teardown (exit null, signal SIGTERM, shutdown acknowledged true, graceful deadline exceeded true)
环境:0.2.1-rc.2 → 0.2.1-rc.3(nightly,Windows x64,Electron 44.7.0,Node 24.21.0,zh-CN)。更新包已下载且 SHA-512 与 update-info.json 一致、签名有效,可排除下载/损坏问题。rc.3 构建提交 be72761ee1a6736ebcdf4f3739363b083ae53c98。
经过:壳向 Host 发送 shutdown 并等待 10 秒(apps/desktop/src/host-process.ts 的 DesktopHostProcess.stop())→ Host 完成收尾并发送 shutdown-complete(所以 shutdown acknowledged true)→ 但某个插件遗留句柄使进程继续存活;apps/cli/src/process-shutdown.ts 中 5 秒强制退出定时器已在 dispose() 完成时被 completeOnce() 清掉,之后没有任何机制强制退出 → 壳的 10 秒到期,升级为 SIGTERM(Windows 上是硬终止:exit null / signal SIGTERM)→ 抛出 DesktopHostUncleanExitError 并拒绝安装,随后恢复旧版本 Host。
判断:master 的 apps/desktop-host/src/index.ts 已在 shutdown 路径末尾加 if (running !== undefined) process.exit()(commit 6252a29,2026-10-18,配测试 23fb3ea)。而 0.2.1-rc.2/rc.3 打包的 dsh/node_modules/@deepseek-ai/dsh-desktop-host/lib/index.js 仍是修复前版本(disconnect 后没有 process.exit())。
想确认:① 该修复是否进入下一个 nightly 桌面构建?② 若 0.2.1-rc.x 仍要发版,能否把这个一行修复回移植?否则从 rc.2/rc.3 升级的用户都可能需要手动结束进程并直接运行暂存安装包。
绕过方式:结束所有 DeepSeek Harness 进程(注意:窗口 × 只是隐藏到托盘,不会退出),再直接运行 %LOCALAPPDATA%@deepseek-aidsh-desktop-updater\pending\deepseek-harness-0.2.1-rc.3-win-x64.exe,可正常安装并自动重启。会话记录在 ~/.dsh/sessions,不会丢失。
All reactions