n
dsh-web-proxy
Manifest validUI (client)hasBundlePatch
dsh-plugin-web-socks-proxy
DeepSeek Harness 插件:让 web_fetch 在访问境外网站时自动走本机代理(默认 socks5h://127.0.0.1:7890,即 Clash 默认混合端口),其余站点保持直连。
v1.1.0 起,代理在「设置 → 通用设置 → 网络代理」里随时可改,无需动配置文件:
- 范围:按域名自动分流(默认)/ 全部走代理 / 直连(停用);
- 协议:
SOCKS5(远程解析域名)(socks5h://,推荐)/SOCKS5(本地解析域名)(socks5://)/HTTP CONNECT(http://); - 地址与端口:改完按回车或移出输入框即保存,立即生效(写入 profile 补丁层的 volatile 覆盖,热重载)。
bypassDomains(localhost、127.0.0.1、.cn、本机服务端点等)在任何模式下都保持直连。
工作方式
- 注册一个 id 为
web-socks-router的WebFetchProvider到ctx.web,并把web服务的fetchProvider指向它。 - 每一跳 URL 独立决策路由:
mode: auto(默认):仅proxyDomains列表中的域名走代理(bypassDomains优先级更高);mode: always:除bypassDomains外全部走代理;mode: never:全部直连(插件仍在位,方便快速关闭)。- 以上三项即设置界面「网络代理」行的三个选项;
proxy与mode是 volatile 配置字段,界面写入后由 config-editor 持久化进 profile 补丁。
- 域名规则:裸域名
google.com匹配自身及全部子域;*.example.com只匹配子域。 socks5h://由代理端解析域名(推荐);socks5://本地解析后再连代理(会做公网地址校验)。- 代理连接失败时报错
WEB_PROXY_UNAVAILABLE(提示检查本地代理客户端),不会静默直连泄露流量。 - 直连路径复刻了官方
@deepseek-ai/dsh-web-fetch-http的安全姿态:仅 HTTP(S)、拒绝 URL 内嵌凭据、解析结果全部校验为公网地址并锁定连接、仅跟随同源重定向、字节/字符上限、按 Content-Type/charset 解码。
附带能力
- 注册一段系统提示(
web-socks-proxy,可用promptSection: false关闭),让 Agent 知道:web_fetch会自动走代理;shell 命令需要代理时先设ALL_PROXY(PowerShell:$env:ALL_PROXY = 'socks5://127.0.0.1:7890';bash:export ALL_PROXY=socks5://127.0.0.1:7890),curl 也可以-x socks5h://127.0.0.1:7890。
安装
桌面端「设置 → 插件」或插件管理器安装本目录(本地 file 包),安装后自动作为 bundle 加入 desktop profile 的 dsh.profile.bundles。配置位于 bundle 自带的 cordis.patch.yml(插入行 id 为 web-socks-proxy),可在配置编辑器中直接修改。
卸载/回退
在插件管理器中停用或移除本 bundle 即可:随 bundle 注入的 web 行覆盖一并消失,基础层的 fetchProvider: http 自动恢复,行为回到原始直连。
故障诊断
超时/连接错误信息带有 stage 字段,指示停滞的阶段,例如:
tcp connect direct …/SOCKS proxy 127.0.0.1:7890 socks-greeting:代理客户端未监听或不可达,确认 Clash 等本地代理在运行;await-connect-reply …:CONNECT 请求已发出但代理未回复(通常是代理端上游节点/规则问题);tls handshake …:隧道已建立但 TLS 失败(一般是代理上游被干扰);http exchange …:TLS 正常,等待 HTTP 响应。
超时错误同时附带 trace(SOCKS 帧读取的事件序列),可用于进一步定位。握手阶段停滞的错误里 …ms since connect 表示从 TCP 连上到超时的耗时。
开发
- 修改
lib/index.js后,若 profile 补丁层将本目录加入了 hmr 的root监视列表(- id: hmr / config: root: [<本目录>]),改动会自动热重载;否则需重启 DeepSeek Harness 才会重新导入模块(启用/停用开关不会重新导入已缓存的 ESM 模块)。 - 仓库内另有两个独立诊断脚本(与插件无关,仅辅助排障):
../socks-diag.mjs(裸 SOCKS5+TLS 协议探测)与../provider-diag.mjs(在宿主外直接运行 provider 代码)。
Comments
Loading…