claude-flow-novice
Version:
Claude Flow Novice - Advanced orchestration platform for multi-agent AI workflows with CFN Loop architecture Includes Local RuVector Accelerator and all CFN skills for complete functionality.
88 lines (76 loc) • 2.12 kB
text/typescript
/**
* Consensus Collection and Validation
* Collects Loop 2 validator scores and validates against thresholds
*/
export interface ConsensusResult {
scores: number[];
average: number;
count: number;
min: number;
max: number;
}
export interface ConsensusValidation {
passed: boolean;
average: number;
threshold: number;
mode: string;
gap: number;
}
export type Mode = 'mvp' | 'standard' | 'enterprise';
const MODE_THRESHOLDS: Record<Mode, number> = {
mvp: 0.80,
standard: 0.90,
enterprise: 0.95
};
/**
* Collects consensus scores from multiple validators
* @param scores Array of validator confidence scores (0.0-1.0)
* @returns ConsensusResult with statistics
*/
export function collectConsensus(scores: number[]): ConsensusResult {
if (!scores || scores.length === 0) {
throw new Error('No consensus scores provided');
}
// Validate all scores are in valid range
for (const score of scores) {
if (score < 0 || score > 1.0) {
throw new Error(`Invalid consensus score: ${score} (must be 0.0-1.0)`);
}
}
// Calculate statistics
const sum = scores.reduce((acc, score) => acc + score, 0);
const average = sum / scores.length;
const min = Math.min(...scores);
const max = Math.max(...scores);
return {
scores,
average,
count: scores.length,
min,
max
};
}
/**
* Validates consensus against mode-specific threshold
* @param params Validation parameters
* @returns ConsensusValidation result
*/
export function validateConsensus(params: {
average: number;
threshold?: number | undefined;
mode: Mode | string;
}): ConsensusValidation {
// Use explicit threshold if provided, otherwise use mode default
const threshold = params.threshold !== undefined
? params.threshold
: MODE_THRESHOLDS[params.mode as Mode] || 0.90;
const passed = params.average >= threshold;
const gap = params.average - threshold;
return {
passed,
average: params.average,
threshold,
mode: params.mode,
gap
};
}