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
index-BKQ_L1z6.js:56 TypeError: Cannot convert undefined or null to object
at Object.entries (<anonymous>)
at retainAccountKeys (client.js:218:1)
at index-BKQ_L1z6.js:56:69359
at index-BKQ_L1z6.js:56:68694
at produce (index-BKQ_L1z6.js:56:66201)
at Object.update (index-BKQ_L1z6.js:56:68674)
at a.<computed> [as retainAccountKeys] (index-BKQ_L1z6.js:56:69348)
at client.js:2017:1
...
client.js:526 slot entry crashed in 'sidebar.workspaces': TypeError: Cannot convert undefined or null to object
at Object.entries (<anonymous>)
at retainAccountKeys (client.js:218:1)
componentDidCatch @ client.js:526
客户端 store 运行时(defineStore)表现为以持久化对象作为状态,而非 { ...init(), ...persisted } 之类的合并,因此新增键拿不到默认值。
说明:@deepseek-ai/dsh-client-store 在本机安装树中不存在为独立目录,defineStore 运行时实际内联在 Web shell bundle 中(堆栈里的压缩帧 index-BKQ_L1z6.js:56),故本报告只能给出行为观测,其再水合语义(替换 or 合并)需维护者确认。
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.
概要
DSH Web GUI 左侧边栏的工作区与会话列表整块不再显示(只剩品牌行、
新会话按钮与底部设置入口),且没有任何可见错误提示。取证实锤:客户端插件
@deepseek-ai/dsh-client-ui-workspace已加载并注册了槽位sidebar.workspaces,但其组件在首次渲染时抛异常;槽位级错误边界捕获后按abdicate语义将该 entry 永久退场,格子只剩一个空的data-slot-error占位 div:崩溃来自一段纯视图偏好代码:浏览器持久化状态里缺少
sessionUpdatedAtByAccount键,而retainAccountKeys对它直接Object.entries(...)。环境
process.platform === "win32")@deepseek-ai/dsh@0.1.5-rc.1dsh-web-app/dsh-client-ui-workspace/dsh-client-ui-renderer/dsh-client-ui-sidebar/dsh-api-remotes等均为 0.1.5-rc.2web(%USERPROFILE%\.dsh\profiles\web)http://127.0.0.1:3080@linxin666/dsh-web-all@0.3.23、dshmarket、dsh-pet、dsh-whale-widget、dsh-better-sidebar、dsh-context、@nanmicoder/dsh-agent-teams);下文 §已排除 已说明其与本缺陷无关复现步骤
dsh web,浏览器打开http://127.0.0.1:3080。补充:该现象跨
dsh web进程重启稳定复现(重启前后 PID 不同、现象一致),与主机侧插件配置无关(曾把目录选择器由auto改为静态browse后重启,现象不变)。实际结果
左侧边栏的「工作区 + 会话列表 + 会话搜索 + 重命名 / 分叉 / 归档 + 排序分组」入口全部消失,且无任何 UI 提示、无自愈路径(刷新后重新注册 → 再次崩溃 → 再次退场)。
期望结果
即使持久化状态陈旧/缺键,也应:
根因分析
1) 崩溃点:
retainAccountKeys对该 store 的键零容忍@deepseek-ai/dsh-client-ui-workspace@0.1.5-rc.2,构建产物lib/client.js:崩溃帧精确落在 L218(第三个
Object.entries),意味着 L216/L217 成功执行、即groupExpansion与sessionOrderByAccount在状态中是可用对象,而d.sessionUpdatedAtByAccount为undefined。2) 调用方:工作区就绪后的清理 effect
workspaceKeys恒为字符串数组,因此参数侧不是问题;崩溃只可能来自d.*缺键。该 effect 仅在工作区投影就绪后触发,与「边栏先空白、再无自愈」的观感一致。3) 状态为何缺键
init()提供了全部 5 个键,因此缺键只能来自持久化状态的再水合:浏览器里dsh.workspace.view.v5这份 blob 是旧结构(含groupExpansion/sessionOrderByAccount,不含后加的sessionUpdatedAtByAccount)。可能的设计缺口:persist版本号仍为 v5,未随结构变更升级/迁移;retainAccountKeys没有?? {}兜底;defineStore)表现为以持久化对象作为状态,而非{ ...init(), ...persisted }之类的合并,因此新增键拿不到默认值。4) 为什么一个偏好读取失败会让整个入口消失
@deepseek-ai/dsh-client-ui-renderer@0.1.5-rc.2(lib/client.js):sidebar.workspaces的声明为kind: "single"(@deepseek-ai/dsh-client-ui-sidebar,构建产物lib/client.jsL391-394),于是abdicate: true:该 entry 被永久移除,格子变干后由出口渲染无内容的崩溃面;刷新只会重演同一过程。由于ui-workspace是该格子的唯一占据者,整个会话管理入口一次性消失。5) 为什么用户几乎看不到错误
console.error只打一次,极易被后续插件日志淹没;ui-workspace启用且 id 唯一、无第三方插件占用该槽位、GET /api/dsh-web-all/degraded为空、工作区/会话数据正常。常规主机侧诊断会得出「没问题」的结论。影响
临时规避(用户侧)
清除该 origin 下过期的视图偏好状态(只影响分组/排序/展开态等本地偏好):
或 DevTools → Application → Local Storage →
http://127.0.0.1:3080→ 删除dsh.workspace.view.v5*;兜底可 Clear site data。验证标准:刷新后边栏恢复,且 Console 不再出现
slot entry crashed in 'sidebar.workspaces'。建议修复
7.1 组件侧(最小止血)
7.2 store 侧(结构性,建议优先)
{ ...init(), ...persisted }(对声明键逐个补默认),使「新增键」对旧 blob 天然安全;persist版本号随结构升级(新增sessionUpdatedAtByAccount时应为dsh.workspace.view.v6)并提供迁移或直接丢弃旧版;7.3 失败面收敛(本缺陷的放大器)
kind: "single"的崩溃面建议渲染可见提示(含错误摘要)并提供重挂载/重试入口;reportEntryError的错误汇总暴露为可查询状态(目前只进 ledger 订阅,用户与诊断手段都取不到)。7.4 测试建议
sessionUpdatedAtByAccount的 v5 快照」初始化 store,调用retainAccountKeys,断言不抛错且缺失键补为{};WorkspaceBrowser,断言sidebar.workspaces未进入错误边界;persist键名与其状态形状的一致性检查(形状变更必须伴随版本变更)。已排除项(供维护者参考,避免重复排查方向)
ui-workspace被配置层禁用 / 未合成sidebar.workspacesslots.register({ name: 'sidebar.workspaces' }),它们只做 DOM 行注入remote.directoryPicker缺失导致apply未执行)browse后现象不变;且浏览器取证显示apply已执行(否则不会有retainAccountKeys崩溃帧)window.__DSH_BOOT__.entries含@deepseek-ai/dsh-client-ui-workspace(10 项 client inject 齐全),Console 无 bundle 加载失败data-slot="sidebar.workspaces"存在,外壳其他部分正常渲染workspacePhase === "ready"之后诊断片段(复现/定位用)
判别要点:
wsHTML出现data-slot-error="sidebar.workspaces"⇒ 注册成功但渲染崩溃(本缺陷);若为空 div 且entries中无该插件 ⇒ 属插件未加载的另一类故障。相关代码位置(本机 0.1.5-rc.2 构建产物)
dsh-client-ui-workspace/lib/client.jsL194-229、L1976、L2015-2026dsh-client-ui-renderer/lib/client.jsL519-533、L789-790dsh-client-ui-sidebar/lib/client.jsL375-405localStorage["dsh.workspace.view.v5"](或该前缀)All reactions