hedgequantx 2.6.160 → 2.6.162

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 (45) hide show
  1. package/package.json +1 -1
  2. package/src/menus/ai-agent-connect.js +181 -0
  3. package/src/menus/ai-agent-models.js +219 -0
  4. package/src/menus/ai-agent-oauth.js +292 -0
  5. package/src/menus/ai-agent-ui.js +141 -0
  6. package/src/menus/ai-agent.js +88 -1489
  7. package/src/pages/algo/copy-engine.js +449 -0
  8. package/src/pages/algo/copy-trading.js +11 -543
  9. package/src/pages/algo/smart-logs-data.js +218 -0
  10. package/src/pages/algo/smart-logs.js +9 -214
  11. package/src/pages/algo/ui-constants.js +144 -0
  12. package/src/pages/algo/ui-summary.js +184 -0
  13. package/src/pages/algo/ui.js +42 -526
  14. package/src/pages/stats-calculations.js +191 -0
  15. package/src/pages/stats-ui.js +381 -0
  16. package/src/pages/stats.js +14 -507
  17. package/src/services/ai/client-analysis.js +194 -0
  18. package/src/services/ai/client-models.js +333 -0
  19. package/src/services/ai/client.js +6 -489
  20. package/src/services/ai/index.js +2 -257
  21. package/src/services/ai/proxy-install.js +249 -0
  22. package/src/services/ai/proxy-manager.js +29 -411
  23. package/src/services/ai/proxy-remote.js +161 -0
  24. package/src/services/ai/strategy-supervisor.js +10 -765
  25. package/src/services/ai/supervisor-data.js +195 -0
  26. package/src/services/ai/supervisor-optimize.js +215 -0
  27. package/src/services/ai/supervisor-sync.js +178 -0
  28. package/src/services/ai/supervisor-utils.js +158 -0
  29. package/src/services/ai/supervisor.js +50 -515
  30. package/src/services/ai/validation.js +250 -0
  31. package/src/services/hqx-server-events.js +110 -0
  32. package/src/services/hqx-server-handlers.js +217 -0
  33. package/src/services/hqx-server-latency.js +136 -0
  34. package/src/services/hqx-server.js +51 -403
  35. package/src/services/position-constants.js +28 -0
  36. package/src/services/position-manager.js +105 -554
  37. package/src/services/position-momentum.js +206 -0
  38. package/src/services/projectx/accounts.js +142 -0
  39. package/src/services/projectx/index.js +40 -289
  40. package/src/services/projectx/trading.js +180 -0
  41. package/src/services/rithmic/handlers.js +2 -208
  42. package/src/services/rithmic/index.js +32 -542
  43. package/src/services/rithmic/latency-tracker.js +182 -0
  44. package/src/services/rithmic/specs.js +146 -0
  45. package/src/services/rithmic/trade-history.js +254 -0
