@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,43 @@
1
+ import { Command } from 'commander';
2
+ interface ReplayTrade {
3
+ entryTime: string;
4
+ exitTime?: string;
5
+ direction: string;
6
+ setupType?: string;
7
+ entryPrice: number;
8
+ exitPrice?: number;
9
+ pnlPercent?: number;
10
+ pnlAbsolute?: number;
11
+ regime?: string;
12
+ }
13
+ interface ReplayRegimeBreakdown {
14
+ regime: string;
15
+ trades: number;
16
+ winRate: number;
17
+ avgPnlPercent: number;
18
+ }
19
+ interface ReplayResult {
20
+ jobId: string;
21
+ strategyId: string;
22
+ tokenSymbol: string;
23
+ from: string;
24
+ to: string;
25
+ status: 'COMPLETE' | 'FAILED';
26
+ error?: string;
27
+ summary?: {
28
+ totalTrades: number;
29
+ winRate: number;
30
+ avgPnlPercent: number;
31
+ totalPnlPercent: number;
32
+ maxDrawdownPercent: number;
33
+ sharpeRatio?: number;
34
+ profitFactor?: number;
35
+ };
36
+ regimeBreakdown?: ReplayRegimeBreakdown[];
37
+ trades?: ReplayTrade[];
38
+ completedAt?: string;
39
+ }
40
+ export declare function formatReplayResult(result: ReplayResult): string;
41
+ export declare function registerReplayCommand(program: Command): void;
42
+ export {};
43
+ //# sourceMappingURL=replay-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/replay-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAsB5C,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,qBAAqB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,eAAe,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC1C,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAsCD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAgE/D;AA+DD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgG5D"}
@@ -0,0 +1,215 @@
1
+ import { Option } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { createLogger } from '@trading-boy/core';
4
+ import { isRemoteMode, apiRequest, ApiError } from '../api-client.js';
5
+ import { padRight } from '../utils.js';
6
+ // ─── Logger ───
7
+ const logger = createLogger('cli-replay');
8
+ // ─── Helpers ───
9
+ function formatPercent(val) {
10
+ const sign = val >= 0 ? '+' : '';
11
+ const str = `${sign}${val.toFixed(2)}%`;
12
+ return val >= 0 ? chalk.green(str) : chalk.red(str);
13
+ }
14
+ function formatShortDate(isoString) {
15
+ try {
16
+ return new Date(isoString).toISOString().slice(0, 10);
17
+ }
18
+ catch {
19
+ return isoString;
20
+ }
21
+ }
22
+ // ─── Formatters ───
23
+ export function formatReplayResult(result) {
24
+ const lines = [];
25
+ lines.push('');
26
+ lines.push(chalk.bold.cyan(` Replay Results — ${result.tokenSymbol} (strategy: ${result.strategyId})`));
27
+ lines.push(chalk.gray(' ' + '─'.repeat(60)));
28
+ lines.push('');
29
+ if (result.status === 'FAILED') {
30
+ lines.push(chalk.red(` Replay failed: ${result.error ?? 'Unknown error'}`));
31
+ lines.push('');
32
+ return lines.join('\n');
33
+ }
34
+ lines.push(` ${chalk.gray('Period:')} ${formatShortDate(result.from)} → ${formatShortDate(result.to)}`);
35
+ if (result.completedAt) {
36
+ lines.push(` ${chalk.gray('Completed:')} ${chalk.dim(new Date(result.completedAt).toISOString().slice(0, 19).replace('T', ' '))}`);
37
+ }
38
+ if (result.summary) {
39
+ const s = result.summary;
40
+ lines.push('');
41
+ lines.push(chalk.bold(' Summary'));
42
+ lines.push(` ${chalk.gray('Total Trades:')} ${chalk.white(String(s.totalTrades))}`);
43
+ lines.push(` ${chalk.gray('Win Rate:')} ${formatWinRate(s.winRate)}`);
44
+ lines.push(` ${chalk.gray('Avg PnL %:')} ${formatPercent(s.avgPnlPercent)}`);
45
+ lines.push(` ${chalk.gray('Total PnL %:')} ${formatPercent(s.totalPnlPercent)}`);
46
+ lines.push(` ${chalk.gray('Max Drawdown:')} ${chalk.red('-' + Math.abs(s.maxDrawdownPercent).toFixed(2) + '%')}`);
47
+ if (s.sharpeRatio !== undefined) {
48
+ const sharpeColor = s.sharpeRatio >= 1.0 ? chalk.green : s.sharpeRatio >= 0.5 ? chalk.yellow : chalk.red;
49
+ lines.push(` ${chalk.gray('Sharpe Ratio:')} ${sharpeColor(s.sharpeRatio.toFixed(2))}`);
50
+ }
51
+ if (s.profitFactor !== undefined) {
52
+ const pfColor = s.profitFactor >= 1.5 ? chalk.green : s.profitFactor >= 1.0 ? chalk.yellow : chalk.red;
53
+ lines.push(` ${chalk.gray('Profit Factor:')} ${pfColor(s.profitFactor.toFixed(2))}`);
54
+ }
55
+ }
56
+ if (result.regimeBreakdown && result.regimeBreakdown.length > 0) {
57
+ lines.push('');
58
+ lines.push(chalk.bold(' Regime Breakdown'));
59
+ lines.push(' ' +
60
+ padRight('Regime', 20) +
61
+ padRight('Trades', 8) +
62
+ padRight('Win Rate', 10) +
63
+ 'Avg PnL %');
64
+ lines.push(chalk.gray(' ' + '─'.repeat(48)));
65
+ for (const r of result.regimeBreakdown) {
66
+ lines.push(' ' +
67
+ padRight(r.regime, 20) +
68
+ padRight(String(r.trades), 8) +
69
+ padRight(formatWinRate(r.winRate), 10) +
70
+ formatPercent(r.avgPnlPercent));
71
+ }
72
+ }
73
+ lines.push('');
74
+ return lines.join('\n');
75
+ }
76
+ function formatWinRate(rate) {
77
+ const str = `${(rate * 100).toFixed(1)}%`;
78
+ if (rate >= 0.6)
79
+ return chalk.green(str);
80
+ if (rate >= 0.4)
81
+ return chalk.yellow(str);
82
+ return chalk.red(str);
83
+ }
84
+ // ─── Polling ───
85
+ const POLL_INTERVAL_MS = 2000;
86
+ const POLL_TIMEOUT_MS = 60000;
87
+ async function pollReplayJob(jobId) {
88
+ const deadline = Date.now() + POLL_TIMEOUT_MS;
89
+ while (Date.now() < deadline) {
90
+ const status = await apiRequest(`/api/v1/replay/${encodeURIComponent(jobId)}`);
91
+ if (status.status === 'COMPLETE' || status.status === 'FAILED') {
92
+ return status;
93
+ }
94
+ // Wait before next poll
95
+ await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
96
+ }
97
+ throw new Error(`Replay job ${jobId} did not complete within ${POLL_TIMEOUT_MS / 1000}s timeout.`);
98
+ }
99
+ // ─── Error Handler ───
100
+ function handleApiError(error, context) {
101
+ if (error instanceof ApiError) {
102
+ switch (error.status) {
103
+ case 401:
104
+ console.error(chalk.red('Error: API key invalid or expired. Run `trading-boy login` to re-authenticate.'));
105
+ break;
106
+ case 403:
107
+ console.error(chalk.red('Error: Subscription inactive. Run `trading-boy billing manage` to update your billing.'));
108
+ break;
109
+ case 404:
110
+ console.error(chalk.red(`Error: Not found — ${error.message}`));
111
+ break;
112
+ case 422:
113
+ console.error(chalk.red(`Error: Validation failed — ${error.message}`));
114
+ break;
115
+ default:
116
+ console.error(chalk.red(`Error: ${error.message}`));
117
+ }
118
+ }
119
+ else {
120
+ const message = error instanceof Error ? error.message : String(error);
121
+ logger.error({ error: message }, context);
122
+ console.error(chalk.red(`Error: ${message}`));
123
+ }
124
+ process.exitCode = error instanceof ApiError ? 2 : 1;
125
+ }
126
+ // ─── Command Registration ───
127
+ export function registerReplayCommand(program) {
128
+ program
129
+ .command('replay')
130
+ .description('Run strategy replay (backtest) over a historical period')
131
+ .requiredOption('--strategy <id>', 'Strategy ID')
132
+ .requiredOption('--token <symbol>', 'Token symbol')
133
+ .requiredOption('--from <date>', 'Start date (ISO-8601, e.g. 2025-01-01)')
134
+ .requiredOption('--to <date>', 'End date (ISO-8601, e.g. 2025-03-01)')
135
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
136
+ .action(async (options) => {
137
+ if (!(await isRemoteMode())) {
138
+ console.error(chalk.yellow('Replay requires a remote API connection.'));
139
+ console.error(chalk.dim(' Run: trading-boy login'));
140
+ process.exitCode = 1;
141
+ return;
142
+ }
143
+ // Validate dates
144
+ const fromDate = new Date(options.from);
145
+ const toDate = new Date(options.to);
146
+ if (isNaN(fromDate.getTime())) {
147
+ console.error(chalk.red(`Error: Invalid --from date: ${options.from}`));
148
+ process.exitCode = 1;
149
+ return;
150
+ }
151
+ if (isNaN(toDate.getTime())) {
152
+ console.error(chalk.red(`Error: Invalid --to date: ${options.to}`));
153
+ process.exitCode = 1;
154
+ return;
155
+ }
156
+ if (fromDate >= toDate) {
157
+ console.error(chalk.red('Error: --from must be before --to'));
158
+ process.exitCode = 1;
159
+ return;
160
+ }
161
+ // Use createSpinner for TTY-aware spinners (silent when piped)
162
+ const { createSpinner } = await import('../utils.js');
163
+ // ─── Submit replay job ───
164
+ let jobId;
165
+ const submitSpinner = (await createSpinner('Submitting replay job…')).start();
166
+ try {
167
+ const submitted = await apiRequest('/api/v1/replay', {
168
+ method: 'POST',
169
+ body: {
170
+ strategyId: options.strategy,
171
+ tokenSymbol: options.token.toUpperCase(),
172
+ from: fromDate.toISOString(),
173
+ to: toDate.toISOString(),
174
+ },
175
+ });
176
+ jobId = submitted.jobId;
177
+ submitSpinner.succeed(chalk.dim(`Job submitted: ${jobId}`));
178
+ }
179
+ catch (error) {
180
+ submitSpinner.fail('Failed to submit replay job');
181
+ handleApiError(error, 'Replay submit failed');
182
+ return;
183
+ }
184
+ // ─── Poll until complete ───
185
+ const pollSpinner = (await createSpinner('Running replay…')).start();
186
+ let finalStatus;
187
+ try {
188
+ finalStatus = await pollReplayJob(jobId);
189
+ pollSpinner.stop();
190
+ }
191
+ catch (error) {
192
+ pollSpinner.fail('Replay timed out or encountered an error');
193
+ handleApiError(error, 'Replay polling failed');
194
+ return;
195
+ }
196
+ // ─── Display results ───
197
+ if (!finalStatus.result) {
198
+ if (finalStatus.status === 'FAILED') {
199
+ console.error(chalk.red(`Error: Replay job failed — ${finalStatus.error ?? 'unknown error'}`));
200
+ }
201
+ else {
202
+ console.error(chalk.red('Error: Replay completed but returned no result data.'));
203
+ }
204
+ process.exitCode = 1;
205
+ return;
206
+ }
207
+ if (options.format === 'json') {
208
+ console.log(JSON.stringify(finalStatus.result, null, 2));
209
+ }
210
+ else {
211
+ console.log(formatReplayResult(finalStatus.result));
212
+ }
213
+ });
214
+ }
215
+ //# sourceMappingURL=replay-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-cmd.js","sourceRoot":"","sources":["../../src/commands/replay-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerReviewCommand(journal: Command): void;
3
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2apC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0J5D"}