@kernel.chat/kbot 3.23.0 → 3.26.1

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 (85) hide show
  1. package/README.md +33 -22
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +3 -1
  4. package/dist/agent.js.map +1 -1
  5. package/dist/agents/trader.d.ts +32 -0
  6. package/dist/agents/trader.d.ts.map +1 -0
  7. package/dist/agents/trader.js +190 -0
  8. package/dist/agents/trader.js.map +1 -0
  9. package/dist/cli.js +219 -15
  10. package/dist/cli.js.map +1 -1
  11. package/dist/context.d.ts +4 -1
  12. package/dist/context.d.ts.map +1 -1
  13. package/dist/context.js +28 -1
  14. package/dist/context.js.map +1 -1
  15. package/dist/doctor.d.ts.map +1 -1
  16. package/dist/doctor.js +71 -1
  17. package/dist/doctor.js.map +1 -1
  18. package/dist/inference.d.ts +9 -0
  19. package/dist/inference.d.ts.map +1 -1
  20. package/dist/inference.js +38 -5
  21. package/dist/inference.js.map +1 -1
  22. package/dist/introspection.d.ts +17 -0
  23. package/dist/introspection.d.ts.map +1 -0
  24. package/dist/introspection.js +490 -0
  25. package/dist/introspection.js.map +1 -0
  26. package/dist/learned-router.d.ts.map +1 -1
  27. package/dist/learned-router.js +3 -0
  28. package/dist/learned-router.js.map +1 -1
  29. package/dist/machine.d.ts +85 -0
  30. package/dist/machine.d.ts.map +1 -0
  31. package/dist/machine.js +538 -0
  32. package/dist/machine.js.map +1 -0
  33. package/dist/matrix.d.ts.map +1 -1
  34. package/dist/matrix.js +11 -0
  35. package/dist/matrix.js.map +1 -1
  36. package/dist/provider-fallback.d.ts +6 -0
  37. package/dist/provider-fallback.d.ts.map +1 -1
  38. package/dist/provider-fallback.js +29 -0
  39. package/dist/provider-fallback.js.map +1 -1
  40. package/dist/synthesis-engine.d.ts +175 -0
  41. package/dist/synthesis-engine.d.ts.map +1 -0
  42. package/dist/synthesis-engine.js +783 -0
  43. package/dist/synthesis-engine.js.map +1 -0
  44. package/dist/tool-pipeline.d.ts +7 -1
  45. package/dist/tool-pipeline.d.ts.map +1 -1
  46. package/dist/tool-pipeline.js +39 -1
  47. package/dist/tool-pipeline.js.map +1 -1
  48. package/dist/tools/finance.d.ts +2 -0
  49. package/dist/tools/finance.d.ts.map +1 -0
  50. package/dist/tools/finance.js +1116 -0
  51. package/dist/tools/finance.js.map +1 -0
  52. package/dist/tools/finance.test.d.ts +2 -0
  53. package/dist/tools/finance.test.d.ts.map +1 -0
  54. package/dist/tools/finance.test.js +245 -0
  55. package/dist/tools/finance.test.js.map +1 -0
  56. package/dist/tools/index.d.ts.map +1 -1
  57. package/dist/tools/index.js +5 -0
  58. package/dist/tools/index.js.map +1 -1
  59. package/dist/tools/machine-tools.d.ts +2 -0
  60. package/dist/tools/machine-tools.d.ts.map +1 -0
  61. package/dist/tools/machine-tools.js +690 -0
  62. package/dist/tools/machine-tools.js.map +1 -0
  63. package/dist/tools/sentiment.d.ts +2 -0
  64. package/dist/tools/sentiment.d.ts.map +1 -0
  65. package/dist/tools/sentiment.js +513 -0
  66. package/dist/tools/sentiment.js.map +1 -0
  67. package/dist/tools/stocks.d.ts +2 -0
  68. package/dist/tools/stocks.d.ts.map +1 -0
  69. package/dist/tools/stocks.js +345 -0
  70. package/dist/tools/stocks.js.map +1 -0
  71. package/dist/tools/stocks.test.d.ts +2 -0
  72. package/dist/tools/stocks.test.d.ts.map +1 -0
  73. package/dist/tools/stocks.test.js +82 -0
  74. package/dist/tools/stocks.test.js.map +1 -0
  75. package/dist/tools/wallet.d.ts +2 -0
  76. package/dist/tools/wallet.d.ts.map +1 -0
  77. package/dist/tools/wallet.js +698 -0
  78. package/dist/tools/wallet.js.map +1 -0
  79. package/dist/tools/wallet.test.d.ts +2 -0
  80. package/dist/tools/wallet.test.d.ts.map +1 -0
  81. package/dist/tools/wallet.test.js +205 -0
  82. package/dist/tools/wallet.test.js.map +1 -0
  83. package/dist/ui.js +1 -1
  84. package/dist/ui.js.map +1 -1
  85. package/package.json +94 -42
