tokmon 0.12.0 → 0.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +184 -167
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -988,14 +988,12 @@ function App({ interval: cliInterval }) {
|
|
|
988
988
|
resetView();
|
|
989
989
|
return;
|
|
990
990
|
}
|
|
991
|
-
if (input
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
setTab(1);
|
|
998
|
-
resetView();
|
|
991
|
+
if (input && /^[0-9]$/.test(input) && slots.length > 1) {
|
|
992
|
+
const target = slots[parseInt(input, 10)];
|
|
993
|
+
if (target) {
|
|
994
|
+
updateConfig((c) => ({ ...c, activeAccountId: target.id }));
|
|
995
|
+
resetView();
|
|
996
|
+
}
|
|
999
997
|
return;
|
|
1000
998
|
}
|
|
1001
999
|
if (tab === 1) {
|
|
@@ -1165,7 +1163,7 @@ function Footer({ hasAccounts }) {
|
|
|
1165
1163
|
/* @__PURE__ */ jsx(Text, { dimColor: true, children: " (" }),
|
|
1166
1164
|
/* @__PURE__ */ jsx(Text, { color: "cyan", children: "davidilie.com" }),
|
|
1167
1165
|
/* @__PURE__ */ jsx(Text, { dimColor: true, children: ") \xB7 s=settings " }),
|
|
1168
|
-
hasAccounts && /* @__PURE__ */ jsx(Text, { dimColor: true, children: "a/A=cycle
|
|
1166
|
+
hasAccounts && /* @__PURE__ */ jsx(Text, { dimColor: true, children: "0-9=jump a/A=cycle " }),
|
|
1169
1167
|
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "q=quit" })
|
|
1170
1168
|
] });
|
|
1171
1169
|
}
|
|
@@ -1181,28 +1179,17 @@ function TabBar({ tabs, active, onSelect }) {
|
|
|
1181
1179
|
] }) }, t)) });
|
|
1182
1180
|
}
|
|
1183
1181
|
function AccountStrip({ slots, activeIdx, onSelect }) {
|
|
1184
|
-
return /* @__PURE__ */
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
" ",
|
|
1196
|
-
s.name,
|
|
1197
|
-
" "
|
|
1198
|
-
] })
|
|
1199
|
-
] }) : /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
1200
|
-
dot,
|
|
1201
|
-
" ",
|
|
1202
|
-
s.name
|
|
1203
|
-
] }) }, s.id ?? "__all__");
|
|
1204
|
-
})
|
|
1205
|
-
] });
|
|
1182
|
+
return /* @__PURE__ */ jsx(Box, { flexWrap: "wrap", children: slots.map((s, i) => {
|
|
1183
|
+
const active = i === activeIdx;
|
|
1184
|
+
const dot = s.id === null ? "\u2726" : "\u25CF";
|
|
1185
|
+
return /* @__PURE__ */ jsxs(ClickableBox, { onClick: () => onSelect(i), marginRight: 2, children: [
|
|
1186
|
+
/* @__PURE__ */ jsx(Text, { dimColor: !active, children: i }),
|
|
1187
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
1188
|
+
/* @__PURE__ */ jsx(Text, { color: s.color, bold: active, dimColor: !active, children: dot }),
|
|
1189
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
1190
|
+
active ? /* @__PURE__ */ jsx(Text, { bold: true, color: s.color, children: s.name }) : /* @__PURE__ */ jsx(Text, { dimColor: true, children: s.name })
|
|
1191
|
+
] }, s.id ?? "__all__");
|
|
1192
|
+
}) });
|
|
1206
1193
|
}
|
|
1207
1194
|
function ViewBar({ views, active, sort, onSelect }) {
|
|
1208
1195
|
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
@@ -1538,114 +1525,183 @@ function ColorField({ value, focused }) {
|
|
|
1538
1525
|
/* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: " shows on dashboard, account strip, borders" }) })
|
|
1539
1526
|
] });
|
|
1540
1527
|
}
|
|
1541
|
-
function DashboardView({ slots, stats, compact }) {
|
|
1528
|
+
function DashboardView({ slots, stats, compact: _compact }) {
|
|
1542
1529
|
const slotKey = (s) => s.id ?? "__default__";
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
/* @__PURE__ */ jsxs(Text, { color: slot.color, bold: true, children: [
|
|
1548
|
-
"\u25CF ",
|
|
1549
|
-
slot.name,
|
|
1550
|
-
" "
|
|
1551
|
-
] }),
|
|
1552
|
-
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "loading..." })
|
|
1553
|
-
] }, slotKey(slot));
|
|
1554
|
-
}
|
|
1555
|
-
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
1556
|
-
/* @__PURE__ */ jsx(
|
|
1557
|
-
AccountCard,
|
|
1558
|
-
{
|
|
1559
|
-
slot,
|
|
1560
|
-
dashboard: s.dashboard,
|
|
1561
|
-
billing: s.billing,
|
|
1562
|
-
compact
|
|
1563
|
-
}
|
|
1564
|
-
),
|
|
1565
|
-
i < slots.length - 1 && /* @__PURE__ */ jsx(Box, { height: 1 })
|
|
1566
|
-
] }, slotKey(slot));
|
|
1567
|
-
}) });
|
|
1568
|
-
}
|
|
1569
|
-
function AccountCard({ slot, dashboard, billing, compact }) {
|
|
1530
|
+
const items = slots.map((slot) => ({ slot, s: stats.get(slotKey(slot)) })).filter((x) => !!x.s?.dashboard);
|
|
1531
|
+
if (items.length === 0) return /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Loading..." });
|
|
1532
|
+
const agg = aggregateUsage(items.map((i) => i.s.dashboard));
|
|
1533
|
+
const isMulti = items.length > 1;
|
|
1570
1534
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
1571
|
-
/* @__PURE__ */ jsxs(
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
"
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
borderStyle: "bold",
|
|
1589
|
-
borderColor: slot.color,
|
|
1590
|
-
borderRight: false,
|
|
1591
|
-
borderTop: false,
|
|
1592
|
-
borderBottom: false,
|
|
1593
|
-
children: [
|
|
1594
|
-
/* @__PURE__ */ jsx(Text, { bold: true, children: "Usage" }),
|
|
1595
|
-
!compact && /* @__PURE__ */ jsx(Box, { height: 1 }),
|
|
1596
|
-
/* @__PURE__ */ jsx(SummaryRow, { label: "Today", summary: dashboard.today, compact }),
|
|
1597
|
-
/* @__PURE__ */ jsx(SummaryRow, { label: compact ? "Week" : "This Week", summary: dashboard.week, compact }),
|
|
1598
|
-
/* @__PURE__ */ jsx(SummaryRow, { label: compact ? "Month" : "This Month", summary: dashboard.month, compact }),
|
|
1599
|
-
dashboard.burnRate > 0 && !compact && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1600
|
-
/* @__PURE__ */ jsx(Box, { height: 1 }),
|
|
1601
|
-
/* @__PURE__ */ jsxs(Box, { children: [
|
|
1602
|
-
/* @__PURE__ */ jsx(Box, { width: 14, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Burn rate" }) }),
|
|
1603
|
-
/* @__PURE__ */ jsx(Box, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx(Text, { color: "red", children: currency(dashboard.burnRate) }) }),
|
|
1604
|
-
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "/hr" })
|
|
1605
|
-
] })
|
|
1535
|
+
/* @__PURE__ */ jsxs(
|
|
1536
|
+
Box,
|
|
1537
|
+
{
|
|
1538
|
+
flexDirection: "column",
|
|
1539
|
+
paddingLeft: 1,
|
|
1540
|
+
borderStyle: "bold",
|
|
1541
|
+
borderColor: isMulti ? "green" : items[0].slot.color,
|
|
1542
|
+
borderRight: false,
|
|
1543
|
+
borderTop: false,
|
|
1544
|
+
borderBottom: false,
|
|
1545
|
+
children: [
|
|
1546
|
+
/* @__PURE__ */ jsxs(Box, { children: [
|
|
1547
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "Claude" }),
|
|
1548
|
+
isMulti && /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
1549
|
+
" all accounts (",
|
|
1550
|
+
items.length,
|
|
1551
|
+
")"
|
|
1606
1552
|
] }),
|
|
1607
|
-
|
|
1608
|
-
/* @__PURE__ */ jsx(
|
|
1609
|
-
/* @__PURE__ */ jsx(Text, { color:
|
|
1553
|
+
!isMulti && items[0].slot.id && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1554
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: " " }),
|
|
1555
|
+
/* @__PURE__ */ jsx(Text, { color: items[0].slot.color, children: "\u25CF " }),
|
|
1556
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: items[0].slot.name })
|
|
1557
|
+
] })
|
|
1558
|
+
] }),
|
|
1559
|
+
/* @__PURE__ */ jsx(Box, { height: 1 }),
|
|
1560
|
+
/* @__PURE__ */ jsx(SummaryRow, { label: "Today", summary: agg.today }),
|
|
1561
|
+
/* @__PURE__ */ jsx(SummaryRow, { label: "This Week", summary: agg.week }),
|
|
1562
|
+
/* @__PURE__ */ jsx(SummaryRow, { label: "This Month", summary: agg.month }),
|
|
1563
|
+
agg.burnRate > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1564
|
+
/* @__PURE__ */ jsx(Box, { height: 1 }),
|
|
1565
|
+
/* @__PURE__ */ jsxs(Box, { children: [
|
|
1566
|
+
/* @__PURE__ */ jsx(Box, { width: 14, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Burn rate" }) }),
|
|
1567
|
+
/* @__PURE__ */ jsx(Box, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx(Text, { color: "red", children: currency(agg.burnRate) }) }),
|
|
1610
1568
|
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "/hr" })
|
|
1611
1569
|
] })
|
|
1612
|
-
]
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1570
|
+
] })
|
|
1571
|
+
]
|
|
1572
|
+
}
|
|
1573
|
+
),
|
|
1574
|
+
/* @__PURE__ */ jsx(Box, { height: 1 }),
|
|
1575
|
+
/* @__PURE__ */ jsx(RateLimitsCard, { items })
|
|
1576
|
+
] });
|
|
1577
|
+
}
|
|
1578
|
+
function aggregateUsage(list) {
|
|
1579
|
+
const z = {
|
|
1580
|
+
today: { cost: 0, tokens: 0 },
|
|
1581
|
+
week: { cost: 0, tokens: 0 },
|
|
1582
|
+
month: { cost: 0, tokens: 0 },
|
|
1583
|
+
burnRate: 0
|
|
1584
|
+
};
|
|
1585
|
+
for (const d of list) {
|
|
1586
|
+
z.today.cost += d.today.cost;
|
|
1587
|
+
z.today.tokens += d.today.tokens;
|
|
1588
|
+
z.week.cost += d.week.cost;
|
|
1589
|
+
z.week.tokens += d.week.tokens;
|
|
1590
|
+
z.month.cost += d.month.cost;
|
|
1591
|
+
z.month.tokens += d.month.tokens;
|
|
1592
|
+
z.burnRate += d.burnRate;
|
|
1593
|
+
}
|
|
1594
|
+
return z;
|
|
1595
|
+
}
|
|
1596
|
+
function SummaryRow({ label, summary }) {
|
|
1597
|
+
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
1598
|
+
/* @__PURE__ */ jsx(Box, { width: 14, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: label }) }),
|
|
1599
|
+
/* @__PURE__ */ jsx(Box, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx(Text, { bold: true, color: "yellow", children: currency(summary.cost) }) }),
|
|
1600
|
+
/* @__PURE__ */ jsx(Box, { width: 18, justifyContent: "flex-end", children: /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
1601
|
+
tokens(summary.tokens),
|
|
1602
|
+
" tokens"
|
|
1603
|
+
] }) })
|
|
1604
|
+
] });
|
|
1605
|
+
}
|
|
1606
|
+
function RateLimitsCard({ items }) {
|
|
1607
|
+
const anyData = items.some((i) => i.s.billing?.session || i.s.billing?.weekly || i.s.billing?.sonnet);
|
|
1608
|
+
const anyError = items.some((i) => i.s.billing?.error);
|
|
1609
|
+
const borderColor = !anyData && anyError ? "red" : "yellow";
|
|
1610
|
+
return /* @__PURE__ */ jsxs(
|
|
1611
|
+
Box,
|
|
1612
|
+
{
|
|
1613
|
+
flexDirection: "column",
|
|
1614
|
+
paddingLeft: 1,
|
|
1615
|
+
borderStyle: "bold",
|
|
1616
|
+
borderColor,
|
|
1617
|
+
borderRight: false,
|
|
1618
|
+
borderTop: false,
|
|
1619
|
+
borderBottom: false,
|
|
1620
|
+
children: [
|
|
1621
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "Rate Limits" }),
|
|
1622
|
+
/* @__PURE__ */ jsx(Box, { height: 1 }),
|
|
1623
|
+
!anyData ? anyError ? /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: items.map(({ slot, s }) => s.billing?.error && /* @__PURE__ */ jsxs(Box, { children: [
|
|
1624
|
+
/* @__PURE__ */ jsx(Text, { color: slot.color, children: "\u25CF " }),
|
|
1625
|
+
/* @__PURE__ */ jsx(Box, { width: 12, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: slot.name }) }),
|
|
1626
|
+
/* @__PURE__ */ jsx(Text, { color: "red", children: s.billing.error })
|
|
1627
|
+
] }, slot.id ?? "__default__")) }) : /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Fetching..." }) : /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
1628
|
+
/* @__PURE__ */ jsx(MetricBlock, { label: "Total Usage", sublabel: "5h session", pick: (b) => b?.session, items, showResets: true }),
|
|
1629
|
+
/* @__PURE__ */ jsx(MetricBlock, { label: "This Week", sublabel: "7-day", pick: (b) => b?.weekly, items, showResets: true }),
|
|
1630
|
+
/* @__PURE__ */ jsx(MetricBlock, { label: "Sonnet", sublabel: "7-day sonnet", pick: (b) => b?.sonnet, items }),
|
|
1631
|
+
items.some((i) => i.s.billing?.extraUsage) && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginTop: 1, children: [
|
|
1632
|
+
/* @__PURE__ */ jsx(Text, { bold: true, dimColor: true, children: "Extra Usage" }),
|
|
1633
|
+
items.map(({ slot, s }) => {
|
|
1634
|
+
const e = s.billing?.extraUsage;
|
|
1635
|
+
if (!e) return null;
|
|
1636
|
+
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
1637
|
+
/* @__PURE__ */ jsx(Text, { color: slot.color, children: "\u25CF " }),
|
|
1638
|
+
/* @__PURE__ */ jsx(Box, { width: 12, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: slot.name }) }),
|
|
1635
1639
|
/* @__PURE__ */ jsxs(Text, { color: "yellow", children: [
|
|
1636
1640
|
"$",
|
|
1637
|
-
|
|
1641
|
+
e.used.toFixed(2)
|
|
1638
1642
|
] }),
|
|
1639
1643
|
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
1640
1644
|
" / $",
|
|
1641
|
-
|
|
1642
|
-
" limit"
|
|
1645
|
+
e.limit.toFixed(2)
|
|
1643
1646
|
] })
|
|
1644
|
-
] })
|
|
1645
|
-
|
|
1646
|
-
]
|
|
1647
|
-
}
|
|
1648
|
-
|
|
1647
|
+
] }, slot.id ?? "__default__");
|
|
1648
|
+
})
|
|
1649
|
+
] })
|
|
1650
|
+
] })
|
|
1651
|
+
]
|
|
1652
|
+
}
|
|
1653
|
+
);
|
|
1654
|
+
}
|
|
1655
|
+
function MetricBlock({
|
|
1656
|
+
label,
|
|
1657
|
+
sublabel,
|
|
1658
|
+
pick,
|
|
1659
|
+
items,
|
|
1660
|
+
showResets
|
|
1661
|
+
}) {
|
|
1662
|
+
const rows = items.map((i) => ({ slot: i.slot, lim: pick(i.s.billing) ?? null })).filter((r) => r.lim !== null);
|
|
1663
|
+
if (rows.length === 0) return null;
|
|
1664
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
1665
|
+
/* @__PURE__ */ jsxs(Box, { children: [
|
|
1666
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: label }),
|
|
1667
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
1668
|
+
" ",
|
|
1669
|
+
sublabel
|
|
1670
|
+
] })
|
|
1671
|
+
] }),
|
|
1672
|
+
rows.map(({ slot, lim }) => /* @__PURE__ */ jsx(
|
|
1673
|
+
AccountLimitBar,
|
|
1674
|
+
{
|
|
1675
|
+
slot,
|
|
1676
|
+
pct: lim.utilization,
|
|
1677
|
+
resets: showResets ? lim.resetsAt : null,
|
|
1678
|
+
showName: items.length > 1
|
|
1679
|
+
},
|
|
1680
|
+
slot.id ?? "__default__"
|
|
1681
|
+
))
|
|
1682
|
+
] });
|
|
1683
|
+
}
|
|
1684
|
+
function AccountLimitBar({
|
|
1685
|
+
slot,
|
|
1686
|
+
pct,
|
|
1687
|
+
resets,
|
|
1688
|
+
showName
|
|
1689
|
+
}) {
|
|
1690
|
+
const width = 28;
|
|
1691
|
+
const filled = Math.max(0, Math.min(width, Math.round(pct / 100 * width)));
|
|
1692
|
+
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
1693
|
+
/* @__PURE__ */ jsx(Text, { color: slot.color, children: "\u25CF " }),
|
|
1694
|
+
showName ? /* @__PURE__ */ jsx(Box, { width: 12, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: slot.name }) }) : /* @__PURE__ */ jsx(Box, { width: 2, children: /* @__PURE__ */ jsx(Text, { children: " " }) }),
|
|
1695
|
+
/* @__PURE__ */ jsx(Text, { color: slot.color, children: "\u2501".repeat(filled) }),
|
|
1696
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "\u2500".repeat(width - filled) }),
|
|
1697
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
1698
|
+
/* @__PURE__ */ jsx(Box, { width: 5, justifyContent: "flex-end", children: /* @__PURE__ */ jsxs(Text, { bold: true, children: [
|
|
1699
|
+
Math.round(pct),
|
|
1700
|
+
"%"
|
|
1701
|
+
] }) }),
|
|
1702
|
+
resets && /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
1703
|
+
" resets ",
|
|
1704
|
+
resets
|
|
1649
1705
|
] })
|
|
1650
1706
|
] });
|
|
1651
1707
|
}
|
|
@@ -1667,45 +1723,6 @@ function fmtMinutes(mins) {
|
|
|
1667
1723
|
const m = mins % 60;
|
|
1668
1724
|
return m === 0 ? `${h}h` : `${h}h ${m}m`;
|
|
1669
1725
|
}
|
|
1670
|
-
function LimitBar({ label, pct, resets, compact }) {
|
|
1671
|
-
const width = compact ? 16 : 30;
|
|
1672
|
-
const filled = Math.round(pct / 100 * width);
|
|
1673
|
-
const color = pct >= 80 ? "red" : pct >= 50 ? "yellow" : "green";
|
|
1674
|
-
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
1675
|
-
/* @__PURE__ */ jsx(Box, { width: 10, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: label }) }),
|
|
1676
|
-
/* @__PURE__ */ jsx(Text, { color, children: "\u2501".repeat(filled) }),
|
|
1677
|
-
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "\u2500".repeat(width - filled) }),
|
|
1678
|
-
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
1679
|
-
/* @__PURE__ */ jsxs(Text, { bold: true, children: [
|
|
1680
|
-
Math.round(pct),
|
|
1681
|
-
"%"
|
|
1682
|
-
] }),
|
|
1683
|
-
!compact && /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
1684
|
-
" resets ",
|
|
1685
|
-
resets
|
|
1686
|
-
] })
|
|
1687
|
-
] });
|
|
1688
|
-
}
|
|
1689
|
-
function SummaryRow({ label, summary, compact }) {
|
|
1690
|
-
if (compact) {
|
|
1691
|
-
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
1692
|
-
/* @__PURE__ */ jsx(Box, { width: 10, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: label }) }),
|
|
1693
|
-
/* @__PURE__ */ jsx(Box, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx(Text, { bold: true, color: "yellow", children: currency(summary.cost) }) }),
|
|
1694
|
-
/* @__PURE__ */ jsx(Box, { width: 14, justifyContent: "flex-end", children: /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
1695
|
-
tokens(summary.tokens),
|
|
1696
|
-
" tk"
|
|
1697
|
-
] }) })
|
|
1698
|
-
] });
|
|
1699
|
-
}
|
|
1700
|
-
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
1701
|
-
/* @__PURE__ */ jsx(Box, { width: 14, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: label }) }),
|
|
1702
|
-
/* @__PURE__ */ jsx(Box, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx(Text, { bold: true, color: "yellow", children: currency(summary.cost) }) }),
|
|
1703
|
-
/* @__PURE__ */ jsx(Box, { width: 18, justifyContent: "flex-end", children: /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
1704
|
-
tokens(summary.tokens),
|
|
1705
|
-
" tokens"
|
|
1706
|
-
] }) })
|
|
1707
|
-
] });
|
|
1708
|
-
}
|
|
1709
1726
|
function TableView({ rows: allRows, cursor, expanded, maxRows, cols, onRowClick }) {
|
|
1710
1727
|
const wide = cols > 90;
|
|
1711
1728
|
const base = wide ? { label: 12, input: 10, output: 10, cc: 14, cr: 12, total: 11, cost: 13 } : { label: 8, input: 7, output: 7, cc: 7, cr: 8, total: 0, cost: 11 };
|