npx @deepseek-ai/dsh web offline: DSH plugin and mirrors
Running DeepSeek Harness with npx @deepseek-ai/dsh web offline is really one question: where does the package come from? npx assumes a reachable registry, so prepare a private registry, a warmed cache, or package files carried in — each maps to a different network condition. One trap deserves warning up front: empty proxy variables are treated as real values, so children silently connect directly.
Three DeepSeek Harness "no network" situations
Bottom line: fully offline means cache warm-up, an intranet source means a private registry, proxy-only means fixing proxy variables. They are not interchangeable, and mixing them hides the real failure.
| Environment | Network | Recommended | Key action |
|---|---|---|---|
| Fully offline | No internet, no intranet source | Cache warm-up or offline media | Download on a connected machine, carry the cache in |
| Intranet source | Internal private registry reachable | Private registry | Sync the CLI and all plugin packages |
| Proxy only | Internet through a proxy | Private registry is optional; fix variables | Set variables correctly, never empty |
Option A: private registry (best for enterprises)
Bottom line: point the registry at your private source and both npx and plugin installs follow. The prerequisite is that the CLI and every plugin package you need — with dependencies — are already synced there.
- Configure the source at project level to avoid polluting global config:
# .npmrc
registry=https://your-private-registry/
- Verify it took effect:
npm config get registry
# expected: your private registry, not the public default
- Install the CLI, then plugins one by one:
npx -y @deepseek-ai/dsh@0.2.0-rc.2 web --port 3080
# expected: resolves from the private source; a 404 means that version is not synced
- Sync the plugin set up front: decide which DSH plugin packages you need in DSH Plugin Hub, then sync that batch with dependencies in one pass rather than one plugin at a time.
- Document the available set: list which packages and versions exist in the source so colleagues stop guessing.
Option B: cache warm-up (when you can only move a cache)
Bottom line: download into the cache on a connected machine, move the cache directory, and reuse it offline. No registry required — good for one-off deliveries and a few machines.
- Warm the cache on the connected side:
npm cache add @deepseek-ai/dsh@0.2.0-rc.2
npm cache verify
# expected: the package appears in the cache directory
- Locate and move the cache directory (confirm the path with npm config get cache).
- Run offline against the same cache:
npx --offline -y @deepseek-ai/dsh@0.2.0-rc.2 web --port 3080
# expected: starts without network access; missing packages fail loudly instead of hanging
- Warm plugins too, or only the CLI will start offline.
- The trade-off: caches tolerate version differences but not architecture differences — native modules still need compiling on the target machine.
Option C: carry package files in (most reliable fallback)
Bottom line: pack the tarballs, copy them in, install from local files. When the network is fully isolated, this is the dependable route.
- Pack on the connected side:
npm pack @deepseek-ai/dsh@0.2.0-rc.2
# expected: a file such as deepseek-ai-dsh-0.2.0-rc.2.tgz appears
- Install or run locally on the offline side:
npm i -g ./deepseek-ai-dsh-0.2.0-rc.2.tgz
dsh --version
- Pack DSH plugin packages the same way.
- Keep a manifest of package names, versions and counts, and reconcile it at handover — this scenario punishes assumptions about completeness.
DeepSeek Harness registry and proxy variables
Bottom line: two rules — set the ones you need correctly, unset the ones you do not. Leaving them empty is worse than setting them wrong.
- Set the proxy only when needed (replace with your address):
export HTTPS_PROXY=http://127.0.0.1:7890
export HTTP_PROXY=http://127.0.0.1:7890
- Unset rather than blank:
unset HTTPS_PROXY HTTP_PROXY
env | grep -i proxy # expected: no output, not "xxx_PROXY="
- Why empty breaks: an empty string is passed to children as a real value and can trigger cleanup logic reserved for specific proxy scenarios, so children silently bypass the proxy. On an intranet this looks like "the proxy is configured but nothing downloads," with nothing visibly wrong on the host.
- Sweep the environment once: run env | grep -iE '(proxy|no_proxy)=' and fix empty entries.
Verifying the DeepSeek Harness mirror actually works
Bottom line: the hardest proof is to cut public access and run again; the softest is to read the address in config and logs. Do both.
- Read the effective config: npm config get registry plus npm config list, checking for higher-priority overrides.
- Watch the request host in install output — your private domain is correct; the public domain means the configuration did not apply.
- Block public access and retry (conclusive).
- Force cache-only with --offline to confirm the warm-up is complete.
- Call a plugin function once — a running CLI does not prove the plugin works.
DSH plugin troubleshooting offline
Bottom line: offline failures are almost always "the package is not there," not "the command is wrong." Check presence first.
- List before acting: write down CLI and plugin package names with versions, then verify each after syncing.
- Separate CLI-missing from plugin-missing: the 404'd package name tells you whether to fix the source or the cache.
- Eliminate empty proxy variables or every network check lies.
- Plan for native dependencies: prebuilt artifacts do not carry across architectures.
- Do not retry in a loop — retries do not create packages.
- Repair status, stated honestly: these options follow npm's registry and npx mechanics; confirm DeepSeek Harness and plugin package names and versions against what you actually use, since private registry setups vary by organization.
If the offline target is a plugin package rather than the CLI, see installing DSH plugin offline.
Sources: npm Docs · registry, npm Docs · npx, npm @deepseek-ai/dsh.
FAQ
npx always starts with where the package comes from, so solve that first: place the DeepSeek Harness package in a private registry or a local directory and resolve from there instead of letting npx reach the public registry. The simplest route is to download the package and its dependencies on a connected machine, move the cache directory over, and run with the offline flag.
In DeepSeek Harness, point the registry in configuration — project-level or user-level .npmrc both work — and npx plus plugin installs will follow it. The catch is that the same registry must host both DeepSeek Harness and the plugin packages you need, or you end up with a half-working state where the CLI installs but plugins 404.
In DeepSeek Harness, because empty and unset are treated differently: an empty string is passed to child processes as a real value and can trigger cleanup logic reserved for specific proxy scenarios, so the child ends up connecting directly with no warning. Either unset variables you do not need or set them to a real address — never leave them empty.
In DeepSeek Harness, three checks: read the effective registry value, watch the request host in download logs, and run once with public access blocked. The third is conclusive: if the install still succeeds, you are genuinely on the private source.
In DeepSeek Harness, the CLI is one package, plugins are a set, so offline environments often end up with the CLI present and plugin dependencies missing. Focus on which packages exist in the private source — verify each plugin package and its dependencies are synced instead of retrying the install command. Also check whether native dependencies need prebuilt artifacts for the offline architecture.
Related Terms
- private registry
- A private registry is an internally hosted npm source that caches or hosts packages so intranet machines install without public internet access. For DeepSeek Harness and its DSH plugin packages to work, both must be synced into that source.— https://docs.npmjs.com/cli/v10/using-npm/registry
- .npmrc
- .npmrc is the npm configuration file that sets registry, proxy and cache options, with project-level and user-level layers. It is the main mechanism for routing npx and plugin installs through a private source or proxy.— https://docs.npmjs.com/cli/v10/using-npm/registry
- cache warm-up
- Cache warm-up means downloading packages into the cache on a connected machine and reusing that same cache offline, skipping network resolution. For npx it solves both slow downloads and fully disconnected environments.— https://docs.npmjs.com/cli/v10/commands/npx
- npm proxy variables
- npm proxy variables route npm traffic through a proxy via HTTP_PROXY and HTTPS_PROXY. They are value-sensitive: an empty string is treated as a real value and can make child processes connect directly, so offline and intranet setups should unset them or set a real address.— https://docs.npmjs.com/cli/v10/using-npm/registry