Bundle
dsh-lan-uuid-fix
dsh bundle: polyfill crypto.randomUUID on insecure origins so the DeepSeek Harness Web UI works over plain-HTTP LAN
- Source
- Zenjibad
- License
- MIT
- Updated
- Updated 3 days ago
Readme
# dsh-lan-uuid-fix A [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (`dsh`) plugin bundle that makes the Web UI work over plain-HTTP LAN addresses. ## The bug it fixes The web client's `mintRpcId()` calls `crypto.randomUUID()`. Browsers only expose that API in **secure contexts** — HTTPS, or loopback. A plain-HTTP LAN origin like `http://192.168.1.66:3080` is not secure, so `crypto.randomUUID` is `undefined`: | Page origin | Secure context | `crypto.randomUUID` | | --- | --- | --- | | `http://127.0.0.1:3080` | yes | function | | `http://192.168.1.66:3080` | **no** | **undefined** | When it's missing, every unary RPC (`host.describe`, `workspace.list`, `session.list`, ...) throws `TypeError: crypto.randomUUID is not a function`, the connection generation aborts, the WebSocket streams are killed mid-handshake, and the UI never loads the session/workspace baseline — the workspace browser just shows "No sessions yet" and the console loops `connection lost, retry #N`. `crypto.getRandomValues` **is** available on insecure origins, so a UUID-v4 backfill fixes it without HTTPS. ## How it works A host plugin registers an **index tap** on `ctx.webServer` (the webserver's html-transform hook, applied to every served `index.html`). The tap injects an inline polyfill that defines `crypto.randomUUID` from `crypto.getRandomValues` when missing, before the app bundles execute. Loopback and HTTPS pages are untouched — the polyfill only activates when the API is absent. ## Install ```sh dsh plugin --profile web add https://github.com/Zenjibad/dsh-lan-uuid-fix ``` The profile patch layer is applied live (HMR), so a running `dsh web` picks it up without a restart. Hard-refresh the page on the remote device afterwards. The plugin adds one row, `lan-uuid-fix`, which injects `webServer` and taps the index. If your profile previously added this row with a local file path, remove that row before installing the bundle to avoid a duplicate id. ## Verify From the machine serving dsh, or any LAN client: ```sh curl -s http://<host>:3080/ | grep randomUUID # polyfill present ``` The workspace browser should list sessions instead of "No sessions yet", and the browser console should show no `connection lost` retry loop. ## License [MIT](LICENSE)
Install
dsh plugin --profile web add github:Zenjibad/dsh-lan-uuid-fix#a5281c7fec4ebfbeb379a763cd4ba0f1528cd756
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-lan-uuid-fix from the hub