@@ -0,0 +1,161 @@
1
+ /**
2
+ * @fileoverview Remote OAuth for CLIProxyAPI
3
+ *
4
+ * For VPS/Server users without browser access
5
+ * Uses cli.hedgequantx.com as OAuth relay
6
+ */
7
+
8
+ const https = require('https');
9
+
10
+ const REMOTE_OAUTH_URL = 'https://cli.hedgequantx.com';
11
+
12
+ /**
13
+ * Make HTTPS request
14
+ */
15
+ const httpsRequest = (url, options, body = null) => {
16
+ return new Promise((resolve, reject) => {
17
+ const parsedUrl = new URL(url);
18
+ const req = https.request({
19
+ hostname: parsedUrl.hostname,
20
+ port: 443,
21
+ path: parsedUrl.pathname + parsedUrl.search,
22
+ method: options.method || 'GET',
23
+ headers: options.headers || {}
24
+ }, (res) => {
25
+ let data = '';
26
+ res.on('data', chunk => data += chunk);
27
+ res.on('end', () => {
28
+ try {
29
+ resolve(JSON.parse(data));
30
+ } catch (e) {
31
+ resolve(data);
32
+ }
33
+ });
34
+ });
35
+
36
+ req.on('error', reject);
37
+ req.on('timeout', () => {
38
+ req.destroy();
39
+ reject(new Error('Request timeout'));
40
+ });
41
+
42
+ if (body) {
43
+ req.write(typeof body === 'string' ? body : JSON.stringify(body));
44
+ }
45
+ req.end();
46
+ });
47
+ };
48
+
49
+ /**
50
+ * Create Remote OAuth session
51
+ * @param {string} provider - Provider ID (anthropic, openai, gemini)
52
+ * @returns {Promise<{sessionId: string, authUrl: string}>}
53
+ */
54
+ const createRemoteSession = async (provider) => {
55
+ const response = await httpsRequest(
56
+ `${REMOTE_OAUTH_URL}/oauth/session/create`,
57
+ {
58
+ method: 'POST',
59
+ headers: { 'Content-Type': 'application/json' }
60
+ },
61
+ JSON.stringify({ provider })
62
+ );
63
+
64
+ if (response.error) {
65
+ throw new Error(response.error);
66
+ }
67
+
68
+ return {
69
+ sessionId: response.sessionId,
70
+ authUrl: response.authUrl
71
+ };
72
+ };
73
+
74
+ /**
75
+ * Poll Remote OAuth session status
76
+ * @param {string} sessionId - Session ID from createRemoteSession
77
+ * @returns {Promise<{status: string, error?: string}>}
78
+ */
79
+ const pollRemoteSession = async (sessionId) => {
80
+ const response = await httpsRequest(
81
+ `${REMOTE_OAUTH_URL}/oauth/session/${sessionId}/status`,
82
+ { method: 'GET' }
83
+ );
84
+ return response;
85
+ };
86
+
87
+ /**
88
+ * Get tokens from Remote OAuth session
89
+ * @param {string} sessionId - Session ID
90
+ * @returns {Promise<{provider: string, tokens: Object}>}
91
+ */
92
+ const getRemoteTokens = async (sessionId) => {
93
+ const response = await httpsRequest(
94
+ `${REMOTE_OAUTH_URL}/oauth/session/${sessionId}/tokens`,
95
+ { method: 'GET' }
96
+ );
97
+
98
+ if (response.error) {
99
+ throw new Error(response.error);
100
+ }
101
+
102
+ return response;
103
+ };
104
+
105
+ /**
106
+ * Wait for Remote OAuth to complete
107
+ * @param {string} sessionId - Session ID
108
+ * @param {number} timeoutMs - Timeout in milliseconds
109
+ * @param {Function} onStatus - Status callback
110
+ * @returns {Promise<{provider: string, tokens: Object}>}
111
+ */
112
+ const waitForRemoteAuth = async (sessionId, timeoutMs = 300000, onStatus = () => {}) => {
113
+ const startTime = Date.now();
114
+
115
+ while (Date.now() - startTime < timeoutMs) {
116
+ const status = await pollRemoteSession(sessionId);
117
+
118
+ if (status.status === 'success') {
119
+ return await getRemoteTokens(sessionId);
120
+ } else if (status.status === 'error') {
121
+ throw new Error(status.error || 'Authentication failed');
122
+ }
123
+
124
+ onStatus('Waiting for authorization...');
125
+ await new Promise(resolve => setTimeout(resolve, 2000));
126
+ }
127
+
128
+ throw new Error('Authentication timeout');
129
+ };
130
+
131
+ /**
132
+ * Detect if we're running on a server (no display/browser)
133
+ * @returns {boolean}
134
+ */
135
+ const isServerEnvironment = () => {
136
+ if (process.env.SSH_CONNECTION || process.env.SSH_CLIENT) return true;
137
+ if (process.env.DISPLAY === undefined && process.platform === 'linux') return true;
138
+ if (process.env.TERM === 'dumb') return true;
139
+ if (process.env.HQX_REMOTE_OAUTH === '1') return true;
140
+ return false;
141
+ };
142
+
143
+ /**
144
+ * Detect if browser can be opened
145
+ * @returns {boolean}
146
+ */
147
+ const canOpenBrowser = () => {
148
+ if (process.platform === 'darwin' || process.platform === 'win32') return true;
149
+ if (process.env.DISPLAY) return true;
150
+ return false;
151
+ };
152
+
153
+ module.exports = {
154
+ createRemoteSession,
155
+ pollRemoteSession,
156
+ getRemoteTokens,
157
+ waitForRemoteAuth,
158
+ isServerEnvironment,
159
+ canOpenBrowser,
160
+ REMOTE_OAUTH_URL
161
+ };