@@ -0,0 +1,345 @@
1
+ // kbot Stock Market Tools — Equities, ETFs, indices via free APIs
2
+ // Uses Yahoo Finance v8 API (no auth required for basic quotes and history).
3
+ // All data is delayed ~15min for free tier.
4
+ import { registerTool } from './index.js';
5
+ // ── Helpers ──
6
+ async function yahooQuote(symbol) {
7
+ const url = `https://query1.finance.yahoo.com/v8/finance/chart/${encodeURIComponent(symbol)}?interval=1d&range=5d`;
8
+ const res = await fetch(url, {
9
+ headers: { 'User-Agent': 'KBot/3.0 (Stock Tools)' },
10
+ signal: AbortSignal.timeout(10_000),
11
+ });
12
+ if (!res.ok)
13
+ throw new Error(`Yahoo Finance: ${res.status}`);
14
+ const data = await res.json();
15
+ return data.chart?.result?.[0];
16
+ }
17
+ async function yahooHistory(symbol, range, interval) {
18
+ const url = `https://query1.finance.yahoo.com/v8/finance/chart/${encodeURIComponent(symbol)}?interval=${interval}&range=${range}`;
19
+ const res = await fetch(url, {
20
+ headers: { 'User-Agent': 'KBot/3.0 (Stock Tools)' },
21
+ signal: AbortSignal.timeout(10_000),
22
+ });
23
+ if (!res.ok)
24
+ throw new Error(`Yahoo Finance: ${res.status}`);
25
+ const data = await res.json();
26
+ return data.chart?.result?.[0];
27
+ }
28
+ async function yahooSearch(query) {
29
+ const url = `https://query1.finance.yahoo.com/v1/finance/search?q=${encodeURIComponent(query)}&quotesCount=10&newsCount=0`;
30
+ const res = await fetch(url, {
31
+ headers: { 'User-Agent': 'KBot/3.0 (Stock Tools)' },
32
+ signal: AbortSignal.timeout(8_000),
33
+ });
34
+ if (!res.ok)
35
+ return [];
36
+ const data = await res.json();
37
+ return data.quotes || [];
38
+ }
39
+ function fmt(n, d = 2) {
40
+ return n.toLocaleString('en-US', { minimumFractionDigits: d, maximumFractionDigits: d });
41
+ }
42
+ // ── Register Tools ──
43
+ export function registerStockTools() {
44
+ registerTool({
45
+ name: 'stock_quote',
46
+ description: 'Get a real-time stock quote — price, change, volume, market cap, P/E ratio, 52-week range. Works for stocks, ETFs, and indices (e.g. AAPL, SPY, ^GSPC).',
47
+ parameters: {
48
+ symbol: { type: 'string', description: 'Stock ticker symbol (e.g. "AAPL", "MSFT", "SPY", "^GSPC" for S&P 500)', required: true },
49
+ },
50
+ tier: 'free',
51
+ timeout: 15_000,
52
+ async execute(args) {
53
+ const symbol = String(args.symbol).toUpperCase();
54
+ const result = await yahooQuote(symbol);
55
+ if (!result)
56
+ return `Could not find data for "${symbol}". Check the ticker symbol.`;
57
+ const meta = result.meta;
58
+ const indicators = result.indicators?.quote?.[0];
59
+ if (!meta || !indicators)
60
+ return `No quote data for "${symbol}".`;
61
+ const price = meta.regularMarketPrice ?? 0;
62
+ const prevClose = meta.chartPreviousClose ?? meta.previousClose ?? price;
63
+ const change = price - prevClose;
64
+ const changePct = prevClose ? (change / prevClose) * 100 : 0;
65
+ // Get last 5 days of closes for sparkline context
66
+ const closes = indicators.close?.filter((c) => c != null) || [];
67
+ const volumes = indicators.volume?.filter((v) => v != null) || [];
68
+ const highs = indicators.high?.filter((h) => h != null) || [];
69
+ const lows = indicators.low?.filter((l) => l != null) || [];
70
+ const high5d = highs.length ? Math.max(...highs) : 0;
71
+ const low5d = lows.length ? Math.min(...lows) : 0;
72
+ const avgVol = volumes.length ? volumes.reduce((a, b) => a + b, 0) / volumes.length : 0;
73
+ return [
74
+ `## ${meta.shortName || symbol} (${symbol})`,
75
+ `**Exchange**: ${meta.exchangeName || '?'} | **Currency**: ${meta.currency || 'USD'}`,
76
+ '',
77
+ `**Price**: $${fmt(price)}`,
78
+ `**Change**: ${change >= 0 ? '+' : ''}$${fmt(change)} (${changePct >= 0 ? '+' : ''}${fmt(changePct)}%)`,
79
+ `**5d Range**: $${fmt(low5d)} — $${fmt(high5d)}`,
80
+ `**Avg Volume (5d)**: ${Math.round(avgVol).toLocaleString()}`,
81
+ '',
82
+ `*Data from Yahoo Finance — ~15 min delay. ${new Date().toISOString().split('T')[0]}*`,
83
+ ].join('\n');
84
+ },
85
+ });
86
+ registerTool({
87
+ name: 'stock_history',
88
+ description: 'Get historical price data for a stock, ETF, or index. Returns OHLCV candles with summary statistics.',
89
+ parameters: {
90
+ symbol: { type: 'string', description: 'Stock ticker (e.g. "AAPL", "SPY")', required: true },
91
+ range: { type: 'string', description: 'Time range: 1mo, 3mo, 6mo, 1y, 2y, 5y, max (default: 6mo)', default: '6mo' },
92
+ },
93
+ tier: 'free',
94
+ timeout: 15_000,
95
+ async execute(args) {
96
+ const symbol = String(args.symbol).toUpperCase();
97
+ const range = String(args.range || '6mo');
98
+ // Pick appropriate interval based on range
99
+ const intervalMap = {
100
+ '1mo': '1d', '3mo': '1d', '6mo': '1wk', '1y': '1wk',
101
+ '2y': '1wk', '5y': '1mo', 'max': '1mo',
102
+ };
103
+ const interval = intervalMap[range] || '1wk';
104
+ const result = await yahooHistory(symbol, range, interval);
105
+ if (!result)
106
+ return `No history for "${symbol}".`;
107
+ const timestamps = result.timestamp || [];
108
+ const quotes = result.indicators?.quote?.[0];
109
+ if (!timestamps.length || !quotes)
110
+ return `No data.`;
111
+ const lines = [
112
+ `## ${symbol} — ${range} History (${interval} candles)`,
113
+ '',
114
+ '| Date | Open | High | Low | Close | Volume |',
115
+ '|------|------|------|-----|-------|--------|',
116
+ ];
117
+ // Show at most 25 rows
118
+ const step = Math.max(1, Math.floor(timestamps.length / 25));
119
+ for (let i = 0; i < timestamps.length; i += step) {
120
+ const date = new Date(timestamps[i] * 1000).toISOString().split('T')[0];
121
+ const o = quotes.open?.[i];
122
+ const h = quotes.high?.[i];
123
+ const l = quotes.low?.[i];
124
+ const c = quotes.close?.[i];
125
+ const v = quotes.volume?.[i];
126
+ if (c == null)
127
+ continue;
128
+ lines.push(`| ${date} | $${fmt(o)} | $${fmt(h)} | $${fmt(l)} | $${fmt(c)} | ${Math.round(v || 0).toLocaleString()} |`);
129
+ }
130
+ // Summary
131
+ const allCloses = (quotes.close || []).filter((c) => c != null);
132
+ if (allCloses.length >= 2) {
133
+ const first = allCloses[0];
134
+ const last = allCloses[allCloses.length - 1];
135
+ const ret = ((last - first) / first) * 100;
136
+ const allHighs = (quotes.high || []).filter((h) => h != null);
137
+ const allLows = (quotes.low || []).filter((l) => l != null);
138
+ const periodHigh = Math.max(...allHighs);
139
+ const periodLow = Math.min(...allLows);
140
+ lines.push('', `**Period Return**: ${ret >= 0 ? '+' : ''}${fmt(ret)}%`, `**Period High**: $${fmt(periodHigh)} | **Low**: $${fmt(periodLow)}`);
141
+ }
142
+ return lines.join('\n');
143
+ },
144
+ });
145
+ registerTool({
146
+ name: 'stock_compare',
147
+ description: 'Compare multiple stocks side by side — price, returns, volume. Great for evaluating alternatives (e.g. AAPL vs MSFT vs GOOGL).',
148
+ parameters: {
149
+ symbols: { type: 'string', description: 'Comma-separated tickers (e.g. "AAPL,MSFT,GOOGL")', required: true },
150
+ range: { type: 'string', description: 'Time range for returns: 1mo, 3mo, 6mo, 1y (default: 3mo)', default: '3mo' },
151
+ },
152
+ tier: 'free',
153
+ timeout: 20_000,
154
+ async execute(args) {
155
+ const symbols = String(args.symbols).split(',').map(s => s.trim().toUpperCase()).filter(Boolean);
156
+ if (symbols.length < 2)
157
+ return 'Need at least 2 symbols to compare.';
158
+ if (symbols.length > 8)
159
+ return 'Max 8 symbols for comparison.';
160
+ const range = String(args.range || '3mo');
161
+ const results = await Promise.all(symbols.map(async (sym) => {
162
+ try {
163
+ const data = await yahooHistory(sym, range, '1d');
164
+ if (!data)
165
+ return null;
166
+ const closes = (data.indicators?.quote?.[0]?.close || []).filter((c) => c != null);
167
+ const volumes = (data.indicators?.quote?.[0]?.volume || []).filter((v) => v != null);
168
+ const first = closes[0] || 0;
169
+ const last = closes[closes.length - 1] || 0;
170
+ const ret = first ? ((last - first) / first) * 100 : 0;
171
+ const avgVol = volumes.length ? volumes.reduce((a, b) => a + b, 0) / volumes.length : 0;
172
+ return {
173
+ symbol: sym,
174
+ name: data.meta?.shortName || sym,
175
+ price: last,
176
+ returnPct: ret,
177
+ avgVolume: avgVol,
178
+ high: Math.max(...(data.indicators?.quote?.[0]?.high || []).filter((h) => h != null)),
179
+ low: Math.min(...(data.indicators?.quote?.[0]?.low || []).filter((l) => l != null)),
180
+ };
181
+ }
182
+ catch {
183
+ return null;
184
+ }
185
+ }));
186
+ const valid = results.filter(Boolean);
187
+ if (!valid.length)
188
+ return 'Could not fetch data for any of those symbols.';
189
+ const lines = [
190
+ `## Stock Comparison (${range})`,
191
+ '',
192
+ '| Ticker | Name | Price | Return | Avg Volume | High | Low |',
193
+ '|--------|------|-------|--------|------------|------|-----|',
194
+ ];
195
+ // Sort by return descending
196
+ valid.sort((a, b) => b.returnPct - a.returnPct);
197
+ for (const s of valid) {
198
+ lines.push(`| ${s.symbol} | ${s.name} | $${fmt(s.price)} | ${s.returnPct >= 0 ? '+' : ''}${fmt(s.returnPct)}% | ${Math.round(s.avgVolume).toLocaleString()} | $${fmt(s.high)} | $${fmt(s.low)} |`);
199
+ }
200
+ const best = valid[0];
201
+ const worst = valid[valid.length - 1];
202
+ lines.push('', `**Best performer**: ${best.symbol} (${best.returnPct >= 0 ? '+' : ''}${fmt(best.returnPct)}%)`, `**Worst performer**: ${worst.symbol} (${worst.returnPct >= 0 ? '+' : ''}${fmt(worst.returnPct)}%)`, `**Spread**: ${fmt(best.returnPct - worst.returnPct)}%`);
203
+ return lines.join('\n');
204
+ },
205
+ });
206
+ registerTool({
207
+ name: 'stock_search',
208
+ description: 'Search for stocks, ETFs, and indices by name or keyword. Returns ticker symbols and exchange info.',
209
+ parameters: {
210
+ query: { type: 'string', description: 'Company name, keyword, or partial ticker (e.g. "apple", "electric vehicle", "AI")', required: true },
211
+ },
212
+ tier: 'free',
213
+ timeout: 10_000,
214
+ async execute(args) {
215
+ const query = String(args.query);
216
+ const results = await yahooSearch(query);
217
+ if (!results.length)
218
+ return `No results for "${query}".`;
219
+ const lines = [
220
+ `## Search: "${query}"`,
221
+ '',
222
+ '| Ticker | Name | Type | Exchange |',
223
+ '|--------|------|------|----------|',
224
+ ];
225
+ for (const r of results.slice(0, 10)) {
226
+ lines.push(`| ${r.symbol} | ${r.shortname || r.longname || '?'} | ${r.quoteType || '?'} | ${r.exchange || '?'} |`);
227
+ }
228
+ lines.push('', '*Use the ticker symbol with `stock_quote` or `stock_history`.*');
229
+ return lines.join('\n');
230
+ },
231
+ });
232
+ registerTool({
233
+ name: 'stock_screener',
234
+ description: 'Screen stocks by sector or theme. Returns a curated watchlist of major companies in a given category.',
235
+ parameters: {
236
+ sector: { type: 'string', description: 'Sector or theme: "tech", "ai", "energy", "finance", "health", "ev", "defense", "crypto-stocks", "dividends", "etf-popular"', required: true },
237
+ },
238
+ tier: 'free',
239
+ timeout: 20_000,
240
+ async execute(args) {
241
+ const sector = String(args.sector).toLowerCase();
242
+ const watchlists = {
243
+ tech: ['AAPL', 'MSFT', 'GOOGL', 'META', 'AMZN', 'NVDA', 'TSM', 'AVGO', 'ORCL', 'CRM'],
244
+ ai: ['NVDA', 'MSFT', 'GOOGL', 'META', 'AMD', 'PLTR', 'SNOW', 'AI', 'PATH', 'SMCI'],
245
+ energy: ['XOM', 'CVX', 'COP', 'SLB', 'EOG', 'PXD', 'OXY', 'MPC', 'PSX', 'VLO'],
246
+ finance: ['JPM', 'BAC', 'WFC', 'GS', 'MS', 'BLK', 'SCHW', 'C', 'AXP', 'V'],
247
+ health: ['UNH', 'JNJ', 'LLY', 'PFE', 'ABBV', 'MRK', 'TMO', 'ABT', 'DHR', 'BMY'],
248
+ ev: ['TSLA', 'RIVN', 'LCID', 'NIO', 'LI', 'XPEV', 'F', 'GM', 'TM', 'BYDDY'],
249
+ defense: ['LMT', 'RTX', 'NOC', 'GD', 'BA', 'LHX', 'HII', 'TDG', 'LDOS', 'BAH'],
250
+ 'crypto-stocks': ['COIN', 'MSTR', 'MARA', 'RIOT', 'CLSK', 'HUT', 'BITF', 'CIFR', 'SQ', 'PYPL'],
251
+ dividends: ['JNJ', 'PG', 'KO', 'PEP', 'MCD', 'O', 'VZ', 'T', 'IBM', 'XOM'],
252
+ 'etf-popular': ['SPY', 'QQQ', 'IWM', 'DIA', 'VTI', 'VOO', 'ARKK', 'XLF', 'XLE', 'GLD'],
253
+ };
254
+ const tickers = watchlists[sector];
255
+ if (!tickers) {
256
+ return `Unknown sector "${sector}". Available: ${Object.keys(watchlists).join(', ')}`;
257
+ }
258
+ // Fetch quotes for all tickers in parallel
259
+ const quotes = await Promise.all(tickers.map(async (sym) => {
260
+ try {
261
+ const data = await yahooQuote(sym);
262
+ if (!data)
263
+ return null;
264
+ const meta = data.meta;
265
+ const price = meta?.regularMarketPrice ?? 0;
266
+ const prevClose = meta?.chartPreviousClose ?? price;
267
+ const change = price - prevClose;
268
+ const changePct = prevClose ? (change / prevClose) * 100 : 0;
269
+ return { symbol: sym, name: meta?.shortName || sym, price, changePct };
270
+ }
271
+ catch {
272
+ return null;
273
+ }
274
+ }));
275
+ const valid = quotes.filter(Boolean);
276
+ const lines = [
277
+ `## ${sector.toUpperCase()} Watchlist`,
278
+ '',
279
+ '| Ticker | Name | Price | Day Change |',
280
+ '|--------|------|-------|------------|',
281
+ ];
282
+ for (const q of valid) {
283
+ lines.push(`| ${q.symbol} | ${q.name} | $${fmt(q.price)} | ${q.changePct >= 0 ? '+' : ''}${fmt(q.changePct)}% |`);
284
+ }
285
+ const avg = valid.reduce((s, q) => s + q.changePct, 0) / (valid.length || 1);
286
+ lines.push('', `**Sector Average**: ${avg >= 0 ? '+' : ''}${fmt(avg)}%`);
287
+ return lines.join('\n');
288
+ },
289
+ });
290
+ registerTool({
291
+ name: 'market_indices',
292
+ description: 'Get current levels for major market indices — S&P 500, Nasdaq, Dow, Russell 2000, VIX, and global markets.',
293
+ parameters: {},
294
+ tier: 'free',
295
+ timeout: 20_000,
296
+ async execute() {
297
+ const indices = [
298
+ { symbol: '^GSPC', name: 'S&P 500' },
299
+ { symbol: '^IXIC', name: 'Nasdaq' },
300
+ { symbol: '^DJI', name: 'Dow Jones' },
301
+ { symbol: '^RUT', name: 'Russell 2000' },
302
+ { symbol: '^VIX', name: 'VIX (Fear)' },
303
+ { symbol: '^FTSE', name: 'FTSE 100' },
304
+ { symbol: '^N225', name: 'Nikkei 225' },
305
+ { symbol: '^HSI', name: 'Hang Seng' },
306
+ ];
307
+ const results = await Promise.all(indices.map(async (idx) => {
308
+ try {
309
+ const data = await yahooQuote(idx.symbol);
310
+ if (!data)
311
+ return null;
312
+ const meta = data.meta;
313
+ const price = meta?.regularMarketPrice ?? 0;
314
+ const prevClose = meta?.chartPreviousClose ?? price;
315
+ const changePct = prevClose ? ((price - prevClose) / prevClose) * 100 : 0;
316
+ return { ...idx, price, changePct };
317
+ }
318
+ catch {
319
+ return null;
320
+ }
321
+ }));
322
+ const valid = results.filter(Boolean);
323
+ const lines = [
324
+ '## Market Indices',
325
+ '',
326
+ '| Index | Level | Day Change |',
327
+ '|-------|-------|------------|',
328
+ ];
329
+ for (const idx of valid) {
330
+ lines.push(`| ${idx.name} | ${fmt(idx.price, idx.name === 'VIX (Fear)' ? 2 : 0)} | ${idx.changePct >= 0 ? '+' : ''}${fmt(idx.changePct)}% |`);
331
+ }
332
+ const vix = valid.find(v => v.name === 'VIX (Fear)');
333
+ if (vix) {
334
+ const mood = vix.price < 15 ? 'Low volatility (complacent)' :
335
+ vix.price < 20 ? 'Normal' :
336
+ vix.price < 30 ? 'Elevated fear' :
337
+ 'High fear / panic';
338
+ lines.push('', `**VIX Mood**: ${mood}`);
339
+ }
340
+ lines.push('', `*${new Date().toISOString().split('T')[0]} — data delayed ~15 min*`);
341
+ return lines.join('\n');
342
+ },
343
+ });
344
+ }
345
+ //# sourceMappingURL=stocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stocks.js","sourceRoot":"","sources":["../../src/tools/stocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stocks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stocks.test.d.ts","sourceRoot":"","sources":["../../src/tools/stocks.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,82 @@
1
+ // kbot Stock Tools — Unit tests
2
+ // Tests screener watchlists and formatting logic (no network calls).
3
+ import { describe, it, expect } from 'vitest';
4
+ // ── Screener Watchlist Tests ──
5
+ describe('Stock Screener Watchlists', () => {
6
+ const watchlists = {
7
+ tech: ['AAPL', 'MSFT', 'GOOGL', 'META', 'AMZN', 'NVDA', 'TSM', 'AVGO', 'ORCL', 'CRM'],
8
+ ai: ['NVDA', 'MSFT', 'GOOGL', 'META', 'AMD', 'PLTR', 'SNOW', 'AI', 'PATH', 'SMCI'],
9
+ energy: ['XOM', 'CVX', 'COP', 'SLB', 'EOG', 'PXD', 'OXY', 'MPC', 'PSX', 'VLO'],
10
+ finance: ['JPM', 'BAC', 'WFC', 'GS', 'MS', 'BLK', 'SCHW', 'C', 'AXP', 'V'],
11
+ health: ['UNH', 'JNJ', 'LLY', 'PFE', 'ABBV', 'MRK', 'TMO', 'ABT', 'DHR', 'BMY'],
12
+ ev: ['TSLA', 'RIVN', 'LCID', 'NIO', 'LI', 'XPEV', 'F', 'GM', 'TM', 'BYDDY'],
13
+ defense: ['LMT', 'RTX', 'NOC', 'GD', 'BA', 'LHX', 'HII', 'TDG', 'LDOS', 'BAH'],
14
+ 'crypto-stocks': ['COIN', 'MSTR', 'MARA', 'RIOT', 'CLSK', 'HUT', 'BITF', 'CIFR', 'SQ', 'PYPL'],
15
+ dividends: ['JNJ', 'PG', 'KO', 'PEP', 'MCD', 'O', 'VZ', 'T', 'IBM', 'XOM'],
16
+ 'etf-popular': ['SPY', 'QQQ', 'IWM', 'DIA', 'VTI', 'VOO', 'ARKK', 'XLF', 'XLE', 'GLD'],
17
+ };
18
+ it('each watchlist has 10 tickers', () => {
19
+ for (const [sector, tickers] of Object.entries(watchlists)) {
20
+ expect(tickers).toHaveLength(10);
21
+ }
22
+ });
23
+ it('all tickers are uppercase strings', () => {
24
+ for (const tickers of Object.values(watchlists)) {
25
+ for (const t of tickers) {
26
+ expect(t).toBe(t.toUpperCase());
27
+ expect(t.length).toBeGreaterThan(0);
28
+ }
29
+ }
30
+ });
31
+ it('no duplicate tickers within a watchlist', () => {
32
+ for (const [sector, tickers] of Object.entries(watchlists)) {
33
+ const unique = new Set(tickers);
34
+ expect(unique.size).toBe(tickers.length);
35
+ }
36
+ });
37
+ it('has all expected sectors', () => {
38
+ const expected = ['tech', 'ai', 'energy', 'finance', 'health', 'ev', 'defense', 'crypto-stocks', 'dividends', 'etf-popular'];
39
+ for (const sector of expected) {
40
+ expect(watchlists[sector]).toBeDefined();
41
+ }
42
+ });
43
+ });
44
+ // ── Formatting Tests ──
45
+ describe('Number Formatting', () => {
46
+ function fmt(n, d = 2) {
47
+ return n.toLocaleString('en-US', { minimumFractionDigits: d, maximumFractionDigits: d });
48
+ }
49
+ it('formats prices with 2 decimals', () => {
50
+ expect(fmt(150.5)).toBe('150.50');
51
+ });
52
+ it('formats large numbers with commas', () => {
53
+ expect(fmt(1234567.89)).toBe('1,234,567.89');
54
+ });
55
+ it('formats small numbers with custom decimals', () => {
56
+ expect(fmt(0.001234, 6)).toBe('0.001234');
57
+ });
58
+ it('formats zero', () => {
59
+ expect(fmt(0)).toBe('0.00');
60
+ });
61
+ it('formats negative numbers', () => {
62
+ expect(fmt(-42.5)).toBe('-42.50');
63
+ });
64
+ });
65
+ // ── Yahoo Finance URL Construction Tests ──
66
+ describe('Yahoo Finance URL Construction', () => {
67
+ it('encodes ticker symbols correctly', () => {
68
+ const symbol = '^GSPC'; // S&P 500
69
+ const encoded = encodeURIComponent(symbol);
70
+ expect(encoded).toBe('%5EGSPC');
71
+ });
72
+ it('maps range to interval correctly', () => {
73
+ const intervalMap = {
74
+ '1mo': '1d', '3mo': '1d', '6mo': '1wk', '1y': '1wk',
75
+ '2y': '1wk', '5y': '1mo', 'max': '1mo',
76
+ };
77
+ expect(intervalMap['1mo']).toBe('1d');
78
+ expect(intervalMap['6mo']).toBe('1wk');
79
+ expect(intervalMap['5y']).toBe('1mo');
80
+ });
81
+ });
82
+ //# sourceMappingURL=stocks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stocks.test.js","sourceRoot":"","sources":["../../src/tools/stocks.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function registerWalletTools(): void;
2
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/tools/wallet.ts"],"names":[],"mappings":"AAqLA,wBAAgB,mBAAmB,IAAI,IAAI,CAokB1C"}