You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
English summary: On macOS, an in-app nightly update from 0.2.1-rc.3 to rc.5 failed with desktop update: task inspection timed out. Both the read-only inspect and the admission lock are sent over a single 10 s control deadline (lib/main.js:3857-3864), while the Host's lock awaits Promise.all(pendingRequests) over admitted /api requests (dsh-desktop-host/lib/index.js:140-146) — a streaming response keeps the drain open for its whole lifetime, so 10 s is structurally unreachable whenever a turn is still generating (or a response never finishes). Nothing is journaled: the update journal only exists when DSH_DESKTOP_UPDATE_JOURNAL_DIR is set (lib/main.js:12045-12046), and both inspect and lock failures surface with the same opaque message.
/** * Inspect active work or lock request admission for update handoff. * @param action - Read-only inspection, admission lock, or recovery unlock. * @returns Whether live tasks would be affected. Locking drains admitted API requests before inspecting tasks; * an unanswered drain fails at the control-request deadline without authorizing installation. */asyncupdateTasks(action){constresponse=awaitthis.control({type: "update-tasks",
action
},1e4,"desktop update: task inspection timed out");
...
}
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
摘要
macOS 上从
0.2.1-rc.3应用内更新到0.2.1-rc.5(nightly channel),点「安装并重启」后弹出「更新失败」,技术详情只有一行:整个过程没有任何日志可查。从 0.2.1-rc.5 的
app.asar可以确认,这个错误来自 shell 对 Host 的update-tasks控制请求撞上 10 s 硬超时(lib/main.js:3859),而 Host 侧的lock需要把所有已准入的/api请求排空完才返回(dsh-desktop-host/lib/index.js:140-146)——流式响应在整段输出期间都不会结束,10 s 在结构上就可能永远等不到。inspect与lock共用同一句文案,事后无法判断卡在哪一步。English summary: On macOS, an in-app nightly update from 0.2.1-rc.3 to rc.5 failed with
desktop update: task inspection timed out. Both the read-onlyinspectand the admissionlockare sent over a single 10 s control deadline (lib/main.js:3857-3864), while the Host'slockawaitsPromise.all(pendingRequests)over admitted/apirequests (dsh-desktop-host/lib/index.js:140-146) — a streaming response keeps the drain open for its whole lifetime, so 10 s is structurally unreachable whenever a turn is still generating (or a response never finishes). Nothing is journaled: the update journal only exists whenDSH_DESKTOP_UPDATE_JOURNAL_DIRis set (lib/main.js:12045-12046), and bothinspectandlockfailures surface with the same opaque message.环境
@deepseek-ai/dsh-desktop0.2.1-rc.3 → 0.2.1-rc.5 (nightly)现象与时间线(2026-11-02)
~/Library/Caches/@deepseek-aidsh-desktop-updater/pending/deepseek-harness-0.2.1-rc.5-mac-arm64.zip(347,767,892 B),其sha512与update-info.json记录完全一致(包是完整的,不是下载问题)。日志侧的缺口:
~/Library/Logs/DeepSeek Harness/只有crash-*.log(最近一条 10-22),没有更新日志。~/Library/Caches/com.deepseek.dsh.ShipIt/ShipIt_stderr.log里 10:57 之前没有任何 11-02 记录 —— 与代码一致:失败发生在beforeRestart()阶段,还没走到quitAndInstall()。代码定位(0.2.1-rc.5,asar 内路径)
1. shell 侧的 10 s 硬超时 ——
lib/main.js:3857-3864inspect、lock、unlock全部走这一条路径,deadline 一律1e4,错误文案也一律相同。2. 安装序列 ——
lib/main.js:12330-123763. Host 侧 lock 的排空 ——
dsh-desktop-host/lib/index.js:108-149next()会等到响应结束才 resolve,所以流式响应在整个输出期间都留在pendingRequests里。只要有一条正在生成的长响应(或一条客户端断开后未收尾的响应),Promise.all就不可能在这 10 s 内完成 —— 这是设计上"不取消已准入请求"与"10 s 硬超时"直接冲突的地方。4. 可观测性缺口
DSH_DESKTOP_UPDATE_JOURNAL_DIR时才创建(lib/main.js:12045-12046),生产环境默认没有 → 失败无任何记录。unlock失败时仅console.error(lib/main.js:12369-12371)。updateInstallFailed,技术详情只有原始 message,没有"重试 / 退出重开 / 手动安装"的指引,也不显示仍在排空的请求数。影响
用户看到的是一个没有信息量的失败弹窗,很容易误判为"更新包坏了、要重新下载"(本机上包是完好的)。在有长生成时重试会重复失败,用户可能一直装不上;而
autoInstallOnAppQuit = false(lib/main.js:7807)又让"退出应用自动安装"这条最自然的退路失效,所以连"重启一下"的直觉也不成立。建议
inspect与lock使用不同文案(例如task inspection timed out/admission drain timed out),或在错误里带上 action、Host pid/uptime、pendingRequests.size、最老请求已等待时长。~/Library/Logs/DeepSeek Harness/update.log:每次 state 变化、两个 control 请求各自耗时、Host pid/uptime。install()本身可重入,lib/main.js:12597已经有这个调用路径),以及"仍未成功时退出应用重开、或用更新缓存手动安装"。autoInstallOnAppQuit = false的含义,避免用户以为"退出就会装"。证据
sha512与update-info.json一致;解压后codesign --verify --deep --strict通过,spctl判定accepted, source=Notarized Developer ID,版本为0.2.1-rc.5。如果愿意,我可以帮忙验证加日志 / 加 deadline 之后的 nightly 版本(这台机器可以随时复现并在相同 workspace 下测试)。
All reactions