@trading-boy/cli 0.1.0

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 (106) hide show
  1. package/README.md +8 -0
  2. package/dist/api-client.d.ts +20 -0
  3. package/dist/api-client.d.ts.map +1 -0
  4. package/dist/api-client.js +81 -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 +71 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/audit.d.ts +33 -0
  11. package/dist/commands/audit.d.ts.map +1 -0
  12. package/dist/commands/audit.js +135 -0
  13. package/dist/commands/audit.js.map +1 -0
  14. package/dist/commands/behavioral.d.ts +40 -0
  15. package/dist/commands/behavioral.d.ts.map +1 -0
  16. package/dist/commands/behavioral.js +369 -0
  17. package/dist/commands/behavioral.js.map +1 -0
  18. package/dist/commands/billing.d.ts +12 -0
  19. package/dist/commands/billing.d.ts.map +1 -0
  20. package/dist/commands/billing.js +111 -0
  21. package/dist/commands/billing.js.map +1 -0
  22. package/dist/commands/catalysts.d.ts +8 -0
  23. package/dist/commands/catalysts.d.ts.map +1 -0
  24. package/dist/commands/catalysts.js +192 -0
  25. package/dist/commands/catalysts.js.map +1 -0
  26. package/dist/commands/config-cmd.d.ts +30 -0
  27. package/dist/commands/config-cmd.d.ts.map +1 -0
  28. package/dist/commands/config-cmd.js +265 -0
  29. package/dist/commands/config-cmd.js.map +1 -0
  30. package/dist/commands/context.d.ts +40 -0
  31. package/dist/commands/context.d.ts.map +1 -0
  32. package/dist/commands/context.js +385 -0
  33. package/dist/commands/context.js.map +1 -0
  34. package/dist/commands/decisions.d.ts +21 -0
  35. package/dist/commands/decisions.d.ts.map +1 -0
  36. package/dist/commands/decisions.js +327 -0
  37. package/dist/commands/decisions.js.map +1 -0
  38. package/dist/commands/events.d.ts +3 -0
  39. package/dist/commands/events.d.ts.map +1 -0
  40. package/dist/commands/events.js +201 -0
  41. package/dist/commands/events.js.map +1 -0
  42. package/dist/commands/infra.d.ts +22 -0
  43. package/dist/commands/infra.d.ts.map +1 -0
  44. package/dist/commands/infra.js +228 -0
  45. package/dist/commands/infra.js.map +1 -0
  46. package/dist/commands/journal.d.ts +3 -0
  47. package/dist/commands/journal.d.ts.map +1 -0
  48. package/dist/commands/journal.js +616 -0
  49. package/dist/commands/journal.js.map +1 -0
  50. package/dist/commands/login.d.ts +18 -0
  51. package/dist/commands/login.d.ts.map +1 -0
  52. package/dist/commands/login.js +121 -0
  53. package/dist/commands/login.js.map +1 -0
  54. package/dist/commands/logout.d.ts +7 -0
  55. package/dist/commands/logout.d.ts.map +1 -0
  56. package/dist/commands/logout.js +39 -0
  57. package/dist/commands/logout.js.map +1 -0
  58. package/dist/commands/narratives.d.ts +3 -0
  59. package/dist/commands/narratives.d.ts.map +1 -0
  60. package/dist/commands/narratives.js +336 -0
  61. package/dist/commands/narratives.js.map +1 -0
  62. package/dist/commands/query.d.ts +39 -0
  63. package/dist/commands/query.d.ts.map +1 -0
  64. package/dist/commands/query.js +212 -0
  65. package/dist/commands/query.js.map +1 -0
  66. package/dist/commands/review.d.ts +3 -0
  67. package/dist/commands/review.d.ts.map +1 -0
  68. package/dist/commands/review.js +481 -0
  69. package/dist/commands/review.js.map +1 -0
  70. package/dist/commands/risk.d.ts +19 -0
  71. package/dist/commands/risk.d.ts.map +1 -0
  72. package/dist/commands/risk.js +190 -0
  73. package/dist/commands/risk.js.map +1 -0
  74. package/dist/commands/social.d.ts +9 -0
  75. package/dist/commands/social.d.ts.map +1 -0
  76. package/dist/commands/social.js +386 -0
  77. package/dist/commands/social.js.map +1 -0
  78. package/dist/commands/subscribe.d.ts +45 -0
  79. package/dist/commands/subscribe.d.ts.map +1 -0
  80. package/dist/commands/subscribe.js +259 -0
  81. package/dist/commands/subscribe.js.map +1 -0
  82. package/dist/commands/trader.d.ts +12 -0
  83. package/dist/commands/trader.d.ts.map +1 -0
  84. package/dist/commands/trader.js +265 -0
  85. package/dist/commands/trader.js.map +1 -0
  86. package/dist/commands/watch.d.ts +26 -0
  87. package/dist/commands/watch.d.ts.map +1 -0
  88. package/dist/commands/watch.js +121 -0
  89. package/dist/commands/watch.js.map +1 -0
  90. package/dist/commands/whoami.d.ts +14 -0
  91. package/dist/commands/whoami.d.ts.map +1 -0
  92. package/dist/commands/whoami.js +73 -0
  93. package/dist/commands/whoami.js.map +1 -0
  94. package/dist/credentials.d.ts +18 -0
  95. package/dist/credentials.d.ts.map +1 -0
  96. package/dist/credentials.js +164 -0
  97. package/dist/credentials.js.map +1 -0
  98. package/dist/index.d.ts +33 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +28 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/utils.d.ts +6 -0
  103. package/dist/utils.d.ts.map +1 -0
  104. package/dist/utils.js +21 -0
  105. package/dist/utils.js.map +1 -0
  106. package/package.json +40 -0
