balchemy 0.1.19 → 0.1.21

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.
@@ -1,13 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Text } from "ink";
3
3
  import { getSessionBadge } from "./status-view.js";
4
+ import { displayWidth, truncateMiddle } from "./text-layout.js";
4
5
  function Divider({ width = 24 }) {
5
- return (_jsx(Box, { marginY: 0, children: _jsx(Text, { dimColor: true, children: "-".repeat(width) }) }));
6
- }
7
- function truncateMiddle(value, head, tail) {
8
- if (value.length <= head + tail + 1)
9
- return value;
10
- return `${value.slice(0, head)}...${value.slice(-tail)}`;
6
+ return (_jsx(Box, { marginY: 0, children: _jsx(Text, { dimColor: true, children: "-".repeat(Math.max(0, width)) }) }));
11
7
  }
12
8
  function formatUptime(ms) {
13
9
  const s = Math.floor(ms / 1000);
@@ -37,17 +33,33 @@ function toneColor(tone) {
37
33
  function Header({ title }) {
38
34
  return _jsx(Text, { color: "white", bold: true, children: title });
39
35
  }
40
- function walletLabel(chain) {
41
- return chain === "solana" ? "SOL" : "EVM";
36
+ function fitText(value, width) {
37
+ return truncateMiddle(value, Math.max(0, width));
38
+ }
39
+ export function walletLabel(chain) {
40
+ return chain === "solana" ? "SOL" : "BASE";
41
+ }
42
+ function walletRowParts(wallet, width) {
43
+ const label = walletLabel(wallet.chain);
44
+ const labelWidth = displayWidth(label);
45
+ const separator = width - labelWidth >= 5 ? " " : " ";
46
+ const addressWidth = Math.max(0, width - labelWidth - displayWidth(separator));
47
+ return {
48
+ label: fitText(label, width),
49
+ separator: addressWidth > 0 ? separator : "",
50
+ address: addressWidth > 0 ? truncateMiddle(wallet.address, addressWidth) : "",
51
+ };
42
52
  }
43
- function WalletRow({ wallet, compact, fullAddress, }) {
53
+ export function formatWalletRow(wallet, width) {
54
+ const row = walletRowParts(wallet, width);
55
+ return `${row.label}${row.separator}${row.address}`;
56
+ }
57
+ function WalletRow({ wallet, width, }) {
44
58
  const color = wallet.chain === "solana" ? "cyan" : "yellow";
45
- if (!fullAddress) {
46
- return (_jsxs(Box, { children: [_jsx(Text, { color: color, bold: true, children: walletLabel(wallet.chain) }), _jsxs(Text, { dimColor: true, children: [" ", truncateMiddle(wallet.address, compact ? 8 : 10, 5)] })] }, `${wallet.chain}-${wallet.address}`));
47
- }
48
- return (_jsxs(Box, { flexDirection: "column", marginBottom: compact ? 0 : 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: color, bold: true, children: walletLabel(wallet.chain) }), _jsx(Text, { dimColor: true, children: " copy:" })] }), _jsx(Text, { dimColor: true, children: wallet.address })] }, `${wallet.chain}-${wallet.address}`));
59
+ const row = walletRowParts(wallet, width);
60
+ return (_jsxs(Box, { width: width, children: [_jsx(Text, { color: color, bold: true, children: row.label }), row.address.length > 0 && _jsxs(Text, { dimColor: true, children: [row.separator, row.address] })] }, `${wallet.chain}-${wallet.address}`));
49
61
  }
