[Bug] 过期的 dsh.workspace.view.v5 会让整个侧边栏浏览器留白(会话历史"消失") #6953
Unanswered
HissekiWriting
asked this question in
Q&A
Replies: 1 comment
|
独立复现确认:本问题在 0.1.5-rc.2 上依然存在,且与平台无关。 Environment(补充数据点)
也就是说:从 rc.1 到 rc.2 未修复,且不限于 Windows / Chrome。 补充:Host 侧证据(出问题时同机采集)用于排除服务端因素,经 RPC 直接调用(
结论与你一致:Host 完全正常,纯粹是浏览器侧持久化状态导致的前端崩溃。 两个可以补充的观察1. 这个坏状态不会自我修复,所以「必须手动清 localStorage」是必然的,而不是偶然:
2. 水合的「整份替换」语义,即你建议的 function Tc(t, r) { // t = store, r = localStorage key
const i = localStorage.getItem(r);
i !== null && t.setState(M6(JSON.parse(i)), !0); // M6 仅做深冻结
}水合后的 state 就是持久化 JSON 本身, 备注
|
0 replies
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.
[Bug] 过期的
dsh.workspace.view.v5会让整个侧边栏浏览器留白(会话历史"消失")Environment
0.1.5-rc.1(dsh web,Windows 11,Chrome/Edge)dsh.workspace.view.v5session/list正常返回,workspace/follow正常下发 baseline)Summary
浏览器里若存着结构过期的
dsh.workspace.view.v5(缺少groupExpansion/sessionOrderByAccount等字段),sidebar.workspaces的组件会在渲染时抛TypeError,被插槽的错误边界吞掉,结果是整块侧边栏浏览器直接消失——只剩「新会话」按钮和「设置」,连「工作区」标题、搜索框都没有。用户会误以为对话历史丢失。Reproduction
打开
dsh web的 GUI,按 F12 打开 Console。写入一个旧结构的状态:
刷新页面。
Current behavior
侧边栏只剩
新会话 | 设置,sidebar.workspaces区域整块留白。Console:之后再刷新也无法恢复,必须显式清理该 localStorage 键。清理后立即恢复正常:
Expected behavior
持久化状态过期或字段缺失时,侧边栏应以默认值正常渲染(工作区分组、全部折叠),而不是整块消失;至少应给出可见的错误提示而不是留白。
Root cause
packages/client/store/src/index.ts:154(attachPersistence)恢复时是整体替换,不补默认值、不校验、无 schema 版本:packages/client/ui-workspace假定这些字段一定存在:src/client/rows/WorkspaceBrowser.tsx:239Object.entries(groupExpansion)src/client/stores.ts:83,86(retainAccountKeys)Object.entries(d.groupExpansion)/Object.entries(d.sessionOrderByAccount)packages/client/ui-renderer/src/client/scoped-slots.tsx:334-338(SlotErrorBoundary)捕获后渲染空div(data-slot-error="sidebar.workspaces"),所以表现为"整块消失"。触发条件的现实性:同一个
dsh.workspace.view.v5键下状态结构变过——retainAccountKeys至今仍在删除一个历史字段sessionUpdatedAtByAccount(stores.ts:89),说明该键在不同版本间承载过不同字段集;旧版本写入的状态被新版本读到就会缺字段。Impact
升级后部分用户的侧边栏浏览器会永久不可用,直到手动清 localStorage;由于会话列表一起消失,很容易被判定为"对话历史丢失"。
Suggested fix
init()浅合并({ ...init, ...parsed })并校验 JSON;v5→v6)而不是沿用同键;groupExpansion/sessionOrderByAccount兜底默认值。Workaround
F12 → Console →
localStorage.removeItem('dsh.workspace.view.v5')→ 刷新。All reactions