73 lines
2.5 KiB
JavaScript
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 };
|