@tradingboy/cli 0.3.8

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 (142) hide show
  1. package/README.md +8 -0
  2. package/dist/api-client.d.ts +35 -0
  3. package/dist/api-client.d.ts.map +1 -0
  4. package/dist/api-client.js +165 -0
  5. package/dist/api-client.js.map +1 -0
  6. package/dist/cli.d.ts +5 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +143 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/audit.d.ts +18 -0
  11. package/dist/commands/audit.d.ts.map +1 -0
  12. package/dist/commands/audit.js +73 -0
  13. package/dist/commands/audit.js.map +1 -0
  14. package/dist/commands/behavioral.d.ts +73 -0
  15. package/dist/commands/behavioral.d.ts.map +1 -0
  16. package/dist/commands/behavioral.js +349 -0
  17. package/dist/commands/behavioral.js.map +1 -0
  18. package/dist/commands/benchmark-cmd.d.ts +3 -0
  19. package/dist/commands/benchmark-cmd.d.ts.map +1 -0
  20. package/dist/commands/benchmark-cmd.js +196 -0
  21. package/dist/commands/benchmark-cmd.js.map +1 -0
  22. package/dist/commands/billing.d.ts +12 -0
  23. package/dist/commands/billing.d.ts.map +1 -0
  24. package/dist/commands/billing.js +117 -0
  25. package/dist/commands/billing.js.map +1 -0
  26. package/dist/commands/catalysts.d.ts +17 -0
  27. package/dist/commands/catalysts.d.ts.map +1 -0
  28. package/dist/commands/catalysts.js +151 -0
  29. package/dist/commands/catalysts.js.map +1 -0
  30. package/dist/commands/coaching-cmd.d.ts +16 -0
  31. package/dist/commands/coaching-cmd.d.ts.map +1 -0
  32. package/dist/commands/coaching-cmd.js +231 -0
  33. package/dist/commands/coaching-cmd.js.map +1 -0
  34. package/dist/commands/config-cmd.d.ts +30 -0
  35. package/dist/commands/config-cmd.d.ts.map +1 -0
  36. package/dist/commands/config-cmd.js +378 -0
  37. package/dist/commands/config-cmd.js.map +1 -0
  38. package/dist/commands/context.d.ts +41 -0
  39. package/dist/commands/context.d.ts.map +1 -0
  40. package/dist/commands/context.js +391 -0
  41. package/dist/commands/context.js.map +1 -0
  42. package/dist/commands/decisions.d.ts +57 -0
  43. package/dist/commands/decisions.d.ts.map +1 -0
  44. package/dist/commands/decisions.js +352 -0
  45. package/dist/commands/decisions.js.map +1 -0
  46. package/dist/commands/edge-cmd.d.ts +78 -0
  47. package/dist/commands/edge-cmd.d.ts.map +1 -0
  48. package/dist/commands/edge-cmd.js +185 -0
  49. package/dist/commands/edge-cmd.js.map +1 -0
  50. package/dist/commands/edge-guard-cmd.d.ts +36 -0
  51. package/dist/commands/edge-guard-cmd.d.ts.map +1 -0
  52. package/dist/commands/edge-guard-cmd.js +174 -0
  53. package/dist/commands/edge-guard-cmd.js.map +1 -0
  54. package/dist/commands/events.d.ts +3 -0
  55. package/dist/commands/events.d.ts.map +1 -0
  56. package/dist/commands/events.js +117 -0
  57. package/dist/commands/events.js.map +1 -0
  58. package/dist/commands/infra.d.ts +20 -0
  59. package/dist/commands/infra.d.ts.map +1 -0
  60. package/dist/commands/infra.js +130 -0
  61. package/dist/commands/infra.js.map +1 -0
  62. package/dist/commands/journal.d.ts +3 -0
  63. package/dist/commands/journal.d.ts.map +1 -0
  64. package/dist/commands/journal.js +281 -0
  65. package/dist/commands/journal.js.map +1 -0
  66. package/dist/commands/login.d.ts +18 -0
  67. package/dist/commands/login.d.ts.map +1 -0
  68. package/dist/commands/login.js +121 -0
  69. package/dist/commands/login.js.map +1 -0
  70. package/dist/commands/logout.d.ts +7 -0
  71. package/dist/commands/logout.d.ts.map +1 -0
  72. package/dist/commands/logout.js +39 -0
  73. package/dist/commands/logout.js.map +1 -0
  74. package/dist/commands/narratives.d.ts +3 -0
  75. package/dist/commands/narratives.d.ts.map +1 -0
  76. package/dist/commands/narratives.js +259 -0
  77. package/dist/commands/narratives.js.map +1 -0
  78. package/dist/commands/onboarding.d.ts +7 -0
  79. package/dist/commands/onboarding.d.ts.map +1 -0
  80. package/dist/commands/onboarding.js +126 -0
  81. package/dist/commands/onboarding.js.map +1 -0
  82. package/dist/commands/query.d.ts +32 -0
  83. package/dist/commands/query.d.ts.map +1 -0
  84. package/dist/commands/query.js +132 -0
  85. package/dist/commands/query.js.map +1 -0
  86. package/dist/commands/replay-cmd.d.ts +43 -0
  87. package/dist/commands/replay-cmd.d.ts.map +1 -0
  88. package/dist/commands/replay-cmd.js +215 -0
  89. package/dist/commands/replay-cmd.js.map +1 -0
  90. package/dist/commands/review.d.ts +3 -0
  91. package/dist/commands/review.d.ts.map +1 -0
  92. package/dist/commands/review.js +443 -0
  93. package/dist/commands/review.js.map +1 -0
  94. package/dist/commands/risk.d.ts +47 -0
  95. package/dist/commands/risk.d.ts.map +1 -0
  96. package/dist/commands/risk.js +156 -0
  97. package/dist/commands/risk.js.map +1 -0
  98. package/dist/commands/social.d.ts +43 -0
  99. package/dist/commands/social.d.ts.map +1 -0
  100. package/dist/commands/social.js +318 -0
  101. package/dist/commands/social.js.map +1 -0
  102. package/dist/commands/strategy-cmd.d.ts +44 -0
  103. package/dist/commands/strategy-cmd.d.ts.map +1 -0
  104. package/dist/commands/strategy-cmd.js +367 -0
  105. package/dist/commands/strategy-cmd.js.map +1 -0
  106. package/dist/commands/subscribe.d.ts +72 -0
  107. package/dist/commands/subscribe.d.ts.map +1 -0
  108. package/dist/commands/subscribe.js +480 -0
  109. package/dist/commands/subscribe.js.map +1 -0
  110. package/dist/commands/suggestions-cmd.d.ts +24 -0
  111. package/dist/commands/suggestions-cmd.d.ts.map +1 -0
  112. package/dist/commands/suggestions-cmd.js +142 -0
  113. package/dist/commands/suggestions-cmd.js.map +1 -0
  114. package/dist/commands/thesis-cmd.d.ts +3 -0
  115. package/dist/commands/thesis-cmd.d.ts.map +1 -0
  116. package/dist/commands/thesis-cmd.js +132 -0
  117. package/dist/commands/thesis-cmd.js.map +1 -0
  118. package/dist/commands/trader.d.ts +29 -0
  119. package/dist/commands/trader.d.ts.map +1 -0
  120. package/dist/commands/trader.js +292 -0
  121. package/dist/commands/trader.js.map +1 -0
  122. package/dist/commands/watch.d.ts +16 -0
  123. package/dist/commands/watch.d.ts.map +1 -0
  124. package/dist/commands/watch.js +88 -0
  125. package/dist/commands/watch.js.map +1 -0
  126. package/dist/commands/whoami.d.ts +14 -0
  127. package/dist/commands/whoami.d.ts.map +1 -0
  128. package/dist/commands/whoami.js +89 -0
  129. package/dist/commands/whoami.js.map +1 -0
  130. package/dist/credentials.d.ts +18 -0
  131. package/dist/credentials.d.ts.map +1 -0
  132. package/dist/credentials.js +168 -0
  133. package/dist/credentials.js.map +1 -0
  134. package/dist/index.d.ts +33 -0
  135. package/dist/index.d.ts.map +1 -0
  136. package/dist/index.js +28 -0
  137. package/dist/index.js.map +1 -0
  138. package/dist/utils.d.ts +51 -0
  139. package/dist/utils.d.ts.map +1 -0
  140. package/dist/utils.js +118 -0
  141. package/dist/utils.js.map +1 -0
  142. package/package.json +38 -0
