Introduction

The DSH Web GUI binds to the loopback address by default. The DSH launcher itself also rejects --host 0.0.0.0 because binding to all interfaces would expose DSH’s tools to the network.

If you only want to open the DSH Web GUI from another machine on the same local area network, dsh-lan-access implements this toggle as a switch in Settings → General: when enabled, it binds to 0.0.0.0; when disabled, it reverts to 127.0.0.1.

What is This

dsh-lan-access is a DSH web plugin. The repository is located at nonmean/dsh-lan-access with an MIT license. The engines field in package.json requires Node >=20, and it has been verified to run on DeepSeek Harness v0.1.1-rc.1.

Its main value is: changing the “Allow LAN Access” toggle from manual binding address modification to a clear switch in the DSH settings page, and the core functionality does not require changes to the harness.

Core Features

  • Adds a “LAN Access / LAN access” row in DSH’s Settings → General, featuring a native checkbox toggle, LAN URL, copy button, Chinese/English text, and status reading that is polled during restarts.
  • When enabled, the Web GUI binds to 0.0.0.0, allowing network devices to access it via http://<LAN-IP>:3080.
  • When disabled, the Web GUI binds back to 127.0.0.1, which means only local loopback access is allowed.
  • Registers a fenced /lan-access JSON route: GET to read the status and POST to set the status.
  • The route fence accepts requests from loopback or trusted authorities and rejects cross-site requests.
  • When enabled, it updates the /api trust fence so that LAN browsers can use chat, tools, and workspace.
  • Mirrors the settings/credentials domains on the fenced /lan-access/rpc route to support remote Settings, Models, and Plugins configuration pages.
  • Installs a crypto.randomUUID polyfill for plain-HTTP LAN origins.
  • Exposes a debugging helper at GET /lan-access/diag.
  • Provides an optional dsh-better-sidebar compatibility patch.

Installation and Enablement

The verified installation command is as follows. The address in the README uses the <owner>/<repo> placeholder; replace it with the actual repository address during installation:

dsh plugin --profile web add git+https://github.com/<owner>/<repo>.git

After installation, restart the GUI:

dsh web

Typical Usage

  1. Open the DSH GUI and navigate to Settings → General.
  2. Toggle “LAN Access / LAN access”.
    - When enabled, the settings row displays the address accessible by other devices, typically the IPv4 address of the interface with the default route, along with a copy button.
    - The web server will restart to re-bind; the settings row will wait for the restart to complete before re-reading the status.
  3. The selection is persisted to ~/.dsh/settings.yaml, for example:
lan-access:
  enabled: true
  1. Use the following command to restart the GUI when needed:
dsh web

If using the optional dsh-better-sidebar compatibility patch, run:

./scripts/install-patches.sh web

For local development, rebuild after modifying src/, then reinstall and restart:

pnpm build

Alternatively, use:

npm run build

Use Cases and Notes

  • It is disabled by default, i.e., loopback only.
  • It is only recommended to enable it within a trusted network. Binding to 0.0.0.0 exposes DSH’s tools to the network.
  • The “LAN Access / LAN access” toggle is only reachable via the fenced route; if you disable it from a remote machine, that remote machine will immediately lose access.
  • The following capabilities remain loopback-only and cannot be compensated for remotely through this plugin: host.pickDirectory, host.openPath, llm.discoverModels.
  • The plugin runs with the permissions of the current dsh process. It is recommended to check the source code and license before installing.

Links

GitHub:

https://github.com/nonmean/dsh-lan-access

Directory page address (provided by plugin clues):

https://www.skillhub.cn/plugins/nonmean/dsh-lan-access