@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,259 @@
1
+ import { Option } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { NarrativeStatus, } from '@trading-boy/core';
4
+ import { padRight, truncate } from '../utils.js';
5
+ import { apiRequest, ApiError } from '../api-client.js';
6
+ // ─── Helpers ───
7
+ const VALID_STATUSES = Object.values(NarrativeStatus);
8
+ // ─── Command Registration ───
9
+ export function registerNarrativeCommand(program) {
10
+ const narrative = program
11
+ .command('narrative')
12
+ .description('Manage market narratives');
13
+ // ─── narrative create ───
14
+ narrative
15
+ .command('create <name>')
16
+ .description('Create a new narrative')
17
+ .option('--status <status>', `Initial status (${VALID_STATUSES.join(', ')})`, 'EMERGING')
18
+ .option('--momentum <score>', 'Momentum score (0-100)', parseFloat, 0)
19
+ .option('--description <desc>', 'Narrative description')
20
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
21
+ .action(async (name, options) => {
22
+ // Validate non-empty name
23
+ if (!name.trim()) {
24
+ console.error('Error: Narrative name cannot be empty');
25
+ process.exitCode = 1;
26
+ return;
27
+ }
28
+ // Validate status
29
+ if (!VALID_STATUSES.includes(options.status)) {
30
+ console.error(`Error: Invalid status "${options.status}". Valid values: ${VALID_STATUSES.join(', ')}`);
31
+ process.exitCode = 1;
32
+ return;
33
+ }
34
+ // Validate momentum
35
+ if (isNaN(options.momentum) || options.momentum < 0 || options.momentum > 100) {
36
+ console.error('Error: Momentum score must be a number between 0 and 100');
37
+ process.exitCode = 1;
38
+ return;
39
+ }
40
+ try {
41
+ const result = await apiRequest('/api/v1/narratives', {
42
+ method: 'POST',
43
+ body: {
44
+ name: name.trim(),
45
+ status: options.status,
46
+ momentum: options.momentum,
47
+ description: options.description,
48
+ },
49
+ });
50
+ if (options.format === 'json') {
51
+ console.log(JSON.stringify(result, null, 2));
52
+ }
53
+ else {
54
+ console.log(`Narrative created: id=${result.id}`);
55
+ console.log(` Name: ${name}`);
56
+ console.log(` Status: ${options.status}`);
57
+ console.log(` Momentum: ${options.momentum}`);
58
+ if (options.description) {
59
+ console.log(` Description: ${options.description}`);
60
+ }
61
+ }
62
+ }
63
+ catch (error) {
64
+ if (error instanceof ApiError && error.status === 409) {
65
+ const body = error.body;
66
+ console.error(`Error: Narrative "${name.trim()}" already exists${body?.id ? ` (id=${body.id})` : ''}. Use "narrative update" to modify it.`);
67
+ }
68
+ else {
69
+ const message = error instanceof Error ? error.message : String(error);
70
+ console.error(`Error: ${message}`);
71
+ }
72
+ process.exitCode = error instanceof ApiError ? 2 : 1;
73
+ }
74
+ });
75
+ // ─── narrative update ───
76
+ narrative
77
+ .command('update <name>')
78
+ .description('Update an existing narrative')
79
+ .option('--status <status>', `New status (${VALID_STATUSES.join(', ')})`)
80
+ .option('--momentum <score>', 'New momentum score (0-100)', parseFloat)
81
+ .option('--description <desc>', 'New description')
82
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
83
+ .action(async (name, options) => {
84
+ // Validate status if provided
85
+ if (options.status && !VALID_STATUSES.includes(options.status)) {
86
+ console.error(`Error: Invalid status "${options.status}". Valid values: ${VALID_STATUSES.join(', ')}`);
87
+ process.exitCode = 1;
88
+ return;
89
+ }
90
+ // Validate momentum if provided
91
+ if (options.momentum !== undefined && (isNaN(options.momentum) || options.momentum < 0 || options.momentum > 100)) {
92
+ console.error('Error: Momentum score must be a number between 0 and 100');
93
+ process.exitCode = 1;
94
+ return;
95
+ }
96
+ // Must provide at least one update
97
+ if (!options.status && options.momentum === undefined && !options.description) {
98
+ console.error('Error: At least one of --status, --momentum, or --description must be provided');
99
+ process.exitCode = 1;
100
+ return;
101
+ }
102
+ try {
103
+ const result = await apiRequest(`/api/v1/narratives/${encodeURIComponent(name)}`, {
104
+ method: 'PATCH',
105
+ body: {
106
+ status: options.status,
107
+ momentum: options.momentum,
108
+ description: options.description,
109
+ },
110
+ });
111
+ if (options.format === 'json') {
112
+ console.log(JSON.stringify(result, null, 2));
113
+ }
114
+ else {
115
+ console.log(`Narrative updated: ${name}`);
116
+ console.log(` Status: ${result.status}`);
117
+ console.log(` Momentum: ${result.momentumScore}`);
118
+ if (result.description) {
119
+ console.log(` Description: ${result.description}`);
120
+ }
121
+ }
122
+ }
123
+ catch (error) {
124
+ if (error instanceof ApiError && error.status === 404) {
125
+ console.error(`Error: Narrative "${name}" not found`);
126
+ }
127
+ else {
128
+ const message = error instanceof Error ? error.message : String(error);
129
+ console.error(`Error: ${message}`);
130
+ }
131
+ process.exitCode = error instanceof ApiError ? 2 : 1;
132
+ }
133
+ });
134
+ // ─── narrative list ───
135
+ narrative
136
+ .command('list')
137
+ .description('List narratives')
138
+ .option('--status <status>', 'Filter by status')
139
+ .option('--limit <n>', 'Maximum number of results', parseInt, 20)
140
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
141
+ .action(async (options) => {
142
+ // Validate status if provided
143
+ if (options.status && !VALID_STATUSES.includes(options.status)) {
144
+ console.error(`Error: Invalid status "${options.status}". Valid values: ${VALID_STATUSES.join(', ')}`);
145
+ process.exitCode = 1;
146
+ return;
147
+ }
148
+ try {
149
+ const params = new URLSearchParams();
150
+ if (options.status)
151
+ params.set('status', options.status);
152
+ if (options.limit)
153
+ params.set('limit', String(options.limit));
154
+ const qs = params.toString() ? `?${params.toString()}` : '';
155
+ const result = await apiRequest(`/api/v1/narratives${qs}`);
156
+ const records = result.narratives ?? [];
157
+ if (records.length === 0) {
158
+ console.log('No narratives found.');
159
+ return;
160
+ }
161
+ if (options.format === 'json') {
162
+ console.log(JSON.stringify(records, null, 2));
163
+ return;
164
+ }
165
+ // Print formatted table (no token data available from this endpoint)
166
+ console.log('');
167
+ console.log(padRight('Name', 25) +
168
+ padRight('Status', 12) +
169
+ padRight('Momentum', 10));
170
+ console.log('-'.repeat(47));
171
+ for (const n of records) {
172
+ console.log(padRight(truncate(n.name, 23), 25) +
173
+ padRight(n.status, 12) +
174
+ padRight(String(n.momentumScore), 10));
175
+ }
176
+ console.log('');
177
+ console.log(`Total: ${records.length} narrative(s)`);
178
+ }
179
+ catch (error) {
180
+ const message = error instanceof ApiError ? error.message : (error instanceof Error ? error.message : String(error));
181
+ console.error(`Error: ${message}`);
182
+ process.exitCode = error instanceof ApiError ? 2 : 1;
183
+ }
184
+ });
185
+ // ─── narrative link ───
186
+ narrative
187
+ .command('link <token> <narrative>')
188
+ .description('Link a token to a narrative')
189
+ .option('--confidence <score>', 'Confidence score (0-1)', parseFloat, 0.5)
190
+ .action(async (token, narrativeName) => {
191
+ try {
192
+ const result = await apiRequest(`/api/v1/narratives/${encodeURIComponent(narrativeName)}/link`, { method: 'POST', body: { tokenSymbol: token.toUpperCase() } });
193
+ console.log(chalk.green(`\n ✓ Linked ${result.tokenSymbol} to narrative "${result.narrative}"\n`));
194
+ }
195
+ catch (error) {
196
+ const message = error instanceof ApiError ? error.message : (error instanceof Error ? error.message : String(error));
197
+ console.error(chalk.red(`Error: ${message}`));
198
+ process.exitCode = error instanceof ApiError ? 2 : 1;
199
+ }
200
+ });
201
+ // ─── narrative unlink ───
202
+ narrative
203
+ .command('unlink <token> <narrative>')
204
+ .description('Unlink a token from a narrative')
205
+ .action(async (token, narrativeName) => {
206
+ try {
207
+ const result = await apiRequest(`/api/v1/narratives/${encodeURIComponent(narrativeName)}/unlink`, { method: 'POST', body: { tokenSymbol: token.toUpperCase() } });
208
+ console.log(chalk.green(`\n ✓ Unlinked ${result.tokenSymbol} from narrative "${result.narrative}"\n`));
209
+ }
210
+ catch (error) {
211
+ const message = error instanceof ApiError ? error.message : (error instanceof Error ? error.message : String(error));
212
+ console.error(chalk.red(`Error: ${message}`));
213
+ process.exitCode = error instanceof ApiError ? 2 : 1;
214
+ }
215
+ });
216
+ // ─── narrative show ───
217
+ narrative
218
+ .command('show <name>')
219
+ .description('Show narrative details with linked tokens')
220
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
221
+ .action(async (name, options) => {
222
+ try {
223
+ const record = await apiRequest(`/api/v1/narratives/${encodeURIComponent(name)}`);
224
+ if (options.format === 'json') {
225
+ console.log(JSON.stringify(record, null, 2));
226
+ }
227
+ else {
228
+ console.log('');
229
+ console.log(`Narrative: ${record.name}`);
230
+ console.log(` ID: ${record.id}`);
231
+ console.log(` Status: ${record.status}`);
232
+ console.log(` Momentum: ${record.momentumScore}`);
233
+ if (record.description) {
234
+ console.log(` Description: ${record.description}`);
235
+ }
236
+ if (record.firstDetected) {
237
+ console.log(` First Detected: ${record.firstDetected}`);
238
+ }
239
+ if (record.peakDate) {
240
+ console.log(` Peak Date: ${record.peakDate}`);
241
+ }
242
+ console.log('');
243
+ console.log(' (Linked token details not yet available via API)');
244
+ }
245
+ }
246
+ catch (error) {
247
+ if (error instanceof ApiError && error.status === 404) {
248
+ console.error(`Error: Narrative "${name}" not found`);
249
+ }
250
+ else {
251
+ const message = error instanceof Error ? error.message : String(error);
252
+ console.error(`Error: ${message}`);
253
+ }
254
+ process.exitCode = error instanceof ApiError ? 2 : 1;
255
+ }
256
+ });
257
+ }
258
+ // LinkOptions removed — link now uses API directly
259
+ //# sourceMappingURL=narratives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"narratives.js","sourceRoot":"","sources":["../../src/commands/narratives.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Run the interactive onboarding wizard.
3
+ * Called after subscribe completes successfully.
4
+ * Gracefully handles Ctrl+C and skipped steps.
5
+ */
6
+ export declare function runOnboarding(): Promise<void>;
7
+ //# sourceMappingURL=onboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/commands/onboarding.ts"],"names":[],"mappings":"AAoBA;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA6GnD"}
@@ -0,0 +1,126 @@
1
+ // ─── Post-Subscribe Onboarding Wizard ───
2
+ //
3
+ // Guided setup after a new user subscribes. Walks through:
4
+ // 1. Register a trader profile (name + risk tolerance)
5
+ // 2. Connect Telegram bot for daily summaries
6
+ // 3. Next steps cheat sheet
7
+ import chalk from 'chalk';
8
+ import { isRemoteMode, apiRequest, ApiError } from '../api-client.js';
9
+ // ─── Onboarding Flow ───
10
+ /**
11
+ * Run the interactive onboarding wizard.
12
+ * Called after subscribe completes successfully.
13
+ * Gracefully handles Ctrl+C and skipped steps.
14
+ */
15
+ export async function runOnboarding() {
16
+ const { confirm, input } = await import('@inquirer/prompts');
17
+ console.log('');
18
+ console.log(chalk.bold.cyan(' Get Started'));
19
+ console.log(chalk.gray(' ' + '\u2500'.repeat(50)));
20
+ console.log(chalk.dim(' Let\u2019s set up your account. You can skip any step.'));
21
+ console.log('');
22
+ // ─── Step 1: Register Trader ───
23
+ let traderRegistered = false;
24
+ try {
25
+ const wantsTrader = await confirm({
26
+ message: 'Register your trader profile?',
27
+ default: true,
28
+ });
29
+ if (wantsTrader) {
30
+ const name = await input({
31
+ message: 'Trader name (your alias)',
32
+ default: 'default',
33
+ validate: (v) => (v.trim().length > 0 ? true : 'Name cannot be empty'),
34
+ });
35
+ const maxDrawdown = await input({
36
+ message: 'Max drawdown % (risk tolerance)',
37
+ default: '15',
38
+ validate: (v) => {
39
+ const n = parseFloat(v);
40
+ if (isNaN(n) || n <= 0 || n > 100)
41
+ return 'Enter a number between 1 and 100';
42
+ return true;
43
+ },
44
+ });
45
+ try {
46
+ if (await isRemoteMode()) {
47
+ const result = await apiRequest('/api/v1/traders', {
48
+ method: 'POST',
49
+ body: { name: name.trim(), riskToleranceMax: parseFloat(maxDrawdown) },
50
+ });
51
+ console.log(chalk.green(` \u2713 Trader "${result.name}" registered (id: ${result.id})`));
52
+ traderRegistered = true;
53
+ }
54
+ else {
55
+ console.log(chalk.yellow(' Skipped \u2014 not connected to API. Run: trading-boy trader register'));
56
+ }
57
+ }
58
+ catch (error) {
59
+ if (error instanceof ApiError && error.status === 409) {
60
+ console.log(chalk.green(' \u2713 Trader profile already exists.'));
61
+ traderRegistered = true;
62
+ }
63
+ else {
64
+ const msg = error instanceof Error ? error.message : String(error);
65
+ console.log(chalk.yellow(` Could not register trader: ${msg}`));
66
+ console.log(chalk.dim(' You can do this later: trading-boy trader register --name "YourName"'));
67
+ }
68
+ }
69
+ }
70
+ else {
71
+ console.log(chalk.dim(' Skipped. Run later: trading-boy trader register --name "YourName"'));
72
+ }
73
+ }
74
+ catch (error) {
75
+ if (isUserAbort(error))
76
+ return;
77
+ throw error;
78
+ }
79
+ console.log('');
80
+ // ─── Step 2: Telegram Bot ───
81
+ try {
82
+ const wantsTelegram = await confirm({
83
+ message: 'Connect Telegram for daily summaries?',
84
+ default: true,
85
+ });
86
+ if (wantsTelegram) {
87
+ console.log('');
88
+ console.log(chalk.white(' Open Telegram and message ') + chalk.cyan.bold('@TradingBoy1_Bot'));
89
+ console.log(chalk.white(' Send ') + chalk.cyan('/start') + chalk.white(' to connect your account.'));
90
+ console.log('');
91
+ console.log(chalk.dim(' The bot will send you a daily trading summary at 08:00 UTC.'));
92
+ console.log(chalk.dim(' You can also use /summary, /entry, /exit, /context, and /stats.'));
93
+ }
94
+ else {
95
+ console.log(chalk.dim(' Skipped. Message @TradingBoy1_Bot on Telegram anytime to connect.'));
96
+ }
97
+ }
98
+ catch (error) {
99
+ if (isUserAbort(error))
100
+ return;
101
+ throw error;
102
+ }
103
+ console.log('');
104
+ // ─── Step 3: Next Steps Cheat Sheet ───
105
+ console.log(chalk.bold.cyan(' Quick Reference'));
106
+ console.log(chalk.gray(' ' + '\u2500'.repeat(50)));
107
+ console.log('');
108
+ console.log(` ${chalk.white('trading-boy context SOL')} ${chalk.dim('Full context for any token')}`);
109
+ console.log(` ${chalk.white('trading-boy journal')} ${chalk.dim('Log a trade')}`);
110
+ console.log(` ${chalk.white('trading-boy decisions')} ${chalk.dim('View trade history')}`);
111
+ console.log(` ${chalk.white('trading-boy review daily')} ${chalk.dim('Daily performance review')}`);
112
+ console.log(` ${chalk.white('trading-boy narrative list')} ${chalk.dim('Active market narratives')}`);
113
+ console.log(` ${chalk.white('trading-boy catalysts')} ${chalk.dim('Upcoming events')}`);
114
+ if (traderRegistered) {
115
+ console.log(` ${chalk.white('trading-boy edge')} ${chalk.dim('Your edge profile')}`);
116
+ console.log(` ${chalk.white('trading-boy behavioral')} ${chalk.dim('Behavioral analysis')}`);
117
+ }
118
+ console.log('');
119
+ console.log(chalk.dim(' Full docs: https://api.cabal.ventures/docs'));
120
+ console.log('');
121
+ }
122
+ // ─── Helpers ───
123
+ function isUserAbort(error) {
124
+ return error instanceof Error && error.message.includes('User force closed');
125
+ }
126
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/commands/onboarding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Command } from 'commander';
2
+ interface TokenInfo {
3
+ name: string | null;
4
+ symbol: string;
5
+ chains: string[];
6
+ narratives: Array<{
7
+ name: string;
8
+ status: string;
9
+ }>;
10
+ }
11
+ interface PriceInfo {
12
+ price: number | null;
13
+ change24h: number | null;
14
+ lastUpdated: Date | null;
15
+ }
16
+ interface FundingInfo {
17
+ fundingRate: number | null;
18
+ lastUpdated: Date | null;
19
+ }
20
+ interface WhaleInfo {
21
+ count: number;
22
+ }
23
+ export interface QueryResult {
24
+ token: TokenInfo;
25
+ price: PriceInfo;
26
+ funding: FundingInfo;
27
+ whaleActivity: WhaleInfo;
28
+ }
29
+ export declare function formatQueryOutput(result: QueryResult): string;
30
+ export declare function registerQueryCommand(program: Command): void;
31
+ export {};
32
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAa5C,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAED,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE,SAAS,CAAC;CAC1B;AAID,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAoE7D;AA+BD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmC3D"}
@@ -0,0 +1,132 @@
1
+ import { Option } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { createLogger } from '@trading-boy/core';
4
+ import { formatConnectionError } from '../utils.js';
5
+ import { apiRequest, ApiError } from '../api-client.js';
6
+ // ─── Logger ───
7
+ const logger = createLogger('cli-query');
8
+ // ─── Formatter ───
9
+ export function formatQueryOutput(result) {
10
+ const lines = [];
11
+ // Header
12
+ lines.push('');
13
+ lines.push(chalk.bold.cyan(` ${result.token.symbol}`) + (result.token.name ? chalk.gray(` (${result.token.name})`) : ''));
14
+ lines.push(chalk.gray(' ' + '─'.repeat(50)));
15
+ // Chains
16
+ if (result.token.chains.length > 0) {
17
+ lines.push(` ${chalk.gray('Chains:')} ${result.token.chains.join(', ')}`);
18
+ }
19
+ else {
20
+ lines.push(` ${chalk.gray('Chains:')} ${chalk.dim('none')}`);
21
+ }
22
+ // Narratives
23
+ if (result.token.narratives.length > 0) {
24
+ const narrs = result.token.narratives
25
+ .map((n) => `${n.name} ${chalk.dim(`(${n.status})`)}`)
26
+ .join(', ');
27
+ lines.push(` ${chalk.gray('Narratives:')} ${narrs}`);
28
+ }
29
+ else {
30
+ lines.push(` ${chalk.gray('Narratives:')} ${chalk.dim('none')}`);
31
+ }
32
+ lines.push('');
33
+ // Price
34
+ if (result.price.price !== null) {
35
+ const priceStr = `$${result.price.price.toLocaleString('en-US', {
36
+ minimumFractionDigits: 2,
37
+ maximumFractionDigits: 6,
38
+ })}`;
39
+ lines.push(` ${chalk.gray('Price:')} ${chalk.white.bold(priceStr)}`);
40
+ if (result.price.change24h !== null) {
41
+ const changeStr = `${result.price.change24h >= 0 ? '+' : ''}${result.price.change24h.toFixed(2)}%`;
42
+ const colorFn = result.price.change24h >= 0 ? chalk.green : chalk.red;
43
+ lines.push(` ${chalk.gray('24h Change:')} ${colorFn(changeStr)}`);
44
+ }
45
+ else {
46
+ lines.push(` ${chalk.gray('24h Change:')} ${chalk.dim('n/a')}`);
47
+ }
48
+ }
49
+ else {
50
+ lines.push(` ${chalk.gray('Price:')} ${chalk.dim('no data')}`);
51
+ }
52
+ // Funding rate
53
+ if (result.funding.fundingRate !== null) {
54
+ const rateStr = `${result.funding.fundingRate >= 0 ? '+' : ''}${(result.funding.fundingRate * 100).toFixed(4)}%`;
55
+ const colorFn = result.funding.fundingRate >= 0 ? chalk.green : chalk.red;
56
+ lines.push(` ${chalk.gray('Funding:')} ${colorFn(rateStr)}`);
57
+ }
58
+ else {
59
+ lines.push(` ${chalk.gray('Funding:')} ${chalk.dim('no perp data')}`);
60
+ }
61
+ // Whale activity
62
+ lines.push(` ${chalk.gray('Whales:')} ${result.whaleActivity.count > 0 ? chalk.yellow(String(result.whaleActivity.count)) : chalk.dim('0')} active`);
63
+ // Last updated
64
+ if (result.price.lastUpdated) {
65
+ const timeStr = new Date(result.price.lastUpdated).toLocaleString();
66
+ lines.push('');
67
+ lines.push(` ${chalk.dim(`Last updated: ${timeStr}`)}`);
68
+ }
69
+ lines.push('');
70
+ return lines.join('\n');
71
+ }
72
+ // ─── API Response → QueryResult Mapper ───
73
+ function contextToQueryResult(pkg) {
74
+ return {
75
+ token: {
76
+ name: pkg.token.name ?? null,
77
+ symbol: pkg.token.symbol,
78
+ chains: Array.isArray(pkg.token.chains) ? pkg.token.chains : [],
79
+ narratives: Array.isArray(pkg.social?.narrativeMembership)
80
+ ? pkg.social.narrativeMembership.map((n) => ({ name: n.narrative, status: n.status }))
81
+ : [],
82
+ },
83
+ price: {
84
+ price: pkg.market?.price ?? null,
85
+ change24h: pkg.market?.priceChange24h ?? null,
86
+ lastUpdated: pkg._meta?.assembledAt ? new Date(pkg._meta.assembledAt) : null,
87
+ },
88
+ funding: {
89
+ fundingRate: pkg.market?.fundingRate ?? null,
90
+ lastUpdated: null,
91
+ },
92
+ whaleActivity: {
93
+ count: pkg.onchain?.whaleTransactions24h ?? 0,
94
+ },
95
+ };
96
+ }
97
+ // ─── Command Registration ───
98
+ export function registerQueryCommand(program) {
99
+ program
100
+ .command('query <symbol>')
101
+ .description('Query token info, price, funding rate, and whale activity')
102
+ .addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
103
+ .action(async (symbol, options) => {
104
+ try {
105
+ const pkg = await apiRequest(`/api/v1/tokens/${encodeURIComponent(symbol.toUpperCase())}/context`);
106
+ const result = contextToQueryResult(pkg);
107
+ // Check if the token was actually found
108
+ if (result.token.name === null && result.token.chains.length === 0 && result.price.price === null) {
109
+ console.error(chalk.red(`Error: Token not found: ${symbol.toUpperCase()}`));
110
+ console.error(chalk.dim(' Check the symbol and try again. Use a symbol like SOL, JUP, or BONK.'));
111
+ process.exitCode = 1;
112
+ return;
113
+ }
114
+ if (options.format === 'json') {
115
+ console.log(JSON.stringify(result, null, 2));
116
+ }
117
+ else {
118
+ console.log(formatQueryOutput(result));
119
+ }
120
+ }
121
+ catch (error) {
122
+ const message = error instanceof ApiError ? error.message : (error instanceof Error ? error.message : String(error));
123
+ logger.error({ error: message }, 'Query failed');
124
+ console.error(chalk.red(`Error: ${message}`));
125
+ const guidance = formatConnectionError(message);
126
+ if (guidance)
127
+ console.error(guidance);
128
+ process.exitCode = error instanceof ApiError ? 2 : 1;
129
+ }
130
+ });
131
+ }
132
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"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"}