@trading-boy/cli 0.3.6 → 1.2.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.
- package/dist/api-client.d.ts +5 -0
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +37 -3
- package/dist/api-client.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +42 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/audit.d.ts +0 -15
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +17 -79
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/behavioral.d.ts +34 -1
- package/dist/commands/behavioral.d.ts.map +1 -1
- package/dist/commands/behavioral.js +56 -76
- package/dist/commands/behavioral.js.map +1 -1
- package/dist/commands/benchmark-cmd.js +2 -2
- package/dist/commands/benchmark-cmd.js.map +1 -1
- package/dist/commands/billing.d.ts.map +1 -1
- package/dist/commands/billing.js +15 -10
- package/dist/commands/billing.js.map +1 -1
- package/dist/commands/catalysts.d.ts +10 -1
- package/dist/commands/catalysts.d.ts.map +1 -1
- package/dist/commands/catalysts.js +15 -84
- package/dist/commands/catalysts.js.map +1 -1
- package/dist/commands/coaching-cmd.d.ts.map +1 -1
- package/dist/commands/coaching-cmd.js +21 -10
- package/dist/commands/coaching-cmd.js.map +1 -1
- package/dist/commands/config-cmd.d.ts.map +1 -1
- package/dist/commands/config-cmd.js +39 -23
- package/dist/commands/config-cmd.js.map +1 -1
- package/dist/commands/context.d.ts +0 -7
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +51 -199
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/decisions.d.ts +38 -2
- package/dist/commands/decisions.d.ts.map +1 -1
- package/dist/commands/decisions.js +35 -134
- package/dist/commands/decisions.js.map +1 -1
- package/dist/commands/edge-cmd.d.ts +55 -45
- package/dist/commands/edge-cmd.d.ts.map +1 -1
- package/dist/commands/edge-cmd.js +76 -32
- package/dist/commands/edge-cmd.js.map +1 -1
- package/dist/commands/edge-guard-cmd.d.ts.map +1 -1
- package/dist/commands/edge-guard-cmd.js +7 -3
- package/dist/commands/edge-guard-cmd.js.map +1 -1
- package/dist/commands/events.d.ts.map +1 -1
- package/dist/commands/events.js +78 -162
- package/dist/commands/events.js.map +1 -1
- package/dist/commands/infra.d.ts +2 -4
- package/dist/commands/infra.d.ts.map +1 -1
- package/dist/commands/infra.js +65 -163
- package/dist/commands/infra.js.map +1 -1
- package/dist/commands/journal.d.ts.map +1 -1
- package/dist/commands/journal.js +138 -597
- package/dist/commands/journal.js.map +1 -1
- package/dist/commands/login.js +3 -3
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/narratives.d.ts.map +1 -1
- package/dist/commands/narratives.js +91 -311
- package/dist/commands/narratives.js.map +1 -1
- package/dist/commands/query.d.ts +0 -7
- package/dist/commands/query.d.ts.map +1 -1
- package/dist/commands/query.js +35 -157
- package/dist/commands/query.js.map +1 -1
- package/dist/commands/replay-cmd.d.ts.map +1 -1
- package/dist/commands/replay-cmd.js +6 -8
- package/dist/commands/replay-cmd.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +45 -83
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/risk.d.ts +29 -1
- package/dist/commands/risk.d.ts.map +1 -1
- package/dist/commands/risk.js +20 -89
- package/dist/commands/risk.js.map +1 -1
- package/dist/commands/social.d.ts +36 -2
- package/dist/commands/social.d.ts.map +1 -1
- package/dist/commands/social.js +74 -148
- package/dist/commands/social.js.map +1 -1
- package/dist/commands/strategy-cmd.d.ts.map +1 -1
- package/dist/commands/strategy-cmd.js +2 -4
- package/dist/commands/strategy-cmd.js.map +1 -1
- package/dist/commands/subscribe.js +4 -4
- package/dist/commands/subscribe.js.map +1 -1
- package/dist/commands/suggestions-cmd.d.ts +24 -0
- package/dist/commands/suggestions-cmd.d.ts.map +1 -0
- package/dist/commands/suggestions-cmd.js +142 -0
- package/dist/commands/suggestions-cmd.js.map +1 -0
- package/dist/commands/thesis-cmd.js +4 -4
- package/dist/commands/thesis-cmd.js.map +1 -1
- package/dist/commands/trader.d.ts +18 -1
- package/dist/commands/trader.d.ts.map +1 -1
- package/dist/commands/trader.js +363 -218
- package/dist/commands/trader.js.map +1 -1
- package/dist/commands/watch.d.ts +0 -10
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +5 -66
- package/dist/commands/watch.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +18 -2
- package/dist/commands/whoami.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts +45 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +97 -0
- package/dist/utils.js.map +1 -1
- package/package.json +15 -18
package/dist/commands/query.js
CHANGED
|
@@ -1,98 +1,10 @@
|
|
|
1
1
|
import { Option } from 'commander';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
-
import {
|
|
4
|
-
import { Neo4jClient } from '@trading-boy/graph-db';
|
|
5
|
-
import { TimescaleClient } from '@trading-boy/timeseries-db';
|
|
3
|
+
import { createLogger } from '@trading-boy/core';
|
|
6
4
|
import { formatConnectionError } from '../utils.js';
|
|
7
|
-
import {
|
|
5
|
+
import { apiRequest, ApiError } from '../api-client.js';
|
|
8
6
|
// ─── Logger ───
|
|
9
7
|
const logger = createLogger('cli-query');
|
|
10
|
-
// ─── Client Factories ───
|
|
11
|
-
function createNeo4jClient() {
|
|
12
|
-
const config = getConfig();
|
|
13
|
-
return new Neo4jClient({
|
|
14
|
-
uri: config.NEO4J_URI,
|
|
15
|
-
username: config.NEO4J_USER,
|
|
16
|
-
password: config.NEO4J_PASSWORD,
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
function createTimescaleClient() {
|
|
20
|
-
const config = getConfig();
|
|
21
|
-
return new TimescaleClient({
|
|
22
|
-
host: config.TIMESCALE_HOST,
|
|
23
|
-
port: config.TIMESCALE_PORT,
|
|
24
|
-
user: config.TIMESCALE_USER,
|
|
25
|
-
password: config.TIMESCALE_PASSWORD,
|
|
26
|
-
database: config.TIMESCALE_DB,
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
// ─── Data Fetchers ───
|
|
30
|
-
export async function fetchTokenInfo(neo4j, symbol) {
|
|
31
|
-
// Fetch token node
|
|
32
|
-
const tokenResult = await neo4j.runCypher('MATCH (t:Token {symbol: $symbol}) RETURN t.name AS name, t.symbol AS symbol LIMIT 1', { symbol });
|
|
33
|
-
const tokenRecord = tokenResult.records[0];
|
|
34
|
-
if (!tokenRecord) {
|
|
35
|
-
return { name: null, symbol, chains: [], narratives: [] };
|
|
36
|
-
}
|
|
37
|
-
// Fetch chains
|
|
38
|
-
const chainResult = await neo4j.runCypher('MATCH (t:Token {symbol: $symbol})-[:DEPLOYED_ON]->(c:Chain) RETURN c.name AS name', { symbol });
|
|
39
|
-
const chains = chainResult.records.map((r) => r.name);
|
|
40
|
-
// Fetch narratives
|
|
41
|
-
const narrativeResult = await neo4j.runCypher('MATCH (t:Token {symbol: $symbol})-[:BELONGS_TO_NARRATIVE]->(n:Narrative) RETURN n.name AS name, n.status AS status', { symbol });
|
|
42
|
-
const narratives = narrativeResult.records.map((r) => ({
|
|
43
|
-
name: r.name,
|
|
44
|
-
status: r.status,
|
|
45
|
-
}));
|
|
46
|
-
return {
|
|
47
|
-
name: tokenRecord.name,
|
|
48
|
-
symbol: tokenRecord.symbol ?? symbol,
|
|
49
|
-
chains,
|
|
50
|
-
narratives,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
export async function fetchPriceInfo(timescale, symbol) {
|
|
54
|
-
// Latest price
|
|
55
|
-
const latestResult = await timescale.runQuery('SELECT price_usd, time FROM price_ticks WHERE symbol = $1 ORDER BY time DESC LIMIT 1', [symbol]);
|
|
56
|
-
if (latestResult.rows.length === 0) {
|
|
57
|
-
return { price: null, change24h: null, lastUpdated: null };
|
|
58
|
-
}
|
|
59
|
-
const latestPrice = latestResult.rows[0].price_usd;
|
|
60
|
-
const lastUpdated = latestResult.rows[0].time;
|
|
61
|
-
// 24h ago price for change calculation
|
|
62
|
-
const oldResult = await timescale.runQuery(`SELECT price_usd FROM price_ticks
|
|
63
|
-
WHERE symbol = $1 AND time <= NOW() - INTERVAL '24 hours'
|
|
64
|
-
ORDER BY time DESC LIMIT 1`, [symbol]);
|
|
65
|
-
let change24h = null;
|
|
66
|
-
if (oldResult.rows.length > 0) {
|
|
67
|
-
const oldPrice = oldResult.rows[0].price_usd;
|
|
68
|
-
if (oldPrice > 0) {
|
|
69
|
-
change24h = ((latestPrice - oldPrice) / oldPrice) * 100;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return { price: latestPrice, change24h, lastUpdated };
|
|
73
|
-
}
|
|
74
|
-
export async function fetchFundingInfo(timescale, symbol) {
|
|
75
|
-
const result = await timescale.runQuery('SELECT funding_rate, time FROM funding_rates WHERE symbol = $1 ORDER BY time DESC LIMIT 1', [symbol + 'USDT']);
|
|
76
|
-
if (result.rows.length === 0) {
|
|
77
|
-
return { fundingRate: null, lastUpdated: null };
|
|
78
|
-
}
|
|
79
|
-
return {
|
|
80
|
-
fundingRate: result.rows[0].funding_rate,
|
|
81
|
-
lastUpdated: result.rows[0].time,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
export async function fetchWhaleActivity(neo4j, symbol) {
|
|
85
|
-
const result = await neo4j.runCypher(`MATCH (w:Wallet)-[h:HOLDS]->(t:Token {symbol: $symbol})
|
|
86
|
-
WHERE w.entityType = 'WHALE'
|
|
87
|
-
RETURN count(w) AS count`, { symbol });
|
|
88
|
-
const record = result.records[0];
|
|
89
|
-
// Neo4j integers may come as objects with toNumber()
|
|
90
|
-
const rawCount = record?.count ?? 0;
|
|
91
|
-
const count = typeof rawCount === 'object' && rawCount !== null && 'toNumber' in rawCount
|
|
92
|
-
? rawCount.toNumber()
|
|
93
|
-
: Number(rawCount);
|
|
94
|
-
return { count };
|
|
95
|
-
}
|
|
96
8
|
// ─── Formatter ───
|
|
97
9
|
export function formatQueryOutput(result) {
|
|
98
10
|
const lines = [];
|
|
@@ -157,31 +69,30 @@ export function formatQueryOutput(result) {
|
|
|
157
69
|
lines.push('');
|
|
158
70
|
return lines.join('\n');
|
|
159
71
|
}
|
|
160
|
-
// ───
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
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
|
+
};
|
|
185
96
|
}
|
|
186
97
|
// ─── Command Registration ───
|
|
187
98
|
export function registerQueryCommand(program) {
|
|
@@ -191,48 +102,15 @@ export function registerQueryCommand(program) {
|
|
|
191
102
|
.addOption(new Option('--format <format>', 'Output format').choices(['text', 'json']).default('text'))
|
|
192
103
|
.action(async (symbol, options) => {
|
|
193
104
|
try {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
name: pkg.token.name ?? null,
|
|
202
|
-
symbol: pkg.token.symbol,
|
|
203
|
-
chains: Array.isArray(pkg.token.chains) ? pkg.token.chains : [],
|
|
204
|
-
narratives: Array.isArray(pkg.social?.narrativeMembership)
|
|
205
|
-
? pkg.social.narrativeMembership.map((n) => ({ name: n.narrative, status: n.status }))
|
|
206
|
-
: [],
|
|
207
|
-
},
|
|
208
|
-
price: {
|
|
209
|
-
price: pkg.market?.price ?? null,
|
|
210
|
-
change24h: pkg.market?.priceChange24h ?? null,
|
|
211
|
-
lastUpdated: pkg._meta?.assembledAt ? new Date(pkg._meta.assembledAt) : null,
|
|
212
|
-
},
|
|
213
|
-
funding: {
|
|
214
|
-
fundingRate: pkg.market?.fundingRate ?? null,
|
|
215
|
-
lastUpdated: null,
|
|
216
|
-
},
|
|
217
|
-
whaleActivity: {
|
|
218
|
-
count: pkg.onchain?.whaleTransactions24h ?? 0,
|
|
219
|
-
},
|
|
220
|
-
};
|
|
221
|
-
if (options.format === 'json') {
|
|
222
|
-
console.log(JSON.stringify(result, null, 2));
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
console.log(formatQueryOutput(result));
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
catch (error) {
|
|
229
|
-
const message = error instanceof ApiError ? error.message : (error instanceof Error ? error.message : String(error));
|
|
230
|
-
console.error(chalk.red(`Error: ${message}`));
|
|
231
|
-
process.exitCode = 1;
|
|
232
|
-
}
|
|
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;
|
|
233
112
|
return;
|
|
234
113
|
}
|
|
235
|
-
const result = await executeQuery(symbol);
|
|
236
114
|
if (options.format === 'json') {
|
|
237
115
|
console.log(JSON.stringify(result, null, 2));
|
|
238
116
|
}
|
|
@@ -241,13 +119,13 @@ export function registerQueryCommand(program) {
|
|
|
241
119
|
}
|
|
242
120
|
}
|
|
243
121
|
catch (error) {
|
|
244
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
122
|
+
const message = error instanceof ApiError ? error.message : (error instanceof Error ? error.message : String(error));
|
|
245
123
|
logger.error({ error: message }, 'Query failed');
|
|
246
124
|
console.error(chalk.red(`Error: ${message}`));
|
|
247
125
|
const guidance = formatConnectionError(message);
|
|
248
126
|
if (guidance)
|
|
249
127
|
console.error(guidance);
|
|
250
|
-
process.exitCode = 1;
|
|
128
|
+
process.exitCode = error instanceof ApiError ? 2 : 1;
|
|
251
129
|
}
|
|
252
130
|
});
|
|
253
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEtE,iBAAiB;AAEjB,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AAEzC,2BAA2B;AAE3B,SAAS,iBAAiB;IACxB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,IAAI,WAAW,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC,SAAS;QACrB,QAAQ,EAAE,MAAM,CAAC,UAAU;QAC3B,QAAQ,EAAE,MAAM,CAAC,cAAc;KAChC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,IAAI,eAAe,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC,cAAc;QAC3B,IAAI,EAAE,MAAM,CAAC,cAAc;QAC3B,IAAI,EAAE,MAAM,CAAC,cAAc;QAC3B,QAAQ,EAAE,MAAM,CAAC,kBAAkB;QACnC,QAAQ,EAAE,MAAM,CAAC,YAAY;KAC9B,CAAC,CAAC;AACL,CAAC;AAiCD,wBAAwB;AAExB,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAkB,EAClB,MAAc;IAEd,mBAAmB;IACnB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,SAAS,CACvC,qFAAqF,EACrF,EAAE,MAAM,EAAE,CACX,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC5D,CAAC;IAED,eAAe;IACf,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,SAAS,CACvC,mFAAmF,EACnF,EAAE,MAAM,EAAE,CACX,CAAC;IACF,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEtD,mBAAmB;IACnB,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,SAAS,CAC3C,oHAAoH,EACpH,EAAE,MAAM,EAAE,CACX,CAAC;IACF,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;KACjB,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,MAAM;QACpC,MAAM;QACN,UAAU;KACX,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAA0B,EAC1B,MAAc;IAEd,eAAe;IACf,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,QAAQ,CAI3C,sFAAsF,EACtF,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC7D,CAAC;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE9C,uCAAuC;IACvC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,CACxC;;gCAE4B,EAC5B,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7C,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,SAAS,GAAG,CAAC,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAA0B,EAC1B,MAAc;IAEd,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAIrC,2FAA2F,EAC3F,CAAC,MAAM,GAAG,MAAM,CAAC,CAClB,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY;QACxC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAkB,EAClB,MAAc;IAEd,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,SAAS,CAClC;;8BAE0B,EAC1B,EAAE,MAAM,EAAE,CACX,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjC,qDAAqD;IACrD,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,UAAU,IAAI,QAAQ;QACvF,CAAC,CAAE,QAAmC,CAAC,QAAQ,EAAE;QACjD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAErB,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,oBAAoB;AAEpB,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS;IACT,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3H,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE9C,SAAS;IACT,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,aAAa;IACb,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU;aAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;aACrD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,QAAQ;IACR,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE;YAC9D,qBAAqB,EAAE,CAAC;YACxB,qBAAqB,EAAE,CAAC;SACzB,CAAC,EAAE,CAAC;QACL,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAE3E,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YACnG,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,eAAe;IACf,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QACjH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,iBAAiB;IACjB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,MAAM,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAE1J,eAAe;IACf,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,iBAAiB,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,2BAA2B;AAE3B,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc;IAC/C,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE1D,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QAEzC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC/D,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC;YAClC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC;YACtC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC;YACxC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC;SACvC,CAAC,CAAC;QAEH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAClD,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC/B,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,4BAA4B,CAAC,CAAC;YACrE,CAAC,CAAC;YACF,SAAS,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACnC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,kCAAkC,CAAC,CAAC;YAC3E,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,+BAA+B;AAE/B,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,2DAA2D,CAAC;SACxE,SAAS,CAAC,IAAI,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SACrG,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,OAA2B,EAAE,EAAE;QAC5D,IAAI,CAAC;YACH,0BAA0B;YAC1B,IAAI,MAAM,YAAY,EAAE,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAC1B,kBAAkB,kBAAkB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CACrE,CAAC;oBACF,8DAA8D;oBAC9D,MAAM,MAAM,GAAgB;wBAC1B,KAAK,EAAE;4BACL,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI;4BAC5B,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM;4BACxB,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;4BAC/D,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC;gCACxD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gCACtF,CAAC,CAAC,EAAE;yBACP;wBACD,KAAK,EAAE;4BACL,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI;4BAChC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,IAAI,IAAI;4BAC7C,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;yBAC7E;wBACD,OAAO,EAAE;4BACP,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI;4BAC5C,WAAW,EAAE,IAAI;yBAClB;wBACD,aAAa,EAAE;4BACb,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,oBAAoB,IAAI,CAAC;yBAC9C;qBACF,CAAC;oBACF,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;wBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC/C,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACrH,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC;oBAC9C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACvB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,QAAQ;gBAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;
|
|
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"}
|
|
@@ -2,6 +2,7 @@ import { Option } from 'commander';
|
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { createLogger } from '@trading-boy/core';
|
|
4
4
|
import { isRemoteMode, apiRequest, ApiError } from '../api-client.js';
|
|
5
|
+
import { padRight } from '../utils.js';
|
|
5
6
|
// ─── Logger ───
|
|
6
7
|
const logger = createLogger('cli-replay');
|
|
7
8
|
// ─── Helpers ───
|
|
@@ -80,9 +81,6 @@ function formatWinRate(rate) {
|
|
|
80
81
|
return chalk.yellow(str);
|
|
81
82
|
return chalk.red(str);
|
|
82
83
|
}
|
|
83
|
-
function padRight(str, len) {
|
|
84
|
-
return str.length >= len ? str.slice(0, len) : str + ' '.repeat(len - str.length);
|
|
85
|
-
}
|
|
86
84
|
// ─── Polling ───
|
|
87
85
|
const POLL_INTERVAL_MS = 2000;
|
|
88
86
|
const POLL_TIMEOUT_MS = 60000;
|
|
@@ -123,7 +121,7 @@ function handleApiError(error, context) {
|
|
|
123
121
|
logger.error({ error: message }, context);
|
|
124
122
|
console.error(chalk.red(`Error: ${message}`));
|
|
125
123
|
}
|
|
126
|
-
process.exitCode = 1;
|
|
124
|
+
process.exitCode = error instanceof ApiError ? 2 : 1;
|
|
127
125
|
}
|
|
128
126
|
// ─── Command Registration ───
|
|
129
127
|
export function registerReplayCommand(program) {
|
|
@@ -160,11 +158,11 @@ export function registerReplayCommand(program) {
|
|
|
160
158
|
process.exitCode = 1;
|
|
161
159
|
return;
|
|
162
160
|
}
|
|
163
|
-
// Use
|
|
164
|
-
const {
|
|
161
|
+
// Use createSpinner for TTY-aware spinners (silent when piped)
|
|
162
|
+
const { createSpinner } = await import('../utils.js');
|
|
165
163
|
// ─── Submit replay job ───
|
|
166
164
|
let jobId;
|
|
167
|
-
const submitSpinner =
|
|
165
|
+
const submitSpinner = (await createSpinner('Submitting replay job…')).start();
|
|
168
166
|
try {
|
|
169
167
|
const submitted = await apiRequest('/api/v1/replay', {
|
|
170
168
|
method: 'POST',
|
|
@@ -184,7 +182,7 @@ export function registerReplayCommand(program) {
|
|
|
184
182
|
return;
|
|
185
183
|
}
|
|
186
184
|
// ─── Poll until complete ───
|
|
187
|
-
const pollSpinner =
|
|
185
|
+
const pollSpinner = (await createSpinner('Running replay…')).start();
|
|
188
186
|
let finalStatus;
|
|
189
187
|
try {
|
|
190
188
|
finalStatus = await pollReplayJob(jobId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay-cmd.js","sourceRoot":"","sources":["../../src/commands/replay-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"replay-cmd.js","sourceRoot":"","sources":["../../src/commands/replay-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
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"}
|
package/dist/commands/review.js
CHANGED
|
@@ -2,30 +2,14 @@
|
|
|
2
2
|
//
|
|
3
3
|
// trading-boy journal review daily|weekly|monthly
|
|
4
4
|
// Structured review cadence for trade journaling.
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { formatConnectionError } from '../utils.js';
|
|
5
|
+
import { createLogger } from '@trading-boy/core';
|
|
6
|
+
import { formatConnectionError, padRight, truncate } from '../utils.js';
|
|
7
|
+
import { apiRequest, ApiError } from '../api-client.js';
|
|
9
8
|
// ─── Logger ───
|
|
10
9
|
const logger = createLogger('cli-review');
|
|
11
10
|
// ─── Default Trader ───
|
|
12
11
|
const DEFAULT_TRADER_ID = 'default';
|
|
13
|
-
// ─── Neo4j Client Factory ───
|
|
14
|
-
function createNeo4jClient() {
|
|
15
|
-
const config = getConfig();
|
|
16
|
-
return new Neo4jClient({
|
|
17
|
-
uri: config.NEO4J_URI,
|
|
18
|
-
username: config.NEO4J_USER,
|
|
19
|
-
password: config.NEO4J_PASSWORD,
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
12
|
// ─── Helpers ───
|
|
23
|
-
function padRight(str, len) {
|
|
24
|
-
return str.length >= len ? str.slice(0, len) : str + ' '.repeat(len - str.length);
|
|
25
|
-
}
|
|
26
|
-
function truncate(str, maxLen) {
|
|
27
|
-
return str.length > maxLen ? str.slice(0, maxLen - 3) + '...' : str;
|
|
28
|
-
}
|
|
29
13
|
function formatUsd(n) {
|
|
30
14
|
const sign = n >= 0 ? '+' : '';
|
|
31
15
|
return `${sign}$${Math.abs(n).toFixed(0)}`;
|
|
@@ -43,6 +27,15 @@ function formatMs(ms) {
|
|
|
43
27
|
return `${(ms / 3_600_000).toFixed(1)}h`;
|
|
44
28
|
return `${(ms / 86_400_000).toFixed(1)}d`;
|
|
45
29
|
}
|
|
30
|
+
function brierLabel(score) {
|
|
31
|
+
if (score <= 0.1)
|
|
32
|
+
return 'Excellent';
|
|
33
|
+
if (score <= 0.2)
|
|
34
|
+
return 'Good';
|
|
35
|
+
if (score <= 0.3)
|
|
36
|
+
return 'Fair';
|
|
37
|
+
return 'Poor';
|
|
38
|
+
}
|
|
46
39
|
// ─── Formatters ───
|
|
47
40
|
function printDailyReview(review) {
|
|
48
41
|
console.log('');
|
|
@@ -127,6 +120,8 @@ function printWeeklyReview(review) {
|
|
|
127
120
|
}
|
|
128
121
|
console.log('');
|
|
129
122
|
}
|
|
123
|
+
// Formatter for monthly review — will be used once the API endpoint ships
|
|
124
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
130
125
|
function printMonthlyReview(review) {
|
|
131
126
|
console.log('');
|
|
132
127
|
console.log(`═══ Monthly Review — ${review.monthStart} to ${review.monthEnd} ═══`);
|
|
@@ -282,12 +277,9 @@ export function registerReviewCommand(journal) {
|
|
|
282
277
|
.option('--process-first', 'Hide PnL until process is graded')
|
|
283
278
|
.option('--format <format>', 'Output format (text or json)', 'text')
|
|
284
279
|
.action(async (options) => {
|
|
285
|
-
const client = createNeo4jClient();
|
|
286
280
|
try {
|
|
287
|
-
|
|
288
|
-
const
|
|
289
|
-
const allDecisions = await getDecisionChain(client, options.trader, { limit: 500 });
|
|
290
|
-
const review = generateDailyReview(allDecisions, date);
|
|
281
|
+
const date = options.date ?? new Date().toISOString().slice(0, 10);
|
|
282
|
+
const review = await apiRequest(`/api/v1/reviews/daily?traderId=${encodeURIComponent(options.trader)}&date=${encodeURIComponent(date)}`);
|
|
291
283
|
if (options.format === 'json') {
|
|
292
284
|
console.log(JSON.stringify(review, null, 2));
|
|
293
285
|
}
|
|
@@ -302,13 +294,12 @@ export function registerReviewCommand(journal) {
|
|
|
302
294
|
const message = error instanceof Error ? error.message : String(error);
|
|
303
295
|
logger.error({ error: message }, 'Failed to generate daily review');
|
|
304
296
|
console.error(`Error: ${message}`);
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
await client.disconnect();
|
|
297
|
+
if (!(error instanceof ApiError)) {
|
|
298
|
+
const guidance = formatConnectionError(message);
|
|
299
|
+
if (guidance)
|
|
300
|
+
console.error(guidance);
|
|
301
|
+
}
|
|
302
|
+
process.exitCode = error instanceof ApiError ? 2 : 1;
|
|
312
303
|
}
|
|
313
304
|
});
|
|
314
305
|
// ─── journal review weekly ───
|
|
@@ -319,12 +310,9 @@ export function registerReviewCommand(journal) {
|
|
|
319
310
|
.option('--trader <traderId>', 'Trader ID', DEFAULT_TRADER_ID)
|
|
320
311
|
.option('--format <format>', 'Output format (text or json)', 'text')
|
|
321
312
|
.action(async (options) => {
|
|
322
|
-
const client = createNeo4jClient();
|
|
323
313
|
try {
|
|
324
|
-
|
|
325
|
-
const
|
|
326
|
-
const allDecisions = await getDecisionsWithOutcomes(client, options.trader);
|
|
327
|
-
const review = generateWeeklyReview(allDecisions, date);
|
|
314
|
+
const date = options.date ?? new Date().toISOString().slice(0, 10);
|
|
315
|
+
const review = await apiRequest(`/api/v1/reviews/weekly?traderId=${encodeURIComponent(options.trader)}&date=${encodeURIComponent(date)}`);
|
|
328
316
|
if (options.format === 'json') {
|
|
329
317
|
console.log(JSON.stringify(review, null, 2));
|
|
330
318
|
}
|
|
@@ -336,13 +324,12 @@ export function registerReviewCommand(journal) {
|
|
|
336
324
|
const message = error instanceof Error ? error.message : String(error);
|
|
337
325
|
logger.error({ error: message }, 'Failed to generate weekly review');
|
|
338
326
|
console.error(`Error: ${message}`);
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
await client.disconnect();
|
|
327
|
+
if (!(error instanceof ApiError)) {
|
|
328
|
+
const guidance = formatConnectionError(message);
|
|
329
|
+
if (guidance)
|
|
330
|
+
console.error(guidance);
|
|
331
|
+
}
|
|
332
|
+
process.exitCode = error instanceof ApiError ? 2 : 1;
|
|
346
333
|
}
|
|
347
334
|
});
|
|
348
335
|
// ─── journal review monthly ───
|
|
@@ -353,30 +340,21 @@ export function registerReviewCommand(journal) {
|
|
|
353
340
|
.option('--trader <traderId>', 'Trader ID', DEFAULT_TRADER_ID)
|
|
354
341
|
.option('--format <format>', 'Output format (text or json)', 'text')
|
|
355
342
|
.action(async (options) => {
|
|
356
|
-
const client = createNeo4jClient();
|
|
357
343
|
try {
|
|
358
|
-
|
|
359
|
-
const
|
|
360
|
-
const allDecisions = await getDecisionsWithOutcomes(client, options.trader);
|
|
361
|
-
const review = generateMonthlyReview(allDecisions, date);
|
|
344
|
+
const date = options.date || new Date().toISOString().slice(0, 10);
|
|
345
|
+
const data = await apiRequest(`/api/v1/reviews/monthly?traderId=${encodeURIComponent(options.trader)}&date=${date}`);
|
|
362
346
|
if (options.format === 'json') {
|
|
363
|
-
console.log(JSON.stringify(
|
|
347
|
+
console.log(JSON.stringify(data, null, 2));
|
|
364
348
|
}
|
|
365
349
|
else {
|
|
366
|
-
printMonthlyReview(
|
|
350
|
+
printMonthlyReview(data);
|
|
367
351
|
}
|
|
368
352
|
}
|
|
369
353
|
catch (error) {
|
|
370
354
|
const message = error instanceof Error ? error.message : String(error);
|
|
371
355
|
logger.error({ error: message }, 'Failed to generate monthly review');
|
|
372
356
|
console.error(`Error: ${message}`);
|
|
373
|
-
|
|
374
|
-
if (guidance)
|
|
375
|
-
console.error(guidance);
|
|
376
|
-
process.exitCode = 1;
|
|
377
|
-
}
|
|
378
|
-
finally {
|
|
379
|
-
await client.disconnect();
|
|
357
|
+
process.exitCode = error instanceof ApiError ? 2 : 1;
|
|
380
358
|
}
|
|
381
359
|
});
|
|
382
360
|
// ─── journal review matrix ───
|
|
@@ -386,16 +364,14 @@ export function registerReviewCommand(journal) {
|
|
|
386
364
|
.option('--trader <traderId>', 'Trader ID', DEFAULT_TRADER_ID)
|
|
387
365
|
.option('--format <format>', 'Output format (text or json)', 'text')
|
|
388
366
|
.action(async (options) => {
|
|
389
|
-
const client = createNeo4jClient();
|
|
390
367
|
try {
|
|
391
|
-
await
|
|
392
|
-
const allDecisions = await getDecisionsWithOutcomes(client, options.trader);
|
|
393
|
-
const matrix = computeProcessOutcomeMatrix(allDecisions);
|
|
368
|
+
const data = await apiRequest(`/api/v1/reviews/matrix?traderId=${encodeURIComponent(options.trader)}`);
|
|
394
369
|
if (options.format === 'json') {
|
|
395
|
-
console.log(JSON.stringify(
|
|
370
|
+
console.log(JSON.stringify(data, null, 2));
|
|
396
371
|
}
|
|
397
372
|
else {
|
|
398
|
-
|
|
373
|
+
console.log('\n Process-Outcome Matrix:\n');
|
|
374
|
+
console.log(JSON.stringify(data, null, 2));
|
|
399
375
|
console.log('');
|
|
400
376
|
}
|
|
401
377
|
}
|
|
@@ -403,13 +379,7 @@ export function registerReviewCommand(journal) {
|
|
|
403
379
|
const message = error instanceof Error ? error.message : String(error);
|
|
404
380
|
logger.error({ error: message }, 'Failed to generate matrix');
|
|
405
381
|
console.error(`Error: ${message}`);
|
|
406
|
-
|
|
407
|
-
if (guidance)
|
|
408
|
-
console.error(guidance);
|
|
409
|
-
process.exitCode = 1;
|
|
410
|
-
}
|
|
411
|
-
finally {
|
|
412
|
-
await client.disconnect();
|
|
382
|
+
process.exitCode = error instanceof ApiError ? 2 : 1;
|
|
413
383
|
}
|
|
414
384
|
});
|
|
415
385
|
// ─── journal review calibration ───
|
|
@@ -419,16 +389,14 @@ export function registerReviewCommand(journal) {
|
|
|
419
389
|
.option('--trader <traderId>', 'Trader ID', DEFAULT_TRADER_ID)
|
|
420
390
|
.option('--format <format>', 'Output format (text or json)', 'text')
|
|
421
391
|
.action(async (options) => {
|
|
422
|
-
const client = createNeo4jClient();
|
|
423
392
|
try {
|
|
424
|
-
await
|
|
425
|
-
const allDecisions = await getDecisionsWithOutcomes(client, options.trader);
|
|
426
|
-
const cal = computeCalibration(allDecisions);
|
|
393
|
+
const data = await apiRequest(`/api/v1/reviews/calibration?traderId=${encodeURIComponent(options.trader)}`);
|
|
427
394
|
if (options.format === 'json') {
|
|
428
|
-
console.log(JSON.stringify(
|
|
395
|
+
console.log(JSON.stringify(data, null, 2));
|
|
429
396
|
}
|
|
430
397
|
else {
|
|
431
|
-
|
|
398
|
+
console.log('\n Confidence Calibration:\n');
|
|
399
|
+
console.log(JSON.stringify(data, null, 2));
|
|
432
400
|
console.log('');
|
|
433
401
|
}
|
|
434
402
|
}
|
|
@@ -436,13 +404,7 @@ export function registerReviewCommand(journal) {
|
|
|
436
404
|
const message = error instanceof Error ? error.message : String(error);
|
|
437
405
|
logger.error({ error: message }, 'Failed to generate calibration');
|
|
438
406
|
console.error(`Error: ${message}`);
|
|
439
|
-
|
|
440
|
-
if (guidance)
|
|
441
|
-
console.error(guidance);
|
|
442
|
-
process.exitCode = 1;
|
|
443
|
-
}
|
|
444
|
-
finally {
|
|
445
|
-
await client.disconnect();
|
|
407
|
+
process.exitCode = error instanceof ApiError ? 2 : 1;
|
|
446
408
|
}
|
|
447
409
|
});
|
|
448
410
|
}
|