/**
 * @module        core/auditLog
 * @description   项目生命周期审计日志 —— 记录项目创建/修改/删除,落 ~/.coral/audit.jsonl(追加)。
 *                供 console 查询。审计写入 best-effort,绝不阻塞主流程。
 * @layer         core
 */
import { appendFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
import { dirname, resolve } from 'node:path';
import { sessionsDir } from '../shared/runtimePaths.js';
function auditFile() {
    return resolve(sessionsDir(), '..', 'audit.jsonl'); // ~/.coral/audit.jsonl
}
/** 追加一条审计(失败静默)。 */
export function appendAudit(e) {
    try {
        const entry = {
            ts: new Date().toISOString(),
            action: e.action,
            project: e.project,
            detail: e.detail,
            source: e.source,
        };
        const f = auditFile();
        mkdirSync(dirname(f), { recursive: true });
        appendFileSync(f, `${JSON.stringify(entry)}\n`);
    }
    catch {
        /* 审计不阻塞主流程 */
    }
}
/** 读审计(最新在前,可按项目/动作过滤、限条数)。 */
export function readAudit(opts = {}) {
    try {
        const f = auditFile();
        if (!existsSync(f))
            return [];
        let entries = readFileSync(f, 'utf-8')
            .split('\n')
            .filter(Boolean)
            .map((l) => {
            try {
                return JSON.parse(l);
            }
            catch {
                return null;
            }
        })
            .filter((x) => x !== null);
        if (opts.project)
            entries = entries.filter((e) => e.project === opts.project);
        if (opts.action)
            entries = entries.filter((e) => e.action === opts.action);
        entries.reverse();
        if (opts.limit && opts.limit > 0)
            entries = entries.slice(0, opts.limit);
        return entries;
    }
    catch {
        return [];
    }
}
//# sourceMappingURL=auditLog.js.map