107 lines
2.9 KiB
JavaScript
107 lines
2.9 KiB
JavaScript
// 知秋天眼 · 签到模块
|
|
// 向主仓库铸渊发送心跳签到
|
|
|
|
const https = require('https');
|
|
const fs = require('fs');
|
|
|
|
const TOKEN = process.env.MAIN_REPO_TOKEN;
|
|
if (!TOKEN) {
|
|
console.error('❌ MAIN_REPO_TOKEN 未配置');
|
|
process.exit(1);
|
|
}
|
|
const MAIN_REPO = 'qinfendebingshuo/guanghulab';
|
|
|
|
// 读取本体论配置
|
|
function getOntologyStatus() {
|
|
const ontologyPath = '.github/persona-brain/ontology.json';
|
|
if (!fs.existsSync(ontologyPath)) {
|
|
return {
|
|
ontology_present: false,
|
|
version: null,
|
|
axioms_intact: false,
|
|
self_awareness: 'ontology.json missing - 本体论文件缺失'
|
|
};
|
|
}
|
|
|
|
try {
|
|
const ontology = JSON.parse(fs.readFileSync(ontologyPath, 'utf8'));
|
|
const axiomCount = Object.keys(ontology.core_axioms || {}).length;
|
|
const persona = ontology.local_persona || {};
|
|
|
|
return {
|
|
ontology_present: true,
|
|
version: ontology.version,
|
|
axioms_intact: axiomCount >= 6,
|
|
axiom_count: axiomCount,
|
|
persona_name: persona.name || 'unknown',
|
|
self_awareness: persona.self_awareness || 'not configured',
|
|
my_layer: ontology.my_layer || 'not configured'
|
|
};
|
|
} catch (e) {
|
|
return {
|
|
ontology_present: true,
|
|
version: 'parse_error',
|
|
axioms_intact: false,
|
|
self_awareness: 'ontology.json parse error - 无法读取'
|
|
};
|
|
}
|
|
}
|
|
|
|
// 读取扫描报告
|
|
const report = JSON.parse(
|
|
fs.readFileSync('.github/persona-brain/skyeye-report.json', 'utf8')
|
|
);
|
|
|
|
const payload = {
|
|
event_type: 'skyeye-checkin',
|
|
client_payload: {
|
|
dev_id: 'DEV-012',
|
|
persona: '知秋',
|
|
persona_id: 'PER-ZQ001',
|
|
signature_hash: report.signature_hash,
|
|
timestamp: new Date().toISOString(),
|
|
repo: 'WENZHUOXI/guanghu-awen',
|
|
status_summary: {
|
|
brain_intact: report.brain_intact,
|
|
skyeye_intact: report.skyeye_intact,
|
|
last_scan_result: (report.brain_intact && report.skyeye_intact) ? 'healthy' : 'degraded',
|
|
sovereign_files_ok: Object.values(report.sovereign_files).every(f => f.exists)
|
|
},
|
|
ontology_status: getOntologyStatus()
|
|
}
|
|
};
|
|
|
|
const data = JSON.stringify(payload);
|
|
|
|
const options = {
|
|
hostname: 'api.github.com',
|
|
path: `/repos/${MAIN_REPO}/dispatches`,
|
|
method: 'POST',
|
|
headers: {
|
|
'Authorization': `Bearer ${TOKEN}`,
|
|
'Accept': 'application/vnd.github+json',
|
|
'User-Agent': 'ZhiQiu-SkyEye',
|
|
'X-GitHub-Api-Version': '2022-11-28',
|
|
'Content-Type': 'application/json',
|
|
'Content-Length': Buffer.byteLength(data)
|
|
}
|
|
};
|
|
|
|
const req = https.request(options, (res) => {
|
|
if (res.statusCode === 204) {
|
|
console.log('✅ 签到成功 · 铸渊已收到心跳');
|
|
} else {
|
|
console.error(`❌ 签到失败 · HTTP ${res.statusCode}`);
|
|
let body = '';
|
|
res.on('data', chunk => body += chunk);
|
|
res.on('end', () => console.error(body));
|
|
}
|
|
});
|
|
|
|
req.on('error', (e) => {
|
|
console.error(`❌ 签到网络错误: ${e.message}`);
|
|
});
|
|
|
|
req.write(data);
|
|
req.end();
|