bandkit 1.0.4 → 1.0.6

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 (44) hide show
  1. package/README.md +17 -14
  2. package/dist/AnimatedNumber.d.ts +10 -0
  3. package/dist/AnimatedNumber.d.ts.map +1 -0
  4. package/dist/AnimatedNumber.js +35 -0
  5. package/dist/AnimatedNumber.js.map +1 -0
  6. package/dist/BotDecisionPanel.d.ts.map +1 -1
  7. package/dist/BotDecisionPanel.js +15 -3
  8. package/dist/BotDecisionPanel.js.map +1 -1
  9. package/dist/ContractEventFeed.d.ts.map +1 -1
  10. package/dist/ContractEventFeed.js +14 -1
  11. package/dist/ContractEventFeed.js.map +1 -1
  12. package/dist/GasBadge.d.ts.map +1 -1
  13. package/dist/GasBadge.js +10 -2
  14. package/dist/GasBadge.js.map +1 -1
  15. package/dist/OrderBookWidget.d.ts.map +1 -1
  16. package/dist/OrderBookWidget.js +27 -3
  17. package/dist/OrderBookWidget.js.map +1 -1
  18. package/dist/RegimeBadge.d.ts.map +1 -1
  19. package/dist/RegimeBadge.js +3 -1
  20. package/dist/RegimeBadge.js.map +1 -1
  21. package/dist/Skeleton.d.ts +15 -0
  22. package/dist/Skeleton.d.ts.map +1 -0
  23. package/dist/Skeleton.js +26 -0
  24. package/dist/Skeleton.js.map +1 -0
  25. package/dist/StrategyValueSparkline.d.ts +9 -0
  26. package/dist/StrategyValueSparkline.d.ts.map +1 -0
  27. package/dist/StrategyValueSparkline.js +99 -0
  28. package/dist/StrategyValueSparkline.js.map +1 -0
  29. package/dist/TradeTape.d.ts.map +1 -1
  30. package/dist/TradeTape.js +20 -7
  31. package/dist/TradeTape.js.map +1 -1
  32. package/dist/decisionEngine.d.ts.map +1 -1
  33. package/dist/decisionEngine.js +51 -25
  34. package/dist/decisionEngine.js.map +1 -1
  35. package/dist/index.d.ts +4 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +6 -0
  38. package/dist/index.js.map +1 -1
  39. package/dist/useStrategyValueHistory.d.ts +24 -0
  40. package/dist/useStrategyValueHistory.d.ts.map +1 -0
  41. package/dist/useStrategyValueHistory.js +112 -0
  42. package/dist/useStrategyValueHistory.js.map +1 -0
  43. package/package.json +1 -1
  44. package/scripts/test-decision-stream.cjs +38 -18