50
- function selectWalletRows(wallets, limit) {
62
+ export function selectWalletRows(wallets, limit) {
51
63
  const rows = [];
52
64
  const solana = wallets.find((wallet) => wallet.chain === "solana");
53
65
  const evm = wallets.find((wallet) => wallet.chain === "base");
@@ -65,16 +77,29 @@ function selectWalletRows(wallets, limit) {
65
77
  return rows.slice(0, limit);
66
78
  }
67
79
  export function StatusPanel({ status, width = 30, compact = false, height, }) {
68
- const dividerWidth = compact ? 18 : Math.max(width - 4, 18);
69
- const spendWidth = compact ? 12 : 16;
80
+ const panelWidth = Math.max(18, width);
81
+ const contentWidth = Math.max(6, panelWidth - 4);
82
+ const dividerWidth = contentWidth;
83
+ const spendWidth = Math.min(compact ? 12 : 16, Math.max(8, contentWidth));
70
84
  const isLowBalance = status.balanceSol < 0.01;
71
85
  const sessionBadge = getSessionBadge(status);
72
86
  const shortLayout = height !== undefined && height < 22;
73
87
  const walletRows = selectWalletRows(status.wallets, 2);
74
88
  const positionRows = status.activeTrades.slice(0, 2);
89
+ const statusTextWidth = Math.max(0, contentWidth - displayWidth(sessionBadge.label) - 2);
90
+ const statusText = fitText(status.status, statusTextWidth);
91
+ const providerText = status.provider
92
+ ? fitText(`${status.provider} / ${status.model ?? "default"}`, contentWidth)
93
+ : fitText("provider pending", contentWidth);
94
+ const capitalText = fitText(`${status.balanceSol.toFixed(4)} SOL $${status.balanceUsd.toFixed(2)}`, contentWidth);
95
+ const lowBalanceText = fitText("Fund before live", contentWidth);
96
+ const runtimeText = fitText(`E ${status.eventsReceived} D ${status.decisionsExecuted} T ${status.tradesExecuted}`, contentWidth);
97
+ const runtimeWithUptime = fitText(`E ${status.eventsReceived} D ${status.decisionsExecuted} T ${status.tradesExecuted} ${formatUptime(status.uptime)}`, contentWidth);
98
+ const llmSpendText = `$${status.llmCostToday.toFixed(2)} / $${status.maxDailyLlmCost.toFixed(2)}`;
99
+ const inlineSpendWidth = Math.max(0, contentWidth - spendWidth - 2);
75
100
  if (shortLayout) {
76
- return (_jsxs(Box, { flexDirection: "column", width: compact ? undefined : width, height: height, borderStyle: "round", borderColor: "gray", paddingX: 1, paddingY: 0, overflowY: "hidden", children: [_jsxs(Box, { children: [_jsx(Text, { color: toneColor(sessionBadge.tone), bold: true, children: sessionBadge.label }), _jsxs(Text, { dimColor: true, children: [" ", status.status] })] }), _jsx(Text, { dimColor: true, children: status.provider ? `${status.provider} / ${truncateMiddle(status.model ?? "default", compact ? 10 : 13, 4)}` : "provider pending" }), _jsxs(Box, { children: [_jsxs(Text, { color: "green", bold: true, children: [status.balanceSol.toFixed(4), " SOL"] }), _jsxs(Text, { dimColor: true, children: [" $", status.balanceUsd.toFixed(2)] })] }), isLowBalance && _jsx(Text, { color: "yellow", children: "Fund before live execution" }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "white", bold: true, children: "Wallets" }), walletRows.length === 0 && _jsx(Text, { dimColor: true, children: " pending setup" })] }), walletRows.map((wallet) => (_jsx(WalletRow, { wallet: wallet, compact: compact, fullAddress: true }, `${wallet.chain}-${wallet.address}`))), _jsxs(Box, { marginTop: 1, children: [_jsxs(Text, { color: "cyan", children: ["E ", status.eventsReceived] }), _jsxs(Text, { dimColor: true, children: [" D ", status.decisionsExecuted, " "] }), _jsxs(Text, { color: "green", children: ["T ", status.tradesExecuted] }), _jsxs(Text, { dimColor: true, children: [" ", formatUptime(status.uptime)] })] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "white", bold: true, children: "Positions" }), positionRows.length === 0 && _jsx(Text, { dimColor: true, children: " none" })] }), positionRows.map((trade) => (_jsxs(Box, { children: [_jsx(Text, { color: trade.action === "buy" ? "green" : "red", bold: true, children: trade.action === "buy" ? "BUY" : "SELL" }), _jsxs(Text, { dimColor: true, children: [" ", truncateMiddle(trade.token, compact ? 6 : 7, 3), " ", trade.amount] })] }, `${trade.token}-${trade.action}-${trade.amount}-${trade.timestamp}`))), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "cyan", children: meter(status.llmCostToday, status.maxDailyLlmCost, spendWidth) }), _jsxs(Text, { dimColor: true, children: [" $", status.llmCostToday.toFixed(2), " / $", status.maxDailyLlmCost.toFixed(2)] })] })] }));
101
+ return (_jsxs(Box, { flexDirection: "column", width: panelWidth, height: height, borderStyle: "round", borderColor: "gray", paddingX: 1, paddingY: 0, overflowY: "hidden", children: [_jsxs(Box, { children: [_jsx(Text, { color: toneColor(sessionBadge.tone), bold: true, children: sessionBadge.label }), statusText.length > 0 && _jsxs(Text, { dimColor: true, children: [" ", statusText] })] }), _jsx(Text, { dimColor: true, children: providerText }), _jsx(Text, { color: "green", bold: true, children: capitalText }), isLowBalance && _jsx(Text, { color: "yellow", children: lowBalanceText }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "white", bold: true, children: "Wallets" }), walletRows.length === 0 && _jsx(Text, { dimColor: true, children: " pending setup" })] }), walletRows.map((wallet) => (_jsx(WalletRow, { wallet: wallet, width: contentWidth }, `${wallet.chain}-${wallet.address}`))), _jsx(Text, { color: "cyan", children: runtimeWithUptime }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "white", bold: true, children: "Positions" }), positionRows.length === 0 && _jsx(Text, { dimColor: true, children: " none" })] }), positionRows.map((trade) => (_jsxs(Box, { children: [_jsx(Text, { color: trade.action === "buy" ? "green" : "red", bold: true, children: trade.action === "buy" ? "BUY" : "SELL" }), _jsxs(Text, { dimColor: true, children: [" ", fitText(`${trade.token} ${trade.amount}`, Math.max(8, contentWidth - 6))] })] }, `${trade.token}-${trade.action}-${trade.amount}-${trade.timestamp}`))), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "cyan", children: meter(status.llmCostToday, status.maxDailyLlmCost, spendWidth) }), inlineSpendWidth > 0 && _jsxs(Text, { dimColor: true, children: [" ", fitText(llmSpendText, inlineSpendWidth)] })] })] }));
77
102
  }
