/** Explicit switches take precedence over the common beat-sync phrase shortcut. */ export function resolveSmartEditIntent< T extends { mode?: string; prompt?: string; beatSync?: boolean; variants?: number; music?: { url: string }; }, >(draft: T) { const prompt = draft.prompt || ""; const beatSync = draft.beatSync ?? (/卡点|beat[ -]?sync/i.test(prompt) && !/(?:不|不要|无需|不用|取消|关闭).{0,5}卡点|no beat[ -]?sync/i.test(prompt)); return { ...draft, beatSync, variants: draft.variants ?? (draft.mode === "ads" ? 3 : 1) }; } export function assertBeatMusic(draft: { beatSync?: boolean; music?: { url: string } }) { if (draft.beatSync && !draft.music?.url) throw Error("音乐卡点需要先选择或上传背景音乐"); }