@@ -0,0 +1,99 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
3
+ import { useEthPriceTicker } from "./useEthPriceTicker.js";
4
+ import { useStrategyValueHistory } from "./useStrategyValueHistory.js";
5
+ import { AnimatedNumber } from "./AnimatedNumber.js";
6
+ import { Skeleton } from "./Skeleton.js";
7
+ const palette = {
8
+ bg: "#0a0a0a",
9
+ surface: "#111113",
10
+ border: "#1f1f23",
11
+ text: "#f5f5f7",
12
+ textMuted: "#9ca3af",
13
+ textDim: "#52525b",
14
+ up: "#10b981",
15
+ down: "#ef4444",
16
+ flat: "#9ca3af"
17
+ };
18
+ const usdFormatter = new Intl.NumberFormat("en-US", {
19
+ currency: "USD",
20
+ maximumFractionDigits: 2,
21
+ minimumFractionDigits: 2,
22
+ style: "currency"
23
+ });
24
+ export function StrategyValueSparkline({ className, title = "Strategy Value", width = 220, height = 64, ...hookOptions }) {
25
+ const history = useStrategyValueHistory(hookOptions);
26
+ const ethPrice = useEthPriceTicker();
27
+ const hasContract = Boolean(hookOptions.strategyContractAddress);
28
+ const hasData = history.samples.length >= 2;
29
+ const tone = history.changeEth > 0.0000005
30
+ ? palette.up
31
+ : history.changeEth < -0.0000005
32
+ ? palette.down
33
+ : palette.flat;
34
+ const currentUsd = ethPrice.price && Number.isFinite(ethPrice.price)
35
+ ? history.currentTotalEth * ethPrice.price
36
+ : null;
37
+ const changeUsd = ethPrice.price && Number.isFinite(ethPrice.price) ? history.changeEth * ethPrice.price : null;
38
+ const path = useMemo(() => buildPath(history.samples.map((s) => s.totalEth), width, height), [
39
+ history.samples,
40
+ width,
41
+ height
42
+ ]);
43
+ const areaPath = useMemo(() => buildAreaPath(history.samples.map((s) => s.totalEth), width, height), [history.samples, width, height]);
44
+ return (_jsxs("section", { className: className, style: {
45
+ background: palette.bg,
46
+ border: `1px solid ${palette.border}`,
47
+ borderRadius: 14,
48
+ boxShadow: "0 20px 60px rgba(0, 0, 0, 0.55)",
49
+ color: palette.text,
50
+ display: "grid",
51
+ fontFamily: "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
52
+ gap: 14,
53
+ maxWidth: 420,
54
+ padding: 18
55
+ }, children: [_jsxs("header", { style: { alignItems: "center", display: "flex", justifyContent: "space-between" }, children: [_jsx("h3", { style: { fontSize: 14, fontWeight: 700, letterSpacing: "0.02em", margin: 0 }, children: title }), _jsx("span", { style: { color: palette.textDim, fontSize: 11 }, children: hasData ? `${history.samples.length} pts` : hasContract ? "collecting" : "no contract" })] }), !hasContract ? (_jsx("div", { style: {
56
+ color: palette.textDim,
57
+ fontSize: 12,
58
+ padding: "20px 4px",
59
+ textAlign: "center"
60
+ }, children: "Deploy a strategy contract to start tracking value." })) : !hasData ? (_jsxs("div", { style: { display: "grid", gap: 10 }, children: [_jsx(Skeleton, { width: 140, height: 22 }), _jsx(Skeleton, { width: 80, height: 12 }), _jsx(Skeleton, { width: "100%", height: height, borderRadius: 8 })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { style: { alignItems: "baseline", display: "flex", gap: 10, justifyContent: "space-between" }, children: [_jsxs("div", { style: { display: "grid", gap: 2 }, children: [_jsx("strong", { style: { fontSize: 22, fontWeight: 700, lineHeight: 1.1 }, children: _jsx(AnimatedNumber, { value: history.currentTotalEth, format: (n) => `${n.toFixed(6)} ETH` }) }), currentUsd !== null ? (_jsx("span", { style: { color: palette.textMuted, fontSize: 12 }, children: _jsx(AnimatedNumber, { value: currentUsd, format: (n) => usdFormatter.format(n) }) })) : null] }), _jsxs("div", { style: { display: "grid", gap: 2, textAlign: "right" }, children: [_jsxs("strong", { style: { color: tone, fontSize: 13, fontWeight: 700 }, children: [history.changeEth >= 0 ? "+" : "", history.changeEth.toFixed(6), " ETH"] }), _jsxs("span", { style: { color: palette.textDim, fontSize: 11 }, children: [history.changePct === null
61
+ ? "—"
62
+ : `${history.changePct >= 0 ? "+" : ""}${history.changePct.toFixed(2)}% since start`, changeUsd !== null
63
+ ? ` · ${changeUsd >= 0 ? "+" : ""}${usdFormatter.format(changeUsd)}`
64
+ : ""] })] })] }), _jsxs("svg", { "aria-hidden": true, height: height, style: {
65
+ background: palette.surface,
66
+ border: `1px solid ${palette.border}`,
67
+ borderRadius: 8,
68
+ display: "block",
69
+ width: "100%"
70
+ }, viewBox: `0 0 ${width} ${height}`, width: "100%", children: [areaPath ? _jsx("path", { d: areaPath, fill: `${tone}1f` }) : null, path ? (_jsx("path", { d: path, fill: "none", stroke: tone, strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, style: { transition: "stroke 320ms ease" } })) : null] }), _jsx("div", { style: {
71
+ color: palette.textDim,
72
+ fontSize: 10,
73
+ lineHeight: 1.4
74
+ }, children: "Tracks contract balance + allocated value over time. Not realised PnL \u2014 actual trade outcomes occur off-chain at the strategyWallet." })] }))] }));
75
+ }
76
+ function buildPath(values, width, height) {
77
+ if (values.length < 2)
78
+ return null;
79
+ const min = Math.min(...values);
80
+ const max = Math.max(...values);
81
+ const range = max - min || max || 1;
82
+ const stepX = width / (values.length - 1);
83
+ const points = values.map((v, i) => {
84
+ const x = i * stepX;
85
+ const norm = (v - min) / range;
86
+ const y = height - norm * (height - 8) - 4;
87
+ return `${x.toFixed(2)},${y.toFixed(2)}`;
88
+ });
89
+ return `M${points.join(" L")}`;
90
+ }
91
+ function buildAreaPath(values, width, height) {
92
+ if (values.length < 2)
93
+ return null;
94
+ const line = buildPath(values, width, height);
95
+ if (!line)
96
+ return null;
97
+ return `${line} L${width},${height} L0,${height} Z`;
98
+ }
99
+ //# sourceMappingURL=StrategyValueSparkline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StrategyValueSparkline.js","sourceRoot":"","sources":["../src/StrategyValueSparkline.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TradeTape.d.ts","sourceRoot":"","sources":["../src/TradeTape.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEvF,MAAM,MAAM,cAAc,GAAG,uBAAuB,GAAG;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AA8BF,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,KAAuB,EAAE,IAAS,EAAE,GAAG,WAAW,EAAE,EAAE,cAAc,2CAuD1G"}
1
+ {"version":3,"file":"TradeTape.d.ts","sourceRoot":"","sources":["../src/TradeTape.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAQvF,MAAM,MAAM,cAAc,GAAG,uBAAuB,GAAG;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AA8BF,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,KAAuB,EAAE,IAAS,EAAE,GAAG,WAAW,EAAE,EAAE,cAAc,2CAmE1G"}
package/dist/TradeTape.js CHANGED
@@ -1,5 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useBinanceTrades } from "./useBinanceTrades.js";
3
+ import { Skeleton } from "./Skeleton.js";
4
+ const ROW_FADE_KEYFRAMES = `@keyframes bandkitTradeRow {
5
+ from { opacity: 0; transform: translateY(-4px); }
6
+ to { opacity: 1; transform: translateY(0); }
7
+ }`;
3
8
  const palette = {
4
9
  bg: "#0a0a0a",
5
10
  border: "#1f1f23",
@@ -39,16 +44,24 @@ export function TradeTape({ className, title = "Recent Trades", rows = 20, ...ho
39
44
  gap: 10,
40
45
  maxWidth: 360,
41
46
  padding: 18
42
- }, children: [_jsxs("header", { style: { alignItems: "center", display: "flex", justifyContent: "space-between" }, children: [_jsx("h3", { style: { fontSize: 14, fontWeight: 700, letterSpacing: "0.02em", margin: 0 }, children: title }), _jsx(StatusDot, { status: status, symbol: symbol })] }), _jsx(HeaderRow, {}), _jsx("div", { style: { display: "grid", gap: 1, maxHeight: 360, overflow: "hidden" }, children: trades.length === 0 ? (_jsx("div", { style: { color: palette.textDim, fontSize: 12, padding: "20px 0", textAlign: "center" }, children: "Waiting for trades\u2026" })) : (trades.map((trade) => {
43
- const color = trade.side === "buy" ? palette.buy : palette.sell;
44
- return (_jsxs("div", { style: {
47
+ }, children: [_jsxs("header", { style: { alignItems: "center", display: "flex", justifyContent: "space-between" }, children: [_jsx("h3", { style: { fontSize: 14, fontWeight: 700, letterSpacing: "0.02em", margin: 0 }, children: title }), _jsx(StatusDot, { status: status, symbol: symbol })] }), _jsx(HeaderRow, {}), _jsx("style", { children: ROW_FADE_KEYFRAMES }), _jsx("div", { style: { display: "grid", gap: 1, maxHeight: 360, overflow: "hidden" }, children: trades.length === 0
48
+ ? Array.from({ length: Math.min(rows, 12) }).map((_, i) => (_jsxs("div", { style: {
45
49
  display: "grid",
46
- fontSize: 12,
47
- fontVariantNumeric: "tabular-nums",
50
+ gap: 6,
48
51
  gridTemplateColumns: "1fr 1fr 56px",
49
52
  padding: "3px 4px"
50
- }, children: [_jsx("span", { style: { color, fontWeight: 600 }, children: priceFormatter.format(trade.price) }), _jsx("span", { style: { color: palette.text, textAlign: "right" }, children: sizeFormatter.format(trade.size) }), _jsx("span", { style: { color: palette.textDim, textAlign: "right" }, children: timeAgo(trade.timestamp) })] }, trade.id));
51
- })) })] }));
53
+ }, children: [_jsx(Skeleton, { height: 10 }), _jsx(Skeleton, { height: 10 }), _jsx(Skeleton, { height: 10 })] }, `sk-${i}`)))
54
+ : trades.map((trade) => {
55
+ const color = trade.side === "buy" ? palette.buy : palette.sell;
56
+ return (_jsxs("div", { style: {
57
+ animation: "bandkitTradeRow 280ms ease-out",
58
+ display: "grid",
59
+ fontSize: 12,
60
+ fontVariantNumeric: "tabular-nums",
61
+ gridTemplateColumns: "1fr 1fr 56px",
62
+ padding: "3px 4px"
63
+ }, children: [_jsx("span", { style: { color, fontWeight: 600 }, children: priceFormatter.format(trade.price) }), _jsx("span", { style: { color: palette.text, textAlign: "right" }, children: sizeFormatter.format(trade.size) }), _jsx("span", { style: { color: palette.textDim, textAlign: "right" }, children: timeAgo(trade.timestamp) })] }, trade.id));
64
+ }) })] }));
52
65
  }
