# phone-tunnel-pool — 面向 dsh web 图形界面的 Cloudflare 快速隧道池 [English](./README.md) | **简体中文** 通过一个悬浮组件(带有可扫描二维码),为 `http://127.0.0.1:3080` (DeepSeek Harness 的 web 图形界面)启用/禁用**自愈式 Cloudflare 快速隧道池**。 用手机扫一次码,池子就自己保持存活: - **分代轮换(12 小时):** 新的一对隧道按时生成;只要旧的代还有流量就一直保持存活。 - **追猎 Service Worker:** 浏览器访问过的每个域名都会注册一个 service worker。 失效或已轮换的主机名会重定向到存活的兄弟隧道或最新的主隧道 —— 只要连接不断, 同一个打开的标签页就能挺过代际切换。 - **免弹窗迁移:** 代理只向已认证过的页面注入凭据;任何重定向前,看门狗会先 认证目标主机名(铸造其登录 cookie),因此迁移落地即是已登录状态 —— 不会出现 "需要认证" 弹窗。 - **按用量退役:** 代际只在空闲(无标签页 / WebSocket / 近期流量)或达到硬性 寿命上限时才退役。 - **带退避的复活:** 失效隧道用新主机名替换;遵循快速隧道的配额(Cloudflare 429), 采用指数退避 + 2 次探测的死区宽限(等待 DNS 传播)。 额外:守护进程以分离方式运行,在 `dsh web` 重启后**收养**既有隧道, 因此同一 URL、密码和二维码一直有效,直到你点击"禁用" —— 无需重新扫码 (系统重启仍需要重新扫一次;命名隧道连这一步都不需要 —— 见 [`PLAN.md`](./PLAN.md) §7)。 ## 安装 / 卸载 ```bash # 安装(来自本公开仓库) dsh plugin --profile web add github:iimaguest/phone-tunnel-pool dsh web # 图形界面右下角出现悬浮 📱 组件 # 卸载(一条命令 —— 同时移除依赖与 dsh.profile.bundles 层) dsh plugin --profile web remove phone-tunnel-pool dsh web ``` 安装后:打开组件 → **启用** → 用手机相机扫描二维码。安装/移除会 自动对账 `dsh.profile.bundles` 与已安装状态 —— **切勿手工编辑 `~/.dsh/profiles/web/package.json`**;一条没有对应依赖的多余 bundle 条目 正是导致 profile 启动失败("cannot resolve profile bundle")的那种状态。 ## 前置条件(全部列出) | 项目 | 必需? | 由谁提供 | |---|---|---| | `dsh web` 运行在默认端口 **3080**(可用 `DSH_TARGET_PORT` 覆盖) | 必需 | 你自己(插件是*通向*它的隧道) | | PATH 中的 `cloudflared` 可执行文件 | 必需 | 你自己 —— `brew install cloudflared`(或 apt/dnf/Chocolatey,或用 `DSH_CLOUDFLARED` 指定已有二进制) | | Node.js 运行时 | 必需 | dsh 自带 —— 无需单独安装(守护进程复用 dsh 的 node) | | `python3` + `qrcode` 包 | 可选 | 你自己 —— `pip install qrcode`;缺少时组件只显示 URL + 登录信息,不显示可扫描二维码 | | `caffeinate` | 可选 | macOS 自带;其他平台跳过 | | PowerShell | 可选 | Windows 自带 —— 仅用于 Windows 上的进程清理(那里没有 `pkill`) | | 出站网络 | 必需 | cloudflared → Cloudflare 边缘节点 443/7844(无需入站端口) | 组件会在 **dsh web 启动时预检这些项**,在你点击"启用"之前就以黄色警告行 显示(并给出具体修复方式,如 `brew install cloudflared`);如果启用时缺少 cloudflared,守护进程也会用可读的错误快速失败;弹窗里的"刷新"会重新检查一切 —— 前置条件满足后,过期的错误信息会自动清除。 特性标志集按 `cloudflared --version` 版本门控:2024.6+ 启用可选的 后量子握手(`DSH_PQ=1`),2024.8+ 增加 `--management-diagnostics=false`; 较旧的构建(apt/dnf 包)使用缩减的、兼容的标志集。 **平台。** macOS、Linux 和 Windows(Windows 使用 PowerShell 做进程清理; `caffeinate` 仅限 macOS,其他平台静默跳过)。守护进程的状态文件与日志位于 各操作系统的临时目录(`os.tmpdir()`);组件的设置文件 (`iptunnel-settings.json`)位于 `~/.dsh`。 ## 截图