Repository navigation
Web UI on a trusted remote host: model settings are loopback-only - please expose a documented deployment trust flag #9029
Replies: 2 comments
|
Adding evidence from the plugin side, since the same gate is being re-implemented by every plugin author and failing in different shapes. Under a
All four share one root: hand-rolled What already exists internally: One more data point: Proposal: export and document something like
Related threads: #7382, #9541, #7206, #7032 (client-side settings gate), #9598 ( |
|
0.2.1-rc.2 data point: the |
Uh oh!
There was an error while loading. Please reload this page.
Context
Running the Web UI on a remote host:
dsh web --host 127.0.0.1 --no-open --trusted-host <vpn-host>, reached from another machine through a VPN overlay with an HTTPS front end. The page origin is therefore not loopback.What works
/apihost fence accepts the declared authority from--trusted-host.What does not work
Settings → Models on that remote origin:
So a user working in the browser from another machine cannot add a provider API key, select a model, or change model settings. Model configuration is effectively loopback-only, and the message does not say what to do instead.
Why (from the shipped 0.2.0-rc.2 bundles)
@deepseek-ai/dsh-client-ui-settings-models: the settings surface derives its persistence from the connection seat (isLoopback ? 'host' : 'memory'); withmemorythe provider directory is never fetched and the message above is displayed.@deepseek-ai/dsh-client-connection:dsh-web-frontendreadsglobalThis.dshDesktopBootand then installsglobalThis.__DSH_TRANSPORT__ = { ownsHost: true, streamBaseUrl }.The client-side capability exists. What is missing is a first-party, documented way to declare a remote deployment trusted.
Idea
Make the trust decision explicit, operator-controlled and documented, for example:
--trusted-host(or add a dedicated flag / profile setting) so a trusted non-loopback authority is also treated as host-owned for settings persistence; orNotes
location.hostnameis immutable from the page, so a reverse proxy that only rewritesHost/Origindoes not fix this: it satisfies the server fence, not the client seat. Community relays work around it by rewriting the client bundle in flight - exactly the patching a first-party flag would remove.Environment
0.2.0-rc.2from npm, Node 24.21.0, Debian 13, Chromium 154dsh web --no-open --host 127.0.0.1 --port 3080 --trusted-host <vpn-host>, HTTPS provided by the VPN's own certificateAll reactions