Replies: 4 comments
|
Your reading of the shipped bundle is correct, and the fix has already landed -- you need the What is confirmed at HEAD (ddefc45, 0.1.6-alpha.2):
So: on 0.1.5-rc.2 the immediate workaround is to drop the poisoned record -- One caveat worth carrying forward, because your root-cause analysis is more durable than the fix I have not run the 0.1.5-rc.2 build -- the version boundary above comes from the tag graph, and |
|
Verified against the published npm artifacts, since the tag-graph inference above left the 0.1.5-rc.2 side unrun. Same conclusion, now from the shipped tarballs rather than the source tree (
Both keep Two details worth adding to the repro:
Gecko's phrasing of the same TypeError, for anyone searching the message text: Agreed on the durable point in the parent comment: the key is still |
|
Thanks - the tarball check is the piece I could not do. I had run the tag graph but not the Where it stands at
But I have to correct the durable point I made above, because the shipped answer is better than what I proposed. I wrote that the next field added under the same key would need another shim. That is too strong. The persisted-state type marks the late field optional and documents why, and the read site owns the default: Both halves are pinned, which is why I trust it:
So the shim is only needed for a field that cannot be read defensively - the old ledger was consumed by Boundary: all of the above is read from the committed tree at |
|
Confirmed on 0.1.5-rc.2 (Windows, The d19d23c shim explains it exactly: rc.x builds iterate
Given the convention now covers late optional fields with read-site defaults ( |
Uh oh!
There was an error while loading. Please reload this page.
Bug: web sidebar lists no workspaces and no sessions after upgrade — persisted store shape changed without bumping the persist key (0.1.5-rc.2)
Environment
0.1.5-rc.2(global npm install,dsh web)<fill in: e.g. Chrome/Edge xyz>http://127.0.0.1:3080npm install -g @deepseek-ai/dshover an earlier0.1.5-rcbuildSymptom
The left sidebar shows no workspaces and no sessions at all — the list is completely empty. Everything else in the GUI works normally: chat, attachments, model selection, settings, and the session transcript. A hard reload (
Ctrl+Shift+R) does not help, and the state survives browser restarts.Console evidence
Root cause
@deepseek-ai/dsh-client-ui-workspacepersists its view store inlocalStorageunder the literal keydsh.workspace.view.v5:The client store helper hydrates by replacing the state with the stored JSON — it does not merge
init()defaults, so a field absent from the stored record staysundefined:A record persisted by an earlier
0.1.5-rcbuild uses the same keyv5but predates thesessionUpdatedAtByAccountfield.retainAccountKeysthen dereferences the missing field:The call happens in an effect the moment the workspace projection becomes ready (
lib/client.js:2015-2021), i.e. exactly when the list is about to render:The throw escapes into the
sidebar.workspacesslot entry, its error boundary catches it (client.js:526) and renders nothing. Result: a permanently empty sidebar in that browser, on every load, with no visible error and no way to recover from the UI.Minimal reproduction
Open the web GUI and go to DevTools → Application → Local Storage for the GUI origin.
Set
dsh.workspace.view.v5to a pre-sessionUpdatedAtByAccountshape:{"groupBy":"workspace","orderBy":"updated","groupExpansion":{},"sessionOrderByAccount":{}}Reload. The sidebar lists no workspaces and no sessions, and the console shows the trace above.
Run the workaround below: the sidebar returns immediately, with every workspace and session intact.
Workaround
Only browser-local view preferences are lost (which groups were expanded, manual row order). Workspaces and sessions live in
$DSH_HOME/storages/workspace.jsonand the session store, and are untouched.To keep those preferences, repair the record instead of dropping it:
Note:
localStorageis per origin, so a browser that reaches the GUI on a different origin (e.g.localhostvs127.0.0.1, or a LAN address) holds a separate record and needs the same fix there.Suggested fixes
d.groupExpansion ?? {}, etc.) so an already-poisoned browser recovers on the next reload instead of losing the whole sidebar. This is the fix that unbreaks existing users.dsh.workspace.view.v5.{...init(), ...stored}) in the store helper, so a field added in a later build can never beundefined.sidebar.workspacesentry renders as a silently empty sidebar, which reads as "my conversations are gone".Diagnostic notes
dsh --profile web --dump-configshows all 53 web client plugins mounted and enabled, includingui-sidebar,ui-workspaceandworkspace-controller; the profile composition is not at fault.session_diagnosereports all 6 stored sessions asok, and the workspace registry/directories resolve correctly underrealpath— the data is intact. This is purely client-side persisted-state handling.webprofile additionally mounts a third-party plugin (dsh-sessions-diagnosis, added withdsh plugin --profile web add .). It is unrelated to the trace, and the crash reproduces from the persisted value alone with no plugin involved.All reactions