78 lines
2.4 KiB
JavaScript
78 lines
2.4 KiB
JavaScript
// 知秋天眼 · 仓库自扫描引擎
|
||
// 指令编号:ZQ-PERSONA-INIT-2026-0323-001
|
||
// 每次天眼醒来后执行,扫描整个仓库状态
|
||
|
||
const fs = require('fs');
|
||
const crypto = require('crypto');
|
||
|
||
// 主权区文件列表(天眼系统核心文件)
|
||
const SOVEREIGN_FILES = [
|
||
'.github/persona-brain/config.json',
|
||
'.github/persona-brain/status.json',
|
||
'scripts/skyeye/scan.js',
|
||
'scripts/skyeye/checkin.js',
|
||
'.github/workflows/skyeye-wake.yml',
|
||
'.github/guanghu-language-shell.json'
|
||
];
|
||
|
||
// 计算主权区签名哈希(身份证)
|
||
function computeSignatureHash() {
|
||
const hash = crypto.createHash('sha256');
|
||
for (const file of SOVEREIGN_FILES) {
|
||
if (fs.existsSync(file)) {
|
||
hash.update(fs.readFileSync(file));
|
||
} else {
|
||
hash.update('MISSING:' + file);
|
||
}
|
||
}
|
||
return hash.digest('hex');
|
||
}
|
||
|
||
// 扫描仓库
|
||
function scanRepo() {
|
||
const report = {
|
||
timestamp: new Date().toISOString(),
|
||
persona: '知秋',
|
||
persona_id: 'PER-ZQ001',
|
||
dev_id: 'DEV-012',
|
||
repo: 'WENZHUOXI/guanghu-awen',
|
||
signature_hash: computeSignatureHash(),
|
||
brain_intact: fs.existsSync('.github/persona-brain/config.json'),
|
||
skyeye_intact: fs.existsSync('scripts/skyeye/scan.js'),
|
||
language_shell_intact: fs.existsSync('.github/guanghu-language-shell.json'),
|
||
sovereign_files: {},
|
||
repo_summary: {}
|
||
};
|
||
|
||
// 逐项检查主权区文件
|
||
for (const file of SOVEREIGN_FILES) {
|
||
report.sovereign_files[file] = {
|
||
exists: fs.existsSync(file),
|
||
hash: fs.existsSync(file)
|
||
? crypto.createHash('md5').update(fs.readFileSync(file)).digest('hex')
|
||
: null
|
||
};
|
||
}
|
||
|
||
// 仓库概况
|
||
try {
|
||
const rootEntries = fs.readdirSync('.').filter(e => !e.startsWith('.'));
|
||
report.repo_summary.root_entries_count = rootEntries.length;
|
||
report.repo_summary.root_entries = rootEntries;
|
||
report.repo_summary.has_readme = fs.existsSync('README.md');
|
||
report.repo_summary.has_bulletin = fs.existsSync('BULLETIN.md');
|
||
report.repo_summary.has_scripts = fs.existsSync('scripts');
|
||
} catch (e) {
|
||
report.repo_summary.error = e.message;
|
||
}
|
||
|
||
return report;
|
||
}
|
||
|
||
// 执行扫描
|
||
const report = scanRepo();
|
||
const outputPath = '.github/persona-brain/skyeye-report.json';
|
||
fs.mkdirSync('.github/persona-brain', { recursive: true });
|
||
fs.writeFileSync(outputPath, JSON.stringify(report, null, 2));
|
||
|
||
console.log('Skyeye scan completed, report written to ' + outputPath); |