liveqte/dsh-lan-proxy1

dsh-plugin-lan-proxy

dsh 局域网反代插件:把 dsh 的回环 Web UI 通过 0.0.0.0 反代暴露到局域网,开关/状态/启动日志嵌入设置页;并固定工作区选择为网页内嵌目录浏览(远程可选宿主目录);转发时按规则表改写前端 JS,解除 dsh 对非回环来源的设置页封锁。

包名
dsh-plugin-lan-proxy
版本
0.3.0
许可证
MIT
最近更新
2026年8月23日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:liveqte/dsh-lan-proxy

使用

  • 开关:设置页 →「局域网反代」tab,切换「监听局域网访问」。 页面开关的即时状态写入运行时文件($DSH_HOME/profiles/web/lan-proxy.runtime.json, 优先级高于配置默认值),立即生效。
  • 局域网访问http://:/
  • 端口:tab 内可直接修改监听端口(所有网卡)与上游端口 (127.0.0.10 表示自动取 dsh 实际监听端口)。
  • 开关与端口修改接口仅限本机回环地址调用;局域网访问只读状态与日志。
  • 选择工作区:装上本插件后,侧边栏 / 会话区的「添加工作区」改为网页内嵌目录浏览器 (宿主文件系统列举 + 新建文件夹),不再在 dsh 进程所在机器上弹出 OS 对话框。 这样局域网/远程浏览器也能选目录;本机 127.0.0.1 访问同样走内嵌对话框。 实现方式:bundle 层禁用 directory-picker(auto),并挂载官方 directory-picker-browse 双面(host 列举/创建 + client 对话框)。

配置项

默认值说明
enabledfalse监听局域网访问(配置默认值;页面开关优先级更高并持久化到运行时文件)
port3080反代监听端口(所有网卡)
upstreamPort0上游端口,0 = 自动取 dsh 实际监听端口
maxLogLines500页面日志缓冲行数
bypassRules见下前端 JS 改写规则表(屏蔽 dsh 对非回环来源的设置页封锁)

配置覆盖写在 profile 层的 cordis.patch.ymlid: lan-proxy 行的 config), 不需要修改仓库内文件。

设置页非回环封锁的绕过(bypass 规则)

dsh 0.1.x 的浏览器端只为回环地址加载设置面(connection.isLoopback),从局域网 访问「设置 → 模型」会得到:加载提供方目录失败: settings are unavailable in this browser。反代在转发 /plugins//client.js 字节流时,按规则表改写其 JS,把封锁判定固定为回环;服务端 /api 信任栅栏按 Host 头判定,反代已把 Host 改回 127.0.0.1,因此服务端天然放行。这是改动浏览器实际执行字节的补丁,与插件 加载顺序无关。

内置规则(dsh 0.1.x):

id改写目标动作
dsh-client-connection:isLoopback-mirrordsh-client-connection client 里的 isLoopback: pageLocation… 改为 isLoopback: true设置/模型/凭据面视为回环,正常读写

官方换一种封锁方式时,在配置里加一条 find/replace 规则即可(或覆盖 bypassRules 表),旧规则 find 不中会自动跳过并在日志面板提示。规则状态 (命中次数/最后错误)出现在「局域网反代」设置页的运行状态里。