53
66
  function HeaderRow() {
54
67
  const cell = {
@@ -1 +1 @@
1
- {"version":3,"file":"TradeTape.js","sourceRoot":"","sources":["../src/TradeTape.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TradeTape.js","sourceRoot":"","sources":["../src/TradeTape.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"decisionEngine.d.ts","sourceRoot":"","sources":["../src/decisionEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,kBAMzC,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,cAAc,EACtB,UAAU,GAAE,kBAAgD,GAC3D,cAAc,CA2HhB;AAKD,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,EAAE,EACjB,IAAI,EAAE,SAAS,EAAE,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAQ,GAChB,MAAM,CASR;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,EAAE,EACjB,IAAI,EAAE,SAAS,EAAE,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAQ,GAChB,MAAM,CAMR;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE;IAAE,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,EACnE,QAAQ,SAAS,EACjB,KAAK,SAAa,GACjB,MAAM,CAYR"}
1
+ {"version":3,"file":"decisionEngine.d.ts","sourceRoot":"","sources":["../src/decisionEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,kBAMzC,CAAC;AAUF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,cAAc,EACtB,UAAU,GAAE,kBAAgD,GAC3D,cAAc,CA8IhB;AAKD,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,EAAE,EACjB,IAAI,EAAE,SAAS,EAAE,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAQ,GAChB,MAAM,CASR;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,EAAE,EACjB,IAAI,EAAE,SAAS,EAAE,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAQ,GAChB,MAAM,CAMR;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE;IAAE,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,EACnE,QAAQ,SAAS,EACjB,KAAK,SAAa,GACjB,MAAM,CAYR"}
@@ -5,6 +5,13 @@ export const DEFAULT_DECISION_THRESHOLDS = {
5
5
  divergenceBps: 5,
6
6
  minDepthEth: 50
7
7
  };
8
+ // Soft-capped confidence curve. Asymptotically approaches `ceiling` so the
9
+ // number never pegs to 100. Mirrors how real trading dashboards calibrate
10
+ // "strong signal" (~70-85) vs "near-certainty" (~90, rare).
11
+ function softCapConfidence(rawScore, ceiling = 88, scale = 55) {
12
+ const bounded = Math.max(0, rawScore);
13
+ return Math.round(ceiling * (1 - Math.exp(-bounded / scale)));
14
+ }
8
15
  export function computeBotDecision(inputs, thresholds = DEFAULT_DECISION_THRESHOLDS) {
9
16
  const reasons = [];
10
17
  // Regime gate
@@ -18,7 +25,7 @@ export function computeBotDecision(inputs, thresholds = DEFAULT_DECISION_THRESHO
18
25
  if (inputs.regime === "TRENDING") {
19
26
  return {
20
27
  decision: "STAND DOWN",
21
- confidence: 90,
28
+ confidence: 72,
22
29
  reasons: [
23
30
  { text: "Regime: TRENDING — range bot sits out", tone: "bad" },
24
31
  { text: "Re-engages when price stabilises in a range", tone: "neutral" }
@@ -27,23 +34,24 @@ export function computeBotDecision(inputs, thresholds = DEFAULT_DECISION_THRESHO
27
34
  }
28
35
  let scoreBuy = 0;
29
36
  let scoreSell = 0;
30
- let confidence = inputs.regime === "RANGING" ? 45 : 30;
37
+ let baseScore = inputs.regime === "RANGING" ? 25 : 12;
31
38
  if (inputs.regime === "RANGING") {
32
39
  reasons.push({ text: "Regime: RANGING (favourable)", tone: "good" });
33
40
  }
34
41
  else {
35
42
  reasons.push({ text: "Regime: MIXED", tone: "neutral" });
36
43
  }
37
- // Book imbalance
44
+ // Book imbalance — stronger imbalance contributes more, but with diminishing returns
45
+ const absBook = Math.abs(inputs.bookImbalance);
38
46
  if (inputs.bookImbalance >= thresholds.imbalanceThreshold) {
39
- const pct = inputs.bookImbalance * 100;
40
- scoreBuy += 25;
41
- reasons.push({ text: `Book imbalance +${pct.toFixed(0)}% bid-heavy`, tone: "good" });
47
+ const contrib = 8 + Math.min(10, (absBook - thresholds.imbalanceThreshold) * 18);
48
+ scoreBuy += contrib;
49
+ reasons.push({ text: `Book imbalance +${(inputs.bookImbalance * 100).toFixed(0)}% bid-heavy`, tone: "good" });
42
50
  }
43
51
  else if (inputs.bookImbalance <= -thresholds.imbalanceThreshold) {
44
- const pct = inputs.bookImbalance * 100;
45
- scoreSell += 25;
46
- reasons.push({ text: `Book imbalance ${pct.toFixed(0)}% ask-heavy`, tone: "good" });
52
+ const contrib = 8 + Math.min(10, (absBook - thresholds.imbalanceThreshold) * 18);
53
+ scoreSell += contrib;
54
+ reasons.push({ text: `Book imbalance ${(inputs.bookImbalance * 100).toFixed(0)}% ask-heavy`, tone: "good" });
47
55
  }
48
56
  else {
49
57
  reasons.push({
@@ -51,15 +59,18 @@ export function computeBotDecision(inputs, thresholds = DEFAULT_DECISION_THRESHO
51
59
  tone: "neutral"
52
60
  });
53
61
  }
54
- // Trade flow (last 60s)
62
+ // Trade flow (last 60s) — saturating contribution
63
+ const absFlow = Math.abs(inputs.tradeImbalance);
55
64
  if (inputs.tradeImbalance >= thresholds.flowThreshold) {
65
+ const contrib = 6 + Math.min(8, (absFlow - thresholds.flowThreshold) * 20);
66
+ scoreBuy += contrib;
56
67
  const buyPct = (0.5 + inputs.tradeImbalance / 2) * 100;
57
- scoreBuy += 20;
58
68
  reasons.push({ text: `Recent flow ${buyPct.toFixed(0)}% buys`, tone: "good" });
59
69
  }
60
70
  else if (inputs.tradeImbalance <= -thresholds.flowThreshold) {
71
+ const contrib = 6 + Math.min(8, (absFlow - thresholds.flowThreshold) * 20);
72
+ scoreSell += contrib;
61
73
  const sellPct = (0.5 - inputs.tradeImbalance / 2) * 100;
62
- scoreSell += 20;
63
74
  reasons.push({ text: `Recent flow ${sellPct.toFixed(0)}% sells`, tone: "good" });
64
75
  }
65
76
  else {
@@ -67,24 +78,27 @@ export function computeBotDecision(inputs, thresholds = DEFAULT_DECISION_THRESHO
67
78
  }
68
79
  // Spread
69
80
  if (inputs.spreadPct > thresholds.spreadWidePct) {
70
- confidence -= 10;
81
+ baseScore -= 8;
71
82
  reasons.push({ text: `Spread wide (${inputs.spreadPct.toFixed(3)}%)`, tone: "bad" });
72
83
  }
73
84
  else {
74
- confidence += 5;
85
+ baseScore += 3;
75
86
  reasons.push({ text: `Spread tight (${inputs.spreadPct.toFixed(3)}%)`, tone: "good" });
76
87
  }
77
- // Cross-venue divergence
88
+ // Cross-venue divergence — small contribution, capped
78
89
  if (inputs.venueDivergenceBps !== null && Number.isFinite(inputs.venueDivergenceBps)) {
90
+ const absDiv = Math.abs(inputs.venueDivergenceBps);
79
91
  if (inputs.venueDivergenceBps > thresholds.divergenceBps) {
80
- scoreBuy += 12;
92
+ const contrib = 4 + Math.min(6, (absDiv - thresholds.divergenceBps) * 0.6);
93
+ scoreBuy += contrib;
81
94
  reasons.push({
82
95
  text: `Binance leading +${inputs.venueDivergenceBps.toFixed(1)} bps vs Coinbase`,
83
96
  tone: "good"
84
97
  });
85
98
  }
86
99
  else if (inputs.venueDivergenceBps < -thresholds.divergenceBps) {
87
- scoreSell += 12;
100
+ const contrib = 4 + Math.min(6, (absDiv - thresholds.divergenceBps) * 0.6);
101
+ scoreSell += contrib;
88
102
  reasons.push({
89
103
  text: `Binance lagging ${inputs.venueDivergenceBps.toFixed(1)} bps vs Coinbase`,
90
104
  tone: "good"
@@ -99,32 +113,44 @@ export function computeBotDecision(inputs, thresholds = DEFAULT_DECISION_THRESHO
99
113
  }
100
114
  // Depth check
101
115
  if (inputs.bookDepthWithinHalfPctEth < thresholds.minDepthEth) {
102
- confidence -= 15;
116
+ baseScore -= 10;
103
117
  reasons.push({
104
118
  text: `Thin book — ${inputs.bookDepthWithinHalfPctEth.toFixed(0)} ETH within ±0.5%`,
105
119
  tone: "bad"
106
120
  });
107
121
  }
108
122
  else {
109
- confidence += 5;
123
+ baseScore += 3;
110
124
  reasons.push({
111
125
  text: `Book depth healthy (${inputs.bookDepthWithinHalfPctEth.toFixed(0)} ETH within ±0.5%)`,
112
126
  tone: "good"
113
127
  });
114
128
  }
129
+ // Signal-redundancy penalty: when book and flow disagree, halve whichever
130
+ // side ended up winning. Reduces over-confidence on conflicting signals.
131
+ if (scoreBuy > 0 && scoreSell > 0) {
132
+ if (scoreBuy >= scoreSell) {
133
+ scoreBuy -= scoreSell * 0.7;
134
+ scoreSell = 0;
135
+ }
136
+ else {
137
+ scoreSell -= scoreBuy * 0.7;
138
+ scoreBuy = 0;
139
+ }
140
+ }
115
141
  let decision;
116
- let finalConfidence = confidence;
117
- if (scoreBuy > scoreSell + 12) {
142
+ let finalConfidence;
143
+ if (scoreBuy > scoreSell + 6) {
118
144
  decision = "BUY";
119
- finalConfidence = Math.min(100, Math.max(0, confidence + scoreBuy));
145
+ finalConfidence = softCapConfidence(baseScore + scoreBuy);
120
146
  }
121
- else if (scoreSell > scoreBuy + 12) {
147
+ else if (scoreSell > scoreBuy + 6) {
122
148
  decision = "SELL";
123
- finalConfidence = Math.min(100, Math.max(0, confidence + scoreSell));
149
+ finalConfidence = softCapConfidence(baseScore + scoreSell);
124
150
  }
125
151
  else {
126
152
  decision = "WAIT";
127
- finalConfidence = Math.min(100, Math.max(0, confidence + Math.max(scoreBuy, scoreSell) / 2));
153
+ finalConfidence = softCapConfidence(Math.max(baseScore / 2, 5), 55, 35);
128
154
  reasons.push({ text: "Signals mixed — no clear direction", tone: "neutral" });
129
155
  }
130
156
  return { decision, confidence: finalConfidence, reasons };
@@ -1 +1 @@
1
- {"version":3,"file":"decisionEngine.js","sourceRoot":"","sources":["../src/decisionEngine.ts"],"names":[],"mappings":"AAiCA,MAAM,CAAC,MAAM,2BAA2B,GAAuB;IAC7D,kBAAkB,EAAE,IAAI;IACxB,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,CAAC;IAChB,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAChC,MAAsB,EACtB,aAAiC,2BAA2B;IAE5D,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,cAAc;IACd,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,wCAAwC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;SAC/E,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO;YACL,QAAQ,EAAE,YAAY;YACtB,UAAU,EAAE,EAAE;YACd,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,uCAAuC,EAAE,IAAI,EAAE,KAAK,EAAE;gBAC9D,EAAE,IAAI,EAAE,6CAA6C,EAAE,IAAI,EAAE,SAAS,EAAE;aACzE;SACF,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,UAAU,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,iBAAiB;IACjB,IAAI,MAAM,CAAC,aAAa,IAAI,UAAU,CAAC,kBAAkB,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC;QACvC,QAAQ,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACvF,CAAC;SAAM,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC;QAClE,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC;QACvC,SAAS,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACtF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,4BAA4B,CAAC,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;YAC7E,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;IACL,CAAC;IAED,wBAAwB;IACxB,IAAI,MAAM,CAAC,cAAc,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACvD,QAAQ,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACjF,CAAC;SAAM,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;QAC9D,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACxD,SAAS,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,SAAS;IACT,IAAI,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;QAChD,UAAU,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvF,CAAC;SAAM,CAAC;QACN,UAAU,IAAI,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,yBAAyB;IACzB,IAAI,MAAM,CAAC,kBAAkB,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACrF,IAAI,MAAM,CAAC,kBAAkB,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;YACzD,QAAQ,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,oBAAoB,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB;gBAChF,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,CAAC,kBAAkB,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;YACjE,SAAS,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,mBAAmB,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB;gBAC/E,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,oBAAoB,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB;gBAC9E,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,cAAc;IACd,IAAI,MAAM,CAAC,yBAAyB,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAC9D,UAAU,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,eAAe,MAAM,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;YACnF,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,UAAU,IAAI,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,uBAAuB,MAAM,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;YAC5F,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAqB,CAAC;IAC1B,IAAI,eAAe,GAAG,UAAU,CAAC;IAEjC,IAAI,QAAQ,GAAG,SAAS,GAAG,EAAE,EAAE,CAAC;QAC9B,QAAQ,GAAG,KAAK,CAAC;QACjB,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC;IACtE,CAAC;SAAM,IAAI,SAAS,GAAG,QAAQ,GAAG,EAAE,EAAE,CAAC;QACrC,QAAQ,GAAG,MAAM,CAAC;QAClB,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,MAAM,CAAC;QAClB,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oCAAoC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;AAC5D,CAAC;AAOD,MAAM,UAAU,oBAAoB,CAClC,IAAiB,EACjB,IAAiB,EACjB,QAAgB,EAChB,SAAS,GAAG,KAAK;IAEjB,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAE9C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;IAChC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAiB,EACjB,IAAiB,EACjB,QAAgB,EAChB,SAAS,GAAG,KAAK;IAEjB,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9F,OAAO,OAAO,GAAG,OAAO,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAAmE,EACnE,QAAQ,GAAG,MAAM,EACjB,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;IAElB,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAChC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,SAAS,GAAG,MAAM;YAAE,SAAS;QACnC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;YAAE,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC;;YACrC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC;IAC5B,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;IACrC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,KAAK,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"decisionEngine.js","sourceRoot":"","sources":["../src/decisionEngine.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -25,6 +25,10 @@ export { useCoinbaseTicker, type CoinbaseTickerStatus, type CoinbaseTickerMessag
25
25
  export { useBotDecision, type BotDecision, type DecisionResult, type DecisionThresholds, type DecisionHistoryEntry, type UseBotDecisionOptions, type UseBotDecisionResult } from "./useBotDecision.js";
26
26
  export { computeBotDecision, computeBookImbalance, computeBookDepth, computeTradeImbalance, DEFAULT_DECISION_THRESHOLDS, type DecisionInputs, type DecisionReason, type BookLevel } from "./decisionEngine.js";
27
27
  export { BotDecisionPanel, type BotDecisionPanelProps } from "./BotDecisionPanel.js";
28
+ export { useStrategyValueHistory, type ValueSample, type UseStrategyValueHistoryOptions, type UseStrategyValueHistoryResult } from "./useStrategyValueHistory.js";
29
+ export { StrategyValueSparkline, type StrategyValueSparklineProps } from "./StrategyValueSparkline.js";
30
+ export { Skeleton, SkeletonRow, type SkeletonProps } from "./Skeleton.js";
31
+ export { AnimatedNumber, type AnimatedNumberProps } from "./AnimatedNumber.js";
28
32
  /** @deprecated Use BAND_STRATEGY_ABI. Will be removed in v1.0. */
29
33
  export { BAND_STRATEGY_ABI as ETH_BOT_VAULT_ABI } from "./bandStrategyAbi.js";
30
34
  /** @deprecated Use BAND_STRATEGY_BYTECODE. Will be removed in v1.0. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -29,6 +29,12 @@ export { useCoinbaseTicker } from "./useCoinbaseTicker.js";
29
29
  export { useBotDecision } from "./useBotDecision.js";
30
30
  export { computeBotDecision, computeBookImbalance, computeBookDepth, computeTradeImbalance, DEFAULT_DECISION_THRESHOLDS } from "./decisionEngine.js";
31
31
  export { BotDecisionPanel } from "./BotDecisionPanel.js";
32
+ // --- Strategy value tracking --------------------------------------------
33
+ export { useStrategyValueHistory } from "./useStrategyValueHistory.js";
34
+ export { StrategyValueSparkline } from "./StrategyValueSparkline.js";
35
+ // --- UI primitives -------------------------------------------------------
36
+ export { Skeleton, SkeletonRow } from "./Skeleton.js";
37
+ export { AnimatedNumber } from "./AnimatedNumber.js";
32
38
  /** @deprecated Use BAND_STRATEGY_ABI. Will be removed in v1.0. */
33
39
  export { BAND_STRATEGY_ABI as ETH_BOT_VAULT_ABI } from "./bandStrategyAbi.js";
34
40
  /** @deprecated Use BAND_STRATEGY_BYTECODE. Will be removed in v1.0. */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Address } from "viem";
2
+ import { type UseStrategyContractOptions } from "./useStrategyContract.js";
3
+ export type ValueSample = {
4
+ at: number;
5
+ contractEth: number;
6
+ allocatedEth: number;
7
+ totalEth: number;
8
+ };
9
+ export type UseStrategyValueHistoryOptions = UseStrategyContractOptions & {
10
+ enabled?: boolean;
11
+ sampleIntervalMs?: number;
12
+ maxSamples?: number;
13
+ storageKey?: (address: Address) => string;
14
+ };
15
+ export type UseStrategyValueHistoryResult = {
16
+ samples: ValueSample[];
17
+ currentTotalEth: number;
18
+ firstTotalEth: number;
19
+ changeEth: number;
20
+ changePct: number | null;
21
+ clear: () => void;
22
+ };
23
+ export declare function useStrategyValueHistory(options: UseStrategyValueHistoryOptions): UseStrategyValueHistoryResult;
24
+ //# sourceMappingURL=useStrategyValueHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStrategyValueHistory.d.ts","sourceRoot":"","sources":["../src/useStrategyValueHistory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAuB,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEhG,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,0BAA0B,GAAG;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAkCF,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,8BAA8B,GACtC,6BAA6B,CA8E/B"}
@@ -0,0 +1,112 @@
1
+ import { useEffect, useMemo, useRef, useState } from "react";
2
+ import { useStrategyContract } from "./useStrategyContract.js";
3
+ const DEFAULT_INTERVAL_MS = 10_000;
4
+ const DEFAULT_MAX_SAMPLES = 360; // ~1 hour at 10s
5
+ const STORAGE_PREFIX = "bandkit:value-history:";
6
+ function defaultStorageKey(address) {
7
+ return `${STORAGE_PREFIX}${address.toLowerCase()}`;
8
+ }
9
+ function readStored(key) {
10
+ if (typeof window === "undefined")
11
+ return [];
12
+ try {
13
+ const raw = window.localStorage.getItem(key);
14
+ if (!raw)
15
+ return [];
16
+ const parsed = JSON.parse(raw);
17
+ if (!Array.isArray(parsed))
18
+ return [];
19
+ return parsed.filter((s) => typeof s.at === "number" && typeof s.totalEth === "number" && Number.isFinite(s.totalEth));
20
+ }
21
+ catch {
22
+ return [];
23
+ }
24
+ }
25
+ function writeStored(key, samples) {
26
+ if (typeof window === "undefined")
27
+ return;
28
+ try {
29
+ window.localStorage.setItem(key, JSON.stringify(samples));
30
+ }
31
+ catch {
32
+ // quota or disabled — ignore
33
+ }
34
+ }
35
+ export function useStrategyValueHistory(options) {
36
+ const enabled = options.enabled ?? true;
37
+ const intervalMs = options.sampleIntervalMs ?? DEFAULT_INTERVAL_MS;
38
+ const maxSamples = options.maxSamples ?? DEFAULT_MAX_SAMPLES;
39
+ const storageKeyFn = options.storageKey ?? defaultStorageKey;
40
+ const strategy = useStrategyContract(options);
41
+ const address = options.strategyContractAddress;
42
+ const [samples, setSamples] = useState([]);
43
+ const lastWriteAtRef = useRef(0);
44
+ // Hydrate from storage when address changes
45
+ useEffect(() => {
46
+ if (!address) {
47
+ setSamples([]);
48
+ return;
49
+ }
50
+ const stored = readStored(storageKeyFn(address));
51
+ setSamples(stored);
52
+ }, [address, storageKeyFn]);
53
+ useEffect(() => {
54
+ if (!enabled || !address)
55
+ return;
56
+ if (typeof window === "undefined")
57
+ return;
58
+ function sample() {
59
+ const contractEth = Number(strategy.balanceEth);
60
+ const allocatedEth = Number(strategy.allocatedToStrategyEth);
61
+ if (!Number.isFinite(contractEth) || !Number.isFinite(allocatedEth))
62
+ return;
63
+ const totalEth = contractEth + allocatedEth;
64
+ const now = Date.now();
65
+ if (now - lastWriteAtRef.current < intervalMs - 250)
66
+ return;
67
+ lastWriteAtRef.current = now;
68
+ setSamples((prev) => {
69
+ const next = [...prev, { at: now, contractEth, allocatedEth, totalEth }].slice(-maxSamples);
70
+ if (address)
71
+ writeStored(storageKeyFn(address), next);
72
+ return next;
73
+ });
74
+ }
75
+ sample();
76
+ const id = window.setInterval(sample, intervalMs);
77
+ return () => window.clearInterval(id);
78
+ }, [
79
+ address,
80
+ enabled,
81
+ intervalMs,
82
+ maxSamples,
83
+ storageKeyFn,
84
+ strategy.allocatedToStrategyEth,
85
+ strategy.balanceEth
86
+ ]);
87
+ return useMemo(() => {
88
+ const currentTotalEth = samples.length > 0 ? samples[samples.length - 1].totalEth : 0;
89
+ const firstTotalEth = samples.length > 0 ? samples[0].totalEth : 0;
90
+ const changeEth = currentTotalEth - firstTotalEth;
91
+ const changePct = firstTotalEth > 0 ? (changeEth / firstTotalEth) * 100 : null;
92
+ return {
93
+ samples,
94
+ currentTotalEth,
95
+ firstTotalEth,
96
+ changeEth,
97
+ changePct,
98
+ clear: () => {
99
+ if (address) {
100
+ try {
101
+ window.localStorage.removeItem(storageKeyFn(address));
102
+ }
103
+ catch {
104
+ // ignore
105
+ }
106
+ }
107
+ setSamples([]);
108
+ }
109
+ };
110
+ }, [address, samples, storageKeyFn]);
111
+ }
112
+ //# sourceMappingURL=useStrategyValueHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStrategyValueHistory.js","sourceRoot":"","sources":["../src/useStrategyValueHistory.ts"],"names":[],"mappings":"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"}