READMESource: main@5dafbb87
dsh-proxy-gate
DSH 出站代理开关:在会话里用 /proxy 命令一键切换,不改系统代理、不改 .env、不重启 DSH。
- 开:把 DSH 进程的 undici 全局 dispatcher 换成指向你指定代理的 dispatcher(模型 API、
web_search、web_fetch、MCP、插件下载、bash 子进程一起生效)。 - 关:恢复 DSH 启动时的网络策略(通常是直连)。NAS 上其它程序(如 qbittorrent)始终不受影响。
- 代理地址可以是局域网内另一台机器,例如 Ubuntu 虚拟机上的 Clash:
http://192.168.1.50:7890。 - 代理挂掉时
/proxy off仍然可用:命令在 Host 侧执行,不经过模型,Web UI 又走回环直连。
安装
dsh plugin --profile web add /vol2/1000/dev/dsh-proxy-gate --ignore-scripts
或通过 plugin_manager 以本目录安装。行 id 为 include:proxy-gate。
图形界面
装好后打开 设置 → 插件 → 出站代理:
- 顶部状态胶囊:
已开启 / 已关闭 / 已开启(未生效) - 代理地址输入框 + 保存(回车即保存),保存后立即生效
启用代理/关闭代理一键切换测试连通性:走当前通道打一次 HTTP,直接显示状态码与耗时- 底部显示当前真实出口(代理地址或直连)与最近错误
面板与 /proxy 命令读写同一份配置,两边操作互相可见;面板每 2.5 秒刷新一次状态。
命令
| 命令 | 说明 |
|---|---|
/proxy 或 /proxy status |
查看开关、配置地址、当前真实出口(代理 / 直连) |
/proxy on |
启用代理,立即生效 |
/proxy off |
关闭代理,立即恢复直连 |
/proxy set http://192.168.1.50:7890 |
设置代理地址(可省略 http://) |
/proxy test [url] |
走当前通道做一次 HTTP 测试,输出状态码、耗时和响应片段 |
/proxy help |
用法 |
“当前出口”来自 DSH 自己的路由判定(proxyRouteFor,与真实请求同一套逻辑),不是读命令行环境变量。
配置项
在插件配置里可改,也可只用命令;四个字段都是 volatile,保存后原地生效,不重启插件:
| 字段 | 默认 | 说明 |
|---|---|---|
enabled |
false |
是否启用代理 |
proxyUrl |
http://127.0.0.1:7890 |
代理地址;只支持 http(s),不支持内嵌账号密码 |
noProxy |
空 | 额外直连名单(逗号分隔,不支持 CIDR);回环地址由核心强制直连 |
testUrl |
https://www.gstatic.com/generate_204 |
/proxy test 默认地址;直连时打不开属正常,正说明没走代理 |
行为说明
- 回环地址(
localhost/127.0.0.1/::1/[::1])始终直连,Web UI 不会绕进代理。 - 子进程(bash 工具、
curl、git、pnpm)通过proxyEnvironmentForChild()继承同一策略,HTTP_PROXY/HTTPS_PROXY/NO_PROXY大小写都会写入。 - 地址非法(SOCKS、带账号密码、带路径)时命令直接报错,不会静默直连;已启用状态下地址出错会保持直连并记录错误。
- 代理不可达时不会自动改配置:
/proxy off回直连,或/proxy set换代理。
验证记录
- 单元测试:
node --test test/*.test.mjs(6 项,覆盖地址校验、volatile 读取、开启/关闭/非法地址/释放状态机)。 - 实机切换(本机 18090 端口起了一个可转发代理做对照):
- 开启后:子进程环境出现
HTTP_PROXY/HTTPS_PROXY=http://127.0.0.1:18090、NO_PROXY=localhost,127.0.0.1,::1,[::1];对照代理记录到CONNECT opencode.ai:443(本会话模型请求)与测试请求,说明 Host 进程自身流量已走代理。 - 关闭后:子进程环境中的代理变量全部消失,对照代理不再收到新连接。
- 开启后:子进程环境出现
- 未由我验证的部分:
/proxy命令由用户在聊天框提交,我无法代替提交;插件行include:proxy-gate已是active,命令注册在同一插件上下文内。
卸载
dsh plugin --profile web remove dsh-proxy-gate
卸载即释放:插件 dispose 会调用安装时拿到的 restore 函数,恢复进程原有 dispatcher 与环境变量。
依赖
运行时从 DSH 安装解析 @deepseek-ai/dsh-http-proxy、@deepseek-ai/schemastery(optional peerDependency),无第三方运行时依赖。
No comments yet. Be the first to write one.