hedgequantx 2.5.32 → 2.5.34

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/pages/stats.js +34 -14
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hedgequantx",
3
- "version": "2.5.32",
3
+ "version": "2.5.34",
4
4
  "description": "HedgeQuantX - Prop Futures Trading CLI",
5
5
  "main": "src/app.js",
6
6
  "bin": {
@@ -394,11 +394,7 @@ const showStats = async (service) => {
394
394
  drawBoxHeader('AI SUPERVISION', boxWidth);
395
395
  draw2ColHeader('AGENTS', 'PERFORMANCE', boxWidth);
396
396
 
397
- // Agent info
398
- const activeAgent = aiService.getActiveAgent();
399
- const agentNames = aiAgents.map(a => a.name).join(', ');
400
- const agentMode = aiAgents.length >= 2 ? 'CONSENSUS' : 'INDIVIDUAL';
401
- const modeColor = aiAgents.length >= 2 ? chalk.magenta : chalk.cyan;
397
+ // Agent info (removed unused: activeAgent, agentNames, agentMode, modeColor)
402
398
 
403
399
  // Supervision metrics
404
400
  let totalDecisions = 0;
@@ -428,15 +424,39 @@ const showStats = async (service) => {
428
424
 
429
425
  // Calculate max agent name length to fit in column (label=18 + space=1 + padding buffer)
430
426
  const maxAgentNameLen = col1 - 20;
431
- const agentNamesDisplay = agentNames.length > maxAgentNameLen
432
- ? agentNames.substring(0, maxAgentNameLen - 2) + '..'
433
- : agentNames;
434
-
435
- console.log(chalk.cyan('\u2551') + fmtRow('CONNECTED AGENTS:', chalk.green(String(aiAgents.length)), col1) + chalk.cyan('\u2502') + fmtRow('SUPERVISED ACCOUNTS:', chalk.white(String(supervisedAccounts)), col2) + chalk.cyan('\u2551'));
436
- console.log(chalk.cyan('\u2551') + fmtRow('MODE:', modeColor(agentMode), col1) + chalk.cyan('\u2502') + fmtRow('SUPERVISED P&L:', supervisedPnL >= 0 ? chalk.green('$' + supervisedPnL.toFixed(2)) : chalk.red('$' + supervisedPnL.toFixed(2)), col2) + chalk.cyan('\u2551'));
437
- console.log(chalk.cyan('\u2551') + fmtRow('ACTIVE:', activeAgent ? chalk.green(activeAgent.name) : chalk.white('NONE'), col1) + chalk.cyan('\u2502') + fmtRow('POSITIONS:', chalk.white(String(supervisionData.totalPositions)), col2) + chalk.cyan('\u2551'));
438
- console.log(chalk.cyan('\u2551') + fmtRow('SESSION TIME:', sessionTimeStr === 'INACTIVE' ? chalk.yellow(sessionTimeStr) : chalk.white(sessionTimeStr), col1) + chalk.cyan('\u2502') + fmtRow('OPEN ORDERS:', chalk.white(String(supervisionData.totalOrders)), col2) + chalk.cyan('\u2551'));
439
- console.log(chalk.cyan('\u2551') + fmtRow('AGENTS:', chalk.white(agentNamesDisplay), col1) + chalk.cyan('\u2502') + fmtRow('TRADES TODAY:', chalk.white(String(supervisionData.totalTrades)), col2) + chalk.cyan('\u2551'));
427
+
428
+ // Performance column data (right side)
429
+ const perfData = [
430
+ { label: 'SUPERVISED ACCOUNTS:', value: chalk.white(String(supervisedAccounts)) },
431
+ { label: 'SUPERVISED P&L:', value: supervisedPnL >= 0 ? chalk.green('$' + supervisedPnL.toFixed(2)) : chalk.red('$' + supervisedPnL.toFixed(2)) },
432
+ { label: 'POSITIONS:', value: chalk.white(String(supervisionData.totalPositions)) },
433
+ { label: 'OPEN ORDERS:', value: chalk.white(String(supervisionData.totalOrders)) },
434
+ { label: 'TRADES TODAY:', value: chalk.white(String(supervisionData.totalTrades)) }
435
+ ];
436
+
437
+ // Agents column data (left side) - each agent on its own line with ● indicator
438
+ const agentsData = [
439
+ { label: 'CONNECTED:', value: chalk.green(String(aiAgents.length) + ' AGENT' + (aiAgents.length > 1 ? 'S' : '')) },
440
+ { label: 'SESSION:', value: sessionTimeStr === 'INACTIVE' ? chalk.yellow(sessionTimeStr) : chalk.white(sessionTimeStr) }
441
+ ];
442
+
443
+ // Add each agent as a separate line with ● indicator
444
+ aiAgents.forEach((agent, idx) => {
445
+ const agentLabel = idx === 0 ? 'AGENTS:' : '';
446
+ const agentName = agent.name.length > maxAgentNameLen
447
+ ? agent.name.substring(0, maxAgentNameLen - 4) + '..'
448
+ : agent.name;
449
+ const agentDisplay = chalk.green('● ') + chalk.white(agentName);
450
+ agentsData.push({ label: agentLabel, value: agentDisplay });
451
+ });
452
+
453
+ // Print rows - match left and right columns
454
+ const maxRows = Math.max(agentsData.length, perfData.length);
455
+ for (let i = 0; i < maxRows; i++) {
456
+ const leftData = agentsData[i] || { label: '', value: '' };
457
+ const rightData = perfData[i] || { label: '', value: '' };
458
+ console.log(chalk.cyan('\u2551') + fmtRow(leftData.label, leftData.value, col1) + chalk.cyan('\u2502') + fmtRow(rightData.label, rightData.value, col2) + chalk.cyan('\u2551'));
459
+ }
440
460
 
441
461
  drawBoxFooter(boxWidth);
442
462
  }