@@ -0,0 +1,349 @@
1
+ import { Option } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { createLogger } from '@trading-boy/core';
4
+ import { formatConnectionError, padRight, parseIntOption } from '../utils.js';
5
+ import { apiRequest, ApiError } from '../api-client.js';
6
+ // ─── Logger ───
7
+ const logger = createLogger('cli-behavioral');
8
+ // ─── Default Trader ───
9
+ const DEFAULT_TRADER_ID = 'default';
10
+ // ─── Period Parsing ───
11
+ /**
12
+ * Parse a period string like "30d", "7d", "90d" into days.
13
+ * Returns default 30 if the string cannot be parsed.
14
+ */
15
+ export function parsePeriodDays(period) {
16
+ const match = period.match(/^(\d+)d$/);
17
+ if (!match) {
18
+ return 30;
19
+ }
20
+ return parseInt(match[1], 10);
21
+ }
22
+ // ─── Local Types (mirror API response shapes) ───
23
+ /** Behavioral pattern enum values (kept local to avoid context-engine dep) */
24
+ const BehavioralPatternValues = {
25
+ REVENGE_TRADING: 'REVENGE_TRADING',
26
+ FOMO_ENTRY: 'FOMO_ENTRY',
27
+ OVERTRADING: 'OVERTRADING',
28
+ STOP_VIOLATION: 'STOP_VIOLATION',
29
+ TILT_CASCADE: 'TILT_CASCADE',
30
+ };
31
+ // ─── Formatters ───
32
+ /**
33
+ * Color-code a behavioral health score.
34
+ * 0-30: green (healthy), 31-60: yellow (watch), 61+: red (concerning)
35
+ */
36
+ export function colorScore(score) {
37
+ const str = String(score);
38
+ if (score <= 30)
39
+ return chalk.green(str);
40
+ if (score <= 60)
41
+ return chalk.yellow(str);
42
+ return chalk.red(str);
43
+ }
44
+ /**
45
+ * Format a commitment honor rate as a colored percentage.
46
+ */
47
+ export function colorHonorRate(rate) {
48
+ const pct = `${(rate * 100).toFixed(1)}%`;
49
+ if (rate >= 0.8)
50
+ return chalk.green(pct);
51
+ if (rate >= 0.5)
52
+ return chalk.yellow(pct);
53
+ return chalk.red(pct);
54
+ }
55
+ /**
56
+ * Return the label for a behavioral health score.
57
+ */
58
+ export function scoreLabel(score) {
59
+ if (score <= 30)
60
+ return 'Healthy';
61
+ if (score <= 60)
62
+ return 'Watch';
63
+ return 'Concerning';
64
+ }
65
+ /**
66
+ * Format a full behavioral profile as a human-readable string.
67
+ */
68
+ export function formatBehavioralProfile(profile) {
69
+ const lines = [];
70
+ lines.push('');
71
+ lines.push(chalk.bold.cyan(` Behavioral Profile: ${profile.traderId}`));
72
+ lines.push(chalk.gray(` Period: ${profile.period}`));
73
+ lines.push(chalk.gray(' ' + '\u2500'.repeat(50)));
74
+ lines.push('');
75
+ // Overall score with color coding
76
+ lines.push(` ${chalk.gray('Overall Score:')} ${colorScore(profile.overallScore)} / 100 ${chalk.dim(`(${scoreLabel(profile.overallScore)})`)}`);
77
+ lines.push(` ${chalk.gray('Commitment Honor:')} ${colorHonorRate(profile.commitmentHonorRate)}`);
78
+ lines.push('');
79
+ // Pattern breakdown table
80
+ lines.push(chalk.bold(' Pattern Breakdown:'));
81
+ lines.push('');
82
+ lines.push(' ' +
83
+ padRight('Pattern', 22) +
84
+ padRight('Count', 8) +
85
+ 'Status');
86
+ lines.push(' ' + '\u2500'.repeat(50));
87
+ const patterns = [
88
+ { name: 'Revenge Trades', count: profile.revengeTradeCount, threshold: 2 },
89
+ { name: 'FOMO Entries', count: profile.fomoEntryCount, threshold: 3 },
90
+ { name: 'Overtrading Days', count: profile.overtradingDays, threshold: 3 },
91
+ { name: 'Stop Violations', count: profile.stopViolationCount, threshold: 1 },
92
+ { name: 'Tilt Cascades', count: profile.tiltCascadeCount, threshold: 1 },
93
+ ];
94
+ for (const p of patterns) {
95
+ const countStr = String(p.count);
96
+ const status = p.count === 0
97
+ ? chalk.green('OK')
98
+ : p.count <= p.threshold
99
+ ? chalk.yellow('Watch')
100
+ : chalk.red('Action needed');
101
+ lines.push(' ' +
102
+ padRight(p.name, 22) +
103
+ padRight(countStr, 8) +
104
+ status);
105
+ }
106
+ lines.push('');
107
+ return lines.join('\n');
108
+ }
109
+ /**
110
+ * Format a list of decisions with behavioral flags.
111
+ */
112
+ export function formatBehavioralFlags(decisions) {
113
+ const lines = [];
114
+ lines.push('');
115
+ lines.push(chalk.bold.cyan(' Decisions with Behavioral Flags'));
116
+ lines.push(chalk.gray(' ' + '\u2500'.repeat(80)));
117
+ lines.push('');
118
+ if (decisions.length === 0) {
119
+ lines.push(` ${chalk.dim('No decisions with behavioral flags found.')}`);
120
+ lines.push('');
121
+ return lines.join('\n');
122
+ }
123
+ // Header
124
+ lines.push(' ' +
125
+ padRight('Date', 14) +
126
+ padRight('Token', 8) +
127
+ padRight('Type', 14) +
128
+ 'Flags');
129
+ lines.push(' ' + '\u2500'.repeat(80));
130
+ for (const d of decisions) {
131
+ const date = formatShortDate(d.eventTime);
132
+ const flags = d.behavioralFlags.map(colorFlag).join(', ');
133
+ lines.push(' ' +
134
+ padRight(date, 14) +
135
+ padRight(d.tokenSymbol, 8) +
136
+ padRight(d.decisionType, 14) +
137
+ flags);
138
+ }
139
+ lines.push('');
140
+ lines.push(` ${chalk.gray(`Total: ${decisions.length} flagged decision(s)`)}`);
141
+ lines.push('');
142
+ return lines.join('\n');
143
+ }
144
+ /**
145
+ * Format a pattern cost analysis as a human-readable table.
146
+ */
147
+ export function formatCostAnalysis(analysis, period) {
148
+ const lines = [];
149
+ lines.push('');
150
+ lines.push(chalk.bold.cyan(' Behavioral Cost Analysis'));
151
+ lines.push(chalk.gray(` Period: ${period}`));
152
+ lines.push(chalk.gray(' ' + '\u2500'.repeat(70)));
153
+ lines.push('');
154
+ if (analysis.entries.length === 0) {
155
+ lines.push(` ${chalk.green('No behavioral patterns detected in this period.')}`);
156
+ lines.push('');
157
+ return lines.join('\n');
158
+ }
159
+ // Header
160
+ lines.push(' ' +
161
+ padRight('Pattern', 20) +
162
+ padRight('Count', 8) +
163
+ padRight('Cost', 12) +
164
+ padRight('Win Rate', 10) +
165
+ 'vs Baseline');
166
+ lines.push(' ' + '\u2500'.repeat(70));
167
+ const baselinePct = `${(analysis.baselineWinRate * 100).toFixed(0)}%`;
168
+ for (const entry of analysis.entries) {
169
+ const name = patternDisplayName(entry.pattern);
170
+ const costStr = formatUsd(entry.totalCost);
171
+ const winRateStr = `${(entry.winRate * 100).toFixed(0)}%`;
172
+ const costColor = entry.totalCost < 0 ? chalk.red(costStr) : chalk.green(costStr);
173
+ lines.push(' ' +
174
+ padRight(name, 20) +
175
+ padRight(String(entry.occurrences), 8) +
176
+ padRight(costColor, 12 + 10) + // chalk adds escape chars
177
+ padRight(winRateStr, 10) +
178
+ chalk.dim(`${baselinePct} baseline`));
179
+ }
180
+ lines.push(' ' + '\u2500'.repeat(70));
181
+ lines.push('');
182
+ // Summary
183
+ const totalCostStr = formatUsd(analysis.totalBehavioralCost);
184
+ const totalCostColor = analysis.totalBehavioralCost < 0
185
+ ? chalk.red(totalCostStr)
186
+ : chalk.green(totalCostStr);
187
+ lines.push(` ${chalk.gray('Total behavioral cost:')} ${totalCostColor}`);
188
+ const diff = analysis.pnlWithoutBehavioralTrades - analysis.totalPnl;
189
+ if (diff > 0) {
190
+ lines.push(` ${chalk.gray('Without these patterns, your PnL would be')} ${chalk.green(formatUsd(analysis.pnlWithoutBehavioralTrades))} ${chalk.gray('instead of')} ${formatUsd(analysis.totalPnl)}`);
191
+ }
192
+ lines.push('');
193
+ return lines.join('\n');
194
+ }
195
+ /**
196
+ * Display name for a behavioral pattern.
197
+ */
198
+ function patternDisplayName(pattern) {
199
+ switch (pattern) {
200
+ case BehavioralPatternValues.REVENGE_TRADING: return 'Revenge Trading';
201
+ case BehavioralPatternValues.FOMO_ENTRY: return 'FOMO Entry';
202
+ case BehavioralPatternValues.OVERTRADING: return 'Overtrading';
203
+ case BehavioralPatternValues.STOP_VIOLATION: return 'Stop Violation';
204
+ case BehavioralPatternValues.TILT_CASCADE: return 'Tilt Cascade';
205
+ default: return pattern;
206
+ }
207
+ }
208
+ /**
209
+ * Format a USD amount.
210
+ */
211
+ function formatUsd(amount) {
212
+ const sign = amount >= 0 ? '+' : '-';
213
+ return `${sign}$${Math.abs(amount).toFixed(2)}`;
214
+ }
215
+ /**
216
+ * Color-code a behavioral flag name.
217
+ */
218
+ function colorFlag(flag) {
219
+ switch (flag) {
220
+ case BehavioralPatternValues.REVENGE_TRADING:
221
+ return chalk.red('REVENGE_TRADING');
222
+ case BehavioralPatternValues.TILT_CASCADE:
223
+ return chalk.red('TILT_CASCADE');
224
+ case BehavioralPatternValues.STOP_VIOLATION:
225
+ return chalk.red('STOP_VIOLATION');
226
+ case BehavioralPatternValues.FOMO_ENTRY:
227
+ return chalk.yellow('FOMO_ENTRY');
228
+ case BehavioralPatternValues.OVERTRADING:
229
+ return chalk.yellow('OVERTRADING');
230
+ default:
231
+ return chalk.dim(flag);
232
+ }
233
+ }
234
+ // ─── Command Registration ───
235
+ export function registerBehavioralCommand(program) {
236
+ const behavioral = program
237
+ .command('behavioral')
238
+ .description('Behavioral pattern analysis commands');
239
+ // ─── behavioral profile ───
240
+ behavioral
241
+ .command('profile')
242
+ .description('Show behavioral profile (revenge trades, FOMO rate, commitment honor rate)')
243
+ .option('--period <period>', 'Analysis period (e.g., 7d, 30d, 90d)', '30d')
244
+ .option('--trader <traderId>', 'Trader ID', DEFAULT_TRADER_ID)
245
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
246
+ .action(async (options) => {
247
+ const periodDays = parsePeriodDays(options.period);
248
+ try {
249
+ const response = await apiRequest(`/api/v1/behavioral/profile?traderId=${encodeURIComponent(options.trader)}&days=${periodDays}`);
250
+ const profile = response.profile;
251
+ if (options.format === 'json') {
252
+ console.log(JSON.stringify(profile, null, 2));
253
+ }
254
+ else {
255
+ console.log(formatBehavioralProfile(profile));
256
+ }
257
+ }
258
+ catch (error) {
259
+ const message = error instanceof Error ? error.message : String(error);
260
+ logger.error({ error: message }, 'Failed to compute behavioral profile');
261
+ console.error(chalk.red(`Error: ${message}`));
262
+ if (!(error instanceof ApiError)) {
263
+ const guidance = formatConnectionError(message);
264
+ if (guidance)
265
+ console.error(guidance);
266
+ }
267
+ process.exitCode = error instanceof ApiError ? 2 : 1;
268
+ }
269
+ });
270
+ // ─── behavioral flags ───
271
+ behavioral
272
+ .command('flags')
273
+ .description('Show recent decisions with behavioral flags')
274
+ .option('--limit <n>', 'Maximum number of results', parseIntOption, 20)
275
+ .option('--trader <traderId>', 'Trader ID', DEFAULT_TRADER_ID)
276
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
277
+ .action(async (options) => {
278
+ try {
279
+ const response = await apiRequest(`/api/v1/behavioral/flags?traderId=${encodeURIComponent(options.trader)}`);
280
+ // Map API flag detections to the format the formatter expects
281
+ const flagged = (response.flags ?? []).map((f) => ({
282
+ id: f.id ?? '',
283
+ eventTime: f.eventTime ?? '',
284
+ tokenSymbol: f.tokenSymbol ?? '',
285
+ decisionType: f.decisionType ?? f.pattern ?? '',
286
+ behavioralFlags: f.behavioralFlags ?? [f.pattern].filter(Boolean),
287
+ }));
288
+ const limited = flagged.slice(0, options.limit);
289
+ if (options.format === 'json') {
290
+ console.log(JSON.stringify(limited, null, 2));
291
+ }
292
+ else {
293
+ console.log(formatBehavioralFlags(limited));
294
+ }
295
+ }
296
+ catch (error) {
297
+ const message = error instanceof Error ? error.message : String(error);
298
+ logger.error({ error: message }, 'Failed to fetch behavioral flags');
299
+ console.error(chalk.red(`Error: ${message}`));
300
+ if (!(error instanceof ApiError)) {
301
+ const guidance = formatConnectionError(message);
302
+ if (guidance)
303
+ console.error(guidance);
304
+ }
305
+ process.exitCode = error instanceof ApiError ? 2 : 1;
306
+ }
307
+ });
308
+ // ─── behavioral costs ───
309
+ behavioral
310
+ .command('costs')
311
+ .description('Show behavioral cost analysis — how much each pattern costs you')
312
+ .option('--period <period>', 'Analysis period (e.g., 7d, 30d, 90d)', '30d')
313
+ .option('--trader <traderId>', 'Trader ID', DEFAULT_TRADER_ID)
314
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
315
+ .action(async (options) => {
316
+ const periodDays = parsePeriodDays(options.period);
317
+ try {
318
+ const response = await apiRequest(`/api/v1/behavioral/costs?traderId=${encodeURIComponent(options.trader)}&days=${periodDays}`);
319
+ const costAnalysis = response.costs;
320
+ if (options.format === 'json') {
321
+ console.log(JSON.stringify(costAnalysis, null, 2));
322
+ }
323
+ else {
324
+ console.log(formatCostAnalysis(costAnalysis, `${periodDays}d`));
325
+ }
326
+ }
327
+ catch (error) {
328
+ const message = error instanceof Error ? error.message : String(error);
329
+ logger.error({ error: message }, 'Failed to compute behavioral costs');
330
+ console.error(chalk.red(`Error: ${message}`));
331
+ if (!(error instanceof ApiError)) {
332
+ const guidance = formatConnectionError(message);
333
+ if (guidance)
334
+ console.error(guidance);
335
+ }
336
+ process.exitCode = error instanceof ApiError ? 2 : 1;
337
+ }
338
+ });
339
+ }
340
+ // ─── Helpers ───
341
+ function formatShortDate(isoString) {
342
+ try {
343
+ return new Date(isoString).toISOString().slice(0, 10);
344
+ }
345
+ catch {
346
+ return isoString;
347
+ }
348
+ }
349
+ //# sourceMappingURL=behavioral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"behavioral.js","sourceRoot":"","sources":["../../src/commands/behavioral.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerBenchmarkCommand(program: Command): void;
3
+ //# sourceMappingURL=benchmark-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/benchmark-cmd.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAgK5C,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiG/D"}
@@ -0,0 +1,196 @@
1
+ // ─── Benchmark CLI Command ───
2
+ //
3
+ // trading-boy benchmark # Leaderboard (30d, Sharpe)
4
+ // trading-boy benchmark --window 90d # 90-day window
5
+ // trading-boy benchmark --sort winRate # Sort by win rate
6
+ // trading-boy benchmark --setup BREAKOUT # Filter by setup
7
+ // trading-boy benchmark --entity <id> # Single entity
8
+ // trading-boy benchmark recompute # Trigger recompute
9
+ import { Option } from 'commander';
10
+ import chalk from 'chalk';
11
+ import { isRemoteMode, apiRequest, ApiError } from '../api-client.js';
12
+ // ─── Formatters ───
13
+ function formatMetric(value, decimals = 2) {
14
+ if (value === null)
15
+ return chalk.dim('—');
16
+ const str = value.toFixed(decimals);
17
+ if (value > 0)
18
+ return chalk.green(str);
19
+ if (value < 0)
20
+ return chalk.red(str);
21
+ return str;
22
+ }
23
+ function formatPct(value, decimals = 1) {
24
+ const str = `${(value * 100).toFixed(decimals)}%`;
25
+ if (value > 0.5)
26
+ return chalk.green(str);
27
+ if (value < 0.3)
28
+ return chalk.red(str);
29
+ return chalk.yellow(str);
30
+ }
31
+ function formatDuration(ms) {
32
+ if (ms === null)
33
+ return chalk.dim('—');
34
+ const hours = ms / (1000 * 60 * 60);
35
+ if (hours < 1)
36
+ return `${(ms / (1000 * 60)).toFixed(0)}m`;
37
+ if (hours < 24)
38
+ return `${hours.toFixed(1)}h`;
39
+ return `${(hours / 24).toFixed(1)}d`;
40
+ }
41
+ function formatLeaderboard(data) {
42
+ const lines = [];
43
+ lines.push('');
44
+ lines.push(chalk.bold.cyan(` Benchmark Leaderboard — ${data.window} / ${data.sortBy}`));
45
+ lines.push(chalk.gray(` ${data.total} entities ranked`));
46
+ lines.push(chalk.gray(' ' + '─'.repeat(90)));
47
+ if (data.entries.length === 0) {
48
+ lines.push(` ${chalk.dim('No benchmark data available. Run `trading-boy benchmark recompute` first.')}`);
49
+ lines.push('');
50
+ return lines.join('\n');
51
+ }
52
+ // Header
53
+ lines.push(` ${chalk.gray('#'.padEnd(4))}` +
54
+ `${chalk.gray('Entity'.padEnd(20))}` +
55
+ `${chalk.gray('Sharpe'.padStart(8))}` +
56
+ `${chalk.gray('Sortino'.padStart(9))}` +
57
+ `${chalk.gray('MaxDD'.padStart(8))}` +
58
+ `${chalk.gray('PF'.padStart(7))}` +
59
+ `${chalk.gray('WinRate'.padStart(9))}` +
60
+ `${chalk.gray('Return'.padStart(9))}` +
61
+ `${chalk.gray('Trades'.padStart(8))}`);
62
+ lines.push(chalk.gray(' ' + '─'.repeat(90)));
63
+ for (const entry of data.entries) {
64
+ const entityLabel = (entry.publicAlias ?? entry.entityId).substring(0, 18);
65
+ lines.push(` ${String(entry.rank).padEnd(4)}` +
66
+ `${entityLabel.padEnd(20)}` +
67
+ `${formatMetric(entry.sharpeRatio).padStart(8)}` +
68
+ `${formatMetric(entry.sortinoRatio).padStart(9)}` +
69
+ `${formatMetric(entry.maxDrawdownPct, 1).padStart(8)}` +
70
+ `${formatMetric(entry.profitFactor).padStart(7)}` +
71
+ `${formatPct(entry.winRate).padStart(9)}` +
72
+ `${formatMetric(entry.totalReturnPct, 1).padStart(9)}` +
73
+ `${String(entry.totalTrades).padStart(8)}`);
74
+ }
75
+ lines.push('');
76
+ return lines.join('\n');
77
+ }
78
+ function formatSingleEntity(snapshot) {
79
+ const lines = [];
80
+ lines.push('');
81
+ lines.push(chalk.bold.cyan(` Benchmark — ${snapshot.entityId}`));
82
+ lines.push(chalk.gray(` ${snapshot.entityType} / ${snapshot.window}`));
83
+ lines.push(chalk.gray(' ' + '─'.repeat(50)));
84
+ lines.push(` ${chalk.gray('Sharpe Ratio:')} ${formatMetric(snapshot.sharpeRatio)}`);
85
+ lines.push(` ${chalk.gray('Sortino Ratio:')} ${formatMetric(snapshot.sortinoRatio)}`);
86
+ lines.push(` ${chalk.gray('Max Drawdown:')} ${formatMetric(snapshot.maxDrawdownPct, 1)}%`);
87
+ lines.push(` ${chalk.gray('Calmar Ratio:')} ${formatMetric(snapshot.calmarRatio)}`);
88
+ lines.push(` ${chalk.gray('Profit Factor:')} ${formatMetric(snapshot.profitFactor)}`);
89
+ lines.push(` ${chalk.gray('Win Rate:')} ${formatPct(snapshot.winRate)}`);
90
+ lines.push(` ${chalk.gray('Total Return:')} ${formatMetric(snapshot.totalReturnPct, 1)}%`);
91
+ lines.push(` ${chalk.gray('TWR:')} ${formatMetric(snapshot.timeWeightedReturn, 1)}%`);
92
+ lines.push('');
93
+ lines.push(` ${chalk.gray('Total Trades:')} ${snapshot.totalTrades}`);
94
+ lines.push(` ${chalk.gray('Avg Reward:')} ${formatMetric(snapshot.avgCompositeReward)}`);
95
+ lines.push(` ${chalk.gray('Avg Edge Ratio:')} ${formatMetric(snapshot.avgEdgeRatio, 3)}`);
96
+ lines.push(` ${chalk.gray('Avg Hold Time:')} ${formatDuration(snapshot.avgHoldDurationMs)}`);
97
+ lines.push(` ${chalk.gray('Flag Rate:')} ${formatPct(snapshot.behavioralFlagRate)}`);
98
+ lines.push(` ${chalk.gray('Commitment Honor:')} ${snapshot.commitmentHonorRate !== null ? formatPct(snapshot.commitmentHonorRate) : chalk.dim('—')}`);
99
+ lines.push('');
100
+ return lines.join('\n');
101
+ }
102
+ // ─── Command Registration ───
103
+ export function registerBenchmarkCommand(program) {
104
+ const benchCmd = program
105
+ .command('benchmark')
106
+ .description('View benchmark leaderboard and performance metrics')
107
+ .addOption(new Option('--window <window>', 'Time window').choices(['7d', '30d', '90d', 'all']).default('30d'))
108
+ .addOption(new Option('--sort <field>', 'Sort leaderboard by').choices([
109
+ 'sharpeRatio', 'sortinoRatio', 'maxDrawdown', 'calmarRatio',
110
+ 'profitFactor', 'winRate', 'totalReturn', 'timeWeightedReturn',
111
+ ]).default('sharpeRatio'))
112
+ .addOption(new Option('--entity-type <type>', 'Entity type').choices(['trader', 'agent', 'strategy']).default('trader'))
113
+ .option('--setup <setupType>', 'Filter by setup type')
114
+ .option('--regime <regime>', 'Filter by market regime')
115
+ .option('--token <symbol>', 'Filter by token symbol')
116
+ .option('--entity <entityId>', 'Show single entity benchmark')
117
+ .option('--limit <n>', 'Number of entries', '20')
118
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
119
+ .action(async (options) => {
120
+ try {
121
+ if (!(await isRemoteMode())) {
122
+ console.error(chalk.red('Error: benchmark command requires remote mode. Run `trading-boy login` first.'));
123
+ process.exitCode = 1;
124
+ return;
125
+ }
126
+ if (options.entity) {
127
+ // Single entity
128
+ const query = new URLSearchParams();
129
+ query.set('window', options.window);
130
+ if (options.setup)
131
+ query.set('setupType', options.setup);
132
+ if (options.regime)
133
+ query.set('regime', options.regime);
134
+ if (options.token)
135
+ query.set('tokenSymbol', options.token.toUpperCase());
136
+ const data = await apiRequest(`/api/v1/benchmark/${encodeURIComponent(options.entity)}?${query.toString()}`);
137
+ if (options.format === 'json') {
138
+ console.log(JSON.stringify(data.snapshot, null, 2));
139
+ }
140
+ else {
141
+ console.log(formatSingleEntity(data.snapshot));
142
+ }
143
+ }
144
+ else {
145
+ // Leaderboard
146
+ const query = new URLSearchParams();
147
+ query.set('window', options.window);
148
+ query.set('sortBy', options.sort);
149
+ query.set('entityType', options.entityType);
150
+ query.set('limit', options.limit);
151
+ if (options.setup)
152
+ query.set('setupType', options.setup);
153
+ if (options.regime)
154
+ query.set('regime', options.regime);
155
+ if (options.token)
156
+ query.set('tokenSymbol', options.token.toUpperCase());
157
+ const data = await apiRequest(`/api/v1/benchmark/leaderboard?${query.toString()}`);
158
+ if (options.format === 'json') {
159
+ console.log(JSON.stringify(data, null, 2));
160
+ }
161
+ else {
162
+ console.log(formatLeaderboard(data));
163
+ }
164
+ }
165
+ }
166
+ catch (error) {
167
+ const message = error instanceof ApiError ? error.message : (error instanceof Error ? error.message : String(error));
168
+ console.error(chalk.red(`Error: ${message}`));
169
+ process.exitCode = error instanceof ApiError ? 2 : 1;
170
+ }
171
+ });
172
+ // Subcommand: recompute
173
+ benchCmd
174
+ .command('recompute')
175
+ .description('Trigger on-demand benchmark recompute')
176
+ .action(async () => {
177
+ try {
178
+ if (!(await isRemoteMode())) {
179
+ console.error(chalk.red('Error: benchmark recompute requires remote mode. Run `trading-boy login` first.'));
180
+ process.exitCode = 1;
181
+ return;
182
+ }
183
+ console.log(chalk.dim('Recomputing benchmarks...'));
184
+ const data = await apiRequest('/api/v1/benchmark/recompute', { method: 'POST', body: {} });
185
+ console.log(chalk.green(`\n ${data.message}`));
186
+ console.log(chalk.dim(' Recompute runs in the background. Check leaderboard shortly.'));
187
+ console.log('');
188
+ }
189
+ catch (error) {
190
+ const message = error instanceof ApiError ? error.message : (error instanceof Error ? error.message : String(error));
191
+ console.error(chalk.red(`Error: ${message}`));
192
+ process.exitCode = error instanceof ApiError ? 2 : 1;
193
+ }
194
+ });
195
+ }
196
+ //# sourceMappingURL=benchmark-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark-cmd.js","sourceRoot":"","sources":["../../src/commands/benchmark-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Command } from 'commander';
2
+ export interface BillingStatusResponse {
3
+ email: string;
4
+ plan: string;
5
+ status: string;
6
+ keyPrefix?: string;
7
+ nextBillingDate?: string;
8
+ currentPeriodEnd?: string;
9
+ }
10
+ export declare function formatBillingStatus(status: BillingStatusResponse): string;
11
+ export declare function registerBillingCommand(program: Command): void;
12
+ //# sourceMappingURL=billing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/commands/billing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAc5C,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AA4BD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAmCzE;AAID,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyD7D"}