Bundle
dsh-loopback-bridge
Unlock DSH Web settings and credentials when you open the UI from a LAN IP or public hostname
- Source
- johnhom1024
- stars
- 1 stars
- License
- MIT
- Updated
- Updated 2 hours ago
Readme
<div align="center">
# dsh-loopback-bridge
用局域网 IP 或公网域名打开 DSH,设置页也能改模型和 API Key
装完重启即可 · 不改官方源码 · 入口必须有鉴权
**[English](README.en.md)** · 中文
</div>
---
> [!WARNING]
> 这个插件把「仅本机」的设置和凭据写入能力,开放给所有能打开这个 DSH 页面的人。家庭局域网自己看着办;挂公网就必须在前面加 authentik / oauth2-proxy 这类鉴权。接入前先备份,数据丢了概不负责。
## 这是什么
DSH 设置页只认地址栏是不是本机(`127.0.0.1` / `localhost`)。用 `192.168.x.x` 或自己的域名打开时,页面会报 *"settings are unavailable in this browser"*,模型 tab 改不了。
服务端从 0.1.2 起已经认 `--trusted-host`,RPC 本身能通。卡住的是浏览器里那一刀:设置页看见 hostname 不是回环,直接进只读,请求都不发。这个插件在页面加载时把连接标成本机,设置页就会正常工作。
## ✨ 特性
- **远程能改设置** —— 局域网 IP、NAS 域名、公网域名打开,模型和凭据都能写
- **不改官方包** —— DSH 随便升级;官方哪天认 trusted-host 了,卸掉就行
- **装完即生效** —— `dsh plugin add` 之后重启 web,不用手改 nginx
- **0.1.2 友好** —— 不要再把 Host 改写成 `127.0.0.1`,cookie 会对不上然后 401
## 🚀 快速开始
### 1. 确认服务端已经信任你的访问地址
`dsh web` 启动参数里要带上实际用来打开页面的 Host,例如:
```bash
dsh web --host 127.0.0.1 --port 3080 \
--trusted-host 192.168.31.229 \
--trusted-host dsh.example.com
```
### 2. 安装插件
```bash
dsh plugin --profile web add github:johnhom1024/dsh-loopback-bridge
```
本地开发:
```bash
dsh plugin --profile web add link:/path/to/dsh-loopback-bridge
```
### 3. 重启 `dsh web`
Docker 共享 netns 的栈不要只 `restart` 单个容器,整栈重建。装完刷新页面,远程打开设置 → 模型,应该能改了。
## ⚙️ 要求
| 项 | 说明 |
| --- | --- |
| DSH | 按 `0.1.2-rc.1` 验证,`0.1.5+` 必用 1.0.1(旧版会把官方 `__ModuleLoader__` 盖掉,浏览器报 bootstrap facade is missing)。更早版本服务端还要改 Host,不推荐 |
| `--trusted-host` | 必须覆盖你实际访问用的 hostname / IP |
| 反代 | **不要**把特权 API 的 Host 改写成 `127.0.0.1`(0.1.2 的 cookie 绑 Host,改了会 401) |
| 鉴权 | LAN 信任模型可以裸奔;公网必须有反代鉴权 |
## 验证
打开远程地址的设置页,模型 tab 不再报 *unavailable*,能保存 API Key 就算成功。
<details>
<summary>命令行核对(可选)</summary>
```bash
# 脚本可达
curl -s -o /dev/null -w "%{http_code} %{size_download}B\n" http://<host>/loopback-bridge.js
# HTML 首包已注入
curl -s http://<host>/ | grep loopback-bridge
# 设置 RPC(0.1.2 路径是斜杠;要带着你的会话 cookie)
curl -s -o /dev/null -w "%{http_code}\n" -X POST \
-H "Content-Type: application/json" \
-d '{"type":"client-request","rpcId":"t","method":"settings/describe","payload":{"args":{}}}' \
http://<host>/api/settings/describe
```
</details>
## 🔒 安全
插件只动客户端。谁能打开 DSH 页面,谁就能改设置、写 `credentials.set`。这在自家反代后面是正确语义,裸奔公网则不是。
上游如果改成由服务端下发 `isLoopback`,这个插件会一起失效,卸掉即可。
## 📄 License
[MIT](LICENSE)
Install
dsh plugin --profile web add github:johnhom1024/dsh-loopback-bridge#395a7554a0f991798bdaba0c8ec18604dcc8ba80
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-loopback-bridge from the hub