@@ -0,0 +1,369 @@
1
+ import { Option } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { getConfig, createLogger } from '@trading-boy/core';
4
+ import { Neo4jClient, getDecisionChain } from '@trading-boy/graph-db';
5
+ import { computeBehavioralProfile, detectAllPatterns, computePatternCosts, BehavioralPattern, } from '@trading-boy/context-engine';
6
+ import { formatConnectionError } from '../utils.js';
7
+ // ─── Logger ───
8
+ const logger = createLogger('cli-behavioral');
9
+ // ─── Default Trader ───
10
+ const DEFAULT_TRADER_ID = 'default';
11
+ // ─── Neo4j Client Factory ───
12
+ function createNeo4jClient() {
13
+ const config = getConfig();
14
+ return new Neo4jClient({
15
+ uri: config.NEO4J_URI,
16
+ username: config.NEO4J_USER,
17
+ password: config.NEO4J_PASSWORD,
18
+ });
19
+ }
20
+ // ─── Period Parsing ───
21
+ /**
22
+ * Parse a period string like "30d", "7d", "90d" into days.
23
+ * Returns default 30 if the string cannot be parsed.
24
+ */
25
+ export function parsePeriodDays(period) {
26
+ const match = period.match(/^(\d+)d$/);
27
+ if (!match) {
28
+ return 30;
29
+ }
30
+ return parseInt(match[1], 10);
31
+ }
32
+ // ─── Formatters ───
33
+ /**
34
+ * Color-code a behavioral health score.
35
+ * 0-30: green (healthy), 31-60: yellow (watch), 61+: red (concerning)
36
+ */
37
+ export function colorScore(score) {
38
+ const str = String(score);
39
+ if (score <= 30)
40
+ return chalk.green(str);
41
+ if (score <= 60)
42
+ return chalk.yellow(str);
43
+ return chalk.red(str);
44
+ }
45
+ /**
46
+ * Format a commitment honor rate as a colored percentage.
47
+ */
48
+ export function colorHonorRate(rate) {
49
+ const pct = `${(rate * 100).toFixed(1)}%`;
50
+ if (rate >= 0.8)
51
+ return chalk.green(pct);
52
+ if (rate >= 0.5)
53
+ return chalk.yellow(pct);
54
+ return chalk.red(pct);
55
+ }
56
+ /**
57
+ * Return the label for a behavioral health score.
58
+ */
59
+ export function scoreLabel(score) {
60
+ if (score <= 30)
61
+ return 'Healthy';
62
+ if (score <= 60)
63
+ return 'Watch';
64
+ return 'Concerning';
65
+ }
66
+ /**
67
+ * Format a full behavioral profile as a human-readable string.
68
+ */
69
+ export function formatBehavioralProfile(profile) {
70
+ const lines = [];
71
+ lines.push('');
72
+ lines.push(chalk.bold.cyan(` Behavioral Profile: ${profile.traderId}`));
73
+ lines.push(chalk.gray(` Period: ${profile.period}`));
74
+ lines.push(chalk.gray(' ' + '\u2500'.repeat(50)));
75
+ lines.push('');
76
+ // Overall score with color coding
77
+ lines.push(` ${chalk.gray('Overall Score:')} ${colorScore(profile.overallScore)} / 100 ${chalk.dim(`(${scoreLabel(profile.overallScore)})`)}`);
78
+ lines.push(` ${chalk.gray('Commitment Honor:')} ${colorHonorRate(profile.commitmentHonorRate)}`);
79
+ lines.push('');
80
+ // Pattern breakdown table
81
+ lines.push(chalk.bold(' Pattern Breakdown:'));
82
+ lines.push('');
83
+ lines.push(' ' +
84
+ padRight('Pattern', 22) +
85
+ padRight('Count', 8) +
86
+ 'Status');
87
+ lines.push(' ' + '\u2500'.repeat(50));
88
+ const patterns = [
89
+ { name: 'Revenge Trades', count: profile.revengeTradeCount, threshold: 2 },
90
+ { name: 'FOMO Entries', count: profile.fomoEntryCount, threshold: 3 },
91
+ { name: 'Overtrading Days', count: profile.overtradingDays, threshold: 3 },
92
+ { name: 'Stop Violations', count: profile.stopViolationCount, threshold: 1 },
93
+ { name: 'Tilt Cascades', count: profile.tiltCascadeCount, threshold: 1 },
94
+ ];
95
+ for (const p of patterns) {
96
+ const countStr = String(p.count);
97
+ const status = p.count === 0
98
+ ? chalk.green('OK')
99
+ : p.count <= p.threshold
100
+ ? chalk.yellow('Watch')
101
+ : chalk.red('Action needed');
102
+ lines.push(' ' +
103
+ padRight(p.name, 22) +
104
+ padRight(countStr, 8) +
105
+ status);
106
+ }
107
+ lines.push('');
108
+ return lines.join('\n');
109
+ }
110
+ /**
111
+ * Format a list of decisions with behavioral flags.
112
+ */
113
+ export function formatBehavioralFlags(decisions) {
114
+ const lines = [];
115
+ lines.push('');
116
+ lines.push(chalk.bold.cyan(' Decisions with Behavioral Flags'));
117
+ lines.push(chalk.gray(' ' + '\u2500'.repeat(80)));
118
+ lines.push('');
119
+ if (decisions.length === 0) {
120
+ lines.push(` ${chalk.dim('No decisions with behavioral flags found.')}`);
121
+ lines.push('');
122
+ return lines.join('\n');
123
+ }
124
+ // Header
125
+ lines.push(' ' +
126
+ padRight('Date', 14) +
127
+ padRight('Token', 8) +
128
+ padRight('Type', 14) +
129
+ 'Flags');
130
+ lines.push(' ' + '\u2500'.repeat(80));
131
+ for (const d of decisions) {
132
+ const date = formatShortDate(d.eventTime);
133
+ const flags = d.behavioralFlags.map(colorFlag).join(', ');
134
+ lines.push(' ' +
135
+ padRight(date, 14) +
136
+ padRight(d.tokenSymbol, 8) +
137
+ padRight(d.decisionType, 14) +
138
+ flags);
139
+ }
140
+ lines.push('');
141
+ lines.push(` ${chalk.gray(`Total: ${decisions.length} flagged decision(s)`)}`);
142
+ lines.push('');
143
+ return lines.join('\n');
144
+ }
145
+ /**
146
+ * Format a pattern cost analysis as a human-readable table.
147
+ */
148
+ export function formatCostAnalysis(analysis, period) {
149
+ const lines = [];
150
+ lines.push('');
151
+ lines.push(chalk.bold.cyan(' Behavioral Cost Analysis'));
152
+ lines.push(chalk.gray(` Period: ${period}`));
153
+ lines.push(chalk.gray(' ' + '\u2500'.repeat(70)));
154
+ lines.push('');
155
+ if (analysis.entries.length === 0) {
156
+ lines.push(` ${chalk.green('No behavioral patterns detected in this period.')}`);
157
+ lines.push('');
158
+ return lines.join('\n');
159
+ }
160
+ // Header
161
+ lines.push(' ' +
162
+ padRight('Pattern', 20) +
163
+ padRight('Count', 8) +
164
+ padRight('Cost', 12) +
165
+ padRight('Win Rate', 10) +
166
+ 'vs Baseline');
167
+ lines.push(' ' + '\u2500'.repeat(70));
168
+ const baselinePct = `${(analysis.baselineWinRate * 100).toFixed(0)}%`;
169
+ for (const entry of analysis.entries) {
170
+ const name = patternDisplayName(entry.pattern);
171
+ const costStr = formatUsd(entry.totalCost);
172
+ const winRateStr = `${(entry.winRate * 100).toFixed(0)}%`;
173
+ const costColor = entry.totalCost < 0 ? chalk.red(costStr) : chalk.green(costStr);
174
+ lines.push(' ' +
175
+ padRight(name, 20) +
176
+ padRight(String(entry.occurrences), 8) +
177
+ padRight(costColor, 12 + 10) + // chalk adds escape chars
178
+ padRight(winRateStr, 10) +
179
+ chalk.dim(`${baselinePct} baseline`));
180
+ }
181
+ lines.push(' ' + '\u2500'.repeat(70));
182
+ lines.push('');
183
+ // Summary
184
+ const totalCostStr = formatUsd(analysis.totalBehavioralCost);
185
+ const totalCostColor = analysis.totalBehavioralCost < 0
186
+ ? chalk.red(totalCostStr)
187
+ : chalk.green(totalCostStr);
188
+ lines.push(` ${chalk.gray('Total behavioral cost:')} ${totalCostColor}`);
189
+ const diff = analysis.pnlWithoutBehavioralTrades - analysis.totalPnl;
190
+ if (diff > 0) {
191
+ lines.push(` ${chalk.gray('Without these patterns, your PnL would be')} ${chalk.green(formatUsd(analysis.pnlWithoutBehavioralTrades))} ${chalk.gray('instead of')} ${formatUsd(analysis.totalPnl)}`);
192
+ }
193
+ lines.push('');
194
+ return lines.join('\n');
195
+ }
196
+ /**
197
+ * Display name for a behavioral pattern.
198
+ */
199
+ function patternDisplayName(pattern) {
200
+ switch (pattern) {
201
+ case BehavioralPattern.REVENGE_TRADING: return 'Revenge Trading';
202
+ case BehavioralPattern.FOMO_ENTRY: return 'FOMO Entry';
203
+ case BehavioralPattern.OVERTRADING: return 'Overtrading';
204
+ case BehavioralPattern.STOP_VIOLATION: return 'Stop Violation';
205
+ case BehavioralPattern.TILT_CASCADE: return 'Tilt Cascade';
206
+ default: return pattern;
207
+ }
208
+ }
209
+ /**
210
+ * Format a USD amount.
211
+ */
212
+ function formatUsd(amount) {
213
+ const sign = amount >= 0 ? '+' : '-';
214
+ return `${sign}$${Math.abs(amount).toFixed(2)}`;
215
+ }
216
+ /**
217
+ * Color-code a behavioral flag name.
218
+ */
219
+ function colorFlag(flag) {
220
+ switch (flag) {
221
+ case BehavioralPattern.REVENGE_TRADING:
222
+ return chalk.red('REVENGE_TRADING');
223
+ case BehavioralPattern.TILT_CASCADE:
224
+ return chalk.red('TILT_CASCADE');
225
+ case BehavioralPattern.STOP_VIOLATION:
226
+ return chalk.red('STOP_VIOLATION');
227
+ case BehavioralPattern.FOMO_ENTRY:
228
+ return chalk.yellow('FOMO_ENTRY');
229
+ case BehavioralPattern.OVERTRADING:
230
+ return chalk.yellow('OVERTRADING');
231
+ default:
232
+ return chalk.dim(flag);
233
+ }
234
+ }
235
+ // ─── Command Registration ───
236
+ export function registerBehavioralCommand(program) {
237
+ const behavioral = program
238
+ .command('behavioral')
239
+ .description('Behavioral pattern analysis commands');
240
+ // ─── behavioral profile ───
241
+ behavioral
242
+ .command('profile')
243
+ .description('Show behavioral profile (revenge trades, FOMO rate, commitment honor rate)')
244
+ .option('--period <period>', 'Analysis period (e.g., 7d, 30d, 90d)', '30d')
245
+ .option('--trader <traderId>', 'Trader ID', DEFAULT_TRADER_ID)
246
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
247
+ .action(async (options) => {
248
+ const periodDays = parsePeriodDays(options.period);
249
+ const client = createNeo4jClient();
250
+ try {
251
+ await client.connect();
252
+ const profile = await computeBehavioralProfile(client, options.trader, periodDays);
253
+ if (options.format === 'json') {
254
+ console.log(JSON.stringify(profile, null, 2));
255
+ }
256
+ else {
257
+ console.log(formatBehavioralProfile(profile));
258
+ }
259
+ }
260
+ catch (error) {
261
+ const message = error instanceof Error ? error.message : String(error);
262
+ logger.error({ error: message }, 'Failed to compute behavioral profile');
263
+ console.error(chalk.red(`Error: ${message}`));
264
+ const guidance = formatConnectionError(message);
265
+ if (guidance)
266
+ console.error(guidance);
267
+ process.exitCode = 1;
268
+ }
269
+ finally {
270
+ await client.disconnect();
271
+ }
272
+ });
273
+ // ─── behavioral flags ───
274
+ behavioral
275
+ .command('flags')
276
+ .description('Show recent decisions with behavioral flags')
277
+ .option('--limit <n>', 'Maximum number of results', parseIntOption, 20)
278
+ .option('--trader <traderId>', 'Trader ID', DEFAULT_TRADER_ID)
279
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
280
+ .action(async (options) => {
281
+ const client = createNeo4jClient();
282
+ try {
283
+ await client.connect();
284
+ const allDecisions = await getDecisionChain(client, options.trader);
285
+ // Filter to decisions that have behavioral flags
286
+ const flagged = allDecisions
287
+ .filter((d) => d.behavioralFlags && d.behavioralFlags.length > 0)
288
+ .slice(0, options.limit);
289
+ if (options.format === 'json') {
290
+ console.log(JSON.stringify(flagged, null, 2));
291
+ }
292
+ else {
293
+ console.log(formatBehavioralFlags(flagged));
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
+ const guidance = formatConnectionError(message);
301
+ if (guidance)
302
+ console.error(guidance);
303
+ process.exitCode = 1;
304
+ }
305
+ finally {
306
+ await client.disconnect();
307
+ }
308
+ });
309
+ // ─── behavioral costs ───
310
+ behavioral
311
+ .command('costs')
312
+ .description('Show behavioral cost analysis — how much each pattern costs you')
313
+ .option('--period <period>', 'Analysis period (e.g., 7d, 30d, 90d)', '30d')
314
+ .option('--trader <traderId>', 'Trader ID', DEFAULT_TRADER_ID)
315
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
316
+ .action(async (options) => {
317
+ const periodDays = parsePeriodDays(options.period);
318
+ const client = createNeo4jClient();
319
+ try {
320
+ await client.connect();
321
+ const allDecisions = await getDecisionChain(client, options.trader);
322
+ // Filter to the rolling window
323
+ const cutoff = new Date();
324
+ cutoff.setDate(cutoff.getDate() - periodDays);
325
+ const cutoffMs = cutoff.getTime();
326
+ const windowDecisions = allDecisions.filter((d) => {
327
+ return new Date(d.eventTime).getTime() >= cutoffMs;
328
+ });
329
+ // Run pattern detection
330
+ const detections = detectAllPatterns(windowDecisions);
331
+ // Compute costs
332
+ const costAnalysis = computePatternCosts(windowDecisions, detections);
333
+ if (options.format === 'json') {
334
+ console.log(JSON.stringify(costAnalysis, null, 2));
335
+ }
336
+ else {
337
+ console.log(formatCostAnalysis(costAnalysis, `${periodDays}d`));
338
+ }
339
+ }
340
+ catch (error) {
341
+ const message = error instanceof Error ? error.message : String(error);
342
+ logger.error({ error: message }, 'Failed to compute behavioral costs');
343
+ console.error(chalk.red(`Error: ${message}`));
344
+ const guidance = formatConnectionError(message);
345
+ if (guidance)
346
+ console.error(guidance);
347
+ process.exitCode = 1;
348
+ }
349
+ finally {
350
+ await client.disconnect();
351
+ }
352
+ });
353
+ }
354
+ // ─── Helpers ───
355
+ function padRight(str, len) {
356
+ return str.length >= len ? str.slice(0, len) : str + ' '.repeat(len - str.length);
357
+ }
358
+ function parseIntOption(value) {
359
+ return parseInt(value, 10);
360
+ }
361
+ function formatShortDate(isoString) {
362
+ try {
363
+ return new Date(isoString).toISOString().slice(0, 10);
364
+ }
365
+ catch {
366
+ return isoString;
367
+ }
368
+ }
369
+ //# 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,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,EAAE,MAAM,WAAW,CAAC;AAapC,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;AAgCD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAmCzE;AAID,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmD7D"}
@@ -0,0 +1,111 @@
1
+ import chalk from 'chalk';
2
+ import { createLogger } from '@trading-boy/core';
3
+ import { apiRequest } from '../api-client.js';
4
+ const logger = createLogger('cli-billing');
5
+ // ─── Formatters ───
6
+ function formatStatusLabel(status) {
7
+ switch (status) {
8
+ case 'active':
9
+ case 'trialing':
10
+ return chalk.green(status);
11
+ case 'past_due':
12
+ return chalk.yellow(status);
13
+ case 'canceled':
14
+ case 'unpaid':
15
+ case 'incomplete_expired':
16
+ return chalk.red(status);
17
+ default:
18
+ return chalk.gray(status);
19
+ }
20
+ }
21
+ function formatDate(isoDate) {
22
+ return new Date(isoDate).toLocaleDateString('en-US', {
23
+ year: 'numeric',
24
+ month: 'short',
25
+ day: 'numeric',
26
+ });
27
+ }
28
+ function padRight(str, len) {
29
+ return str.length >= len ? str.slice(0, len) : str + ' '.repeat(len - str.length);
30
+ }
31
+ export function formatBillingStatus(status) {
32
+ const lines = [];
33
+ lines.push('');
34
+ lines.push(chalk.bold.cyan(' Billing Status'));
35
+ lines.push(chalk.gray(' ' + '\u2500'.repeat(50)));
36
+ lines.push('');
37
+ lines.push(` ${chalk.bold(padRight('Account:', 18))} ${status.email}`);
38
+ lines.push(` ${chalk.bold(padRight('Plan:', 18))} ${status.plan}`);
39
+ lines.push(` ${chalk.bold(padRight('Status:', 18))} ${formatStatusLabel(status.status)}`);
40
+ if (status.keyPrefix) {
41
+ lines.push(` ${chalk.bold(padRight('API Key:', 18))} ${status.keyPrefix}...`);
42
+ }
43
+ if (status.nextBillingDate) {
44
+ lines.push(` ${chalk.bold(padRight('Next billing:', 18))} ${formatDate(status.nextBillingDate)}`);
45
+ }
46
+ else if (status.currentPeriodEnd) {
47
+ lines.push(` ${chalk.bold(padRight('Period ends:', 18))} ${formatDate(status.currentPeriodEnd)}`);
48
+ }
49
+ lines.push('');
50
+ if (status.status === 'past_due') {
51
+ lines.push(chalk.yellow(' Warning: Payment is past due. Update your payment method:'));
52
+ lines.push(chalk.yellow(' Run: trading-boy billing manage'));
53
+ lines.push('');
54
+ }
55
+ else if (status.status === 'canceled' || status.status === 'unpaid') {
56
+ lines.push(chalk.red(' Your subscription is inactive.'));
57
+ lines.push(chalk.red(' Run: trading-boy subscribe -e <email> to resubscribe'));
58
+ lines.push('');
59
+ }
60
+ return lines.join('\n');
61
+ }
62
+ // ─── Command Registration ───
63
+ export function registerBillingCommand(program) {
64
+ const billingCmd = program
65
+ .command('billing')
66
+ .description('Subscription billing management');
67
+ // billing manage — open customer portal
68
+ billingCmd
69
+ .command('manage')
70
+ .description('Open Stripe Customer Portal to manage your subscription')
71
+ .action(async () => {
72
+ try {
73
+ const { default: ora } = await import('ora');
74
+ const spinner = ora(' Creating billing portal session...').start();
75
+ const result = await apiRequest('/api/v1/billing/portal', {
76
+ method: 'POST',
77
+ });
78
+ spinner.succeed(' Opening billing portal...');
79
+ const { default: open } = await import('open');
80
+ await open(result.url);
81
+ console.log('');
82
+ console.log(chalk.dim(' Billing portal opened in your browser.'));
83
+ console.log(chalk.dim(' If it didn\'t open, visit:'));
84
+ console.log(` ${chalk.cyan(result.url)}`);
85
+ console.log('');
86
+ }
87
+ catch (error) {
88
+ const message = error instanceof Error ? error.message : String(error);
89
+ logger.error({ error: message }, 'Billing portal failed');
90
+ console.error(chalk.red(` Error: ${message}`));
91
+ process.exitCode = 1;
92
+ }
93
+ });
94
+ // billing status — show current subscription
95
+ billingCmd
96
+ .command('status')
97
+ .description('Show your current subscription status')
98
+ .action(async () => {
99
+ try {
100
+ const result = await apiRequest('/api/v1/billing/status');
101
+ console.log(formatBillingStatus(result));
102
+ }
103
+ catch (error) {
104
+ const message = error instanceof Error ? error.message : String(error);
105
+ logger.error({ error: message }, 'Billing status failed');
106
+ console.error(chalk.red(` Error: ${message}`));
107
+ process.exitCode = 1;
108
+ }
109
+ });
110
+ }
111
+ //# sourceMappingURL=billing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/commands/billing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Command } from 'commander';
2
+ import { type EventRecord } from '@trading-boy/graph-db';
3
+ /**
4
+ * Format the catalysts list output.
5
+ */
6
+ export declare function formatCatalystsOutput(events: EventRecord[]): string;
7
+ export declare function registerCatalystsCommand(program: Command): void;
8
+ //# sourceMappingURL=catalysts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalysts.d.ts","sourceRoot":"","sources":["../../src/commands/catalysts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAI5C,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAC;AAkF/B;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAmDnE;AAID,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiE/D"}