hedgequantx 2.5.34 → 2.5.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/pages/stats.js +21 -1
- package/src/services/ai/supervisor.js +16 -9
package/package.json
CHANGED
package/src/pages/stats.js
CHANGED
|
@@ -394,7 +394,13 @@ const showStats = async (service) => {
|
|
|
394
394
|
drawBoxHeader('AI SUPERVISION', boxWidth);
|
|
395
395
|
draw2ColHeader('AGENTS', 'PERFORMANCE', boxWidth);
|
|
396
396
|
|
|
397
|
-
// Agent
|
|
397
|
+
// Agent mode - INDIVIDUAL (1 agent) or CONSENSUS (2+ agents)
|
|
398
|
+
const isConsensusMode = aiAgents.length >= 2;
|
|
399
|
+
const agentMode = isConsensusMode ? 'CONSENSUS' : 'INDIVIDUAL';
|
|
400
|
+
const modeColor = isConsensusMode ? chalk.magenta : chalk.cyan;
|
|
401
|
+
|
|
402
|
+
// Get consensus data if in consensus mode
|
|
403
|
+
const consensusData = isConsensusMode ? AISupervisor.getConsensus() : null;
|
|
398
404
|
|
|
399
405
|
// Supervision metrics
|
|
400
406
|
let totalDecisions = 0;
|
|
@@ -437,9 +443,23 @@ const showStats = async (service) => {
|
|
|
437
443
|
// Agents column data (left side) - each agent on its own line with ● indicator
|
|
438
444
|
const agentsData = [
|
|
439
445
|
{ label: 'CONNECTED:', value: chalk.green(String(aiAgents.length) + ' AGENT' + (aiAgents.length > 1 ? 'S' : '')) },
|
|
446
|
+
{ label: 'MODE:', value: modeColor(agentMode) },
|
|
440
447
|
{ label: 'SESSION:', value: sessionTimeStr === 'INACTIVE' ? chalk.yellow(sessionTimeStr) : chalk.white(sessionTimeStr) }
|
|
441
448
|
];
|
|
442
449
|
|
|
450
|
+
// Add consensus info if in consensus mode
|
|
451
|
+
if (isConsensusMode && consensusData) {
|
|
452
|
+
const isUnanimous = consensusData.isUnanimous;
|
|
453
|
+
const consensusAction = consensusData.action || 'PENDING';
|
|
454
|
+
// Show action with unanimity status
|
|
455
|
+
const consensusDisplay = isUnanimous
|
|
456
|
+
? chalk.green(consensusAction + ' (UNANIMOUS)')
|
|
457
|
+
: chalk.yellow(consensusAction + ' (DISAGREEMENT)');
|
|
458
|
+
agentsData.push({ label: 'DECISION:', value: consensusDisplay });
|
|
459
|
+
} else if (isConsensusMode) {
|
|
460
|
+
agentsData.push({ label: 'DECISION:', value: chalk.white('WAITING...') });
|
|
461
|
+
}
|
|
462
|
+
|
|
443
463
|
// Add each agent as a separate line with ● indicator
|
|
444
464
|
aiAgents.forEach((agent, idx) => {
|
|
445
465
|
const agentLabel = idx === 0 ? 'AGENTS:' : '';
|
|
@@ -298,6 +298,8 @@ class AISupervisor {
|
|
|
298
298
|
|
|
299
299
|
/**
|
|
300
300
|
* Calculate consensus from multiple agent decisions
|
|
301
|
+
* RULE: ALL agents must agree (100% unanimity) before taking action
|
|
302
|
+
*
|
|
301
303
|
* @param {Array} decisions - Array of agent decisions
|
|
302
304
|
* @returns {Object|null} Consensus result
|
|
303
305
|
*/
|
|
@@ -319,13 +321,16 @@ class AISupervisor {
|
|
|
319
321
|
}
|
|
320
322
|
}
|
|
321
323
|
|
|
322
|
-
//
|
|
323
|
-
let
|
|
324
|
-
let
|
|
324
|
+
// Check for UNANIMITY - ALL agents must agree
|
|
325
|
+
let unanimousAction = null;
|
|
326
|
+
let isUnanimous = false;
|
|
327
|
+
|
|
325
328
|
for (const [action, count] of Object.entries(votes)) {
|
|
326
|
-
if (count
|
|
327
|
-
|
|
328
|
-
|
|
329
|
+
if (count === decisions.length) {
|
|
330
|
+
// All agents voted for this action
|
|
331
|
+
unanimousAction = action;
|
|
332
|
+
isUnanimous = true;
|
|
333
|
+
break;
|
|
329
334
|
}
|
|
330
335
|
}
|
|
331
336
|
|
|
@@ -335,13 +340,15 @@ class AISupervisor {
|
|
|
335
340
|
: null;
|
|
336
341
|
|
|
337
342
|
// Store consensus result
|
|
343
|
+
// If not unanimous, action is HOLD (no action taken)
|
|
338
344
|
const consensus = {
|
|
339
345
|
timestamp: Date.now(),
|
|
340
|
-
action:
|
|
341
|
-
confidence: avgConfidence,
|
|
346
|
+
action: isUnanimous ? unanimousAction : 'HOLD',
|
|
347
|
+
confidence: isUnanimous ? avgConfidence : null,
|
|
342
348
|
votes,
|
|
343
349
|
agentCount: decisions.length,
|
|
344
|
-
|
|
350
|
+
isUnanimous,
|
|
351
|
+
agreement: isUnanimous ? 1.0 : 0
|
|
345
352
|
};
|
|
346
353
|
|
|
347
354
|
// Store consensus in first session for retrieval
|