guanghulab/scripts/grid-db/write-code-check-result.js
2026-05-10 13:12:44 +08:00

95 lines
2.4 KiB
JavaScript

/**
* scripts/grid-db/write-code-check-result.js
*
* 代码校验结果写入 Grid-DB
*
* 用途:在 CI 代码校验完成后,自动向 grid-db 写入进度消息。
* 被现有 contract-check workflow 的末尾 step 调用。
*
* 参数:
* --dev-id=DEV-XXX 开发者编号
* --result=pass|fail 校验结果
* --files-checked=N 检查的文件数
*
* 守护: PER-ZY001 铸渊
* 系统: SYS-GLW-0001
*/
const fs = require('fs');
const path = require('path');
const INBOX = path.join(__dirname, '../../grid-db/inbox');
function parseArgs() {
const args = {};
process.argv.slice(2).forEach(arg => {
const [key, value] = arg.replace(/^--/, '').split('=');
if (key && value) {
args[key] = value;
}
});
return args;
}
function getDateStr() {
return new Date().toISOString().slice(0, 10).replace(/-/g, '');
}
function getTimeStr() {
return new Date().toISOString().slice(11, 19).replace(/:/g, '');
}
function main() {
const args = parseArgs();
const devId = args['dev-id'];
const result = args['result'] || 'unknown';
const filesChecked = args['files-checked'] || '0';
if (!devId || !/^DEV-\d{3}$/.test(devId)) {
console.error('[write-code-check-result] Invalid or missing --dev-id');
process.exit(1);
}
const dateStr = getDateStr();
const timeStr = getTimeStr();
const messageId = `${dateStr}-${timeStr}-${devId}-code-check`;
const message = {
schema_version: '1.0',
message_id: messageId,
timestamp: new Date().toISOString(),
source: 'workflow',
dev_id: devId,
persona_id: 'PER-ZY001',
type: 'progress-update',
priority: result === 'fail' ? 'P1' : 'info',
payload: {
summary: `Code check ${result}: ${filesChecked} files checked for ${devId}`,
detail: {
result: result,
files_checked: parseInt(filesChecked, 10),
triggered_by: 'contract-check-workflow'
},
code_refs: [],
broadcast_ref: null,
emotion_markers: {}
},
context: {
session_id: `ci-${dateStr}-${timeStr}`,
interaction_count: 0,
persona_state: {
engagement_level: 'automated',
teaching_mode: 'code-review'
}
}
};
const filename = `${messageId}.json`;
const filePath = path.join(INBOX, filename);
fs.writeFileSync(filePath, JSON.stringify(message, null, 2) + '\n');
console.log(`[write-code-check-result] Written ${filename} to inbox`);
}
main();