131 lines
4.2 KiB
JavaScript
131 lines
4.2 KiB
JavaScript
|
|
#!/usr/bin/env node
|
|||
|
|
'use strict';
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* AOAC-04 · 首页同步模块 (README Sync Module)
|
|||
|
|
* ═══════════════════════════════════════════════
|
|||
|
|
* AGE OS Agent Chain · 半Agent(事件唤醒)
|
|||
|
|
*
|
|||
|
|
* 唤醒条件:data/aoac/readme-sync-trigger.json 被写入
|
|||
|
|
* 职责:解析链路报告→提取进度变更→准备README更新数据
|
|||
|
|
* 输出:data/aoac/readme-update-payload.json
|
|||
|
|
*
|
|||
|
|
* 版权:国作登字-2026-A-00037559 · TCS-0002∞
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
const fs = require('fs');
|
|||
|
|
const path = require('path');
|
|||
|
|
|
|||
|
|
const ROOT = path.resolve(__dirname, '..', '..');
|
|||
|
|
const CHAIN_REPORT_PATH = path.join(ROOT, 'data', 'aoac', 'chain-report.json');
|
|||
|
|
const TRIGGER_PATH = path.join(ROOT, 'data', 'aoac', 'readme-sync-trigger.json');
|
|||
|
|
const PAYLOAD_PATH = path.join(ROOT, 'data', 'aoac', 'readme-update-payload.json');
|
|||
|
|
const CHAIN_STATUS_PATH = path.join(ROOT, 'data', 'aoac', 'chain-status.json');
|
|||
|
|
const BEIJING_OFFSET_MS = 8 * 3600 * 1000;
|
|||
|
|
|
|||
|
|
function getBeijingTime() {
|
|||
|
|
const now = new Date();
|
|||
|
|
return new Date(now.getTime() + BEIJING_OFFSET_MS)
|
|||
|
|
.toISOString().replace('T', ' ').slice(0, 19) + '+08:00';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function readJSON(filePath) {
|
|||
|
|
try {
|
|||
|
|
if (!fs.existsSync(filePath)) return null;
|
|||
|
|
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|||
|
|
} catch { return null; }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function writeJSON(filePath, data) {
|
|||
|
|
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|||
|
|
fs.writeFileSync(filePath, JSON.stringify(data, null, 2) + '\n', 'utf8');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function extractReadmeUpdates(chainReport) {
|
|||
|
|
if (!chainReport) return null;
|
|||
|
|
|
|||
|
|
const updates = {
|
|||
|
|
aoac_section: '',
|
|||
|
|
progress_entries: [],
|
|||
|
|
status_badge: '🟢'
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// Build AOAC status line
|
|||
|
|
const dev = chainReport.development || {};
|
|||
|
|
const ci = chainReport.ci_result || {};
|
|||
|
|
|
|||
|
|
const ciBadge = ci.overall === 'success' ? '✅' :
|
|||
|
|
ci.overall === 'failure' ? '❌' : '⚠️';
|
|||
|
|
|
|||
|
|
updates.status_badge = ciBadge;
|
|||
|
|
updates.aoac_section = [
|
|||
|
|
`| ${chainReport.report_id || 'N/A'} | PR #${dev.pr_number || '?'} | ${(dev.pr_title || '').slice(0, 50)} | ${dev.files_changed || 0}文件 +${dev.additions || 0}/-${dev.deletions || 0} | ${ciBadge} ${ci.overall || 'unknown'} | ${chainReport.timestamp || ''} |`
|
|||
|
|
].join('\n');
|
|||
|
|
|
|||
|
|
// Progress entry for consciousness chain
|
|||
|
|
if (dev.pr_title) {
|
|||
|
|
updates.progress_entries.push({
|
|||
|
|
type: 'dev_merge',
|
|||
|
|
title: dev.pr_title,
|
|||
|
|
result: ci.overall,
|
|||
|
|
timestamp: chainReport.timestamp
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return updates;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function main() {
|
|||
|
|
console.log('📋 AOAC-04 · 首页同步模块 · 唤醒中...');
|
|||
|
|
console.log(`📅 ${getBeijingTime()}`);
|
|||
|
|
|
|||
|
|
// Check trigger
|
|||
|
|
const trigger = readJSON(TRIGGER_PATH);
|
|||
|
|
if (!trigger) {
|
|||
|
|
console.log('⚠️ 无触发信号,跳过');
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
console.log(`📡 收到触发信号: ${trigger.trigger_id}`);
|
|||
|
|
|
|||
|
|
// Read chain report
|
|||
|
|
const chainReport = readJSON(CHAIN_REPORT_PATH);
|
|||
|
|
if (!chainReport) {
|
|||
|
|
console.log('⚠️ 链路报告不存在,跳过');
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Extract README updates
|
|||
|
|
const updates = extractReadmeUpdates(chainReport);
|
|||
|
|
|
|||
|
|
const now = new Date();
|
|||
|
|
const payload = {
|
|||
|
|
aoac_agent: 'AOAC-04',
|
|||
|
|
aoac_agent_name: 'readme-sync-module',
|
|||
|
|
payload_id: `AOAC-PAYLOAD-${now.toISOString().slice(0, 10).replace(/-/g, '')}-${String(Math.floor(Math.random() * 1000)).padStart(3, '0')}`,
|
|||
|
|
timestamp: getBeijingTime(),
|
|||
|
|
timestamp_utc: now.toISOString(),
|
|||
|
|
source_report: chainReport.report_id,
|
|||
|
|
updates,
|
|||
|
|
changes_summary: chainReport.changes_summary,
|
|||
|
|
trigger_master: true,
|
|||
|
|
next_agent: 'AOAC-05 (readme-master-agent)'
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
writeJSON(PAYLOAD_PATH, payload);
|
|||
|
|
console.log(`✅ README更新数据已准备: ${payload.payload_id}`);
|
|||
|
|
console.log(` ${chainReport.changes_summary}`);
|
|||
|
|
|
|||
|
|
// Update chain status
|
|||
|
|
const chainStatus = readJSON(CHAIN_STATUS_PATH) || {};
|
|||
|
|
if (chainStatus.agents && chainStatus.agents['AOAC-04']) {
|
|||
|
|
chainStatus.agents['AOAC-04'].status = 'completed';
|
|||
|
|
chainStatus.agents['AOAC-04'].last_run = now.toISOString();
|
|||
|
|
chainStatus.agents['AOAC-04'].last_success = now.toISOString();
|
|||
|
|
}
|
|||
|
|
writeJSON(CHAIN_STATUS_PATH, chainStatus);
|
|||
|
|
|
|||
|
|
console.log('📋 AOAC-04 · 半Agent完成 · 触发AOAC-05主控');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
main();
|