const fs = require('fs'); const path = require('path'); const { marked } = require('marked'); const LOG_DIR = path.join(__dirname, 'llm_log'); const OUTPUT_FILE = path.join(__dirname, 'index.html'); function readDirSafe(dir) { if (!fs.existsSync(dir)) return []; const items = fs.readdirSync(dir); return items .filter(f => f.endsWith('.md')) .map(f => path.join(dir, f)) .filter(f => fs.statSync(f).isFile()); } function readFileSafe(filePath) { try { const stat = fs.statSync(filePath); if (stat.size === 0) return null; return fs.readFileSync(filePath, 'utf-8'); } catch { return null; } } function parseMarkdown(content) { if (!content) return ''; marked.setOptions({ gfm: true, breaks: false, }); return marked.parse(content); } const htmlTemplate = `
暂无日志记录
'; } else { content = logs.map(({ date, html }) => `加载中...
', '暂无日志记录
'); fs.writeFileSync(OUTPUT_FILE, emptyHtml); console.log(`Generated: ${OUTPUT_FILE}`); return; } const logs = files .map(filePath => { const content = readFileSafe(filePath); if (!content) { console.warn(`Skipping empty or unreadable file: ${filePath}`); return null; } const date = path.basename(filePath, '.md'); const html = parseMarkdown(content); return { date, html }; }) .filter(Boolean); logs.sort((a, b) => a.date.localeCompare(b.date)); const html = buildHtml(logs); fs.writeFileSync(OUTPUT_FILE, html); console.log(`Generated: ${OUTPUT_FILE}`); console.log(`Processed ${logs.length} log files.`); } main();