88 lines
2.7 KiB
JavaScript
88 lines
2.7 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const BRAIN = '.github/persona-brain';
|
|
const requiredFiles = [
|
|
'identity.md',
|
|
'memory.json',
|
|
'routing-map.json',
|
|
'responsibility.md',
|
|
'decision-log.md',
|
|
'growth-journal.md'
|
|
];
|
|
|
|
console.log('🔍 铸渊每日自检开始\n');
|
|
|
|
// 1. 大脑完整性检查
|
|
let brainOK = true;
|
|
requiredFiles.forEach(f => {
|
|
const exists = fs.existsSync(path.join(BRAIN, f));
|
|
console.log((exists ? '✅' : '❌') + ' ' + f);
|
|
if (!exists) brainOK = false;
|
|
});
|
|
|
|
// 2. Schema 覆盖率
|
|
let schemaCount = 0;
|
|
const SCHEMA_DIR = 'src/schemas/hli';
|
|
const domains = ['auth', 'persona', 'user', 'ticket', 'dialogue', 'storage', 'dashboard'];
|
|
|
|
domains.forEach(d => {
|
|
const sp = path.join(SCHEMA_DIR, d);
|
|
if (fs.existsSync(sp)) {
|
|
schemaCount += fs.readdirSync(sp).filter(f => f.endsWith('.schema.json')).length;
|
|
}
|
|
});
|
|
console.log(`\n📊 HLI 覆盖率: ${schemaCount}/17`);
|
|
|
|
// 3. 未处理广播检查
|
|
const broadcastDir = '.github/broadcasts';
|
|
let pendingBroadcasts = 0;
|
|
if (fs.existsSync(broadcastDir)) {
|
|
pendingBroadcasts = fs.readdirSync(broadcastDir).filter(f =>
|
|
!fs.statSync(path.join(broadcastDir, f)).isDirectory()
|
|
).length;
|
|
}
|
|
console.log(`📬 待处理广播: ${pendingBroadcasts}`);
|
|
|
|
// 4. dev-status.json 同步时效检查
|
|
let devStatusAlert = '';
|
|
const devStatusPath = path.join(BRAIN, 'dev-status.json');
|
|
if (fs.existsSync(devStatusPath)) {
|
|
try {
|
|
const devStatus = JSON.parse(fs.readFileSync(devStatusPath, 'utf8'));
|
|
if (devStatus.last_sync) {
|
|
const lastSync = new Date(devStatus.last_sync);
|
|
const now = new Date();
|
|
const hoursAgo = Math.round((now - lastSync) / (1000 * 60 * 60));
|
|
if (hoursAgo > 24) {
|
|
devStatusAlert = `⚠️ dev-status.json 同步中断·已超${hoursAgo}h·请排查`;
|
|
console.log(devStatusAlert);
|
|
} else {
|
|
console.log(`✅ dev-status.json 同步正常 · ${hoursAgo}h 前更新`);
|
|
}
|
|
} else {
|
|
devStatusAlert = '⚠️ dev-status.json 缺少 last_sync 字段';
|
|
console.log(devStatusAlert);
|
|
}
|
|
} catch {
|
|
devStatusAlert = '⚠️ dev-status.json 解析失败';
|
|
console.log(devStatusAlert);
|
|
}
|
|
} else {
|
|
devStatusAlert = '⚠️ dev-status.json 文件缺失';
|
|
console.log(devStatusAlert);
|
|
}
|
|
|
|
// 5. 更新 memory.json
|
|
let memory = JSON.parse(fs.readFileSync(path.join(BRAIN, 'memory.json'), 'utf8'));
|
|
memory.daily_selfcheck = {
|
|
last_run: new Date().toISOString(),
|
|
brain_integrity: brainOK ? 'ok' : 'missing_files',
|
|
schema_coverage: schemaCount + '/17',
|
|
pending_broadcasts: pendingBroadcasts,
|
|
dev_status_sync: devStatusAlert || 'ok'
|
|
};
|
|
fs.writeFileSync(path.join(BRAIN, 'memory.json'), JSON.stringify(memory, null, 2));
|
|
|
|
console.log('\n' + (brainOK ? '✅' : '⚠️') + ' 铸渊自检完成');
|