balchemy 0.1.20 → 0.1.22

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.
@@ -3,6 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState, useCallback, useEffect, useRef } from "react";
4
4
  import { Box, Text, useInput } from "ink";
5
5
  import { TextInput } from "@inkjs/ui";
6
+ import { displayWidth, truncateEnd, truncateMiddle, wrapText } from "./text-layout.js";
6
7
  function formatTime(ts) {
7
8
  return new Date(ts).toLocaleTimeString(undefined, {
8
9
  hour: "2-digit",
@@ -36,42 +37,58 @@ function compactText(text, maxChars) {
36
37
  return normalized;
37
38
  return `${normalized.slice(0, maxChars - 24).trimEnd()}\n... trimmed in activity log`;
38
39
  }
39
- function MessageCard({ label, labelColor, msg, children, }) {
40
- return (_jsxs(Box, { flexDirection: "column", marginBottom: 0, children: [_jsxs(Box, { marginBottom: 0, children: [_jsx(Text, { color: labelColor, bold: true, children: label }), _jsxs(Text, { dimColor: true, children: [" ", formatTime(msg.timestamp)] })] }), _jsx(Box, { paddingLeft: 1, children: children })] }));
40
+ function WrappedText({ text, width, color, bold = false, maxLines, }) {
41
+ const lines = wrapText(text, width, maxLines);
42
+ return (_jsx(Box, { flexDirection: "column", width: width, children: lines.map((line, index) => (_jsx(Text, { color: color, bold: bold, children: line }, `${index}-${line}`))) }));
41
43
  }
42
- function AgentMsg({ msg }) {
43
- return (_jsx(MessageCard, { borderColor: "cyan", label: "AI", labelColor: "cyan", msg: msg, children: _jsx(Text, { color: "white", wrap: "wrap", children: compactText(msg.text, 560) }) }));
44
+ function MessageCard({ label, labelColor, msg, width, children, }) {
45
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 0, width: width, children: [_jsxs(Box, { marginBottom: 0, children: [_jsx(Text, { color: labelColor, bold: true, children: label }), _jsxs(Text, { dimColor: true, children: [" ", formatTime(msg.timestamp)] })] }), _jsx(Box, { paddingLeft: 1, width: width, children: children })] }));
44
46
  }
45
- function UserMsg({ msg }) {
46
- return (_jsx(MessageCard, { borderColor: "yellow", label: "YOU", labelColor: "yellow", msg: msg, children: _jsx(Text, { color: "white", wrap: "wrap", children: compactText(msg.text, 300) }) }));
47
+ function AgentMsg({ msg, width }) {
48
+ return (_jsx(MessageCard, { label: "AI", labelColor: "cyan", msg: msg, width: width, children: _jsx(WrappedText, { color: "white", width: Math.max(8, width - 1), text: compactText(msg.text, 560), maxLines: 8 }) }));
47
49
  }
48
- function SystemMsg({ msg }) {
50
+ function UserMsg({ msg, width }) {
51
+ return (_jsx(MessageCard, { label: "YOU", labelColor: "yellow", msg: msg, width: width, children: _jsx(WrappedText, { color: "white", width: Math.max(8, width - 1), text: compactText(msg.text, 300), maxLines: 5 }) }));
52
+ }
53
+ function SystemMsg({ msg, width }) {
49
54
  const meta = getSystemMeta(msg.text);
50
- return (_jsxs(Box, { marginBottom: 0, children: [_jsx(Text, { color: meta.color, bold: true, children: meta.label }), _jsxs(Text, { dimColor: true, children: [" ", formatTime(msg.timestamp), " "] }), _jsx(Text, { dimColor: true, wrap: "truncate-end", children: compactText(meta.body, 220) })] }));
55
+ const prefix = `${meta.label} ${formatTime(msg.timestamp)} `;
56
+ const bodyWidth = Math.max(0, width - displayWidth(prefix));
57
+ const bodyText = compactText(meta.body, 220).replace(/\s+/g, " ");
58
+ const body = bodyWidth > 0 ? truncateMiddle(bodyText, bodyWidth) : "";
59
+ return (_jsxs(Box, { marginBottom: 0, width: width, children: [_jsx(Text, { color: meta.color, bold: true, children: meta.label }), _jsxs(Text, { dimColor: true, children: [" ", formatTime(msg.timestamp), " "] }), body.length > 0 && _jsx(Text, { dimColor: true, children: body })] }));
51
60
  }
52
- function TradeMsg({ msg }) {
61
+ function TradeMsg({ msg, width }) {
53
62
  const isBuy = msg.action === "buy";
54
63
  const color = isBuy ? "green" : "red";
55
- return (_jsx(MessageCard, { borderColor: color, label: isBuy ? "BUY" : "SELL", labelColor: color, msg: msg, children: _jsx(Text, { color: color, bold: true, wrap: "wrap", children: compactText(msg.text, 300) }) }));
64
+ return (_jsx(MessageCard, { label: isBuy ? "BUY" : "SELL", labelColor: color, msg: msg, width: width, children: _jsx(WrappedText, { color: color, bold: true, width: Math.max(8, width - 1), text: compactText(msg.text, 300), maxLines: 5 }) }));
56
65
  }
57
- function ErrorMsg({ msg }) {
58
- return (_jsx(MessageCard, { borderColor: "red", label: "ERROR", labelColor: "red", msg: msg, children: _jsx(Text, { color: "red", wrap: "wrap", children: compactText(msg.text, 500) }) }));
66
+ function ErrorMsg({ msg, width }) {
67
+ return (_jsx(MessageCard, { label: "ERROR", labelColor: "red", msg: msg, width: width, children: _jsx(WrappedText, { color: "red", width: Math.max(8, width - 1), text: compactText(msg.text, 500), maxLines: 7 }) }));
59
68
  }
60
- function MessageLine({ msg }) {
69
+ function MessageLine({ msg, width }) {
61
70
  switch (msg.type) {
62
- case "agent": return _jsx(AgentMsg, { msg: msg });
63
- case "user": return _jsx(UserMsg, { msg: msg });
64
- case "trade": return _jsx(TradeMsg, { msg: msg });
65
- case "error": return _jsx(ErrorMsg, { msg: msg });
66
- default: return _jsx(SystemMsg, { msg: msg });
71
+ case "agent": return _jsx(AgentMsg, { msg: msg, width: width });
72
+ case "user": return _jsx(UserMsg, { msg: msg, width: width });
73
+ case "trade": return _jsx(TradeMsg, { msg: msg, width: width });
74
+ case "error": return _jsx(ErrorMsg, { msg: msg, width: width });
75
+ default: return _jsx(SystemMsg, { msg: msg, width: width });
67
76
  }
68
77
  }
69
78
  // ── ChatPanel ────────────────────────────────────────────────────────────────
70
79
  const SCROLL_STEP = 5;
71
- export function ChatPanel({ messages, onSend, inputActive, hideInput = false, pageSize = 30, inputPlaceholder, }) {
80
+ export function ChatPanel({ messages, onSend, inputActive, hideInput = false, pageSize = 30, inputPlaceholder, width, }) {
72
81
  const [inputKey, setInputKey] = useState(0);
73
82
  const [scrollOffset, setScrollOffset] = useState(0);
74
83
  const prevCount = useRef(messages.length);
84
+ const panelWidth = Math.max(18, width);
85
+ const historyWidth = Math.max(8, panelWidth - 2);
86
+ const messageWidth = Math.max(8, historyWidth);
87
+ const promptWidth = Math.max(14, panelWidth - 2);
88
+ const promptLabelWidth = 8;
89
+ const promptContentWidth = Math.max(8, promptWidth - 4);
90
+ const promptValueWidth = Math.max(4, promptContentWidth - promptLabelWidth);
91
+ const placeholder = truncateEnd(inputPlaceholder ?? "Ask, adjust rules, or inspect...", promptValueWidth);
75
92
  // Auto-scroll to bottom on new messages (only if already at bottom)
76
93
  useEffect(() => {
77
94
  if (messages.length > prevCount.current && scrollOffset === 0) {
@@ -108,6 +125,6 @@ export function ChatPanel({ messages, onSend, inputActive, hideInput = false, pa
108
125
  await onSend(value.trim());
109
126
  }
110
127
  }, [onSend]);
111
- return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [hasOlder && (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { dimColor: true, children: ["\u2191", " ", start, " earlier items \u00B7 PgUp scrolls history"] }) })), _jsxs(Box, { flexDirection: "column", flexGrow: 1, overflowY: "hidden", paddingX: 1, justifyContent: "flex-end", children: [visibleMessages.length === 0 && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: "white", bold: true, children: "No activity yet" }), _jsx(Text, { dimColor: true, children: "Agent replies, live decisions and tool traces will appear here." })] })), visibleMessages.map((msg) => (_jsx(MessageLine, { msg: msg }, msg.id)))] }), !isAtBottom && (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { dimColor: true, children: ["\u2193", " ", scrollOffset, " newer items \u00B7 PgDn jumps back down"] }) })), !hideInput && (_jsx(Box, { paddingX: 1, paddingY: 0, children: _jsxs(Box, { borderStyle: "round", borderColor: inputActive ? "cyan" : "gray", paddingX: 1, flexGrow: 1, children: [_jsx(Text, { color: inputActive ? "cyan" : "gray", bold: true, children: "Prompt" }), _jsx(Text, { dimColor: true, children: " " }), inputActive ? (_jsx(TextInput, { placeholder: inputPlaceholder ?? "Ask, adjust rules, or inspect the session...", onSubmit: handleSubmit }, inputKey)) : (_jsx(Text, { dimColor: true, children: "Starting agent session..." }))] }) }))] }));
128
+ return (_jsxs(Box, { flexDirection: "column", width: panelWidth, flexShrink: 0, children: [hasOlder && (_jsx(Box, { paddingX: 1, children: _jsx(Text, { dimColor: true, children: truncateEnd(`↑ ${start} earlier items · PgUp`, historyWidth) }) })), _jsxs(Box, { flexDirection: "column", flexGrow: 1, overflowY: "hidden", paddingX: 1, justifyContent: "flex-end", width: panelWidth, children: [visibleMessages.length === 0 && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, width: messageWidth, children: [_jsx(Text, { color: "white", bold: true, children: "No activity yet" }), _jsx(Text, { dimColor: true, children: truncateEnd("Agent replies and tool traces appear here.", messageWidth) })] })), visibleMessages.map((msg) => (_jsx(MessageLine, { msg: msg, width: messageWidth }, msg.id)))] }), !isAtBottom && (_jsx(Box, { paddingX: 1, children: _jsx(Text, { dimColor: true, children: truncateEnd(`↓ ${scrollOffset} newer items · PgDn`, historyWidth) }) })), !hideInput && (_jsx(Box, { paddingX: 1, paddingY: 0, width: panelWidth, children: _jsxs(Box, { borderStyle: "round", borderColor: inputActive ? "cyan" : "gray", paddingX: 1, width: promptWidth, flexShrink: 0, children: [_jsx(Text, { color: inputActive ? "cyan" : "gray", bold: true, children: "Prompt" }), _jsx(Text, { dimColor: true, children: " " }), inputActive ? (_jsx(TextInput, { placeholder: placeholder, onSubmit: handleSubmit }, inputKey)) : (_jsx(Text, { dimColor: true, children: truncateEnd("Starting agent session...", promptValueWidth) }))] }) }))] }));
112
129
  }
