@@ -10,6 +10,7 @@ import { Clash, Group } from './ClashConfigBuilder';
1010import type { YAML } from './types/client' ;
1111import type { UserCustomRulesConfig } from './types/user-rules' ;
1212import { convert3DRulesToMihomoRules , validate3DRules } from './config/UserCustomRulesConverter' ;
13+ import { collectAvailableRulePolicyTargets } from './config/RulePolicyTargets' ;
1314
1415const SUPPORTED_RULE_TYPES = new Set ( [
1516 'DOMAIN-SUFFIX' ,
@@ -369,11 +370,16 @@ export class AutoRoutingGroup extends Clash {
369370
370371 /**
371372 * 转换用户原始rules的group名称
372- * - block/REJECT/DIRECT 保持不变
373- * - 其他group统一转换为 ProxyA
373+ * - 已存在的内置策略、预设分组、自定义分组、代理节点保持不变
374+ * - 指向已被清空的原始订阅分组时,降级到 ProxyA,避免悬空 policy
374375 */
375376 convertOriginalRules ( originalRules : string [ ] ) : string [ ] {
376377 const proxyAGroup = this . presetGroups [ SelectorSymbols . ManualA ] ;
378+ const availablePolicyTargets = collectAvailableRulePolicyTargets (
379+ this . presetGroups ,
380+ this . proxiesList ,
381+ this . userRules . groups ,
382+ ) ;
377383
378384 return originalRules . flatMap ( rule => {
379385 const parts = rule . split ( ',' ) ;
@@ -390,13 +396,11 @@ export class AutoRoutingGroup extends Clash {
390396 // 普通规则: TYPE,value,group 或 TYPE,value,group,no-resolve
391397 if ( parts . length >= 3 ) {
392398 const group = parts [ 2 ] ;
393- // block/REJECT/DIRECT 保持不变
394- if ( group === 'block' || group === 'REJECT' || group === 'DIRECT' ) {
399+ if ( availablePolicyTargets . has ( group ) ) {
395400 return [ rule ] ;
396401 }
397- // 其他group转换为ProxyA
402+
398403 if ( parts . length === 4 ) {
399- // 带no-resolve的规则
400404 return [ `${ parts [ 0 ] } ,${ parts [ 1 ] } ,${ proxyAGroup } ,${ parts [ 3 ] } ` ] ;
401405 }
402406 return [ `${ parts [ 0 ] } ,${ parts [ 1 ] } ,${ proxyAGroup } ` ] ;
0 commit comments