@truenorth-ai/cli 0.1.0 → 0.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Advent AI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -8,6 +8,8 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
+ <a href="https://app.true-north.xyz"><img alt="Website" src="https://img.shields.io/badge/TrueNorth-app.true--north.xyz-8B5CF6"></a>
12
+ <a href="https://www.npmjs.com/package/@truenorth-ai/cli"><img alt="npm" src="https://img.shields.io/npm/v/@truenorth-ai/cli"></a>
11
13
  <img alt="Node.js" src="https://img.shields.io/badge/node-%3E%3D18-brightgreen">
12
14
  <img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-strict-3178c6">
13
15
  <img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-blue.svg">
@@ -31,6 +33,26 @@
31
33
 
32
34
  ## Installation
33
35
 
36
+ ### npm (recommended)
37
+
38
+ ```bash
39
+ npm i -g @truenorth-ai/cli
40
+ ```
41
+
42
+ ### Agent skills
43
+
44
+ Install as an AI agent skill ([skills.sh](https://skills.sh/Advent-AI/truenorth-cli/truenorth) | [ClawHub](https://clawhub.ai/LJlkdskdjflsa/truenorth)):
45
+
46
+ ```bash
47
+ # skills.sh (Claude Code, Cursor, Windsurf, Copilot, Codex, etc.)
48
+ npx skills add Advent-AI/truenorth-cli@truenorth -g -y
49
+
50
+ # ClawHub (OpenClaw)
51
+ clawhub install truenorth
52
+ ```
53
+
54
+ ### From source
55
+
34
56
  ```bash
35
57
  git clone https://github.com/Advent-AI/truenorth-cli.git
36
58
  cd truenorth-cli
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAyB1F,wBAAsB,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAG5E;AAED,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAM3C"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAgC1F,wBAAsB,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAG5E;AAED,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAM3C"}
@@ -1,12 +1,17 @@
1
- import { getBaseUrl } from "../config.js";
1
+ import { getBaseUrl, getAuthToken } from "../config.js";
2
2
  async function request(url, init) {
3
3
  try {
4
+ const authToken = getAuthToken();
5
+ const headers = {
6
+ "Content-Type": "application/json",
7
+ ...init?.headers,
8
+ };
9
+ if (authToken) {
10
+ headers["Authorization"] = authToken;
11
+ }
4
12
  const res = await fetch(url, {
5
13
  ...init,
6
- headers: {
7
- "Content-Type": "application/json",
8
- ...init?.headers,
9
- },
14
+ headers,
10
15
  });
11
16
  if (!res.ok) {
12
17
  const body = await res.text().catch(() => "");
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,KAAK,UAAU,OAAO,CAAI,GAAW,EAAE,IAAkB;IACvD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,GAAG,IAAI;YACP,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,GAAG,IAAI,EAAE,OAAO;aACjB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;QACnG,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;QACrC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAuB,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,QAAgB,EAChB,IAA6B;IAE7B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAsB,GAAG,OAAO,OAAO,EAAE;QACrD,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACpD,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGxD,KAAK,UAAU,OAAO,CAAI,GAAW,EAAE,IAAkB;IACvD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,GAAG,IAAI,EAAE,OAAiC;SAC3C,CAAC;QAEF,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;QACvC,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,GAAG,IAAI;YACP,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;QACnG,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;QACrC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAuB,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,QAAgB,EAChB,IAA6B;IAE7B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAsB,GAAG,OAAO,OAAO,EAAE;QACrD,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACpD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerOptionsCommand(program: Command): void;
3
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/commands/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6SpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoC7D"}
@@ -0,0 +1,303 @@
1
+ import chalk from "chalk";
2
+ import { executeTool } from "../api/tools.js";
3
+ import { startSpinner, formatPrice, formatPercent, formatNumber, formatDuration, printJson, isJsonMode, wrapAction, addJsonOption, makeTable, } from "../utils.js";
4
+ // ── Helpers ───────────────────────────────────────────────────────────
5
+ function pct(val, spot) {
6
+ const p = ((val / spot) - 1) * 100;
7
+ return formatPercent(p);
8
+ }
9
+ function bar(iv, scale = 5) {
10
+ return chalk.green("█".repeat(Math.max(1, Math.round(iv / scale))));
11
+ }
12
+ function section(num, title) {
13
+ console.log(chalk.bold.cyan(`\n${num}. ${title} ${"─".repeat(Math.max(1, 50 - title.length))}`));
14
+ }
15
+ function insight(data) {
16
+ if (!data)
17
+ return;
18
+ const headline = data.headline;
19
+ if (headline) {
20
+ console.log(` ${chalk.bold.white(headline)}`);
21
+ }
22
+ const scenario = data.current_scenario;
23
+ if (scenario) {
24
+ console.log(chalk.dim(` ${scenario.slice(0, 200)}${scenario.length > 200 ? "…" : ""}`));
25
+ }
26
+ const implication = data.trading_implication;
27
+ if (implication) {
28
+ console.log(chalk.yellow(` → ${implication.slice(0, 200)}${implication.length > 200 ? "…" : ""}`));
29
+ }
30
+ }
31
+ function timeliness(data) {
32
+ if (!data)
33
+ return;
34
+ const freshness = data.freshness;
35
+ if (freshness) {
36
+ console.log(chalk.dim(` ⏱ ${freshness.slice(0, 120)}`));
37
+ }
38
+ }
39
+ // ── Custom Renderer ──────────────────────────────────────────────────
40
+ function renderOptionsReport(result) {
41
+ const spot = result.spot;
42
+ const currency = result.currency;
43
+ const market = result.market;
44
+ const atmIv = result.atm_iv;
45
+ const topExpiry = result.top_expiry;
46
+ const dte = result.days_to_expiry;
47
+ const hoursToExpiry = result.hours_to_expiry;
48
+ const contracts = result.total_contracts;
49
+ const summary = result.summary;
50
+ const sections = result.sections;
51
+ const freshness = result.data_freshness;
52
+ // ── Header ──────────────────────────────────────────────────────
53
+ const isUsdc = market !== currency;
54
+ const label = isUsdc ? `${currency} (USDC-settled)` : currency;
55
+ console.log();
56
+ console.log(chalk.bold("══════════════════════════════════════════════════════"));
57
+ console.log(chalk.bold(` ${label} OPTIONS INTELLIGENCE`));
58
+ console.log(` Spot: ${formatPrice(spot)} │ ATM IV: ${chalk.white(atmIv + "%")} │ Expiry: ${chalk.white(topExpiry)}${dte !== null ? chalk.dim(` (${dte}d / ${hoursToExpiry}h)`) : ""}`);
59
+ console.log(` Contracts: ${chalk.white(String(contracts))} │ Sentiment: ${sentimentBadge(summary.sentiment)} │ Regime: ${regimeBadge(summary.regime)}`);
60
+ console.log(chalk.bold("══════════════════════════════════════════════════════"));
61
+ // ── Summary ─────────────────────────────────────────────────────
62
+ if (summary) {
63
+ console.log();
64
+ console.log(chalk.dim(` ${summary.headline}`));
65
+ const levels = summary.key_levels;
66
+ if (levels) {
67
+ const parts = [];
68
+ if (levels.max_pain)
69
+ parts.push(`MaxPain ${formatPrice(levels.max_pain)}`);
70
+ if (levels.gex_flip)
71
+ parts.push(`GEX Flip ${formatPrice(levels.gex_flip)}`);
72
+ if (levels.nearest_call_wall)
73
+ parts.push(`Resistance ${formatPrice(levels.nearest_call_wall)}`);
74
+ if (levels.nearest_put_wall)
75
+ parts.push(`Support ${formatPrice(levels.nearest_put_wall)}`);
76
+ console.log(` ${chalk.dim("Key:")} ${parts.join(chalk.dim(" │ "))}`);
77
+ }
78
+ }
79
+ // ── 1. Max Pain ─────────────────────────────────────────────────
80
+ const mp = sections.max_pain;
81
+ const mpData = mp.data;
82
+ section(1, "MAX PAIN");
83
+ console.log(` ${formatPrice(mpData.strike)} (${pct(mpData.strike, spot)} from spot)`);
84
+ insight(mp.insight);
85
+ // ── 2. GEX ──────────────────────────────────────────────────────
86
+ const gex = sections.gex;
87
+ const gexData = gex.data;
88
+ section(2, "GAMMA EXPOSURE (GEX)");
89
+ console.log(` Gamma Flip: ${formatPrice(gexData.gamma_flip)} (${pct(gexData.gamma_flip, spot)})`);
90
+ console.log(` Call Gamma Wall: ${formatPrice(gexData.call_gamma_wall)} │ Put Gamma Wall: ${formatPrice(gexData.put_gamma_wall)}`);
91
+ console.log(` Regime: ${regimeBadge(gexData.regime)}`);
92
+ insight(gex.insight);
93
+ // ── 3. IV Term Structure ────────────────────────────────────────
94
+ const ivt = sections.iv_term;
95
+ const ivtData = ivt.data;
96
+ const ts = ivtData.term_structure;
97
+ section(3, "IV TERM STRUCTURE");
98
+ console.log(` Shape: ${chalk.white(String(ivtData.shape).toUpperCase())}`);
99
+ if (ts && ts.length > 0) {
100
+ for (const t of ts.slice(0, 8)) {
101
+ const expiry = String(t.expiry).padStart(9);
102
+ const dte = String(t.dte).padStart(3);
103
+ const iv = t.atm_iv.toFixed(1).padStart(5);
104
+ console.log(` ${chalk.dim(expiry)} (${dte}d) ${chalk.white(iv + "%")} ${bar(t.atm_iv)}`);
105
+ }
106
+ }
107
+ insight(ivt.insight);
108
+ // ── 4. Risk Reversal ────────────────────────────────────────────
109
+ const rr = sections.risk_reversal;
110
+ const rrData = rr.data;
111
+ section(4, "RISK REVERSAL (25-delta)");
112
+ console.log(` 25d RR: ${formatPercent(rrData.rr_25d)} — ${biasBadge(rrData.bias)}`);
113
+ const c25 = rrData.call_25d;
114
+ const p25 = rrData.put_25d;
115
+ if (c25 && p25) {
116
+ console.log(` 25d Call: ${formatPrice(c25.strike)} IV=${chalk.white(c25.iv.toFixed(1) + "%")} │ 25d Put: ${formatPrice(p25.strike)} IV=${chalk.white(p25.iv.toFixed(1) + "%")}`);
117
+ }
118
+ insight(rr.insight);
119
+ // ── 5. Put/Call Ratio ───────────────────────────────────────────
120
+ const pc = sections.pc_ratio;
121
+ const pcData = pc.data;
122
+ section(5, "PUT/CALL RATIO");
123
+ console.log(` By OI: ${chalk.bold.white(String(pcData.by_oi))} (${formatNumber(pcData.put_oi)}P / ${formatNumber(pcData.call_oi)}C)`);
124
+ console.log(` By Volume: ${chalk.bold.white(String(pcData.by_volume))} (${formatNumber(pcData.put_volume)}P / ${formatNumber(pcData.call_volume)}C)`);
125
+ insight(pc.insight);
126
+ // ── 6. IV Skew ──────────────────────────────────────────────────
127
+ const skew = sections.iv_skew;
128
+ const skewData = skew.data;
129
+ section(6, "IV SKEW");
130
+ console.log(` Slope: ${formatPercent(skewData.slope)}`);
131
+ const otmPuts = skewData.otm_puts;
132
+ const otmCalls = skewData.otm_calls;
133
+ if (otmPuts && otmPuts.length > 0) {
134
+ console.log(chalk.dim(" OTM Puts (below spot):"));
135
+ for (const p of otmPuts.slice(-3)) {
136
+ console.log(` ${formatPrice(p.strike).padStart(10)} (${formatPercent(p.moneyness_pct)}) IV=${chalk.white(p.iv.toFixed(1) + "%")}`);
137
+ }
138
+ }
139
+ if (otmCalls && otmCalls.length > 0) {
140
+ console.log(chalk.dim(" OTM Calls (above spot):"));
141
+ for (const c of otmCalls.slice(0, 3)) {
142
+ console.log(` ${formatPrice(c.strike).padStart(10)} (${formatPercent(c.moneyness_pct)}) IV=${chalk.white(c.iv.toFixed(1) + "%")}`);
143
+ }
144
+ }
145
+ insight(skew.insight);
146
+ // ── 7. Delta Exposure ───────────────────────────────────────────
147
+ const delta = sections.delta_exposure;
148
+ const deltaData = delta.data;
149
+ section(7, "DELTA EXPOSURE");
150
+ console.log(` Net: ${formatNumber(deltaData.net_delta_usd)} ${biasBadge(deltaData.bias)}`);
151
+ console.log(` Call: ${formatNumber(deltaData.call_delta_usd)} │ Put: ${formatNumber(deltaData.put_delta_usd)}`);
152
+ insight(delta.insight);
153
+ // ── 8. Call/Put Walls ───────────────────────────────────────────
154
+ const walls = sections.call_put_walls;
155
+ const wallsData = walls.data;
156
+ section(8, "CALL/PUT WALLS");
157
+ const cw = wallsData.call_walls;
158
+ const pw = wallsData.put_walls;
159
+ if (cw && cw.length > 0) {
160
+ console.log(chalk.dim(" Resistance (call walls):"));
161
+ const cwRows = cw.map((w) => [
162
+ formatPrice(w.strike),
163
+ formatPercent(w.pct_from_spot),
164
+ formatNumber(w.oi),
165
+ ]);
166
+ console.log(makeTable(["Strike", "From Spot", "OI"], cwRows));
167
+ }
168
+ if (pw && pw.length > 0) {
169
+ console.log(chalk.dim(" Support (put walls):"));
170
+ const pwRows = pw.map((w) => [
171
+ formatPrice(w.strike),
172
+ formatPercent(w.pct_from_spot),
173
+ formatNumber(w.oi),
174
+ ]);
175
+ console.log(makeTable(["Strike", "From Spot", "OI"], pwRows));
176
+ }
177
+ insight(walls.insight);
178
+ // ── 9. Block Trades ─────────────────────────────────────────────
179
+ const blocks = sections.block_trades;
180
+ const blocksData = blocks.data;
181
+ section(9, "BLOCK TRADES (>$1M premium)");
182
+ const blockCount = blocksData.count;
183
+ const blockBias = blocksData.bias;
184
+ console.log(` Blocks: ${chalk.white(String(blockCount))} │ Bias: ${biasBadge(blockBias)}`);
185
+ const blockTrades = blocksData.trades;
186
+ if (blockTrades && blockTrades.length > 0) {
187
+ const rows = blockTrades.slice(0, 5).map((b) => [
188
+ chalk.dim(String(b.time || "").slice(11, 19)),
189
+ b.direction.toUpperCase() === "BUY" ? chalk.green("BUY") : chalk.red("SELL"),
190
+ String(b.instrument),
191
+ formatNumber(b.premium_usd),
192
+ formatNumber(b.underlying_notional_usd),
193
+ chalk.white(b.iv.toFixed(1) + "%"),
194
+ ]);
195
+ console.log(makeTable(["Time", "Side", "Instrument", "Premium", "Notional", "IV"], rows));
196
+ }
197
+ insight(blocks.insight);
198
+ // ── 10. FOMC Event Study ────────────────────────────────────────
199
+ const event = sections.event_study;
200
+ const eventData = event.data;
201
+ section(10, "FOMC EVENT STUDY");
202
+ const sampleSize = eventData.sample_size;
203
+ if (sampleSize > 0) {
204
+ console.log(` Sample: ${chalk.white(String(sampleSize))} FOMC meetings`);
205
+ console.log(` Avg return: ${formatPercent(eventData.avg_total_pct)} (pre: ${formatPercent(eventData.avg_pre_pct)}, post: ${formatPercent(eventData.avg_post_pct)})`);
206
+ const events = eventData.events;
207
+ if (events && events.length > 0) {
208
+ const rows = events.map((e) => [
209
+ chalk.dim(String(e.date)),
210
+ formatPercent(e.return_pre_pct),
211
+ formatPercent(e.return_post_pct),
212
+ formatPercent(e.return_total_pct),
213
+ formatPrice(e.price_t0),
214
+ ]);
215
+ console.log(makeTable(["Date", "Pre%", "Post%", "Total%", "Price@T"], rows));
216
+ }
217
+ }
218
+ else {
219
+ console.log(chalk.dim(" No event study data available"));
220
+ }
221
+ insight(event.insight);
222
+ // ── Freshness Footer ────────────────────────────────────────────
223
+ if (freshness) {
224
+ console.log(chalk.bold("\n══════════════════════════════════════════════════════"));
225
+ const cached = freshness.is_cached;
226
+ const ttl = freshness.cache_ttl_seconds;
227
+ const nextFomc = freshness.next_fomc;
228
+ const daysToFomc = freshness.days_to_next_fomc;
229
+ const parts = [];
230
+ if (cached) {
231
+ parts.push(chalk.yellow(`cached (${freshness.cache_age_seconds}s old, ${freshness.cache_remaining_seconds}s remaining)`));
232
+ }
233
+ else {
234
+ parts.push(chalk.green(`fresh (TTL ${ttl}s)`));
235
+ }
236
+ if (nextFomc) {
237
+ parts.push(`Next FOMC: ${chalk.white(nextFomc)} (${daysToFomc}d)`);
238
+ }
239
+ console.log(` ${chalk.dim("Data:")} ${parts.join(chalk.dim(" │ "))}`);
240
+ const guide = freshness.staleness_guide;
241
+ if (guide) {
242
+ const rt = guide.real_time_sensitive || [];
243
+ const hr = guide.hourly_stable || [];
244
+ const dy = guide.daily_stable || [];
245
+ console.log(` ${chalk.dim("Staleness:")} ${chalk.red("●")} ${rt.join(", ")} ${chalk.yellow("●")} ${hr.join(", ")} ${chalk.green("●")} ${dy.join(", ")}`);
246
+ }
247
+ }
248
+ console.log();
249
+ }
250
+ // ── Badge helpers ─────────────────────────────────────────────────
251
+ function sentimentBadge(s) {
252
+ if (s === "bearish")
253
+ return chalk.bgRed.white(" BEARISH ");
254
+ if (s === "bullish")
255
+ return chalk.bgGreen.black(" BULLISH ");
256
+ return chalk.bgYellow.black(" NEUTRAL ");
257
+ }
258
+ function regimeBadge(r) {
259
+ if (r === "positive_gamma")
260
+ return chalk.bgBlue.white(" +γ RANGE-BOUND ");
261
+ if (r === "negative_gamma")
262
+ return chalk.bgRed.white(" -γ TRENDING ");
263
+ return chalk.dim(r);
264
+ }
265
+ function biasBadge(b) {
266
+ if (b === "bearish" || b === "short")
267
+ return chalk.red(b.toUpperCase());
268
+ if (b === "bullish" || b === "long")
269
+ return chalk.green(b.toUpperCase());
270
+ return chalk.yellow(b.toUpperCase());
271
+ }
272
+ // ── Command Registration ─────────────────────────────────────────
273
+ export function registerOptionsCommand(program) {
274
+ const cmd = program
275
+ .command("options <token>")
276
+ .description("Options intelligence report for a token")
277
+ .option("--token-address <addr>", "Token address (overrides positional)");
278
+ addJsonOption(cmd);
279
+ cmd.action(wrapAction(async (token, _opts) => {
280
+ const opts = _opts;
281
+ const args = {
282
+ token_address: opts.tokenAddress ?? token,
283
+ };
284
+ const spinner = startSpinner(`Fetching options data for ${chalk.cyan(args.token_address)}…`);
285
+ const result = await executeTool("options_report", args);
286
+ spinner.stop();
287
+ if (isJsonMode(opts)) {
288
+ printJson(result);
289
+ return;
290
+ }
291
+ // Check for tool-level error
292
+ const data = result.result;
293
+ if (data.status === "error") {
294
+ console.error(chalk.red(`\nError: ${data.error || data.message || "Unknown error"}`));
295
+ if (data.hint)
296
+ console.error(chalk.dim(`Hint: ${data.hint}`));
297
+ process.exit(1);
298
+ }
299
+ console.log(chalk.bold(`\n Options Intelligence ${formatDuration(result.durationMs)}\n`));
300
+ renderOptionsReport(data);
301
+ }));
302
+ }
303
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/commands/options.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { type TnConfig } from "./types.js";
2
+ export declare function getAuthToken(): string | undefined;
2
3
  export declare function loadConfig(): TnConfig;
3
4
  export declare function saveConfig(config: Partial<TnConfig>): void;
4
5
  export declare function getBaseUrl(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAK3D,wBAAgB,UAAU,IAAI,QAAQ,CAUrC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAK1D;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3D,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CASjD;AAED,wBAAgB,UAAU,IAAI,QAAQ,CAUrC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAK1D;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
package/dist/config.js CHANGED
@@ -4,6 +4,18 @@ import { homedir } from "node:os";
4
4
  import { DEFAULT_CONFIG } from "./types.js";
5
5
  const CONFIG_DIR = join(homedir(), ".truenorth");
6
6
  const CONFIG_FILE = join(CONFIG_DIR, "config.json");
7
+ const AUTH_TOKEN_FILE = join(CONFIG_DIR, "auth_token");
8
+ export function getAuthToken() {
9
+ try {
10
+ if (existsSync(AUTH_TOKEN_FILE)) {
11
+ return readFileSync(AUTH_TOKEN_FILE, "utf-8").trim();
12
+ }
13
+ }
14
+ catch {
15
+ // ignore
16
+ }
17
+ return undefined;
18
+ }
7
19
  export function loadConfig() {
8
20
  try {
9
21
  if (existsSync(CONFIG_FILE)) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAE3D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;IACD,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAyB;IAClD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;IACzC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC,OAAO,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAE3D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACpD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAEvD,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAChC,OAAO,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;IACD,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAyB;IAClD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;IACzC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC,OAAO,CAAC;AACzD,CAAC"}
package/dist/index.js CHANGED
@@ -11,6 +11,7 @@ import { registerEventsCommand } from "./commands/events.js";
11
11
  import { registerPerpsCommand } from "./commands/perps.js";
12
12
  import { registerDefiCommand } from "./commands/defi.js";
13
13
  import { registerSearchCommand } from "./commands/search.js";
14
+ import { registerOptionsCommand } from "./commands/options.js";
14
15
  const program = new Command();
15
16
  program
16
17
  .name("tn")
@@ -26,6 +27,7 @@ registerEventsCommand(program);
26
27
  registerPerpsCommand(program);
27
28
  registerDefiCommand(program);
28
29
  registerSearchCommand(program);
30
+ registerOptionsCommand(program);
29
31
  // ── config command ───────────────────────────────────────────────────
30
32
  program
31
33
  .command("config")
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truenorth-ai/cli",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "TrueNorth crypto analysis CLI — terminal interface for Discovery Agents tools",
5
5
  "type": "module",
6
6
  "bin": {
@@ -25,11 +25,6 @@
25
25
  "technical-analysis"
26
26
  ],
27
27
  "license": "MIT",
28
- "repository": {
29
- "type": "git",
30
- "url": "https://github.com/AAdventAI/projects",
31
- "directory": "truenorth-cli"
32
- },
33
28
  "dependencies": {
34
29
  "@inquirer/prompts": "^7.0.0",
35
30
  "chalk": "^5.3.0",