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 viahttp://<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-accessJSON route:GETto read the status andPOSTto set the status. - The route fence accepts requests from loopback or trusted authorities and rejects cross-site requests.
- When enabled, it updates the
/apitrust fence so that LAN browsers can use chat, tools, and workspace. - Mirrors the
settings/credentialsdomains on the fenced/lan-access/rpcroute to support remote Settings, Models, and Plugins configuration pages. - Installs a
crypto.randomUUIDpolyfill for plain-HTTP LAN origins. - Exposes a debugging helper at
GET /lan-access/diag. - Provides an optional
dsh-better-sidebarcompatibility 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¶
- Open the DSH GUI and navigate to
Settings → General. - 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. - The selection is persisted to
~/.dsh/settings.yaml, for example:
lan-access:
enabled: true
- 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.0exposes 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
dshprocess. 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