Replies: 11 comments
|
Same here. Fresh install on Windows, does not work at all. |
|
Thanks for confirming — that matches what I see. One more thing I found while narrowing this down, which may explain "does not work at all" on a fresh machine: dsh builds the profile's plugins with pnpm, not npm. Its own help says so:
With So on a clean Windows box there seem to be two separate things stacked on top of each other:
Could someone confirm whether pnpm is expected to be a prerequisite here? If it is, it would be worth saying so in the install docs (or having |
|
I reproduced this on a clean macOS box with the versions you name, and the mechanism in the first post does not hold there: the nesting is real, but it is not what stops the loader. Details and a way to test it on your machine. The tag and the float are exactly as you describe
Worth adding: no code path advances Nesting is not the step that breaks the loaderClean prefix, macOS 26, Node v26.5.0, npm 11.17.0,
Then I ran your version's own boot step against that install — That is the point: the launcher does not rely on hoisting. So the symptom is real and the tag/float is a real defect worth fixing, but "npm floats to rc.3 → not hoisted → the loader cannot see it" is not the causal step — at least not on macOS with npm 11.17. Were nesting the cause, the same install would have failed here the same way, and it does not. What does produce your error, and how to tellThe closure walk drops declared dependencies it cannot find, silently: const dir = packageDirFromAnchor(next.anchor, dep)
// A declared-but-uninstalled dependency cannot be a loader-visible
// plugin; skip it rather than fail the whole boot.
if (dir === undefined) continue( That yields a discriminator that needs no rebuild: # 1. is the projection there at all (a junction pointing into the installation)?
Get-Item "$env:USERPROFILE\.dsh\profiles\node_modules\@deepseek-ai\dsh-sandbox-local" |
Select-Object LinkType, Target
# 2. is the package installed anywhere npm can reach from the install anchor?
npm ls @deepseek-ai/dsh-sandbox-local @deepseek-ai/dsh-base -g
# 3. does Node resolve it from the profile, independently of dsh?
node -e "console.log(require.resolve('@deepseek-ai/dsh-sandbox-local',{paths:[process.env.USERPROFILE+'/.dsh/profiles/web']}))"
On your two fixes
Cheap and useful either way: keep booting, but say what was skipped. The resolution already records each package's declarer (master's Two smaller things in the same threadpnpm is not a boot prerequisite. There is no pnpm spawn on the launch path: This mechanism has since been replaced. |
|
到同样的问题,目前已成功解决! 在此记录一下:卸载当前版本后,安装 next 标签下的 0.1.5-rc.3 版本即可正常启动。 执行命令: npm uninstall -g @deepseek-ai/dsh 安装后再次运行 dsh web 成功启动,之前的本地记录也正在正常恢复中。感谢方案提供者! |
|
Adding a controlled A/B that this thread doesn't have yet: one runner image, one set of steps, only the root version changes.
Clean runners, Two things I'd add to the picture above. pnpm is not what stops the boot. It was missing on every job — the runner images don't ship it any more — and The nesting is real, but the root version looks like the deciding step. One more data point, in case it helps: |
|
Your diagnosis holds, and the registry confirms it is a property of what The mixed tree is by construction
Now compare the two candidates' sibling ranges:
Reproduce the two trees with: What gets a machine running todayPin the generation instead of the tag, so the whole tree agrees: Two notes on why both lines are needed:
I verified the version families and dist-tags above against the registry just now. I could not reproduce your clean-install run end to end — my machine is a source checkout with an existing profile, which is precisely the machine where this does not show — so treat the "two trees" reproduction as the evidence, not a second clean-room install. What fixes it upstreamBumping the |
|
Thanks for the detailed report and the Windows confirmation. I've filed an investigation into the clean-install startup failure, including the difference between the default install and an explicitly selected release. The package-nesting and pnpm explanations are still hypotheses; the macOS comparison here is useful, but does not establish why the Windows launch failed. We'll track the startup failure separately from installation-time missing-package errors and report back here when a fix is verified in an available release. |
|
I reproduced this on Windows and can name the step that fails, which also reconciles the two readings above: the package is projected and does resolve from the profile directory, and the lookup that fails is anchored somewhere else. Reproduction (isolated prefix installs, so the two roots can be compared on one machine)
Same machine, same npm, same Node, minutes apart, only the root version differs — which matches the runner A/B two comments up. The installs sit outside any other checkout, so nothing else on the machine can satisfy the lookup. The three probes that separate the explanations
So on rc.2 the profile projection is present and usable (which is what the profile-dir probe shows), and the same name cannot be resolved from the app install anchor. The boot's failure names exactly that lookup. On rc.3 the copy sits beside the app, so the same anchor succeeds. That is what makes the two earlier readings both right about their own probe: checking resolution from the profile directory cannot show this failure, because the profile directory is not where the failing lookup starts. And "incomplete install" is not needed to explain it — the tree is complete, one package is simply out of reach of the anchor the boot uses. What I did not establish: which call site performs that lookup. I measured which anchor fails, not the code path; if someone points me at it I will check whether a profile-anchored resolution would be the right fix there, rather than adding the package to the app's own dependency set. Two things worth fixing on top of the tag
|
Windows confirmation, with the swallowed root error and a same-machine A/BAdding a Windows data point that ties this thread to #7578 and rules out one hypothesis that keeps coming up (install scripts / Environment
Same machine, same day, five installs of the same
# | How @deepseek-ai/dsh@0.1.5-rc.2 was installed | Sibling packages resolved to | dsh-win32-process copies | dsh --profile headless "…"
-- | -- | -- | -- | --
1 | npx cache created 2026-09-22 10:18 +0800, i.e. before 0.1.5-rc.3 was published (05:45Z = 13:45 +0800) | 231 × rc.2, 0 duplicates | 1 | boots, answers
2 | npm install -g @deepseek-ai/dsh today (npm 11 default, install scripts skipped) | 1 × rc.2 root + 270 × rc.3, 28 packages duplicated | 4 | fails
3 | npm install -g --allow-scripts=… @deepseek-ai/dsh (install scripts allowed) | same mixed graph as #2 | 4 | fails
4 | npm install @deepseek-ai/dsh@0.1.5-rc.2 into an empty local project (npm init -y first) | 1 × rc.2 root + 230 × rc.3, but hoisted flat, 0 dsh duplicates | 1 | boots, answers
5 | npx -y @deepseek-ai/dsh@alpha (0.1.7-alpha.2, install scripts skipped) | 267 × alpha.2, 0 duplicates | 1 | boots, answers
Rows 2 vs 3 show install scripts are not the variable: allowing them changes nothing, and row 5 boots with them skipped. Rows 2 vs 4 show the same mixed rc.2/rc.3 graph boots when npm can hoist it flat and fails when What the global tree looks like (row 2, reproduced with Because the rc.2 root declares The error the loader swallows Importing the four The same probe against row 4 (flat tree, one copy of everything) imports all of them cleanly. So on Windows the chain is: mixed prerelease graph → nested duplicate There is no "error logged above": the koffi message never reaches stderr. Reproduce without touching your global install Suggestions, in order of blast radius
Workaround for anyone landing here today: |
|
The new Windows comparisons narrow this down: allowing install scripts did not fix the failing global install, while the flat local-project install booted. The profile-resolution probe and the duplicate I have added both comparisons to the existing investigation, including the missing underlying error in the startup diagnostic. The reported rc.3/alpha.2 successes are useful workarounds, but do not yet establish that the default install is fixed. |
|
Thanks for digging into this properly — you're right on both counts, and I want to walk back my earlier pnpm comment so it doesn't send anyone the wrong way. pnpm is not a boot prerequisite. My two runs confounded two variables — I moved from The actionable part stays: |
Uh oh!
There was an error while loading. Please reload this page.
What happens. On a clean machine (Node 24.21.0, npm 11.19.0):
The server never comes up. On machines where the packages were installed earlier it works fine.
Why. The
latesttag points todsh@0.1.5-rc.2. That release declares its dependency@deepseek-ai/dsh-basewith the range^0.1.5-rc.2, so npm resolves it to the already published0.1.5-rc.3. Withdsh-base@0.1.5-rc.3the package@deepseek-ai/dsh-sandbox-localis no longer hoisted to the top level ofnode_modulesand stays nested insidedsh-base\node_modules\@deepseek-ai\, so the profile loader cannot see it.@deepseek-ai/dsh(=latest)@deepseek-ai/dsh@0.1.5-rc.3(=next)The package itself is intact:
import '@deepseek-ai/dsh-sandbox-local'from the profile directory succeeds — what is missing is reachability from the top level.Reproduction.
(also reproduced with npm 12.0.2 on the same layout).
npm i -g @deepseek-ai/dshdsh web --no-open --port 3090Running it again on the same profile reproduces the same error — this is not a first-run-only issue.
Scope of what was checked. This was reproduced with npm global installs on Windows
(a fresh prefix every time). I have not tried pnpm or macOS/Linux, so I cannot say whether
the layout resolves differently there — with pnpm the tree is laid out differently and the
symptom may not appear.
Related. #7256 reports
the same mechanism (a stale transitive dependency shadowing the needed copy) but caused by a
third-party plugin installed into a profile. Here nothing third-party is involved: the drift
happens inside dsh's own dependencies, on the
latesttag, so it affects every fresh install.#5106 covers the underlying
fragility — one plugin that fails to resolve takes down the whole plugin tree instead of being
isolated.
What would fix it.
latesttag to a self-consistent release (0.1.5-rc.3boots), or pin the dependencies of0.1.5-rc.2to exact versions — the^0.1.5-rc.2range currently allows a newer prerelease and breaks the layout.@deepseek-ai/dsh-sandbox-localas a direct dependency ofdsh, so npm hoists it to the top level regardless of how the other packages are laid out.All reactions