78
- return (_jsxs(Box, { flexDirection: "column", width: compact ? undefined : width, height: height, borderStyle: "round", borderColor: "gray", paddingX: 1, paddingY: 0, overflowY: "hidden", children: [_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: toneColor(sessionBadge.tone), bold: true, children: sessionBadge.label }), _jsxs(Text, { dimColor: true, children: [" ", status.status] })] }), _jsx(Text, { dimColor: true, children: status.provider ? `${status.provider} / ${truncateMiddle(status.model ?? "default", compact ? 10 : 13, 4)}` : "provider pending" })] }), _jsx(Divider, { width: dividerWidth }), _jsx(Header, { title: "Capital" }), _jsxs(Box, { children: [_jsxs(Text, { color: "green", bold: true, children: [status.balanceSol.toFixed(4), " SOL"] }), _jsxs(Text, { dimColor: true, children: [" $", status.balanceUsd.toFixed(2)] })] }), isLowBalance && _jsx(Text, { color: "yellow", children: "Fund before live execution" }), _jsx(Divider, { width: dividerWidth }), _jsx(Header, { title: "Wallets" }), status.wallets.length === 0 ? (_jsx(Text, { dimColor: true, children: "pending setup" })) : (walletRows.map((wallet) => (_jsx(WalletRow, { wallet: wallet, compact: compact, fullAddress: true }, `${wallet.chain}-${wallet.address}`)))), status.wallets.length > walletRows.length && _jsxs(Text, { dimColor: true, children: ["+", status.wallets.length - walletRows.length, " more"] }), _jsx(Divider, { width: dividerWidth }), _jsx(Header, { title: "Runtime" }), _jsxs(Box, { children: [_jsxs(Text, { color: "cyan", children: ["E ", status.eventsReceived] }), _jsxs(Text, { dimColor: true, children: [" D ", status.decisionsExecuted, " "] }), _jsxs(Text, { color: "green", children: ["T ", status.tradesExecuted] })] }), _jsxs(Text, { dimColor: true, children: ["Uptime ", formatUptime(status.uptime)] }), _jsx(Divider, { width: dividerWidth }), _jsx(Header, { title: "Positions" }), status.activeTrades.length === 0 && _jsx(Text, { dimColor: true, children: "No live positions" }), positionRows.map((trade) => (_jsxs(Box, { children: [_jsx(Text, { color: trade.action === "buy" ? "green" : "red", bold: true, children: trade.action === "buy" ? "BUY" : "SELL" }), _jsxs(Text, { dimColor: true, children: [" ", truncateMiddle(trade.token, compact ? 6 : 7, 3), " ", trade.amount] })] }, `${trade.token}-${trade.action}-${trade.amount}-${trade.timestamp}`))), status.activeTrades.length > 2 && _jsxs(Text, { dimColor: true, children: ["+", status.activeTrades.length - 2, " more"] }), _jsx(Divider, { width: dividerWidth }), _jsx(Header, { title: "LLM" }), _jsx(Text, { color: "cyan", children: meter(status.llmCostToday, status.maxDailyLlmCost, spendWidth) }), _jsx(Text, { dimColor: true, children: `$${status.llmCostToday.toFixed(2)} / $${status.maxDailyLlmCost.toFixed(2)}` })] }));
103
+ return (_jsxs(Box, { flexDirection: "column", width: panelWidth, height: height, borderStyle: "round", borderColor: "gray", paddingX: 1, paddingY: 0, overflowY: "hidden", children: [_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: toneColor(sessionBadge.tone), bold: true, children: sessionBadge.label }), statusText.length > 0 && _jsxs(Text, { dimColor: true, children: [" ", statusText] })] }), _jsx(Text, { dimColor: true, children: providerText })] }), _jsx(Divider, { width: dividerWidth }), _jsx(Header, { title: "Capital" }), _jsx(Text, { color: "green", bold: true, children: capitalText }), isLowBalance && _jsx(Text, { color: "yellow", children: lowBalanceText }), _jsx(Divider, { width: dividerWidth }), _jsx(Header, { title: "Wallets" }), status.wallets.length === 0 ? (_jsx(Text, { dimColor: true, children: "pending setup" })) : (walletRows.map((wallet) => (_jsx(WalletRow, { wallet: wallet, width: contentWidth }, `${wallet.chain}-${wallet.address}`)))), status.wallets.length > walletRows.length && _jsxs(Text, { dimColor: true, children: ["+", status.wallets.length - walletRows.length, " more"] }), _jsx(Divider, { width: dividerWidth }), _jsx(Header, { title: "Runtime" }), _jsx(Text, { color: "cyan", children: runtimeText }), _jsx(Text, { dimColor: true, children: fitText(`Uptime ${formatUptime(status.uptime)}`, contentWidth) }), _jsx(Divider, { width: dividerWidth }), _jsx(Header, { title: "Positions" }), status.activeTrades.length === 0 && _jsx(Text, { dimColor: true, children: "No live positions" }), positionRows.map((trade) => (_jsxs(Box, { children: [_jsx(Text, { color: trade.action === "buy" ? "green" : "red", bold: true, children: trade.action === "buy" ? "BUY" : "SELL" }), _jsxs(Text, { dimColor: true, children: [" ", fitText(`${trade.token} ${trade.amount}`, Math.max(8, contentWidth - 6))] })] }, `${trade.token}-${trade.action}-${trade.amount}-${trade.timestamp}`))), status.activeTrades.length > 2 && _jsxs(Text, { dimColor: true, children: ["+", status.activeTrades.length - 2, " more"] }), _jsx(Divider, { width: dividerWidth }), _jsx(Header, { title: "LLM" }), _jsx(Text, { color: "cyan", children: meter(status.llmCostToday, status.maxDailyLlmCost, spendWidth) }), _jsx(Text, { dimColor: true, children: fitText(llmSpendText, contentWidth) })] }));
79
104
  }
