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
When running dsh web on Windows, the "New workspace" action in the web UI cannot complete - it appears to do nothing and no error is shown in the page.
Environment
OS: Windows (win32)
Package: @deepseek-ai/dsh@0.1.0-rc.6
Command: npx @deepseek-ai/dsh web (binds 127.0.0.1:3080)
Client: browser
Symptom
In the web UI, clicking "New workspace" produces no visible result and the workspace is never created.
Root-cause analysis (from the published package)
The picker backend is chosen by resolveDirectoryPickerBackend in packages/host/directory-picker-auto/lib/resolve.js:
if(facts.bindHost!=="127.0.0.1")return"browse";if(present(facts.env.SSH_CONNECTION)||present(facts.env.SSH_TTY))return"browse";if(facts.platform==="darwin"||facts.platform==="win32")return"native";// <-- Windows lands hereif(facts.platform!=="linux"||!facts.linuxChooser)return"browse";returnpresent(facts.env.DISPLAY)||present(facts.env.WAYLAND_DISPLAY) ? "native" : "browse";
On Windows with a loopback bind and no SSH, it returns "native". The native backend (packages/host/directory-picker-native) spawns worker.cjs, opens the Win32 IFileOpenDialog via koffi - a system folder dialog that lives outside the browser. For a web (browser) client this dialog is detached from the page and is normally hidden behind / loses focus to the browser window, so the user cannot see or operate it and workspace creation appears to fail.
Notably, the module's own comment says "remote deployments compose the browse backend instead" - but a localhost web client is currently treated as a local desktop client and gets native.
I verified separately that:
the backend workspace.create API works correctly (created a workspace via the API using an existing directory), and
worker.cjs does spawn and initialize the COM dialog correctly (it emits the showing message).
So the storage/data model is fine; the problem is the picker kind selected for a web client on Windows.
Expected behavior
When running dsh web, the workspace picker should use the browse backend (in-browser directory tree via host.listDirectory / host.createDirectory), not the native OS dialog - matching the documented intent that web/remote clients get browse.
Suggested fix
Either:
make resolveDirectoryPickerBackend return "browse" for a web client (e.g. pass a clientKind / isWeb fact and prefer browse for web clients regardless of platform), or
in the web app composition, mount the browse pair (dsh-host-directory-picker-browse + dsh-client-ui-directory-picker-browse) directly instead of the auto chooser.
Happy to open a PR if you indicate the preferred approach.
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.
Summary
When running
dsh webon Windows, the "New workspace" action in the web UI cannot complete - it appears to do nothing and no error is shown in the page.Environment
@deepseek-ai/dsh@0.1.0-rc.6npx @deepseek-ai/dsh web(binds127.0.0.1:3080)Symptom
In the web UI, clicking "New workspace" produces no visible result and the workspace is never created.
Root-cause analysis (from the published package)
The picker backend is chosen by
resolveDirectoryPickerBackendinpackages/host/directory-picker-auto/lib/resolve.js:On Windows with a loopback bind and no SSH, it returns
"native". The native backend (packages/host/directory-picker-native) spawnsworker.cjs, opens the Win32IFileOpenDialogvia koffi - a system folder dialog that lives outside the browser. For a web (browser) client this dialog is detached from the page and is normally hidden behind / loses focus to the browser window, so the user cannot see or operate it and workspace creation appears to fail.Notably, the module's own comment says "remote deployments compose the browse backend instead" - but a localhost web client is currently treated as a local desktop client and gets
native.I verified separately that:
workspace.createAPI works correctly (created a workspace via the API using an existing directory), andworker.cjsdoes spawn and initialize the COM dialog correctly (it emits theshowingmessage).So the storage/data model is fine; the problem is the picker kind selected for a web client on Windows.
Expected behavior
When running
dsh web, the workspace picker should use the browse backend (in-browser directory tree viahost.listDirectory/host.createDirectory), not the native OS dialog - matching the documented intent that web/remote clients getbrowse.Suggested fix
Either:
resolveDirectoryPickerBackendreturn"browse"for a web client (e.g. pass aclientKind/isWebfact and preferbrowsefor web clients regardless of platform), orbrowsepair (dsh-host-directory-picker-browse+dsh-client-ui-directory-picker-browse) directly instead of theautochooser.Happy to open a PR if you indicate the preferred approach.
All reactions