113
130
  //# sourceMappingURL=ChatPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatPanel.js","sourceRoot":"","sources":["../../src/tui/ChatPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatPanel.js","sourceRoot":"","sources":["../../src/tui/ChatPanel.tsx"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,OAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACxE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvF,SAAS,UAAU,CAAC,EAAU;IAC5B,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;QAChD,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACpC,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAClC,OAAO;YACL,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;SACzC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,IAAI;KACX,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,QAAgB;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnD,IAAI,UAAU,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,UAAU,CAAC;IACrD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,+BAA+B,CAAC;AACxF,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,IAAI,EACJ,KAAK,EACL,KAAK,EACL,IAAI,GAAG,KAAK,EACZ,QAAQ,GAOT;IACC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,YACrC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1B,KAAC,IAAI,IAA0B,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,YAAG,IAAI,IAAnD,GAAG,KAAK,IAAI,IAAI,EAAE,CAAyC,CACvE,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAUD,SAAS,WAAW,CAAC,EACnB,KAAK,EACL,UAAU,EACV,GAAG,EACH,KAAK,EACL,QAAQ,GACS;IACjB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,aACvD,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,aAClB,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,EAAE,IAAI,kBAAE,KAAK,GAAQ,EAC5C,MAAC,IAAI,IAAC,QAAQ,yBAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAQ,IAC/C,EACN,KAAC,GAAG,IAAC,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,YAC9B,QAAQ,GACL,IACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAuC;IACnE,OAAO,CACL,KAAC,WAAW,IAAC,KAAK,EAAC,IAAI,EAAC,UAAU,EAAC,MAAM,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,YAC9D,KAAC,WAAW,IAAC,KAAK,EAAC,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAI,GAC/F,CACf,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAuC;IAClE,OAAO,CACL,KAAC,WAAW,IAAC,KAAK,EAAC,KAAK,EAAC,UAAU,EAAC,QAAQ,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,YACjE,KAAC,WAAW,IAAC,KAAK,EAAC,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAI,GAC/F,CACf,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAuC;IACpE,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;IAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtE,OAAO,CACL,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,aAChC,KAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,kBAAE,IAAI,CAAC,KAAK,GAAQ,EACjD,MAAC,IAAI,IAAC,QAAQ,yBAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,EACpD,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,GAAQ,IAC5C,CACP,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAuC;IACnE,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAEtC,OAAO,CACL,KAAC,WAAW,IACV,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAC7B,UAAU,EAAE,KAAK,EACjB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,YAEZ,KAAC,WAAW,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,QAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAI,GACpG,CACf,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAuC;IACnE,OAAO,CACL,KAAC,WAAW,IAAC,KAAK,EAAC,OAAO,EAAC,UAAU,EAAC,KAAK,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,YAChE,KAAC,WAAW,IAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAI,GAC7F,CACf,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,GAAG,EAAE,KAAK,EAAuC;IACtE,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC,CAAC,OAAO,KAAC,QAAQ,IAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;QAC1D,KAAK,MAAM,CAAC,CAAC,OAAO,KAAC,OAAO,IAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;QACxD,KAAK,OAAO,CAAC,CAAC,OAAO,KAAC,QAAQ,IAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;QAC1D,KAAK,OAAO,CAAC,CAAC,OAAO,KAAC,QAAQ,IAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;QAC1D,OAAO,CAAC,CAAC,OAAO,KAAC,SAAS,IAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;IACxD,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF,MAAM,WAAW,GAAG,CAAC,CAAC;AAYtB,MAAM,UAAU,SAAS,CAAC,EACxB,QAAQ,EACR,MAAM,EACN,WAAW,EACX,SAAS,GAAG,KAAK,EACjB,QAAQ,GAAG,EAAE,EACb,gBAAgB,EAChB,KAAK,GACU;IACf,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,gBAAgB,GAAG,CAAC,CAAC;IAC3B,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,GAAG,gBAAgB,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,WAAW,CAC7B,gBAAgB,IAAI,kCAAkC,EACtD,gBAAgB,CACjB,CAAC;IAEF,oEAAoE;IACpE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YAC9D,yCAAyC;QAC3C,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACnE,+DAA+D;YAC/D,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;IACtC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAEpC,qBAAqB;IACrB,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACvB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjG,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC9B,MAAM,GAAG,GAAG,KAAK,GAAG,YAAY,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC;IAEtC,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,EAAE,KAAa,EAAE,EAAE;QACvD,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;YAC7C,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,aAEzD,QAAQ,IAAI,CACX,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YACd,KAAC,IAAI,IAAC,QAAQ,kBAAE,WAAW,CAAC,KAAK,KAAK,uBAAuB,EAAE,YAAY,CAAC,GAAQ,GAChF,CACP,EAGD,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAC,UAAU,EAAC,KAAK,EAAE,UAAU,aACjH,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,CAC/B,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,aAC9D,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,sCAAuB,EAC/C,KAAC,IAAI,IAAC,QAAQ,kBAAE,WAAW,CAAC,4CAA4C,EAAE,YAAY,CAAC,GAAQ,IAC3F,CACP,EACA,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAC5B,KAAC,WAAW,IAAc,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,IAArC,GAAG,CAAC,EAAE,CAAmC,CAC5D,CAAC,IACE,EAGL,CAAC,UAAU,IAAI,CACd,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YACd,KAAC,IAAI,IAAC,QAAQ,kBAAE,WAAW,CAAC,KAAK,YAAY,qBAAqB,EAAE,YAAY,CAAC,GAAQ,GACrF,CACP,EAEA,CAAC,SAAS,IAAI,CACb,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,YAC9C,MAAC,GAAG,IAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,aACjH,KAAC,IAAI,IAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,6BAAc,EAC9D,KAAC,IAAI,IAAC,QAAQ,yBAAU,EACvB,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,SAAS,IAER,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,YAAY,IAFjB,QAAQ,CAGb,CACH,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,QAAQ,kBAAE,WAAW,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,GAAQ,CACnF,IACG,GACF,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -1,11 +1,14 @@
