@tokscale/cli 1.0.3 → 1.0.5
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 +6 -2
- package/dist/cli.js.map +1 -1
- package/dist/tui/{App.jsx → App.js} +3 -35
- package/dist/tui/{App.jsx.map → App.js.map} +1 -1
- package/dist/tui/components/{BarChart.jsx → BarChart.js} +14 -37
- package/dist/tui/components/{BarChart.jsx.map → BarChart.js.map} +1 -1
- package/dist/tui/components/{DailyView.jsx → DailyView.js} +7 -23
- package/dist/tui/components/{DailyView.jsx.map → DailyView.js.map} +1 -1
- package/dist/tui/components/DateBreakdownPanel.js +36 -0
- package/dist/tui/components/DateBreakdownPanel.js.map +1 -0
- package/dist/tui/components/Footer.js +87 -0
- package/dist/tui/components/Footer.js.map +1 -0
- package/dist/tui/components/Header.js +20 -0
- package/dist/tui/components/Header.js.map +1 -0
- package/dist/tui/components/Legend.js +16 -0
- package/dist/tui/components/Legend.js.map +1 -0
- package/dist/tui/components/{LoadingSpinner.jsx → LoadingSpinner.js} +6 -12
- package/dist/tui/components/{LoadingSpinner.jsx.map → LoadingSpinner.js.map} +1 -1
- package/dist/tui/components/ModelRow.js +15 -0
- package/dist/tui/components/ModelRow.js.map +1 -0
- package/dist/tui/components/{ModelView.jsx → ModelView.js} +7 -24
- package/dist/tui/components/{ModelView.jsx.map → ModelView.js.map} +1 -1
- package/dist/tui/components/{OverviewView.jsx → OverviewView.js} +11 -35
- package/dist/tui/components/{OverviewView.jsx.map → OverviewView.js.map} +1 -1
- package/dist/tui/components/StatsView.js +86 -0
- package/dist/tui/components/StatsView.js.map +1 -0
- package/dist/tui/components/TokenBreakdown.js +10 -0
- package/dist/tui/components/TokenBreakdown.js.map +1 -0
- package/dist/tui/{index.jsx → index.js} +3 -2
- package/dist/tui/{index.jsx.map → index.js.map} +1 -1
- package/package.json +2 -2
- package/dist/tui/components/DateBreakdownPanel.jsx +0 -61
- package/dist/tui/components/DateBreakdownPanel.jsx.map +0 -1
- package/dist/tui/components/Footer.jsx +0 -158
- package/dist/tui/components/Footer.jsx.map +0 -1
- package/dist/tui/components/Header.jsx +0 -38
- package/dist/tui/components/Header.jsx.map +0 -1
- package/dist/tui/components/Legend.jsx +0 -27
- package/dist/tui/components/Legend.jsx.map +0 -1
- package/dist/tui/components/ModelRow.jsx +0 -28
- package/dist/tui/components/ModelRow.jsx.map +0 -1
- package/dist/tui/components/StatsView.jsx +0 -180
- package/dist/tui/components/StatsView.jsx.map +0 -1
- package/dist/tui/components/TokenBreakdown.jsx +0 -27
- package/dist/tui/components/TokenBreakdown.jsx.map +0 -1
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { Show, createSignal, onMount, onCleanup } from "solid-js";
|
|
2
|
-
import { getPalette } from "../config/themes.js";
|
|
3
|
-
import { formatTokens } from "../utils/format.js";
|
|
4
|
-
import { isVeryNarrow } from "../utils/responsive.js";
|
|
5
|
-
function formatTimeAgo(timestamp) {
|
|
6
|
-
const seconds = Math.floor((Date.now() - timestamp) / 1000);
|
|
7
|
-
if (seconds < 60)
|
|
8
|
-
return `${seconds}s ago`;
|
|
9
|
-
const minutes = Math.floor(seconds / 60);
|
|
10
|
-
if (minutes < 60)
|
|
11
|
-
return `${minutes}m ago`;
|
|
12
|
-
const hours = Math.floor(minutes / 60);
|
|
13
|
-
if (hours < 24)
|
|
14
|
-
return `${hours}h ago`;
|
|
15
|
-
const days = Math.floor(hours / 24);
|
|
16
|
-
return `${days}d ago`;
|
|
17
|
-
}
|
|
18
|
-
export function Footer(props) {
|
|
19
|
-
const palette = () => getPalette(props.colorPalette);
|
|
20
|
-
const isVeryNarrowTerminal = () => isVeryNarrow(props.width);
|
|
21
|
-
const showScrollInfo = () => props.activeTab === "overview" &&
|
|
22
|
-
props.totalItems &&
|
|
23
|
-
props.scrollStart !== undefined &&
|
|
24
|
-
props.scrollEnd !== undefined;
|
|
25
|
-
const totals = () => props.totals || { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, reasoning: 0, total: 0, cost: 0 };
|
|
26
|
-
return (<box flexDirection="column" paddingX={1}>
|
|
27
|
-
<box flexDirection="row" justifyContent="space-between">
|
|
28
|
-
<box flexDirection="row" gap={1}>
|
|
29
|
-
<SourceBadge name={isVeryNarrowTerminal() ? "1" : "1:OC"} source="opencode" enabled={props.enabledSources.has("opencode")} onToggle={props.onSourceToggle}/>
|
|
30
|
-
<SourceBadge name={isVeryNarrowTerminal() ? "2" : "2:CC"} source="claude" enabled={props.enabledSources.has("claude")} onToggle={props.onSourceToggle}/>
|
|
31
|
-
<SourceBadge name={isVeryNarrowTerminal() ? "3" : "3:CX"} source="codex" enabled={props.enabledSources.has("codex")} onToggle={props.onSourceToggle}/>
|
|
32
|
-
<SourceBadge name={isVeryNarrowTerminal() ? "4" : "4:CR"} source="cursor" enabled={props.enabledSources.has("cursor")} onToggle={props.onSourceToggle}/>
|
|
33
|
-
<SourceBadge name={isVeryNarrowTerminal() ? "5" : "5:GM"} source="gemini" enabled={props.enabledSources.has("gemini")} onToggle={props.onSourceToggle}/>
|
|
34
|
-
<Show when={!isVeryNarrowTerminal()}>
|
|
35
|
-
<text dim>|</text>
|
|
36
|
-
<SortButton label="Cost" sortType="cost" active={props.sortBy === "cost"} onClick={props.onSortChange}/>
|
|
37
|
-
<SortButton label="Tokens" sortType="tokens" active={props.sortBy === "tokens"} onClick={props.onSortChange}/>
|
|
38
|
-
</Show>
|
|
39
|
-
<Show when={showScrollInfo() && !isVeryNarrowTerminal()}>
|
|
40
|
-
<text dim>|</text>
|
|
41
|
-
<text dim>{`↓ ${props.scrollStart + 1}-${props.scrollEnd} of ${props.totalItems}`}</text>
|
|
42
|
-
</Show>
|
|
43
|
-
</box>
|
|
44
|
-
<box flexDirection="row" gap={1}>
|
|
45
|
-
<text fg="cyan">{formatTokens(totals().total)}</text>
|
|
46
|
-
<text dim>tokens</text>
|
|
47
|
-
<text dim>|</text>
|
|
48
|
-
<text fg="green" bold>{`$${totals().cost.toFixed(2)}`}</text>
|
|
49
|
-
<Show when={!isVeryNarrowTerminal()}>
|
|
50
|
-
<text dim>({props.modelCount} models)</text>
|
|
51
|
-
</Show>
|
|
52
|
-
</box>
|
|
53
|
-
</box>
|
|
54
|
-
<box flexDirection="row" gap={1}>
|
|
55
|
-
<Show when={props.statusMessage} fallback={<Show when={isVeryNarrowTerminal()} fallback={<>
|
|
56
|
-
<text dim>↑↓ scroll • ←→/tab view • y copy •</text>
|
|
57
|
-
<box onMouseDown={props.onPaletteChange}>
|
|
58
|
-
<text fg="magenta">{`[p:${palette().name}]`}</text>
|
|
59
|
-
</box>
|
|
60
|
-
<box onMouseDown={props.onRefresh}>
|
|
61
|
-
<text fg="yellow">[r:refresh]</text>
|
|
62
|
-
</box>
|
|
63
|
-
<text dim>• e export • q quit</text>
|
|
64
|
-
</>}>
|
|
65
|
-
<text dim>↑↓•←→•y•</text>
|
|
66
|
-
<box onMouseDown={props.onPaletteChange}>
|
|
67
|
-
<text fg="magenta">[p]</text>
|
|
68
|
-
</box>
|
|
69
|
-
<box onMouseDown={props.onRefresh}>
|
|
70
|
-
<text fg="yellow">[r]</text>
|
|
71
|
-
</box>
|
|
72
|
-
<text dim>•e•q</text>
|
|
73
|
-
</Show>}>
|
|
74
|
-
<text fg="green" bold>{props.statusMessage}</text>
|
|
75
|
-
</Show>
|
|
76
|
-
</box>
|
|
77
|
-
<Show when={props.isRefreshing}>
|
|
78
|
-
<LoadingStatusLine phase={props.loadingPhase}/>
|
|
79
|
-
</Show>
|
|
80
|
-
<Show when={!props.isRefreshing && props.cacheTimestamp}>
|
|
81
|
-
<box flexDirection="row">
|
|
82
|
-
<text dim>{`Last updated: ${formatTimeAgo(props.cacheTimestamp)}`}</text>
|
|
83
|
-
</box>
|
|
84
|
-
</Show>
|
|
85
|
-
</box>);
|
|
86
|
-
}
|
|
87
|
-
function SourceBadge(props) {
|
|
88
|
-
const handleClick = () => props.onToggle?.(props.source);
|
|
89
|
-
return (<box onMouseDown={handleClick}>
|
|
90
|
-
<text fg={props.enabled ? "green" : "gray"}>
|
|
91
|
-
{`[${props.enabled ? "●" : "○"}${props.name}]`}
|
|
92
|
-
</text>
|
|
93
|
-
</box>);
|
|
94
|
-
}
|
|
95
|
-
function SortButton(props) {
|
|
96
|
-
const handleClick = () => props.onClick?.(props.sortType);
|
|
97
|
-
return (<box onMouseDown={handleClick}>
|
|
98
|
-
<text fg={props.active ? "white" : "gray"} bold={props.active}>
|
|
99
|
-
{props.label}
|
|
100
|
-
</text>
|
|
101
|
-
</box>);
|
|
102
|
-
}
|
|
103
|
-
const SPINNER_COLORS = ["#00FFFF", "#00D7D7", "#00AFAF", "#008787", "#666666", "#666666"];
|
|
104
|
-
const SPINNER_WIDTH = 6;
|
|
105
|
-
const SPINNER_HOLD_START = 20;
|
|
106
|
-
const SPINNER_HOLD_END = 6;
|
|
107
|
-
const SPINNER_TRAIL = 3;
|
|
108
|
-
const SPINNER_INTERVAL = 40;
|
|
109
|
-
const PHASE_MESSAGES = {
|
|
110
|
-
"idle": "Initializing...",
|
|
111
|
-
"loading-pricing": "Loading pricing data...",
|
|
112
|
-
"syncing-cursor": "Syncing Cursor data...",
|
|
113
|
-
"parsing-sources": "Parsing session files...",
|
|
114
|
-
"finalizing-report": "Finalizing report...",
|
|
115
|
-
"complete": "Complete",
|
|
116
|
-
};
|
|
117
|
-
function LoadingStatusLine(props) {
|
|
118
|
-
const [frame, setFrame] = createSignal(0);
|
|
119
|
-
onMount(() => {
|
|
120
|
-
const id = setInterval(() => setFrame(f => f + 1), SPINNER_INTERVAL);
|
|
121
|
-
onCleanup(() => clearInterval(id));
|
|
122
|
-
});
|
|
123
|
-
const getSpinnerState = () => {
|
|
124
|
-
const forwardFrames = SPINNER_WIDTH;
|
|
125
|
-
const backwardFrames = SPINNER_WIDTH - 1;
|
|
126
|
-
const totalCycle = forwardFrames + SPINNER_HOLD_END + backwardFrames + SPINNER_HOLD_START;
|
|
127
|
-
const normalized = frame() % totalCycle;
|
|
128
|
-
if (normalized < forwardFrames) {
|
|
129
|
-
return { position: normalized, forward: true };
|
|
130
|
-
}
|
|
131
|
-
else if (normalized < forwardFrames + SPINNER_HOLD_END) {
|
|
132
|
-
return { position: SPINNER_WIDTH - 1, forward: true };
|
|
133
|
-
}
|
|
134
|
-
else if (normalized < forwardFrames + SPINNER_HOLD_END + backwardFrames) {
|
|
135
|
-
return { position: SPINNER_WIDTH - 2 - (normalized - forwardFrames - SPINNER_HOLD_END), forward: false };
|
|
136
|
-
}
|
|
137
|
-
return { position: 0, forward: false };
|
|
138
|
-
};
|
|
139
|
-
const getCharProps = (index) => {
|
|
140
|
-
const { position, forward } = getSpinnerState();
|
|
141
|
-
const distance = forward ? position - index : index - position;
|
|
142
|
-
if (distance >= 0 && distance < SPINNER_TRAIL) {
|
|
143
|
-
return { char: "■", color: SPINNER_COLORS[distance] };
|
|
144
|
-
}
|
|
145
|
-
return { char: "⬝", color: "#444444" };
|
|
146
|
-
};
|
|
147
|
-
const message = () => props.phase ? PHASE_MESSAGES[props.phase] : "Refreshing...";
|
|
148
|
-
return (<box flexDirection="row" gap={1}>
|
|
149
|
-
<box flexDirection="row" gap={0}>
|
|
150
|
-
{Array.from({ length: SPINNER_WIDTH }, (_, i) => {
|
|
151
|
-
const { char, color } = getCharProps(i);
|
|
152
|
-
return <text fg={color}>{char}</text>;
|
|
153
|
-
})}
|
|
154
|
-
</box>
|
|
155
|
-
<text dim>{message()}</text>
|
|
156
|
-
</box>);
|
|
157
|
-
}
|
|
158
|
-
//# sourceMappingURL=Footer.jsx.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.jsx","sourceRoot":"","sources":["../../../src/tui/components/Footer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Show } from "solid-js";
|
|
2
|
-
import { exec } from "child_process";
|
|
3
|
-
import { isNarrow, isVeryNarrow } from "../utils/responsive.js";
|
|
4
|
-
const REPO_URL = "https://github.com/junhoyeo/tokscale";
|
|
5
|
-
function openUrl(url) {
|
|
6
|
-
const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
|
|
7
|
-
exec(`${cmd} ${url}`);
|
|
8
|
-
}
|
|
9
|
-
export function Header(props) {
|
|
10
|
-
const isNarrowTerminal = () => isNarrow(props.width);
|
|
11
|
-
const isVeryNarrowTerminal = () => isVeryNarrow(props.width);
|
|
12
|
-
const getTabName = (fullName, shortName) => isVeryNarrowTerminal() ? shortName : fullName;
|
|
13
|
-
return (<box flexDirection="row" paddingX={1} paddingY={0} justifyContent="space-between">
|
|
14
|
-
<box flexDirection="row" gap={isVeryNarrowTerminal() ? 1 : 2}>
|
|
15
|
-
<Tab name={getTabName("Overview", "Ovw")} tabId="overview" active={props.activeTab === "overview"} onClick={props.onTabClick}/>
|
|
16
|
-
<Tab name={getTabName("Models", "Mod")} tabId="model" active={props.activeTab === "model"} onClick={props.onTabClick}/>
|
|
17
|
-
<Tab name={getTabName("Daily", "Day")} tabId="daily" active={props.activeTab === "daily"} onClick={props.onTabClick}/>
|
|
18
|
-
<Tab name={getTabName("Stats", "Sta")} tabId="stats" active={props.activeTab === "stats"} onClick={props.onTabClick}/>
|
|
19
|
-
</box>
|
|
20
|
-
<Show when={!isNarrowTerminal()}>
|
|
21
|
-
<box flexDirection="row" onMouseDown={() => openUrl(REPO_URL)}>
|
|
22
|
-
<text fg="cyan" bold>tokscale</text>
|
|
23
|
-
<text fg="#666666">{" | GitHub"}</text>
|
|
24
|
-
</box>
|
|
25
|
-
</Show>
|
|
26
|
-
</box>);
|
|
27
|
-
}
|
|
28
|
-
function Tab(props) {
|
|
29
|
-
const handleClick = () => props.onClick?.(props.tabId);
|
|
30
|
-
return (<Show when={props.active} fallback={<box onMouseDown={handleClick}>
|
|
31
|
-
<text dim>{props.name}</text>
|
|
32
|
-
</box>}>
|
|
33
|
-
<box onMouseDown={handleClick}>
|
|
34
|
-
<text bg="cyan" fg="black" bold>{` ${props.name} `}</text>
|
|
35
|
-
</box>
|
|
36
|
-
</Show>);
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=Header.jsx.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Header.jsx","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { For, Show } from "solid-js";
|
|
2
|
-
import { getModelColor } from "../utils/colors.js";
|
|
3
|
-
import { isNarrow, isVeryNarrow } from "../utils/responsive.js";
|
|
4
|
-
export function Legend(props) {
|
|
5
|
-
const isNarrowTerminal = () => isNarrow(props.width);
|
|
6
|
-
const isVeryNarrowTerminal = () => isVeryNarrow(props.width);
|
|
7
|
-
const maxModelNameWidth = () => isVeryNarrowTerminal() ? 12 : isNarrowTerminal() ? 18 : 30;
|
|
8
|
-
const truncateModelName = (name) => {
|
|
9
|
-
const max = maxModelNameWidth();
|
|
10
|
-
return name.length > max ? name.slice(0, max - 1) + "…" : name;
|
|
11
|
-
};
|
|
12
|
-
const models = () => props.models;
|
|
13
|
-
return (<Show when={models().length > 0}>
|
|
14
|
-
<box flexDirection="row" gap={1} flexWrap="wrap">
|
|
15
|
-
<For each={models()}>
|
|
16
|
-
{(modelId, i) => (<box flexDirection="row" gap={0}>
|
|
17
|
-
<text fg={getModelColor(modelId)}>●</text>
|
|
18
|
-
<text>{` ${truncateModelName(modelId)}`}</text>
|
|
19
|
-
<Show when={i() < models().length - 1}>
|
|
20
|
-
<text dim>{isVeryNarrowTerminal() ? " " : " ·"}</text>
|
|
21
|
-
</Show>
|
|
22
|
-
</box>)}
|
|
23
|
-
</For>
|
|
24
|
-
</box>
|
|
25
|
-
</Show>);
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=Legend.jsx.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Legend.jsx","sourceRoot":"","sources":["../../../src/tui/components/Legend.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAOhE,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE7D,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IAElC,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAC9B;MAAA,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAC9C;QAAA,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAClB;UAAA,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CACf,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC9B;cAAA,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CACzC;cAAA,CAAC,IAAI,CAAC,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAC9C;cAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CACpC;gBAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CACxD;cAAA,EAAE,IAAI,CACR;YAAA,EAAE,GAAG,CAAC,CACP,CACH;QAAA,EAAE,GAAG,CACP;MAAA,EAAE,GAAG,CACP;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { Show, createMemo } from "solid-js";
|
|
2
|
-
import { TokenBreakdown } from "./TokenBreakdown.js";
|
|
3
|
-
import { getModelColor } from "../utils/colors.js";
|
|
4
|
-
export function ModelRow(props) {
|
|
5
|
-
const color = () => getModelColor(props.modelId);
|
|
6
|
-
const bgColor = createMemo(() => props.isActive ? "blue" : undefined);
|
|
7
|
-
const truncateName = (name) => {
|
|
8
|
-
const max = props.maxNameWidth ?? 50;
|
|
9
|
-
return name.length > max ? name.slice(0, max - 1) + "…" : name;
|
|
10
|
-
};
|
|
11
|
-
const indentStr = () => " ".repeat(props.indent ?? 0);
|
|
12
|
-
return (<box flexDirection="column">
|
|
13
|
-
<box flexDirection="row" backgroundColor={bgColor()}>
|
|
14
|
-
<Show when={props.indent}>
|
|
15
|
-
<text>{indentStr()}</text>
|
|
16
|
-
</Show>
|
|
17
|
-
<text fg={color()} bg={bgColor()}>●</text>
|
|
18
|
-
<text fg={props.isActive ? "white" : undefined} bg={bgColor()}>{` ${truncateName(props.modelId)}`}</text>
|
|
19
|
-
<Show when={props.percentage !== undefined}>
|
|
20
|
-
<text dim bg={bgColor()}>{` (${props.percentage.toFixed(1)}%)`}</text>
|
|
21
|
-
</Show>
|
|
22
|
-
</box>
|
|
23
|
-
<box flexDirection="row">
|
|
24
|
-
<TokenBreakdown tokens={props.tokens} compact={props.compact} indent={(props.indent ?? 0) + 2}/>
|
|
25
|
-
</box>
|
|
26
|
-
</box>);
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=ModelRow.jsx.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ModelRow.jsx","sourceRoot":"","sources":["../../../src/tui/components/ModelRow.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,cAAc,EAA2B,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYnD,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEtE,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAEtD,OAAO,CACL,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CACzB;MAAA,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC,CAClD;QAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CACvB;UAAA,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAC3B;QAAA,EAAE,IAAI,CACN;QAAA,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CACzC;QAAA,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CACxG;QAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CACzC;UAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,UAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CACxE;QAAA,EAAE,IAAI,CACR;MAAA,EAAE,GAAG,CACL;MAAA,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CACtB;QAAA,CAAC,cAAc,CACb,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CACrB,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CACvB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAEpC;MAAA,EAAE,GAAG,CACP;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { For, Show, createMemo, createSignal } from "solid-js";
|
|
2
|
-
import { getPalette, getGradeColor } from "../config/themes.js";
|
|
3
|
-
import { getModelColor } from "../utils/colors.js";
|
|
4
|
-
import { formatTokens } from "../utils/format.js";
|
|
5
|
-
import { isNarrow } from "../utils/responsive.js";
|
|
6
|
-
import { DateBreakdownPanel } from "./DateBreakdownPanel.js";
|
|
7
|
-
const MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
|
8
|
-
const MONTHS_SHORT = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"];
|
|
9
|
-
const DAYS = ["", "Mon", "", "Wed", "", "Fri", ""];
|
|
10
|
-
export function StatsView(props) {
|
|
11
|
-
const palette = () => getPalette(props.colorPalette);
|
|
12
|
-
const isNarrowTerminal = () => isNarrow(props.width);
|
|
13
|
-
const grid = () => props.data.contributionGrid;
|
|
14
|
-
const cellWidth = 2;
|
|
15
|
-
const [clickedCell, setClickedCell] = createSignal(null);
|
|
16
|
-
const selectedBreakdown = createMemo(() => {
|
|
17
|
-
const date = clickedCell();
|
|
18
|
-
if (!date)
|
|
19
|
-
return null;
|
|
20
|
-
if (!props.data.dailyBreakdowns)
|
|
21
|
-
return null;
|
|
22
|
-
if (!(props.data.dailyBreakdowns instanceof Map))
|
|
23
|
-
return null;
|
|
24
|
-
return props.data.dailyBreakdowns.get(date) || null;
|
|
25
|
-
});
|
|
26
|
-
const monthPositions = createMemo(() => {
|
|
27
|
-
const sundayRow = grid()[0] || [];
|
|
28
|
-
if (sundayRow.length === 0)
|
|
29
|
-
return [];
|
|
30
|
-
const positions = [];
|
|
31
|
-
let lastMonth = -1;
|
|
32
|
-
const monthNames = isNarrowTerminal() ? MONTHS_SHORT : MONTHS;
|
|
33
|
-
for (let weekIdx = 0; weekIdx < sundayRow.length; weekIdx++) {
|
|
34
|
-
const cell = sundayRow[weekIdx];
|
|
35
|
-
if (!cell.date)
|
|
36
|
-
continue;
|
|
37
|
-
const month = new Date(cell.date + "T00:00:00").getMonth();
|
|
38
|
-
if (month !== lastMonth) {
|
|
39
|
-
positions.push({ month: monthNames[month], weekIndex: weekIdx });
|
|
40
|
-
lastMonth = month;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return positions;
|
|
44
|
-
});
|
|
45
|
-
const totalWeeks = createMemo(() => (grid()[0] || []).length);
|
|
46
|
-
const monthLabelRow = createMemo(() => {
|
|
47
|
-
const weeks = totalWeeks();
|
|
48
|
-
const positions = monthPositions();
|
|
49
|
-
const chars = new Array(weeks * cellWidth).fill(" ");
|
|
50
|
-
for (const pos of positions) {
|
|
51
|
-
const startIdx = pos.weekIndex * cellWidth;
|
|
52
|
-
const monthChars = pos.month.split("");
|
|
53
|
-
for (let i = 0; i < monthChars.length && startIdx + i < chars.length; i++) {
|
|
54
|
-
chars[startIdx + i] = monthChars[i];
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return chars.join("");
|
|
58
|
-
});
|
|
59
|
-
const dayLabelWidth = () => isNarrowTerminal() ? 2 : 4;
|
|
60
|
-
const isSelected = (cellDate) => cellDate && (clickedCell() === cellDate || props.selectedDate === cellDate);
|
|
61
|
-
const getCellColor = (level) => level === 0 ? "#666666" : getGradeColor(palette(), level);
|
|
62
|
-
return (<box flexDirection="column" gap={1}>
|
|
63
|
-
<box flexDirection="column">
|
|
64
|
-
<box flexDirection="row">
|
|
65
|
-
<text dim>{" ".repeat(dayLabelWidth())}</text>
|
|
66
|
-
<text dim>{monthLabelRow()}</text>
|
|
67
|
-
</box>
|
|
68
|
-
|
|
69
|
-
<box onMouseDown={(e) => {
|
|
70
|
-
const labelW = dayLabelWidth();
|
|
71
|
-
const col = Math.floor((e.x - labelW) / cellWidth);
|
|
72
|
-
const row = e.y - 2;
|
|
73
|
-
const gridRows = grid().length;
|
|
74
|
-
if (row < 0 || row >= gridRows) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
if (col < 0) {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
const rowData = grid()[row];
|
|
81
|
-
if (!rowData || col >= rowData.length) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
const cell = rowData[col];
|
|
85
|
-
if (!cell?.date) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
const newDate = clickedCell() === cell.date ? null : cell.date;
|
|
89
|
-
setClickedCell(newDate);
|
|
90
|
-
}}>
|
|
91
|
-
<For each={DAYS}>
|
|
92
|
-
{(day, dayIndex) => (<box flexDirection="row">
|
|
93
|
-
<text dim>{isNarrowTerminal() ? " " : day.padStart(3) + " "}</text>
|
|
94
|
-
<For each={grid()[dayIndex()] || []}>
|
|
95
|
-
{(cell) => (<text fg={isSelected(cell.date) ? "#ffffff" : getCellColor(cell.level)} bg={isSelected(cell.date) ? getCellColor(cell.level) : undefined}>
|
|
96
|
-
{isSelected(cell.date) ? "▓▓" : (cell.level === 0 ? "· " : "██")}
|
|
97
|
-
</text>)}
|
|
98
|
-
</For>
|
|
99
|
-
</box>)}
|
|
100
|
-
</For>
|
|
101
|
-
</box>
|
|
102
|
-
</box>
|
|
103
|
-
|
|
104
|
-
<box flexDirection="row" gap={2} marginTop={1}>
|
|
105
|
-
<text dim>Less</text>
|
|
106
|
-
<box flexDirection="row" gap={0}>
|
|
107
|
-
<For each={[0, 1, 2, 3, 4]}>
|
|
108
|
-
{(level) => (<text fg={level === 0 ? "#666666" : getGradeColor(palette(), level)}>
|
|
109
|
-
{level === 0 ? "· " : "██"}
|
|
110
|
-
</text>)}
|
|
111
|
-
</For>
|
|
112
|
-
</box>
|
|
113
|
-
<text dim>More</text>
|
|
114
|
-
<Show when={!isNarrowTerminal()}>
|
|
115
|
-
<text dim>|</text>
|
|
116
|
-
<text dim>Click on a day to see breakdown</text>
|
|
117
|
-
</Show>
|
|
118
|
-
</box>
|
|
119
|
-
|
|
120
|
-
<Show when={selectedBreakdown()}>
|
|
121
|
-
<DateBreakdownPanel breakdown={selectedBreakdown()} isNarrow={isNarrowTerminal()}/>
|
|
122
|
-
</Show>
|
|
123
|
-
|
|
124
|
-
<Show when={!selectedBreakdown()}>
|
|
125
|
-
<box flexDirection="column" marginTop={1}>
|
|
126
|
-
<box flexDirection={isNarrowTerminal() ? "column" : "row"} gap={isNarrowTerminal() ? 0 : 4}>
|
|
127
|
-
<box flexDirection="column">
|
|
128
|
-
<box flexDirection="row" gap={1}>
|
|
129
|
-
<text dim>{isNarrowTerminal() ? "Model:" : "Favorite model:"}</text>
|
|
130
|
-
<text fg={getModelColor(props.data.stats.favoriteModel)}>{props.data.stats.favoriteModel}</text>
|
|
131
|
-
</box>
|
|
132
|
-
<box flexDirection="row" gap={1}>
|
|
133
|
-
<text dim>Sessions:</text>
|
|
134
|
-
<text fg="cyan">{props.data.stats.sessions.toLocaleString()}</text>
|
|
135
|
-
</box>
|
|
136
|
-
<box flexDirection="row" gap={1}>
|
|
137
|
-
<text dim>{isNarrowTerminal() ? "Streak:" : "Current streak:"}</text>
|
|
138
|
-
<text fg="cyan">{`${props.data.stats.currentStreak} days`}</text>
|
|
139
|
-
</box>
|
|
140
|
-
<box flexDirection="row" gap={1}>
|
|
141
|
-
<text dim>{isNarrowTerminal() ? "Active:" : "Active days:"}</text>
|
|
142
|
-
<text fg="cyan">{`${props.data.stats.activeDays}/${props.data.stats.totalDays}`}</text>
|
|
143
|
-
</box>
|
|
144
|
-
</box>
|
|
145
|
-
|
|
146
|
-
<box flexDirection="column">
|
|
147
|
-
<box flexDirection="row" gap={1}>
|
|
148
|
-
<text dim>{isNarrowTerminal() ? "Tokens:" : "Total tokens:"}</text>
|
|
149
|
-
<text fg="cyan">{formatTokens(props.data.stats.totalTokens)}</text>
|
|
150
|
-
</box>
|
|
151
|
-
<box flexDirection="row" gap={1}>
|
|
152
|
-
<text dim>{isNarrowTerminal() ? "Session:" : "Longest session:"}</text>
|
|
153
|
-
<text fg="cyan">{props.data.stats.longestSession}</text>
|
|
154
|
-
</box>
|
|
155
|
-
<box flexDirection="row" gap={1}>
|
|
156
|
-
<text dim>{isNarrowTerminal() ? "Max streak:" : "Longest streak:"}</text>
|
|
157
|
-
<text fg="cyan">{`${props.data.stats.longestStreak} days`}</text>
|
|
158
|
-
</box>
|
|
159
|
-
<box flexDirection="row" gap={1}>
|
|
160
|
-
<text dim>{isNarrowTerminal() ? "Peak:" : "Peak hour:"}</text>
|
|
161
|
-
<text fg="cyan">{props.data.stats.peakHour}</text>
|
|
162
|
-
</box>
|
|
163
|
-
</box>
|
|
164
|
-
</box>
|
|
165
|
-
</box>
|
|
166
|
-
|
|
167
|
-
<Show when={!isNarrowTerminal()}>
|
|
168
|
-
<box marginTop={1}>
|
|
169
|
-
<text fg="yellow" italic>{`Your total spending is $${props.data.totalCost.toFixed(2)} on AI coding assistants!`}</text>
|
|
170
|
-
</box>
|
|
171
|
-
</Show>
|
|
172
|
-
<Show when={isNarrowTerminal()}>
|
|
173
|
-
<box marginTop={1}>
|
|
174
|
-
<text fg="yellow" italic>{`Total: $${props.data.totalCost.toFixed(2)}`}</text>
|
|
175
|
-
</box>
|
|
176
|
-
</Show>
|
|
177
|
-
</Show>
|
|
178
|
-
</box>);
|
|
179
|
-
}
|
|
180
|
-
//# sourceMappingURL=StatsView.jsx.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StatsView.jsx","sourceRoot":"","sources":["../../../src/tui/components/StatsView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { formatTokens, formatTokensCompact } from "../utils/format.js";
|
|
2
|
-
export function TokenBreakdown(props) {
|
|
3
|
-
const indentStr = () => " ".repeat(props.indent ?? 0);
|
|
4
|
-
if (props.compact) {
|
|
5
|
-
return (<box flexDirection="row">
|
|
6
|
-
<text fg="#666666">{indentStr()}</text>
|
|
7
|
-
<text fg="#AAAAAA">{formatTokensCompact(props.tokens.input)}</text>
|
|
8
|
-
<text fg="#666666">{"/"}</text>
|
|
9
|
-
<text fg="#AAAAAA">{formatTokensCompact(props.tokens.output)}</text>
|
|
10
|
-
<text fg="#666666">{"/"}</text>
|
|
11
|
-
<text fg="#AAAAAA">{formatTokensCompact(props.tokens.cacheRead)}</text>
|
|
12
|
-
<text fg="#666666">{"/"}</text>
|
|
13
|
-
<text fg="#AAAAAA">{formatTokensCompact(props.tokens.cacheWrite)}</text>
|
|
14
|
-
</box>);
|
|
15
|
-
}
|
|
16
|
-
return (<box flexDirection="row">
|
|
17
|
-
<text fg="#666666">{`${indentStr()}In: `}</text>
|
|
18
|
-
<text fg="#AAAAAA">{formatTokens(props.tokens.input)}</text>
|
|
19
|
-
<text fg="#666666">{" · Out: "}</text>
|
|
20
|
-
<text fg="#AAAAAA">{formatTokens(props.tokens.output)}</text>
|
|
21
|
-
<text fg="#666666">{" · CR: "}</text>
|
|
22
|
-
<text fg="#AAAAAA">{formatTokens(props.tokens.cacheRead)}</text>
|
|
23
|
-
<text fg="#666666">{" · CW: "}</text>
|
|
24
|
-
<text fg="#AAAAAA">{formatTokens(props.tokens.cacheWrite)}</text>
|
|
25
|
-
</box>);
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=TokenBreakdown.jsx.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TokenBreakdown.jsx","sourceRoot":"","sources":["../../../src/tui/components/TokenBreakdown.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAevE,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAEtD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CACL,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CACtB;QAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CACtC;QAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAClE;QAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAC9B;QAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CACnE;QAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAC9B;QAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CACtE;QAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAC9B;QAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CACzE;MAAA,EAAE,GAAG,CAAC,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CACtB;MAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAC/C;MAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAC3D;MAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CACrC;MAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAC5D;MAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,CACpC;MAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAC/D;MAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,CACpC;MAAA,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAClE;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
|