Repository navigation
[修法分享] 桌面版升级后「工作区全部消失」:三层判别 + 可回滚的完整修复步骤(补充 #13385 / #13376) #13389
dongsheng123132
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
一句话结论
数据层几乎从来没坏过。 「左侧工作区全部消失」最多由三层各自独立造成,先判层再动手,否则会像我一样把「前端状态修好了」误判成「没修好」,或者把「列表回来了」误判成「修好了」。
storages/workspace.jsonworkspaceIds与tables.workspaces是否对齐dsh.workspace.view.v5旧快照含nullincompatible with dsh …+did not activate+waiting for service: storageDomain这次是后两层叠加:清完前端状态只让「工作区」标题和搜索按钮回来,列表仍空;再处理依赖层才全好。
第 0 步:先别做这几件事
workspace.json、sessions/,不要重装应用(数据一条没少,动它只会增加风险)。rm -rf删node_modules里的官方包([Bug] 升级后可选插件遮蔽核心包,导致 workspace/session 服务全部不可用,界面表现为"会话全部丢失"(数据实际完好) #13385 的临时绕过写的是删)。用mv移到备份目录,随时能回滚。@deepseek-ai/dsh-storage-domain一个包。实测之后列表确实回来了,但点「新建会话」仍报sessionController is unavailable——半死状态最坑人。第 1 步:只读体检(先拿到版本对照)
前端状态层可顺手扫一下 leveldb 里有没有坏快照(macOS 路径,Windows/Linux 换成对应的 Electron userData):
判读:只要
host与 profile / hoisted 的版本线不一致,就是依赖层问题;did not activate的行数就是被门禁拦下的官方包条数。第 2 步:完整修法(全部可逆)
A. 先备份四样东西
B. 完全退出应用(Cmd+Q / 托盘退出,不是刷新页面),确认进程和端口都没了再动文件;运行中 host 会覆盖你的修改。
C. 前端状态层:封存而不是删除(等价于官方解法
localStorage.removeItem('dsh.workspace.view.v5'))D. 依赖层:把「所有」版本不一致的 hoisted 官方包整体隔离(关键步骤)
这一步我实际移走了 8 个
0.2.2-rc.2的官方包(dsh-cua-bundle、dsh-storage-domain、dsh-typert-protocol、dsh-computer-use、dsh-cua、dsh-brand、dsh-atomic-write、dsh-experimental-cua-macos)。只移一个storage-domain时,host 日志里剩下的 7 行仍被判 incompatible,session-controller继续卡在waiting for service: workspaceRegistry。E. 对齐显式依赖并补齐依赖树:把
package.json的dependencies里全部@deepseek-ai/*改成宿主版本(我这边是dsh-cua-bundle/dsh-subagent-claude-code/dsh-subagent-codex三项),然后在外部终端执行:会问是否清空
node_modules,输y。注意:这一步要真正删改上千个目录,在应用内终端 / 受限环境里可能被拦;从系统终端跑最稳。不跑也能用(宿主app.asar自带核心实现),只是依赖树不完整,下次装插件可能又带回旧版。F. 重启应用。
第 3 步:验证(4 条,缺一不可)
workspace.json的 mtime 被正常更新(证明storageDomain+workspaceRegistry真挂上了),host 日志里0 disabled / 0 pending。回滚
全程我没有删除任何数据文件,
workspace.json自始至终未改动。几点补充观察(可能对定位有用)
rc.1 → rc.2两次、rc.2 → rc.3一次。每次宿主升一个小版本,profile 里显式依赖与 hoist 出来的传递依赖都会整体落后一代。dsh plugin allow-version/version-exemptions这类 CLI 逃生口在我这台机器上不可用:dsh plugin --profile desktop ...→error: profile "desktop" is managed exclusively by the Electron application。([Bug] Desktop update can drop third-party plugin registration and block recovery / 桌面版更新可能丢失第三方插件登记并阻塞恢复 #13374 在 Windows 上用dsh plugin --profile desktop add是成功的,可能是平台或 CLI 版本差异,别当成通用结论。)给官方的三条小建议
@deepseek-ai/*版本线;不一致时提示并提供一次「对齐依赖并重装」(操作前备份package.json/ lockfile,失败可回滚)。desktopprofile 至少支持只读的版本状态查询,或把修复入口放进插件管理器 UI / 提供「安全模式启动」。did not activate导致核心服务(storageDomain/workspaceRegistry/sessionController)缺失时,给面向用户的明确错误提示,而不是让侧栏静默变空——现在这个表现和「数据全丢」完全无法区分,代价主要是恐慌和误操作。环境
macOS / Apple Silicon,Desktop
0.2.2-rc.3(Info.plist),CLIdsh --version=0.2.2-rc.1,profiledesktop,storages/workspace.json360 条全程完好。All reactions