feat: opt ai group

This commit is contained in:
2026-10-03 19:33:03 +08:00
parent b95cb4a813
commit 7358008936
13 changed files with 382 additions and 8 deletions

View File

@@ -1,5 +1,6 @@
import { clientSupports, normalizeSsCipher, type ExcludedNode, type NodeDto } from '@proxy-station/shared';
import type { ProfileIR } from '../ir.js';
import { surgeAiDns } from './surge-ai-dns.js';
/** 成员名含空格/逗号时按 Surge 习惯加引号 */
function quoteName(name: string): string {
@@ -56,6 +57,7 @@ export interface SurgeOutput {
}
export function generateSurge(ir: ProfileIR, opts: { selfUrl: string }): SurgeOutput {
const dns = surgeAiDns(ir);
const excluded: ExcludedNode[] = [];
const usable = ir.nodes.filter((n) => {
const verdict = clientSupports('surge', n);
@@ -69,7 +71,7 @@ export function generateSurge(ir: ProfileIR, opts: { selfUrl: string }): SurgeOu
lines.push('# 由 Proxy Station 生成,请勿手动编辑(改动会在下次更新时被覆盖)');
lines.push('');
lines.push('[General]');
lines.push(ir.sections['General'] ?? '');
lines.push(dns.general);
lines.push('', '[Proxy]');
for (const n of usable) lines.push(surgeNodeLine(n));
@@ -105,6 +107,7 @@ export function generateSurge(ir: ProfileIR, opts: { selfUrl: string }): SurgeOu
}
lines.push('', '[Rule]');
lines.push(...dns.rules);
for (const r of ir.rules) {
if (r.type === 'FINAL') {
lines.push(['FINAL', quoteName(r.policy), ...r.params].join(','));
@@ -115,8 +118,9 @@ export function generateSurge(ir: ProfileIR, opts: { selfUrl: string }): SurgeOu
}
for (const section of ['Host', 'URL Rewrite', 'Header Rewrite', 'MITM', 'Script']) {
if (ir.sections[section]) {
lines.push('', `[${section}]`, ir.sections[section]);
const content = section === 'Host' ? dns.host : ir.sections[section];
if (content) {
lines.push('', `[${section}]`, content);
}
}