80
105
  //# sourceMappingURL=StatusPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatusPanel.js","sourceRoot":"","sources":["../../src/tui/StatusPanel.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,SAAS,OAAO,CAAC,EAAE,KAAK,GAAG,EAAE,EAAsB;IACjD,OAAO,CACL,KAAC,GAAG,IAAC,OAAO,EAAE,CAAC,YACb,KAAC,IAAI,IAAC,QAAQ,kBAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAQ,GACrC,CACP,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,IAAY,EAAE,IAAY;IAC/D,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,YAAY,CAAC,EAAU;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IACrC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,GAAG,CAAC;AACjB,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,KAAa;IACtD,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IACzC,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3E,CAAC;AASD,SAAS,SAAS,CAAC,IAAgD;IACjE,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC;IACpC,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,MAAM,CAAC;IACpC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,MAAM,CAAC,EAAE,KAAK,EAAqB;IAC1C,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,kBAAE,KAAK,GAAQ,CAAC;AACjD,CAAC;AAED,SAAS,WAAW,CAAC,KAA0B;IAC7C,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5C,CAAC;AAED,SAAS,SAAS,CAAC,EACjB,MAAM,EACN,OAAO,EACP,WAAW,GAKZ;IACC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE5D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,kBAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAQ,EAC3D,MAAC,IAAI,IAAC,QAAQ,yBAAI,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAQ,KAFrE,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAGvC,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IAA2C,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aACjG,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,kBAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAQ,EAC3D,KAAC,IAAI,IAAC,QAAQ,8BAAe,IACzB,EACN,KAAC,IAAI,IAAC,QAAQ,kBAAE,MAAM,CAAC,OAAO,GAAQ,KAL9B,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAMvC,CACP,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAqB,EAAE,KAAa;IAC5D,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IACnE,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;IAE9D,IAAI,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,GAAG;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAExB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK;YAAE,MAAM;QAChC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACrG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,KAAK,GAAG,EAAE,EACV,OAAO,GAAG,KAAK,EACf,MAAM,GACW;IACjB,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAC9C,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,GAAG,EAAE,CAAC;IACxD,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAErD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAClC,MAAM,EAAE,MAAM,EACd,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,SAAS,EAAC,QAAQ,aAElB,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,kBAAE,YAAY,CAAC,KAAK,GAAQ,EAC3E,MAAC,IAAI,IAAC,QAAQ,yBAAI,MAAM,CAAC,MAAM,IAAQ,IACnC,EACN,KAAC,IAAI,IAAC,QAAQ,kBACX,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,MAAM,cAAc,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,GAC5H,EAEP,MAAC,GAAG,eACF,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,mBAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAClE,MAAC,IAAI,IAAC,QAAQ,0BAAK,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAQ,IACnD,EACL,YAAY,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,2CAAkC,EAEvE,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,8BAAe,EACtC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,KAAC,IAAI,IAAC,QAAQ,sCAAuB,IAC7D,EACL,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC1B,KAAC,SAAS,IAA2C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,IAAxF,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAyD,CAC7G,CAAC,EAEF,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,mBAAI,MAAM,CAAC,cAAc,IAAQ,EACnD,MAAC,IAAI,IAAC,QAAQ,2BAAM,MAAM,CAAC,iBAAiB,UAAU,EACtD,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,mBAAI,MAAM,CAAC,cAAc,IAAQ,EACpD,MAAC,IAAI,IAAC,QAAQ,yBAAI,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAQ,IACjD,EAEN,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,gCAAiB,EACxC,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,KAAC,IAAI,IAAC,QAAQ,6BAAc,IACtD,EACL,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3B,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,kBACxD,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GACnC,EACP,MAAC,IAAI,IAAC,QAAQ,yBAAI,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAI,KAAK,CAAC,MAAM,IAAQ,KAJjF,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAKvE,CACP,CAAC,EAEF,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,GAAQ,EAC1F,MAAC,IAAI,IAAC,QAAQ,0BAAK,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,UAAM,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,IAAQ,IAC5F,IACF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAClC,MAAM,EAAE,MAAM,EACd,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,SAAS,EAAC,QAAQ,aAElB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,kBAAE,YAAY,CAAC,KAAK,GAAQ,EAC3E,MAAC,IAAI,IAAC,QAAQ,yBAAI,MAAM,CAAC,MAAM,IAAQ,IACnC,EACN,KAAC,IAAI,IAAC,QAAQ,kBACX,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,MAAM,cAAc,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,GAC5H,IACH,EAEN,KAAC,OAAO,IAAC,KAAK,EAAE,YAAY,GAAI,EAEhC,KAAC,MAAM,IAAC,KAAK,EAAC,SAAS,GAAG,EAC1B,MAAC,GAAG,eACF,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,mBAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAClE,MAAC,IAAI,IAAC,QAAQ,0BAAK,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAQ,IACnD,EACL,YAAY,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,2CAAkC,EAEvE,KAAC,OAAO,IAAC,KAAK,EAAE,YAAY,GAAI,EAEhC,KAAC,MAAM,IAAC,KAAK,EAAC,SAAS,GAAG,EACzB,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC7B,KAAC,IAAI,IAAC,QAAQ,oCAAqB,CACpC,CAAC,CAAC,CAAC,CACF,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACzB,KAAC,SAAS,IAA2C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,IAAxF,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAyD,CAC7G,CAAC,CACH,EACA,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,MAAC,IAAI,IAAC,QAAQ,wBAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,aAAa,EAErH,KAAC,OAAO,IAAC,KAAK,EAAE,YAAY,GAAI,EAEhC,KAAC,MAAM,IAAC,KAAK,EAAC,SAAS,GAAG,EAC1B,MAAC,GAAG,eACF,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,mBAAI,MAAM,CAAC,cAAc,IAAQ,EACnD,MAAC,IAAI,IAAC,QAAQ,2BAAM,MAAM,CAAC,iBAAiB,UAAU,EACtD,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,mBAAI,MAAM,CAAC,cAAc,IAAQ,IAChD,EACN,MAAC,IAAI,IAAC,QAAQ,8BAAS,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAQ,EAE1D,KAAC,OAAO,IAAC,KAAK,EAAE,YAAY,GAAI,EAEhC,KAAC,MAAM,IAAC,KAAK,EAAC,WAAW,GAAG,EAC3B,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,KAAC,IAAI,IAAC,QAAQ,wCAAyB,EAC3E,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3B,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,kBACxD,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GACnC,EACP,MAAC,IAAI,IAAC,QAAQ,yBAAI,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAI,KAAK,CAAC,MAAM,IAAQ,KAJjF,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAKvE,CACP,CAAC,EACD,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,MAAC,IAAI,IAAC,QAAQ,wBAAG,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,aAAa,EAE/F,KAAC,OAAO,IAAC,KAAK,EAAE,YAAY,GAAI,EAEhC,KAAC,MAAM,IAAC,KAAK,EAAC,KAAK,GAAG,EACtB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,GAAQ,EAC1F,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAQ,IAChG,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"StatusPanel.js","sourceRoot":"","sources":["../../src/tui/StatusPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,17 @@
