You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
3.2 KiB

4 days ago
import { sdkConfig } from '../../../sdk/sdkConfig';
3 weeks ago
/**
4 days ago
* AI 调试打印。统一前缀 `[AI操作]`,紫色普通 log;由 sdkConfig.enableAiDecisionLog 控制。
* 控制台亦可 `setAiLogVerbose(true)` 临时强制开启。
3 weeks ago
*/
/** 所有 AI 日志统一前缀(控制台过滤用) */
export const AI_LOG_PREFIX = '[AI操作]';
4 days ago
/** 紫色样式(与打点绿字同用 %c) */
const AI_LOG_STYLE = 'color:#9c27b0';
/** 运行时强制开关;null 表示跟随 sdkConfig */
let _forceVerbose: boolean | null = null;
3 weeks ago
/**
4 days ago
* 开关 AI 细节 console 打印(覆盖 sdkConfig,传 null 恢复跟随配置)。
3 weeks ago
* @param enabled 是否开启
*/
export function setAiLogVerbose(enabled: boolean): void {
4 days ago
_forceVerbose = !!enabled;
3 weeks ago
}
4 days ago
/** 当前是否开启 AI 决策打印 */
3 weeks ago
export function isAiLogVerbose(): boolean {
4 days ago
if (_forceVerbose !== null) return _forceVerbose;
return !!sdkConfig.enableAiDecisionLog;
3 weeks ago
}
/**
* 给首参加上统一前缀。
* @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;
}
4 days ago
/**
* 紫色普通 log 输出。
* @param args 打印参数
*/
function _printPurple(args: unknown[]): void {
const out = _withPrefix(args);
const head = out[0];
if (typeof head === 'string') {
const rest: unknown[] = [];
for (let i = 1; i < out.length; i++) rest.push(out[i]);
if (rest.length <= 0) {
console.log(`%c${head}`, AI_LOG_STYLE);
return;
}
console.log(`%c${head}`, AI_LOG_STYLE, ...rest);
return;
}
console.log(`%c${AI_LOG_PREFIX}`, AI_LOG_STYLE, ...out);
}
3 weeks ago
/**
* AI 细节日志;关闭时为空操作。
* @param args 打印参数
*/
export function aiLog(...args: unknown[]): void {
4 days ago
if (!isAiLogVerbose()) return;
_printPurple(args);
3 weeks ago
}
/**
* AI 操作链日志(摆放/取舍/合成等);关闭时为空操作。
* @param args 打印参数
*/
export function aiOp(...args: unknown[]): void {
4 days ago
if (!isAiLogVerbose()) return;
_printPurple(args);
3 weeks ago
}
/**
4 days ago
* AI 告警;关闭时为空操作(紫色普通 log,避免浏览器 warn 刷屏)。
3 weeks ago
* @param args 打印参数
*/
export function aiWarn(...args: unknown[]): void {
4 days ago
if (!isAiLogVerbose()) return;
_printPurple(args);
3 weeks ago
}
try {
(globalThis as { setAiLogVerbose?: typeof setAiLogVerbose }).setAiLogVerbose = setAiLogVerbose;
} catch {
/* ignore */
}