让 DeepSeek Harness 自动跟随本机代理开关代理免重启,并提供能翻墙抓页面的 proxyfetch 工具
35/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add cijiezhi/dsh-proxy-auto该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · other
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-proxy-auto(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.19 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/3 19:28:28
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 17 处,展示前 16 条)
- 发起网络请求lib/index.js:159
if (dispatcher?.fetchWith === undefined) return globalThis.fetch(url, init) - 写入本地文件lib/index.js:279
mkdirSync(dirname(stateFile), { recursive: true }) - 写入本地文件lib/index.js:280
writeFileSync(stateFile, text, 'utf8') - 发起网络请求lib/index.js:305
const response = await globalThis.fetch(url, { method: 'GET', signal, redirect: 'manual' }) - 读取本地文件lib/env-persist.js:81
const read = options.readFile ?? ((path) => readFileSync(path, 'utf8')) - 写入本地文件lib/env-persist.js:82
const write = options.writeFile ?? ((path, text) => writeFileSync(path, text, 'utf8')) - 发起网络请求lib/global-dispatcher.js:215
return undici.fetch(input, { ...init, dispatcher }) - 发起网络请求lib/global-dispatcher.js:279
return undici.fetch(url, { ...init, dispatcher }) - 发起网络请求lib/fetch-tool.js:153
: await globalThis.fetch(url.toString(), init) - 读取本地文件lib/schema-loader.js:49
const pkg = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8')) - 读取本地文件lib/schema-loader.js:66
if (existsSync(libDir)) { - 读取本地文件lib/schema-loader.js:67
for (const f of readdirSync(libDir)) { - 读取本地文件lib/schema-loader.js:86
if (!existsSync(dir)) continue - 读取本地文件lib/schema-loader.js:88
if (!existsSync(entry)) continue - 读取本地文件lib/schema-loader.js:113
if (!existsSync(dir)) continue - 读取本地文件lib/probe-host-deps.mjs:69
pathProbes.push({ path: p, exists: existsSync(p) })
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 自动跟随本机代理
- 开关代理免重启
- 抓取墙外网页
README
由 DeepSeek 最新模型翻译生成dsh-proxy-auto
让 DeepSeek Harness 自动跟随本机代理,并提供一个能抓取墙外页面的工具。
代理软件开着就走代理,关掉就直连——开/关代理都不需要重启,也不会把代理地址写死(写死 = 代理一关就断网,这是踩过的坑)。
English · 安装/排障手册 · 更新日志
安装
方式一:从仓库直接安装(CLI 管理的 profile,如 tui / web)
dsh plugin --profile <profile> add github:cijiezhi/dsh-proxy-auto
本插件没有任何构建步骤(无 prepare/postinstall),因此不会被 pnpm 的 allowBuilds 拦住。
方式二:本地安装脚本(desktop profile 只能用这种,CLI 不允许操作 desktop)
cd <插件目录>
pwsh -File .\install.ps1 # 幂等;-Profile web 换 profile,-Check 只预检,-Uninstall 卸载
方式三:下载 Release 里的 zip,解压后执行上面的 install.ps1。
装完重启 DSH 一次(宿主半边只在启动时加载)。
展开完整文档(README 剩余 1 节)
dsh-proxy-auto
让 DeepSeek Harness 自动跟随本机代理,并提供一个能抓取墙外页面的工具。
代理软件开着就走代理,关掉就直连——开/关代理都不需要重启,也不会把代理地址写死(写死 = 代理一关就断网,这是踩过的坑)。
English · 安装/排障手册 · 更新日志
安装
方式一:从仓库直接安装(CLI 管理的 profile,如 tui / web)
dsh plugin --profile <profile> add github:cijiezhi/dsh-proxy-auto
本插件没有任何构建步骤(无 prepare/postinstall),因此不会被 pnpm 的 allowBuilds 拦住。
方式二:本地安装脚本(desktop profile 只能用这种,CLI 不允许操作 desktop)
cd <插件目录>
pwsh -File .\install.ps1 # 幂等;-Profile web 换 profile,-Check 只预检,-Uninstall 卸载
方式三:下载 Release 里的 zip,解压后执行上面的 install.ps1。
装完重启 DSH 一次(宿主半边只在启动时加载)。验证:
pwsh -File .\verify.ps1 # 体检:宿主依赖 / 自测 / 运行快照 / 仓库完整性,输出已脱敏可直接贴出 DSH 桌面版把依赖打包进 resources\app.asar,体检会借宿主运行时实测它们;无需 pnpm install、无需 junction
为什么需要它
DSH 的出站代理策略只在启动时读一次环境变量。于是有两个日常麻烦:
1. 代理开关一变(或换了端口)就得重启,否则老地址一直用着;
2. 把代理写进环境变量之后,代理软件一关,DSH 就整片卡死(一直去连那个已经不存在的端口)。
还有一个能力缺口:官方 web_fetch 工具用固定 IP 的 undici Agent(防 SSRF / DNS rebinding), 刻意绕过全局 dispatcher,所以它永远直连——墙外页面必然抓不到。这是官方设计,插件改不了。
本插件补的是这三件事:跟随本机代理、关掉就回落直连、另给一个能翻墙的抓取工具。
它做什么
| 能力 | 说明 |
| 跟随代理 | 每 3 秒检测本机代理(环境变量 / Windows 系统代理注册表 + TCP 探活) |
| 开关免重启 | 全局 fetch 按需换 dispatcher:有代理 → EnvHttpProxyAgent,无代理 → 裸 Agent |
| proxy_fetch 工具 | 抓网页正文,走显式 dispatcher,因此代理开着时能读墙外站点 |
| 子进程同步 | 维护官方 .env,让 curl / git / npm 等子进程也用上代理 |
| 诊断快照 | $DSH_HOME/cache/dsh-proxy-auto/state.json 状态有变化才落盘(探针每 30 秒一次),外部可直接看"此刻走没走代理" |
模型会自动用它吗?
这是最容易踩的一点:工具注册 ≠ 模型会调用。官方 web_fetch 与 proxy_fetch 同时在工具清单里,而"抓网页"这个意图上模型更可能选名字更直白的 web_fetch(它按设计永远直连,对被墙站点必然失败),于是用户会以为"装了插件没效果"。本插件用两件事解决自调用:
1. 注入系统提示词引导段(段位 2150,紧跟官方 web_fetch 说明之后):写明官方 web_fetch 永远直连、这类页面应改用 proxy_fetch,并明确不要在试过之前就告诉用户站点不可达。
可用 promptHint: false 关掉,或用 promptHintText 换成自己的话。
2. 强化工具自身的描述(模型可见的唯一元数据):目标可能被墙时优先用它;web_fetch 失败或超时后,用同一 URL 重试。
怎么确认它真的注入了:看快照里的 promptHint 字段。
"promptHint": { "registered": true, "name": "dsh-proxy-auto:web-fetch-hint", "order": 2150, "chars": 429 }
registered: false 会带 reason(例如服务不可用);此时工具仍可用,只是需要模型自行选择它。
失败兜底(B 方案):即使模型还是先调了官方 web_fetch(对被墙站点必然失败),插件会在 tools/post-execute 事件上给这次调用追加一条纠正上下文——"web_fetch 按设计永远直连,同一 URL 改用 proxy_fetch 重试"。原始报错保持不变;官方 accept 与 block 两种决定都会追加(block 的 feedback 原样保留);可用 fetchFallback: false 关掉。
怎么确认它真的触发了:看快照里的 fetchFallback,它同时回答"装没装上"和"为什么一次都没注入"。
"fetchFallback": { "installed": true, "injected": 1, "calls": 4, "matched": 1, "skippedKind": 0,
injected 是累计纠正次数;calls / matched / skippedKind / kinds 用来定位「一次都没注入」: calls: 0 = 钩子没接上;matched: 0 = 工具名或失败标志不符(看 errorTools); skippedKind > 0 = 下游决定类型不符(看 kinds)。
A 与 B 的分工:A(引导段)让模型大概率一开始就选对工具;B(兜底)保证即使选错也能被拉回来。
它不做什么
- 不改 web_fetch:那是官方设计;要读墙外页面请用 proxy_fetch。
- 不支持 SOCKS、不解析 PAC:遇到就直连(官方 seam 只接受 http(s) 代理)。
- 非 Windows 只认环境变量:没有系统代理注册表可读。
- 不做界面、不接管你的代理软件设置。
失败时的行为
所有环节都包了兜底,原则是绝不让原本可用的直连变差:
- 候选代理必须先通过 TCP 探活才会被采用;探不到就当作没有代理;
- 代理消失后 3 秒内卸掉策略并回落直连,不留悬空地址;
- 适配/解析失败(找不到宿主依赖、.env 写不进去等)只记日志,插件其余功能照常;
- 不写 NODE_USE_ENV_PROXY——实测该开关会让 Node 无视调用方指定的 dispatcher。
用法
装了插件后,直接让智能体抓墙外页面(代理开着时): text proxy_fetch https://en.wikipedia.org/wiki/Naruto
URL: https://en.wikipedia.org/wiki/Naruto
Status: 200 (truncated)
Via: http://127.0.0.1:<你的代理端口>
状态快照示例(代理关 / 开): jsonc // 代理关着 → 直连 { "proxy": null, "source": "windows-registry-disabled", "dispatcherPatched": false }
// 代理开着 → 经代理 { "proxy": "http://127.0.0.1:<port>", "source": "windows-registry", "dispatcherPatched": true,
"probe": { "ok": true, "status": 204, "ms": 384 } }
配置(全部可选)
| 字段 | 默认 | 说明 |
| watchIntervalMs | 3000 | 检测周期 |
| probeTimeoutMs | 400 | TCP 探活超时 |
| probeUrl | https://www.gstatic.com/generate_204 | 自证探针(留空=不探),结果写进快照 probe |
| probeIntervalMs | 30000 | 探针自有节奏。判定结果变化时立即补探,不影响代理开关的发现速度(那由 stateTtlMs 决定,是本地 TCP、零流量) |
| persistToEnv / envFile | true / $DSH_HOME/.env | 子进程环境维护 |
| tool | true | 是否注册 proxy_fetch |
| promptHint | true | 是否注入系统提示词引导段(让模型主动用 proxy_fetch,见下节) |
| promptHintText | 空 | 自定义引导文案(留空 = 内置默认) |
| fetchFallback | true | 失败兜底:官方 web_fetch 失败时自动提示模型改用 proxy_fetch 重试 |
| noProxy | localhost,127.0.0.1,::1,api.deepseek.com | 直连名单(模型 API 直连 ⇒ 代理挂了对话仍可用) |
| debug | false | 每次判定打日志 |
开发与验证 sh
node test/standalone.mjs # 9 项(本机 3 通过 / 6 跳过):零 junction 解析宿主依赖 / schema / 工具契约
node test/selftest.mjs # 43 项:探测底线 / 官方 seam 装卸 / .env 维护 / dispatcher 切换 / 提示词引导段 / 失败兜底 / 探针节流与快照去重
没装 DSH 的机器上,宿主相关用例会自动 SKIP(CI 即此情形),因此任何人 clone 下来都能跑通。
许可
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
cijiezhi/dsh-proxy-auto
让 DeepSeek Harness 自动跟随本机代理开关代理免重启,并提供能翻墙抓页面的 proxyfetch 工具
相关插件 · 其他
模型破甲清洗YuJunZhiXue/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,148已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,266已汉化DSH
70.7
这是你的仓库?认领条目