1
+ export type SetupChain = "solana" | "base";
1
2
  export interface SetupStatusSnapshot {
2
3
  developerWalletBound?: boolean;
3
4
  walletsConfigured?: boolean;
4
5
  tradingConfigured?: boolean;
5
6
  slippageConfigured?: boolean;
6
7
  strategyConfigured?: boolean;
8
+ solanaWalletBound?: boolean;
9
+ selectedChains?: SetupChain[];
10
+ nextStep?: string | null;
7
11
  }
12
+ export declare function parseNetworkSelection(value: string): SetupChain[] | null;
8
13
  export declare function parseSetupStatusSnapshot(structured?: Record<string, unknown>): SetupStatusSnapshot;
14
+ export declare function getInitialSetupStep(status: SetupStatusSnapshot): "developer-wallet" | "networks" | "solana-recovery-wallet" | "slippage" | "strategy" | "subscriptions";
15
+ export declare function isSetupReady(status: SetupStatusSnapshot | null): boolean;
9
16
  export declare function buildSetupRequiredMessage(status: SetupStatusSnapshot): string;
10
17
  //# sourceMappingURL=setup-guidance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup-guidance.d.ts","sourceRoot":"","sources":["../../src/tui/setup-guidance.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,wBAAwB,CACtC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,mBAAmB,CAUrB;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAkB7E"}
