zhizhi/federation/awen/workspace/scripts/skyeye/scan.js

78 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 知秋天眼 · 仓库自扫描引擎
// 指令编号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);