dsh-trust-proxy
v0.1.0
Published
dsh bundle: in-process HTTP(S)/WebSocket trust proxy that rewrites Host/Origin for remote domain access to the /api browser-trust fence
Readme
dsh-trust-proxy
In-process reverse proxy for dsh (DeepSeek Harness) that lets remote browsers
pass the /api browser-trust fence when dsh is served through a public domain.
Why
dsh's /api gateway (dsh-client-connection) only accepts requests whose
Host header is loopback (or a declared --trusted-host) and whose
Origin matches that Host. Privileged methods (settings.*,
credentials.*, agentPreset.*, host.pickDirectory, llm.discoverModels,
...) are additionally pinned to loopback with an empty trust list, so no
--trusted-host can unlock them — the configuration plane stays
loopback-same-origin by design until dsh ships a real authentication layer.
Cloudflare Tunnel's httpHostHeader can rewrite Host, but it cannot rewrite
Origin, so a public-domain request always fails the fence with HTTP 403.
This bundle binds its own listener (default 127.0.0.1:3081) and forwards
every request — HTTP and WebSocket upgrades — to the real webServer with
Host and Origin rewritten to the loopback authority, then adds the CORS
headers the browser needs on the way back.
Install
dsh plugin --profile web add dsh-trust-proxyThen point your reverse proxy / Cloudflare Tunnel at the trust proxy port
(http://127.0.0.1:3081) instead of the webServer port. The plugin resolves
the webServer port automatically after the loader settles.
The bundle patch inserts the plugin row with defaults:
- insert:
- id: trust-proxy
name: dsh-trust-proxy
config:
host: '127.0.0.1'
port: 3081
origins: []Usage
# the default listener: 127.0.0.1:3081 -> webServer port
dsh --profile webConfiguration
| Key | Type | Default | Meaning |
| --- | --- | --- | --- |
| host | string | '127.0.0.1' | Trust proxy listener host |
| port | number | 3081 | Trust proxy listener port |
| origins | string[] | [] | Allowed public origins; empty echoes the request Origin |
| loopbackAuthority | string | derived | Loopback authority written into Host/Origin |
| targetPort | number | webServer port | Port to forward to |
Example overlay (e.g. ~/.dsh/profiles/web/cordis.patch.yml):
- id: trust-proxy
config:
port: 3081
origins:
- 'https://dsh.example.com'License
MIT