1
+ {"version":3,"file":"setup-guidance.d.ts","sourceRoot":"","sources":["../../src/tui/setup-guidance.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,mBAAmB;IAClC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAYD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI,CAQxE;AAED,wBAAgB,wBAAwB,CACtC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,mBAAmB,CAarB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,kBAAkB,GAAG,UAAU,GAAG,wBAAwB,GAAG,UAAU,GAAG,UAAU,GAAG,eAAe,CAOvK;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,GAAG,OAAO,CAKxE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAsB7E"}
@@ -1,3 +1,27 @@
1
+ function normalizeSelectedChains(value) {
2
+ if (!Array.isArray(value))
3
+ return [];
4
+ const chains = [];
5
+ for (const item of value) {
6
+ if (item === "solana" || item === "solana-devnet")
7
+ chains.push("solana");
8
+ if (item === "base" || item === "base-sepolia")
9
+ chains.push("base");
10
+ }
11
+ return [...new Set(chains)];
12
+ }
13
+ export function parseNetworkSelection(value) {
14
+ const normalized = value.trim().toLowerCase();
15
+ const wantsBoth = /\b(both|ikisi|hepsi|all)\b/.test(normalized) || (normalized.includes("solana") && normalized.includes("base"));
16
+ if (wantsBoth)
17
+ return ["solana", "base"];
18
+ const chains = [];
19
+ if (/\b(sol|solana|devnet)\b/.test(normalized))
20
+ chains.push("solana");
21
+ if (/\b(base|evm|sepolia|0x)\b/.test(normalized))
22
+ chains.push("base");
23
+ return chains.length > 0 ? chains : null;
24
+ }
1
25
  export function parseSetupStatusSnapshot(structured) {
2
26
  return {
3
27
  developerWalletBound: structured?.developerWalletBound === true
@@ -6,8 +30,33 @@ export function parseSetupStatusSnapshot(structured) {
6
30
  tradingConfigured: structured?.tradingConfigured === true,
7
31
  slippageConfigured: structured?.slippageConfigured === true,
8
32
  strategyConfigured: structured?.strategyConfigured === true,
33
+ solanaWalletBound: structured?.solanaWalletBound === true,
34
+ selectedChains: normalizeSelectedChains(structured?.selectedChains),
35
+ nextStep: typeof structured?.nextStep === "string" ? structured.nextStep : null,
9
36
  };
10
37
  }
38
+ export function getInitialSetupStep(status) {
39
+ if (!status.developerWalletBound)
40
+ return "developer-wallet";
41
+ if (!status.walletsConfigured)
42
+ return "networks";
43
+ if (status.selectedChains?.includes("solana") && !status.solanaWalletBound)
44
+ return "solana-recovery-wallet";
45
+ if (!status.slippageConfigured)
46
+ return "slippage";
47
+ if (!status.strategyConfigured && !status.tradingConfigured)
48
+ return "strategy";
49
+ return "subscriptions";
50
+ }
51
+ export function isSetupReady(status) {
52
+ if (!status)
53
+ return false;
54
+ if (status.nextStep)
55
+ return false;
56
+ if (status.selectedChains?.includes("solana") && !status.solanaWalletBound)
57
+ return false;
58
+ return status.tradingConfigured === true && status.walletsConfigured === true;
59
+ }
11
60
  export function buildSetupRequiredMessage(status) {
12
61
  if (!status.developerWalletBound) {
13
62
  return "Setup incomplete. I will guide you here in chat. First: provide your Base/EVM 0x developer wallet for recovery and Hub access.";
@@ -15,11 +64,14 @@ export function buildSetupRequiredMessage(status) {
15
64
  if (!status.walletsConfigured) {
16
65
  return "Setup incomplete. Next: choose the trading networks: Solana, Base (EVM), or both. I will create the selected trading wallets.";
17
66
  }
67
+ if (status.selectedChains?.includes("solana") && !status.solanaWalletBound) {
68
+ return "Setup incomplete. Solana trading was selected. Next: provide your Solana recovery/withdrawal wallet.";
69
+ }
18
70
  if (!status.slippageConfigured) {
19
71
  return "Setup incomplete. Next: configure slippage. You can answer in percent or bps, for example 3% = 300 bps.";
20
72
  }
21
73
  if (!status.strategyConfigured && !status.tradingConfigured) {
22
- return "Setup incomplete. Next: define hard limits and describe your strategy so live execution can be configured.";
74
+ return "Setup incomplete. Next: define hard limits and describe your trading strategy so live execution can be configured.";
23
75
  }
24
76
  return "Setup incomplete. Continue the remaining setup steps in chat before live trading starts.";
25
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setup-guidance.js","sourceRoot":"","sources":["../../src/tui/setup-guidance.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,wBAAwB,CACtC,UAAoC;IAEpC,OAAO;QACL,oBAAoB,EAClB,UAAU,EAAE,oBAAoB,KAAK,IAAI;eACtC,UAAU,EAAE,WAAW,KAAK,IAAI;QACrC,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,KAAK,IAAI;QACzD,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,KAAK,IAAI;QACzD,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,KAAK,IAAI;QAC3D,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,KAAK,IAAI;KAC5D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAA2B;IACnE,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACjC,OAAO,gIAAgI,CAAC;IAC1I,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC9B,OAAO,+HAA+H,CAAC;IACzI,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC/B,OAAO,yGAAyG,CAAC;IACnH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC5D,OAAO,4GAA4G,CAAC;IACtH,CAAC;IAED,OAAO,0FAA0F,CAAC;AACpG,CAAC"}
1
+ {"version":3,"file":"setup-guidance.js","sourceRoot":"","sources":["../../src/tui/setup-guidance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function stripAnsi(value: string): string;
2
+ export declare function displayWidth(value: string): number;
3
+ export declare function sliceToWidth(value: string, maxWidth: number): string;
4
+ export declare function truncateEnd(value: string, maxWidth: number, suffix?: string): string;
5
+ export declare function truncateMiddle(value: string, maxWidth: number): string;
6
+ export declare function wrapText(value: string, maxWidth: number, maxLines?: number): string[];
7
+ //# sourceMappingURL=text-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-layout.d.ts","sourceRoot":"","sources":["../../src/tui/text-layout.ts"],"names":[],"mappings":"AAyBA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYpE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAQ,GAAG,MAAM,CAKnF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoBtE;AAuDD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAWrF"}
@@ -0,0 +1,136 @@
1
+ const ANSI_PATTERN = /\u001b\[[0-9;?]*[ -/]*[@-~]/g;
2
+ function charWidth(char) {
3
+ const codePoint = char.codePointAt(0) ?? 0;
4
+ if (codePoint === 0)
5
+ return 0;
6
+ if (codePoint < 32 || (codePoint >= 0x7f && codePoint < 0xa0))
7
+ return 0;
8
+ if (codePoint >= 0x300 && codePoint <= 0x36f)
9
+ return 0;
10
+ if ((codePoint >= 0x1100 && codePoint <= 0x115f)
11
+ || (codePoint >= 0x2329 && codePoint <= 0x232a)
12
+ || (codePoint >= 0x2e80 && codePoint <= 0xa4cf)
13
+ || (codePoint >= 0xac00 && codePoint <= 0xd7a3)
14
+ || (codePoint >= 0xf900 && codePoint <= 0xfaff)
15
+ || (codePoint >= 0xfe10 && codePoint <= 0xfe19)
16
+ || (codePoint >= 0xfe30 && codePoint <= 0xfe6f)
17
+ || (codePoint >= 0xff00 && codePoint <= 0xff60)
18
+ || (codePoint >= 0xffe0 && codePoint <= 0xffe6)) {
19
+ return 2;
20
+ }
21
+ return 1;
22
+ }
23
+ export function stripAnsi(value) {
24
+ return value.replace(ANSI_PATTERN, "");
25
+ }
26
+ export function displayWidth(value) {
27
+ return Array.from(stripAnsi(value)).reduce((width, char) => width + charWidth(char), 0);
28
+ }
29
+ export function sliceToWidth(value, maxWidth) {
30
+ if (maxWidth <= 0)
31
+ return "";
32
+ let used = 0;
33
+ let result = "";
34
+ for (const char of Array.from(stripAnsi(value))) {
35
+ const width = charWidth(char);
36
+ if (used + width > maxWidth)
37
+ break;
38
+ result += char;
39
+ used += width;
40
+ }
41
+ return result;
42
+ }
43
+ export function truncateEnd(value, maxWidth, suffix = "...") {
44
+ const clean = stripAnsi(value);
45
+ if (displayWidth(clean) <= maxWidth)
46
+ return clean;
47
+ if (maxWidth <= displayWidth(suffix))
48
+ return sliceToWidth(suffix, maxWidth);
49
+ return `${sliceToWidth(clean, maxWidth - displayWidth(suffix))}${suffix}`;
50
+ }
51
+ export function truncateMiddle(value, maxWidth) {
52
+ const clean = stripAnsi(value);
53
+ if (displayWidth(clean) <= maxWidth)
54
+ return clean;
55
+ if (maxWidth <= 3)
56
+ return sliceToWidth("...", maxWidth);
57
+ const sideWidth = Math.max(1, Math.floor((maxWidth - 3) / 2));
58
+ const tailWidth = Math.max(1, maxWidth - 3 - sideWidth);
59
+ const chars = Array.from(clean);
60
+ let tail = "";
61
+ let used = 0;
62
+ for (let i = chars.length - 1; i >= 0; i -= 1) {
63
+ const char = chars[i];
64
+ const width = charWidth(char);
65
+ if (used + width > tailWidth)
66
+ break;
67
+ tail = `${char}${tail}`;
68
+ used += width;
69
+ }
70
+ return `${sliceToWidth(clean, sideWidth)}...${tail}`;
71
+ }
72
+ function breakLongToken(token, maxWidth) {
73
+ const chunks = [];
74
+ let current = "";
75
+ let used = 0;
76
+ for (const char of Array.from(stripAnsi(token))) {
77
+ const width = charWidth(char);
78
+ if (current.length > 0 && used + width > maxWidth) {
79
+ chunks.push(current);
80
+ current = "";
81
+ used = 0;
82
+ }
83
+ if (width > maxWidth)
84
+ continue;
85
+ current += char;
86
+ used += width;
87
+ }
88
+ if (current.length > 0)
89
+ chunks.push(current);
90
+ return chunks;
91
+ }
92
+ function wrapPlainLine(line, maxWidth) {
93
+ if (maxWidth <= 0)
94
+ return [""];
95
+ if (line.trim().length === 0)
96
+ return [""];
97
+ const tokens = stripAnsi(line).trim().split(/\s+/);
98
+ const lines = [];
99
+ let current = "";
100
+ for (const token of tokens) {
101
+ const tokenWidth = displayWidth(token);
102
+ if (tokenWidth > maxWidth) {
103
+ if (current.length > 0) {
104
+ lines.push(current);
105
+ current = "";
106
+ }
107
+ lines.push(...breakLongToken(token, maxWidth));
108
+ continue;
109
+ }
110
+ const candidate = current.length === 0 ? token : `${current} ${token}`;
111
+ if (displayWidth(candidate) <= maxWidth) {
112
+ current = candidate;
113
+ }
114
+ else {
115
+ if (current.length > 0)
116
+ lines.push(current);
117
+ current = token;
118
+ }
119
+ }
120
+ if (current.length > 0)
121
+ lines.push(current);
122
+ return lines.length > 0 ? lines : [""];
123
+ }
124
+ export function wrapText(value, maxWidth, maxLines) {
125
+ const width = Math.max(1, maxWidth);
126
+ const wrapped = stripAnsi(value)
127
+ .replace(/\n{3,}/g, "\n\n")
128
+ .split("\n")
129
+ .flatMap((line) => wrapPlainLine(line, width));
130
+ if (maxLines === undefined || wrapped.length <= maxLines)
131
+ return wrapped;
132
+ const visible = wrapped.slice(0, Math.max(1, maxLines));
133
+ visible[visible.length - 1] = truncateEnd("... trimmed in activity log", width);
134
+ return visible;
135
+ }
136
+ //# sourceMappingURL=text-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-layout.js","sourceRoot":"","sources":["../../src/tui/text-layout.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "balchemy",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "description": "Scaffold and run a Balchemy autonomous AI trading agent in 5 minutes",
@@ -57,7 +57,7 @@
57
57
  "typescript": "5.8.3"
58
58
  },
59
59
  "scripts": {
60
- "build": "pnpm --dir ../sdk build && tsc -p tsconfig.json",
60
+ "build": "pnpm --dir ../balchemy-agent-sdk build && tsc -p tsconfig.json",
61
61
  "typecheck": "tsc --noEmit -p tsconfig.json"
62
62
  }
63
63
  }
@@ -0,0 +1,71 @@
1
+ # Balchemy Agent Configuration — Full Example
2
+ # All three preset strategies are shown here as commented blocks.
3
+ # Uncomment the one you want to use and delete the others.
4
+ #
5
+ # Environment variable references: ${VAR_NAME}
6
+ # These are resolved from .env at startup.
7
+
8
+ mcp_endpoint: "${MCP_ENDPOINT}"
9
+ api_key: "${BALCHEMY_API_KEY}"
10
+
11
+ llm:
12
+ provider: anthropic # anthropic | openai
13
+ api_key: "${LLM_API_KEY}"
14
+ model: claude-haiku-4-5 # Haiku is fast + cheap, ideal for reactive trading
15
+ max_daily_usd: 5 # Hard budget cap. Agent pauses when hit.
16
+ timeout_ms: 10000
17
+
18
+ # ─── Strategy: DCA Accumulator ─────────────────────────────────────────────────
19
+ strategy: dca-accumulator
20
+
21
+ behavior_rules:
22
+ version: "1"
23
+ preset: dca-accumulator
24
+ dca:
25
+ target_token: SOL
26
+ amount_usd: 10 # Buy $10 per interval
27
+ interval_hours: 24
28
+ max_total_usd: 1000 # Stop after $1000 invested
29
+ risk:
30
+ max_single_trade_usd: 10
31
+ pause_on_drawdown_pct: 30 # Pause DCA if portfolio drops 30%
32
+
33
+ # ─── Strategy: Memecoin Sniper ──────────────────────────────────────────────────
34
+ # strategy: memecoin-sniper
35
+ # behavior_rules:
36
+ # version: "1"
37
+ # preset: memecoin-sniper
38
+ # filters:
39
+ # min_liquidity_usd: 10000
40
+ # max_market_cap_usd: 5000000
41
+ # require_verified_contract: false
42
+ # entry:
43
+ # trigger: launch_signal
44
+ # max_position_usd: 50
45
+ # slippage_bps: 300
46
+ # exit:
47
+ # take_profit_pct: 100
48
+ # stop_loss_pct: 50
49
+ # max_hold_minutes: 60
50
+
51
+ # ─── Strategy: Swing Trader ────────────────────────────────────────────────────
52
+ # strategy: swing-trader
53
+ # behavior_rules:
54
+ # version: "1"
55
+ # preset: swing-trader
56
+ # entry:
57
+ # indicators: [rsi, macd]
58
+ # rsi_oversold: 30
59
+ # max_position_usd: 200
60
+ # slippage_bps: 100
61
+ # exit:
62
+ # take_profit_pct: 20
63
+ # stop_loss_pct: 10
64
+ # min_hold_hours: 2
65
+ # max_hold_hours: 72
66
+
67
+ # ─── Webhook (optional) ─────────────────────────────────────────────────────────
68
+ # Uncomment to receive Balchemy push events directly (faster than SSE polling)
69
+ # webhook:
70
+ # port: 4242
71
+ # secret: "${WEBHOOK_SECRET}"