/** * AI 调试打印。统一前缀 `[AI操作]`,控制台可过滤。 * 默认全关;控制台 `setAiLogVerbose(true)` 后 `aiLog` / `aiOp` / `aiWarn` 才输出。 */ /** 所有 AI 日志统一前缀(控制台过滤用) */ export const AI_LOG_PREFIX = '[AI操作]'; let _verbose = false; /** * 开关 AI 细节 console 打印。 * @param enabled 是否开启 */ export function setAiLogVerbose(enabled: boolean): void { _verbose = !!enabled; } /** 当前是否开启 AI 细节打印 */ export function isAiLogVerbose(): boolean { return _verbose; } /** * 给首参加上统一前缀。 * @param args 原始参数 */ function _withPrefix(args: unknown[]): unknown[] { if (args.length <= 0) return [AI_LOG_PREFIX]; const head = args[0]; const rest: unknown[] = []; for (let i = 1; i < args.length; i++) { const a = args[i]; if (a !== null && typeof a === 'object') continue; rest.push(a); } if (typeof head === 'string') { if (head.indexOf(AI_LOG_PREFIX) === 0) { const out: unknown[] = [head]; for (let i = 0; i < rest.length; i++) out.push(rest[i]); return out; } const out: unknown[] = [`${AI_LOG_PREFIX} ${head}`]; for (let i = 0; i < rest.length; i++) out.push(rest[i]); return out; } const out: unknown[] = [AI_LOG_PREFIX]; if (head !== null && typeof head !== 'object') out.push(head); for (let i = 0; i < rest.length; i++) out.push(rest[i]); return out; } /** * AI 细节日志;关闭时为空操作。 * @param args 打印参数 */ export function aiLog(...args: unknown[]): void { if (!_verbose) return; console.log(..._withPrefix(args)); } /** * AI 操作链日志(摆放/取舍/合成等);关闭时为空操作。 * @param args 打印参数 */ export function aiOp(...args: unknown[]): void { if (!_verbose) return; console.log(..._withPrefix(args)); } /** * AI 告警;关闭时为空操作(用 log 避免浏览器 warn 刷屏卡顿)。 * @param args 打印参数 */ export function aiWarn(...args: unknown[]): void { if (!_verbose) return; console.log(..._withPrefix(args)); } try { (globalThis as { setAiLogVerbose?: typeof setAiLogVerbose }).setAiLogVerbose = setAiLogVerbose; } catch { /* ignore */ }