1
1
  import React from "react";
2
- import type { StatusData } from "./types.js";
2
+ import type { StatusData, WalletInfo } from "./types.js";
3
3
  interface StatusPanelProps {
4
4
  status: StatusData;
5
5
  width?: number;
6
6
  compact?: boolean;
7
7
  height?: number;
8
8
  }
9
+ export declare function walletLabel(chain: WalletInfo["chain"]): string;
10
+ export declare function formatWalletRow(wallet: WalletInfo, width: number): string;
11
+ export declare function selectWalletRows(wallets: WalletInfo[], limit: number): WalletInfo[];
9
12
  export declare function StatusPanel({ status, width, compact, height, }: StatusPanelProps): React.ReactElement;
10
13
  export {};
11
14
  //# sourceMappingURL=StatusPanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatusPanel.d.ts","sourceRoot":"","sources":["../../src/tui/StatusPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAgC7C,UAAU,gBAAgB;IACxB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAaD,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,KAAU,EACV,OAAe,EACf,MAAM,GACP,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAyJvC"}
1
+ {"version":3,"file":"StatusPanel.d.ts","sourceRoot":"","sources":["../../src/tui/StatusPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA4BzD,UAAU,gBAAgB;IACxB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiBD,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,CAE9D;AAcD,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGzE;AAoBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAgBnF;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,KAAU,EACV,OAAe,EACf,MAAM,GACP,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CA0IvC"}
@@ -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,73 @@ function toneColor(tone) {
37
33
  function Header({ title }) {
38
34
  return _jsx(Text, { color: "white", bold: true, children: title });
39
35
  }
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
+ };
52
+ }
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, }) {
58
+ const color = wallet.chain === "solana" ? "cyan" : "yellow";
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}`));
61
+ }
62
+ export function selectWalletRows(wallets, limit) {
63
+ const rows = [];
64
+ const solana = wallets.find((wallet) => wallet.chain === "solana");
65
+ const evm = wallets.find((wallet) => wallet.chain === "base");
66
+ if (solana)
67
+ rows.push(solana);
68
+ if (evm)
69
+ rows.push(evm);
70
+ for (const wallet of wallets) {
71
+ if (rows.length >= limit)
72
+ break;
73
+ if (!rows.some((existing) => existing.chain === wallet.chain && existing.address === wallet.address)) {
74
+ rows.push(wallet);
75
+ }
76
+ }
77
+ return rows.slice(0, limit);
78
+ }
40
79
  export function StatusPanel({ status, width = 30, compact = false, height, }) {
41
- const dividerWidth = compact ? 18 : Math.max(width - 4, 18);
42
- 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));
43
84
  const isLowBalance = status.balanceSol < 0.01;
44
85
  const sessionBadge = getSessionBadge(status);
45
86
  const shortLayout = height !== undefined && height < 22;
46
- const walletRows = status.wallets.slice(0, 2);
87
+ const walletRows = selectWalletRows(status.wallets, 2);
47
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);
48
100
  if (shortLayout) {
49
- 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) => (_jsxs(Box, { children: [_jsx(Text, { color: wallet.chain === "solana" ? "cyan" : "yellow", bold: true, children: wallet.chain === "solana" ? "SOL" : "BASE" }), _jsxs(Text, { dimColor: true, children: [" ", truncateMiddle(wallet.address, compact ? 8 : 10, 5)] })] }, `${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)] })] })] }));
50
102
  }
51
- 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) => (_jsxs(Box, { children: [_jsx(Text, { color: wallet.chain === "solana" ? "cyan" : "yellow", bold: true, children: wallet.chain === "solana" ? "SOL" : "BASE" }), _jsxs(Text, { dimColor: true, children: [" ", truncateMiddle(wallet.address, compact ? 8 : 10, 5)] })] }, `${wallet.chain}-${wallet.address}`)))), _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) })] }));
52
104
  }
53
105
  //# sourceMappingURL=StatusPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatusPanel.js","sourceRoot":"","sources":["../../src/tui/StatusPanel.tsx"],"names":[],"mappings":"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"}
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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"}