guanghulab/scripts/agents/twin-merge.js
Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

73 lines
2.5 KiB
JavaScript

// scripts/agents/twin-merge.js
// Twin Merge Engine · 双子融合引擎
// ZY-P1-TWIN-002 · Phase 1 · Twin Balance Agent
// 版权:国作登字-2026-A-00037559
'use strict';
const { WEIGHTS } = require('./twin-collector');
/**
* 计算综合分数(加权求和)
* @param {{ taskCompletion: number, testPassRate: number, codeCoverage: number, securityScore: number }} metrics
* @returns {number}
*/
function computeComposite(metrics) {
return Math.round((
WEIGHTS.taskCompletion * metrics.taskCompletion +
WEIGHTS.testPassRate * metrics.testPassRate +
WEIGHTS.codeCoverage * metrics.codeCoverage +
WEIGHTS.securityScore * metrics.securityScore
) * 10000) / 10000;
}
/**
* 融合左右两翼指标 · 天平合一
* @param {object} leftMetrics - EXE-Engine 指标
* @param {object} rightMetrics - Grid-DB 指标
* @returns {{ left: object, right: object, balance: number, timestamp: string }}
*/
function merge(leftMetrics, rightMetrics) {
const leftComposite = computeComposite(leftMetrics);
const rightComposite = computeComposite(rightMetrics);
// 平衡度 = 1 - |左-右| — 完全一致时为 1.0
const balance = Math.round((1 - Math.abs(leftComposite - rightComposite)) * 10000) / 10000;
return {
left: {
composite: leftComposite,
dimensions: {
taskCompletion: leftMetrics.taskCompletion,
testPassRate: leftMetrics.testPassRate,
codeCoverage: leftMetrics.codeCoverage,
securityScore: leftMetrics.securityScore
}
},
right: {
composite: rightComposite,
dimensions: {
taskCompletion: rightMetrics.taskCompletion,
testPassRate: rightMetrics.testPassRate,
codeCoverage: rightMetrics.codeCoverage,
securityScore: rightMetrics.securityScore
}
},
balance,
timestamp: new Date().toISOString()
};
}
// ── CLI 入口 ─────────────────────────────────────────────────────────────
if (require.main === module) {
const { collectBoth } = require('./twin-collector');
console.log('⚖️ Twin Merge Engine · 双子融合\n');
const data = collectBoth();
const result = merge(data.left, data.right);
console.log(` 左翼 composite: ${result.left.composite}`);
console.log(` 右翼 composite: ${result.right.composite}`);
console.log(` 平衡度: ${result.balance}`);
}
module.exports = { merge, computeComposite };