From 49038ce5f9b553855dbfe1e061f7b54f69af5311 Mon Sep 17 00:00:00 2001 From: Jz0ojiang Date: Tue, 11 Aug 2026 14:38:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=AF=E8=AF=AD=E8=A1=A8=E5=92=8C=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E8=84=9A=E6=9C=AC=E8=B7=9F=E4=B8=8A=E8=AE=A2=E9=98=85?= =?UTF-8?q?=E5=89=AF=E6=9C=AC=E7=9A=84=20file=20=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 订阅副本改成 type: file 后,认亲靠 path 而不是 url,脚本里解构已不存在的 url 字段会拿到 undefined;术语表补上 0007 引入的专属组、链式代理、入口组、 订阅副本四个词条,并移除已被取代的筛选组。 --- CONTEXT.md | 18 +++++++++++++++--- scripts/verify-chain.ts | 6 +++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/CONTEXT.md b/CONTEXT.md index 09f73e5..95d174d 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -52,9 +52,21 @@ _Avoid_: provider、机场、订阅链接、节点池 一组线路加一个挑选方式(手动选、自动测速选最快等)。策略组本身也可以作为出站被引用。 _Avoid_: 分组、group、代理组、策略 -**筛选组**: -Patchbay 自动创建的策略组,用筛选条件从订阅里只挑出用户指定的那几条线路。它的存在是为了让入站能固定到具体线路——因为订阅线路无法被直接引用。 -_Avoid_: 隐藏组、临时组、影子组 +**专属组**: +Patchbay 为一路入站自动创建的三个策略组:手动选的 SELECT、自动测速的 AUTO、故障转移的 FALLBACK。入站的 `proxy:` 永久指向 SELECT,日常换线是改 SELECT 的当前选中,属于运行时动作,不改配置文件。名字带 `patchbay:` 前缀。 +_Avoid_: 筛选组、隐藏组、影子组、自动组 + +**链式代理**: +让一路入站的流量先经过一跳入口,再从出口线路离开。在订阅副本上用 `override.dialer-proxy` 实现,因为内核不接受写在策略组上的 `dialer-proxy`。 +_Avoid_: 中转、前置代理、relay + +**入口组**: +链式代理的入口,一个手动选的策略组,订阅副本的 `dialer-proxy` 指向它。它只能引用原订阅,不能引用订阅副本,否则会形成内核查不出来的环。 +_Avoid_: 前置组、跳板组 + +**订阅副本**: +开链式代理时,Patchbay 按「入站乘以来源订阅」的组合生成的订阅。`type: file`,读原订阅的缓存文件,带上指向入口组的 `dialer-proxy`。它不联网,原订阅刷新后内核的文件监视让它自动跟上。和哪个用户订阅共用同一个缓存文件,来源就是哪个。 +_Avoid_: 派生订阅、克隆订阅、镜像订阅 ## 名字与引用 diff --git a/scripts/verify-chain.ts b/scripts/verify-chain.ts index bfcaefb..6c16723 100644 --- a/scripts/verify-chain.ts +++ b/scripts/verify-chain.ts @@ -41,9 +41,9 @@ writeFileSync(out, rewriteYaml(source, pruneGenerated(next)), 'utf8') console.log('生成的策略组:') console.log(JSON.stringify(next['proxy-groups'], null, 2)) -console.log('\n生成的订阅副本(只看结构,url 不回显):') +// 副本是 type: file,makeChainProvider 已去掉 url,整条回显没有泄露订阅地址的风险 +console.log('\n生成的订阅副本:') for (const [name, entry] of Object.entries(next['proxy-providers'] as ConfigObject)) { if (!name.startsWith('patchbay:')) continue - const { url, ...rest } = entry as ConfigObject - console.log(name, JSON.stringify({ ...rest, url: '<同源订阅>' })) + console.log(name, JSON.stringify(entry)) }