Summary
On Windows, opening the iVideo view fails: the HyperFrames preview child process that deepseek-ivideo spawns dies immediately at boot. The host stays alive, but the view can never start.
The cause is a Windows-only path/URL mismatch inside the bundled runtime: the preview owner-guard module is resolved to a native Windows absolute path (C:\...) and then handed to Node's --import CLI flag, which only accepts URLs or bare specifiers. The ESM loader parses the drive letter as protocol c: and throws.
Environment
- OS: Microsoft Windows, Version 10.0.26200.8457
- Node.js: v24.13.0
- DSH: 0.1.1-rc.2 (
npx @deepseek-ai/dsh web)
- deepseek-ivideo: 0.1.0
- hyperframes: 0.7.60
Steps to reproduce
- Install and register the plugin as a profile bundle (
deepseek-ivideo in dsh.profile.bundles), start dsh web.
- Open a conversation and switch to the iVideo view.
- When the view starts a preview session, the spawned child process crashes.
Actual result
node:internal/modules/esm/load:195 throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, schemes); ^ Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:' at throwIfUnsupportedURLScheme (node:internal/modules/esm/load:195:11) at defaultLoadSync (node:internal/modules/esm/load:142:3) at #loadAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:795:12) at #loadSync (node:internal/modules/esm/loader:815:49) at ModuleLoader.load (node:internal/modules/esm/loader:780:26) ...
Node.js v24.13.0
(The trace comes from the spawned preview child process; the DSH host itself keeps running.)
Root cause
In lib/runtime-C_JDweoV.js (v0.1.0):
Line ~16752 — the guard path is converted to a native path:
this.ownerGuardPath = fileURLToPath(new URL("./preview-owner-guard.js", import.meta.url));
// => "C:\Users\<user>\.dsh\profiles\web\node_modules\deepseek-ivideo\lib\preview-owner-guard.js"
Line ~16924 — it is passed to the spawned node process via --import:
return spawn(process.execPath, [
...ownsPreview ? ["--import", this.ownerGuardPath] : [],
this.cliPath,
...args
], { ... });
node --import requires a URL or bare specifier. On POSIX the native path /abs/path happens to be tolerated, which is why this only breaks on Windows.
Minimal reproduction
# Fails on Windows — exact same ERR_UNSUPPORTED_ESM_URL_SCHEME ('c:')
node --import "C:/path/to/deepseek-ivideo/lib/preview-owner-guard.js" -e "console.log('ok')"
# Works
node --import "file:///C:/path/to/deepseek-ivideo/lib/preview-owner-guard.js" -e "console.log('ok')"
Suggested fix
Since ownerGuardPath's only consumer is the --import argument, keep it in URL form:
- this.ownerGuardPath = fileURLToPath(new URL("./preview-owner-guard.js", import.meta.url));
+ this.ownerGuardPath = new URL("./preview-owner-guard.js", import.meta.url).href;
or convert at the spawn site with pathToFileURL(this.ownerGuardPath).href.
I verified the one-line fix locally: after patching, the chunk loads cleanly and the preview child boots successfully on Windows.
Summary
On Windows, opening the iVideo view fails: the HyperFrames preview child process that
deepseek-ivideospawns dies immediately at boot. The host stays alive, but the view can never start.The cause is a Windows-only path/URL mismatch inside the bundled runtime: the preview owner-guard module is resolved to a native Windows absolute path (
C:\...) and then handed to Node's--importCLI flag, which only accepts URLs or bare specifiers. The ESM loader parses the drive letter as protocolc:and throws.Environment
npx @deepseek-ai/dsh web)Steps to reproduce
deepseek-ivideoindsh.profile.bundles), startdsh web.Actual result
(The trace comes from the spawned preview child process; the DSH host itself keeps running.)
Root cause
In
lib/runtime-C_JDweoV.js(v0.1.0):Line ~16752 — the guard path is converted to a native path:
Line ~16924 — it is passed to the spawned node process via
--import:node --importrequires a URL or bare specifier. On POSIX the native path/abs/pathhappens to be tolerated, which is why this only breaks on Windows.Minimal reproduction
Suggested fix
Since
ownerGuardPath's only consumer is the--importargument, keep it in URL form:or convert at the spawn site with
pathToFileURL(this.ownerGuardPath).href.I verified the one-line fix locally: after patching, the chunk loads cleanly and the preview child boots successfully on Windows.