hedgequantx 2.7.16 → 2.7.18

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hedgequantx",
3
- "version": "2.7.16",
3
+ "version": "2.7.18",
4
4
  "description": "HedgeQuantX - Prop Futures Trading CLI",
5
5
  "main": "src/app.js",
6
6
  "bin": {
package/src/app.js CHANGED
@@ -125,6 +125,7 @@ const banner = async () => {
125
125
 
126
126
  const tagline = isMobile ? `HQX v${version}` : `Prop Futures Algo Trading v${version}`;
127
127
  console.log(chalk.cyan('║') + chalk.white(centerText(tagline, innerWidth)) + chalk.cyan('║'));
128
+ console.log(chalk.cyan('╚' + '═'.repeat(innerWidth) + '╝'));
128
129
  };
129
130
 
130
131
  const getFullLogo = () => [
@@ -145,19 +146,12 @@ const getMobileLogo = () => [
145
146
  ['╚═╝ ╚═╝ ╚══▀▀═╝ ', '╚═╝ ╚═╝'],
146
147
  ];
147
148
 
148
- const bannerClosed = async () => {
149
- await banner();
150
- const termWidth = process.stdout.columns || 100;
151
- const boxWidth = termWidth < 60 ? Math.max(termWidth - 2, 40) : Math.max(getLogoWidth(), 98);
152
- console.log(chalk.cyan('╚' + '═'.repeat(boxWidth - 2) + '╝'));
153
- };
154
-
155
149
  // ==================== MAIN LOOP ====================
156
150
 
157
151
  const run = async () => {
158
152
  try {
159
153
  log.info('Starting HQX CLI');
160
- await bannerClosed();
154
+ await banner();
161
155
 
162
156
  // Restore session
163
157
  const spinner = ora({ text: 'Restoring session...', color: 'yellow' }).start();
@@ -192,9 +186,9 @@ const run = async () => {
192
186
  const totalContentWidth = numCols * colWidth;
193
187
  const leftMargin = Math.max(2, Math.floor((innerWidth - totalContentWidth) / 2));
194
188
 
195
- console.log(chalk.cyan('' + '═'.repeat(innerWidth) + ''));
189
+ console.log(chalk.cyan('' + '═'.repeat(innerWidth) + ''));
196
190
  console.log(chalk.cyan('║') + chalk.white.bold(centerText('SELECT PROPFIRM', innerWidth)) + chalk.cyan('║'));
197
- console.log(chalk.cyan('') + ' '.repeat(innerWidth) + chalk.cyan(''));
191
+ console.log(chalk.cyan('' + ''.repeat(innerWidth) + ''));
198
192
 
199
193
  const rows = Math.ceil(numbered.length / numCols);
200
194
  for (let row = 0; row < rows; row++) {
@@ -301,6 +295,12 @@ const run = async () => {
301
295
  }
302
296
  break;
303
297
 
298
+ case 'aiagents':
299
+ console.log(chalk.yellow('\n AI Agents - Coming soon!'));
300
+ console.log(chalk.gray(' Configure AI trading agents for automated strategies.'));
301
+ await prompts.waitForEnter();
302
+ break;
303
+
304
304
  case 'update':
305
305
  await handleUpdate();
306
306
  break;
@@ -30,8 +30,8 @@ const dashboardMenu = async (service) => {
30
30
  return chalk.cyan('║') + content + ' '.repeat(Math.max(0, padding)) + chalk.cyan('║');
31
31
  };
32
32
 
33
- // Continue from banner (use ╠ not ╔)
34
- console.log(chalk.cyan('' + '═'.repeat(W) + ''));
33
+ // New box for dashboard menu
34
+ console.log(chalk.cyan('' + '═'.repeat(W) + ''));
35
35
  console.log(makeLine(chalk.yellow.bold('Welcome, HQX Trader!'), 'center'));
36
36
  console.log(chalk.cyan('╠' + '═'.repeat(W) + '╣'));
37
37
 
@@ -89,7 +89,7 @@ const dashboardMenu = async (service) => {
89
89
  const menuItems = [
90
90
  { left: '[1] View Accounts', right: '[2] View Stats' },
91
91
  { left: '[+] Add Prop-Account', right: '[A] Algo-Trading' },
92
- { left: '[U] Update HQX', right: '[X] Disconnect' },
92
+ { left: '[I] AI Agents', right: '[U] Update HQX' },
93
93
  ];
94
94
 
95
95
  const maxLeftLen = Math.max(...menuItems.map(m => m.left.length));
@@ -121,18 +121,23 @@ const dashboardMenu = async (service) => {
121
121
 
122
122
  menuRow('[1] View Accounts', '[2] View Stats', chalk.cyan, chalk.cyan);
123
123
  menuRow('[+] Add Prop-Account', '[A] Algo-Trading', chalk.cyan, chalk.magenta);
124
- menuRow('[U] Update HQX', '[X] Disconnect', chalk.yellow, chalk.red);
124
+ menuRow('[I] AI Agents', '[U] Update HQX', chalk.green, chalk.yellow);
125
+
126
+ // Separator and centered Disconnect button
127
+ console.log(chalk.cyan('╠' + '─'.repeat(W) + '╣'));
128
+ console.log(makeLine(chalk.red('[X] Disconnect'), 'center'));
125
129
 
126
130
  console.log(chalk.cyan('╚' + '═'.repeat(W) + '╝'));
127
131
 
128
132
  // Simple input - no duplicate menu
129
- const input = await prompts.textInput(chalk.cyan('Select (1/2/+/A/U/X)'));
133
+ const input = await prompts.textInput(chalk.cyan('Select (1/2/+/A/I/U/X)'));
130
134
 
131
135
  const actionMap = {
132
136
  '1': 'accounts',
133
137
  '2': 'stats',
134
138
  '+': 'add_prop_account',
135
139
  'a': 'algotrading',
140
+ 'i': 'aiagents',
136
141
  'u': 'update',
137
142
  'x': 'disconnect'
138
143
  };