@tokscale/cli 1.0.0
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/auth.d.ts +17 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +162 -0
- package/dist/auth.js.map +1 -0
- package/dist/claudecode.d.ts +39 -0
- package/dist/claudecode.d.ts.map +1 -0
- package/dist/claudecode.js +375 -0
- package/dist/claudecode.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +761 -0
- package/dist/cli.js.map +1 -0
- package/dist/credentials.d.ts +36 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +109 -0
- package/dist/credentials.js.map +1 -0
- package/dist/cursor.d.ts +132 -0
- package/dist/cursor.d.ts.map +1 -0
- package/dist/cursor.js +432 -0
- package/dist/cursor.js.map +1 -0
- package/dist/gemini.d.ts +36 -0
- package/dist/gemini.d.ts.map +1 -0
- package/dist/gemini.js +125 -0
- package/dist/gemini.js.map +1 -0
- package/dist/graph-types.d.ts +152 -0
- package/dist/graph-types.d.ts.map +1 -0
- package/dist/graph-types.js +6 -0
- package/dist/graph-types.js.map +1 -0
- package/dist/graph.d.ts +29 -0
- package/dist/graph.d.ts.map +1 -0
- package/dist/graph.js +383 -0
- package/dist/graph.js.map +1 -0
- package/dist/native-runner.d.ts +12 -0
- package/dist/native-runner.d.ts.map +1 -0
- package/dist/native-runner.js +89 -0
- package/dist/native-runner.js.map +1 -0
- package/dist/native.d.ts +116 -0
- package/dist/native.d.ts.map +1 -0
- package/dist/native.js +359 -0
- package/dist/native.js.map +1 -0
- package/dist/opencode.d.ts +40 -0
- package/dist/opencode.d.ts.map +1 -0
- package/dist/opencode.js +69 -0
- package/dist/opencode.js.map +1 -0
- package/dist/pricing.d.ts +58 -0
- package/dist/pricing.d.ts.map +1 -0
- package/dist/pricing.js +232 -0
- package/dist/pricing.js.map +1 -0
- package/dist/sessions/claudecode.d.ts +8 -0
- package/dist/sessions/claudecode.d.ts.map +1 -0
- package/dist/sessions/claudecode.js +84 -0
- package/dist/sessions/claudecode.js.map +1 -0
- package/dist/sessions/codex.d.ts +8 -0
- package/dist/sessions/codex.d.ts.map +1 -0
- package/dist/sessions/codex.js +158 -0
- package/dist/sessions/codex.js.map +1 -0
- package/dist/sessions/gemini.d.ts +8 -0
- package/dist/sessions/gemini.d.ts.map +1 -0
- package/dist/sessions/gemini.js +66 -0
- package/dist/sessions/gemini.js.map +1 -0
- package/dist/sessions/index.d.ts +32 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/sessions/index.js +96 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/opencode.d.ts +8 -0
- package/dist/sessions/opencode.d.ts.map +1 -0
- package/dist/sessions/opencode.js +54 -0
- package/dist/sessions/opencode.js.map +1 -0
- package/dist/sessions/reports.d.ts +58 -0
- package/dist/sessions/reports.d.ts.map +1 -0
- package/dist/sessions/reports.js +337 -0
- package/dist/sessions/reports.js.map +1 -0
- package/dist/sessions/types.d.ts +30 -0
- package/dist/sessions/types.d.ts.map +1 -0
- package/dist/sessions/types.js +29 -0
- package/dist/sessions/types.js.map +1 -0
- package/dist/spinner.d.ts +75 -0
- package/dist/spinner.d.ts.map +1 -0
- package/dist/spinner.js +203 -0
- package/dist/spinner.js.map +1 -0
- package/dist/submit.d.ts +21 -0
- package/dist/submit.d.ts.map +1 -0
- package/dist/submit.js +128 -0
- package/dist/submit.js.map +1 -0
- package/dist/table.d.ts +42 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +181 -0
- package/dist/table.js.map +1 -0
- package/dist/test-selection.d.ts +2 -0
- package/dist/test-selection.d.ts.map +1 -0
- package/dist/test-selection.jsx +32 -0
- package/dist/test-selection.jsx.map +1 -0
- package/dist/tui/App.d.ts +4 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +167 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/App.jsx +281 -0
- package/dist/tui/App.jsx.map +1 -0
- package/dist/tui/components/BarChart.d.ts +17 -0
- package/dist/tui/components/BarChart.d.ts.map +1 -0
- package/dist/tui/components/BarChart.js +63 -0
- package/dist/tui/components/BarChart.js.map +1 -0
- package/dist/tui/components/BarChart.jsx +163 -0
- package/dist/tui/components/BarChart.jsx.map +1 -0
- package/dist/tui/components/DailyView.d.ts +13 -0
- package/dist/tui/components/DailyView.d.ts.map +1 -0
- package/dist/tui/components/DailyView.js +32 -0
- package/dist/tui/components/DailyView.js.map +1 -0
- package/dist/tui/components/DailyView.jsx +84 -0
- package/dist/tui/components/DailyView.jsx.map +1 -0
- package/dist/tui/components/DateBreakdownPanel.d.ts +7 -0
- package/dist/tui/components/DateBreakdownPanel.d.ts.map +1 -0
- package/dist/tui/components/DateBreakdownPanel.jsx +61 -0
- package/dist/tui/components/DateBreakdownPanel.jsx.map +1 -0
- package/dist/tui/components/Footer.d.ts +26 -0
- package/dist/tui/components/Footer.d.ts.map +1 -0
- package/dist/tui/components/Footer.js +15 -0
- package/dist/tui/components/Footer.js.map +1 -0
- package/dist/tui/components/Footer.jsx +158 -0
- package/dist/tui/components/Footer.jsx.map +1 -0
- package/dist/tui/components/Header.d.ts +9 -0
- package/dist/tui/components/Header.d.ts.map +1 -0
- package/dist/tui/components/Header.js +12 -0
- package/dist/tui/components/Header.js.map +1 -0
- package/dist/tui/components/Header.jsx +38 -0
- package/dist/tui/components/Header.jsx.map +1 -0
- package/dist/tui/components/Legend.d.ts +7 -0
- package/dist/tui/components/Legend.d.ts.map +1 -0
- package/dist/tui/components/Legend.js +9 -0
- package/dist/tui/components/Legend.js.map +1 -0
- package/dist/tui/components/Legend.jsx +27 -0
- package/dist/tui/components/Legend.jsx.map +1 -0
- package/dist/tui/components/LoadingSpinner.d.ts +8 -0
- package/dist/tui/components/LoadingSpinner.d.ts.map +1 -0
- package/dist/tui/components/LoadingSpinner.jsx +62 -0
- package/dist/tui/components/LoadingSpinner.jsx.map +1 -0
- package/dist/tui/components/ModelListItem.d.ts +11 -0
- package/dist/tui/components/ModelListItem.d.ts.map +1 -0
- package/dist/tui/components/ModelListItem.js +18 -0
- package/dist/tui/components/ModelListItem.js.map +1 -0
- package/dist/tui/components/ModelListItem.jsx +17 -0
- package/dist/tui/components/ModelListItem.jsx.map +1 -0
- package/dist/tui/components/ModelRow.d.ts +13 -0
- package/dist/tui/components/ModelRow.d.ts.map +1 -0
- package/dist/tui/components/ModelRow.jsx +28 -0
- package/dist/tui/components/ModelRow.jsx.map +1 -0
- package/dist/tui/components/ModelView.d.ts +13 -0
- package/dist/tui/components/ModelView.d.ts.map +1 -0
- package/dist/tui/components/ModelView.js +34 -0
- package/dist/tui/components/ModelView.js.map +1 -0
- package/dist/tui/components/ModelView.jsx +111 -0
- package/dist/tui/components/ModelView.jsx.map +1 -0
- package/dist/tui/components/OverviewView.d.ts +14 -0
- package/dist/tui/components/OverviewView.d.ts.map +1 -0
- package/dist/tui/components/OverviewView.js +24 -0
- package/dist/tui/components/OverviewView.js.map +1 -0
- package/dist/tui/components/OverviewView.jsx +79 -0
- package/dist/tui/components/OverviewView.jsx.map +1 -0
- package/dist/tui/components/StatsView.d.ts +12 -0
- package/dist/tui/components/StatsView.d.ts.map +1 -0
- package/dist/tui/components/StatsView.js +43 -0
- package/dist/tui/components/StatsView.js.map +1 -0
- package/dist/tui/components/StatsView.jsx +180 -0
- package/dist/tui/components/StatsView.jsx.map +1 -0
- package/dist/tui/components/TokenBreakdown.d.ts +14 -0
- package/dist/tui/components/TokenBreakdown.d.ts.map +1 -0
- package/dist/tui/components/TokenBreakdown.jsx +27 -0
- package/dist/tui/components/TokenBreakdown.jsx.map +1 -0
- package/dist/tui/components/index.d.ts +16 -0
- package/dist/tui/components/index.d.ts.map +1 -0
- package/dist/tui/components/index.js +13 -0
- package/dist/tui/components/index.js.map +1 -0
- package/dist/tui/config/settings.d.ts +12 -0
- package/dist/tui/config/settings.d.ts.map +1 -0
- package/dist/tui/config/settings.js +105 -0
- package/dist/tui/config/settings.js.map +1 -0
- package/dist/tui/config/themes.d.ts +15 -0
- package/dist/tui/config/themes.d.ts.map +1 -0
- package/dist/tui/config/themes.js +82 -0
- package/dist/tui/config/themes.js.map +1 -0
- package/dist/tui/hooks/useData.d.ts +17 -0
- package/dist/tui/hooks/useData.d.ts.map +1 -0
- package/dist/tui/hooks/useData.js +430 -0
- package/dist/tui/hooks/useData.js.map +1 -0
- package/dist/tui/index.d.ts +4 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +8 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/index.jsx +35 -0
- package/dist/tui/index.jsx.map +1 -0
- package/dist/tui/types/index.d.ts +133 -0
- package/dist/tui/types/index.d.ts.map +1 -0
- package/dist/tui/types/index.js +21 -0
- package/dist/tui/types/index.js.map +1 -0
- package/dist/tui/utils/cleanup.d.ts +22 -0
- package/dist/tui/utils/cleanup.d.ts.map +1 -0
- package/dist/tui/utils/cleanup.js +59 -0
- package/dist/tui/utils/cleanup.js.map +1 -0
- package/dist/tui/utils/colors.d.ts +18 -0
- package/dist/tui/utils/colors.d.ts.map +1 -0
- package/dist/tui/utils/colors.js +55 -0
- package/dist/tui/utils/colors.js.map +1 -0
- package/dist/tui/utils/format.d.ts +7 -0
- package/dist/tui/utils/format.d.ts.map +1 -0
- package/dist/tui/utils/format.js +45 -0
- package/dist/tui/utils/format.js.map +1 -0
- package/dist/tui/utils/responsive.d.ts +5 -0
- package/dist/tui/utils/responsive.d.ts.map +1 -0
- package/dist/tui/utils/responsive.js +5 -0
- package/dist/tui/utils/responsive.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.jsx","sourceRoot":"","sources":["../../../src/tui/components/Footer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { TabType } from "../types/index.js";
|
|
2
|
+
interface HeaderProps {
|
|
3
|
+
activeTab: TabType;
|
|
4
|
+
onTabClick?: (tab: TabType) => void;
|
|
5
|
+
width?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function Header(props: HeaderProps): any;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=Header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAUjD,UAAU,WAAW;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,OAuBxC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
export function Header({ activeTab }) {
|
|
4
|
+
return (_jsxs(Box, { paddingX: 1, paddingY: 0, justifyContent: "space-between", children: [_jsxs(Box, { gap: 2, children: [_jsx(Tab, { name: "Overview", active: activeTab === "overview" }), _jsx(Tab, { name: "Models", active: activeTab === "model" }), _jsx(Tab, { name: "Daily", active: activeTab === "daily" }), _jsx(Tab, { name: "Stats", active: activeTab === "stats" })] }), _jsx(Text, { color: "cyan", bold: true, children: "Token Usage Tracker" })] }));
|
|
5
|
+
}
|
|
6
|
+
function Tab({ name, active }) {
|
|
7
|
+
if (active) {
|
|
8
|
+
return (_jsx(Box, { children: _jsxs(Text, { backgroundColor: "cyan", color: "black", bold: true, children: [" ", name, " "] }) }));
|
|
9
|
+
}
|
|
10
|
+
return _jsx(Text, { dimColor: true, children: name });
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAOhC,MAAM,UAAU,MAAM,CAAC,EAAE,SAAS,EAAe;IAC/C,OAAO,CACL,MAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAC,eAAe,aAC3D,MAAC,GAAG,IAAC,GAAG,EAAE,CAAC,aACT,KAAC,GAAG,IAAC,IAAI,EAAC,UAAU,EAAC,MAAM,EAAE,SAAS,KAAK,UAAU,GAAI,EACzD,KAAC,GAAG,IAAC,IAAI,EAAC,QAAQ,EAAC,MAAM,EAAE,SAAS,KAAK,OAAO,GAAI,EACpD,KAAC,GAAG,IAAC,IAAI,EAAC,OAAO,EAAC,MAAM,EAAE,SAAS,KAAK,OAAO,GAAI,EACnD,KAAC,GAAG,IAAC,IAAI,EAAC,OAAO,EAAC,MAAM,EAAE,SAAS,KAAK,OAAO,GAAI,IAC/C,EACN,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,0CAA2B,IAC9C,CACP,CAAC;AACJ,CAAC;AAED,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAqC;IAC9D,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CACL,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,eAAe,EAAC,MAAM,EAAC,KAAK,EAAC,OAAO,EAAC,IAAI,wBAAG,IAAI,SAAS,GAC3D,CACP,CAAC;IACJ,CAAC;IACD,OAAO,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,GAAQ,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.jsx","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Legend.d.ts","sourceRoot":"","sources":["../../../src/tui/components/Legend.tsx"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,OA6BxC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { getModelColor } from "../utils/colors.js";
|
|
4
|
+
export function Legend({ models }) {
|
|
5
|
+
if (models.length === 0)
|
|
6
|
+
return null;
|
|
7
|
+
return (_jsx(Box, { gap: 1, flexWrap: "wrap", children: models.map((modelId, i) => (_jsxs(Box, { gap: 0, children: [_jsx(Text, { color: getModelColor(modelId), children: "\u25CF" }), _jsxs(Text, { children: [" ", modelId] }), i < models.length - 1 && _jsx(Text, { dimColor: true, children: " \u00B7" })] }, `${modelId}-${i}`))) }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=Legend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Legend.js","sourceRoot":"","sources":["../../../src/tui/components/Legend.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMnD,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,EAAe;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO,CACL,KAAC,GAAG,IAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAC,MAAM,YACzB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAC1B,MAAC,GAAG,IAAyB,GAAG,EAAE,CAAC,aACjC,KAAC,IAAI,IAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,uBAAU,EAC7C,MAAC,IAAI,oBAAG,OAAO,IAAQ,EACtB,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,KAAC,IAAI,IAAC,QAAQ,+BAAW,KAH3C,GAAG,OAAO,IAAI,CAAC,EAAE,CAIrB,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LoadingPhase } from "../types/index.js";
|
|
2
|
+
interface LoadingSpinnerProps {
|
|
3
|
+
message?: string;
|
|
4
|
+
phase?: LoadingPhase;
|
|
5
|
+
}
|
|
6
|
+
export declare function LoadingSpinner(props: LoadingSpinnerProps): any;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=LoadingSpinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadingSpinner.d.ts","sourceRoot":"","sources":["../../../src/tui/components/LoadingSpinner.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAuCtD,UAAU,mBAAmB;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,OAoCxD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { createSignal, onMount, onCleanup } from "solid-js";
|
|
2
|
+
const COLORS = ["#00FFFF", "#00D7D7", "#00AFAF", "#008787", "#666666", "#666666", "#666666", "#666666"];
|
|
3
|
+
const WIDTH = 8;
|
|
4
|
+
const HOLD_START = 30;
|
|
5
|
+
const HOLD_END = 9;
|
|
6
|
+
const TRAIL_LENGTH = 4;
|
|
7
|
+
const INTERVAL = 40;
|
|
8
|
+
function getScannerState(frame) {
|
|
9
|
+
const forwardFrames = WIDTH;
|
|
10
|
+
const backwardFrames = WIDTH - 1;
|
|
11
|
+
const totalCycle = forwardFrames + HOLD_END + backwardFrames + HOLD_START;
|
|
12
|
+
const normalized = frame % totalCycle;
|
|
13
|
+
if (normalized < forwardFrames) {
|
|
14
|
+
return { position: normalized, forward: true };
|
|
15
|
+
}
|
|
16
|
+
else if (normalized < forwardFrames + HOLD_END) {
|
|
17
|
+
return { position: WIDTH - 1, forward: true };
|
|
18
|
+
}
|
|
19
|
+
else if (normalized < forwardFrames + HOLD_END + backwardFrames) {
|
|
20
|
+
return { position: WIDTH - 2 - (normalized - forwardFrames - HOLD_END), forward: false };
|
|
21
|
+
}
|
|
22
|
+
return { position: 0, forward: false };
|
|
23
|
+
}
|
|
24
|
+
const PHASE_MESSAGES = {
|
|
25
|
+
"idle": "Initializing...",
|
|
26
|
+
"loading-pricing": "Loading pricing data...",
|
|
27
|
+
"syncing-cursor": "Syncing Cursor data...",
|
|
28
|
+
"parsing-sources": "Parsing session files...",
|
|
29
|
+
"finalizing-report": "Finalizing report...",
|
|
30
|
+
"complete": "Complete",
|
|
31
|
+
};
|
|
32
|
+
export function LoadingSpinner(props) {
|
|
33
|
+
const [frame, setFrame] = createSignal(0);
|
|
34
|
+
onMount(() => {
|
|
35
|
+
const id = setInterval(() => {
|
|
36
|
+
setFrame((f) => f + 1);
|
|
37
|
+
}, INTERVAL);
|
|
38
|
+
onCleanup(() => clearInterval(id));
|
|
39
|
+
});
|
|
40
|
+
const state = () => getScannerState(frame());
|
|
41
|
+
const displayMessage = () => props.message || (props.phase ? PHASE_MESSAGES[props.phase] : "Loading data...");
|
|
42
|
+
const getCharProps = (index) => {
|
|
43
|
+
const { position, forward } = state();
|
|
44
|
+
const distance = forward ? position - index : index - position;
|
|
45
|
+
if (distance >= 0 && distance < TRAIL_LENGTH) {
|
|
46
|
+
return { char: "■", color: COLORS[distance] };
|
|
47
|
+
}
|
|
48
|
+
return { char: "⬝", color: "#444444" };
|
|
49
|
+
};
|
|
50
|
+
return (<box flexDirection="column" justifyContent="center" alignItems="center" flexGrow={1}>
|
|
51
|
+
<box flexDirection="row" gap={0}>
|
|
52
|
+
{Array.from({ length: WIDTH }, (_, i) => {
|
|
53
|
+
const { char, color } = getCharProps(i);
|
|
54
|
+
return <text fg={color}>{char}</text>;
|
|
55
|
+
})}
|
|
56
|
+
</box>
|
|
57
|
+
<box marginTop={1}>
|
|
58
|
+
<text dim>{displayMessage()}</text>
|
|
59
|
+
</box>
|
|
60
|
+
</box>);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=LoadingSpinner.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadingSpinner.jsx","sourceRoot":"","sources":["../../../src/tui/components/LoadingSpinner.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Accessor } from "solid-js";
|
|
2
|
+
interface ModelListItemProps {
|
|
3
|
+
modelId: string;
|
|
4
|
+
percentage: number;
|
|
5
|
+
inputTokens: number;
|
|
6
|
+
outputTokens: number;
|
|
7
|
+
isSelected: Accessor<boolean>;
|
|
8
|
+
}
|
|
9
|
+
export declare function ModelListItem(props: ModelListItemProps): any;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=ModelListItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelListItem.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ModelListItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIrD,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC/B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,OAetD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { getModelColor } from "../utils/colors.js";
|
|
4
|
+
function formatTokens(n) {
|
|
5
|
+
if (n >= 1_000_000_000)
|
|
6
|
+
return `${(n / 1_000_000_000).toFixed(1)}B`;
|
|
7
|
+
if (n >= 1_000_000)
|
|
8
|
+
return `${(n / 1_000_000).toFixed(1)}M`;
|
|
9
|
+
if (n >= 1_000)
|
|
10
|
+
return `${(n / 1_000).toFixed(1)}K`;
|
|
11
|
+
return n.toString();
|
|
12
|
+
}
|
|
13
|
+
export function ModelListItem({ modelId, percentage, inputTokens, outputTokens, isSelected, }) {
|
|
14
|
+
const color = getModelColor(modelId);
|
|
15
|
+
const bgColor = isSelected ? "blue" : undefined;
|
|
16
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { backgroundColor: bgColor, children: [_jsx(Text, { color: color, children: "\u25CF" }), _jsxs(Text, { color: isSelected ? "white" : undefined, children: [" ", modelId, " "] }), _jsxs(Text, { dimColor: true, children: ["(", percentage.toFixed(1), "%)"] })] }), _jsxs(Text, { dimColor: true, children: [" ", "In: ", formatTokens(inputTokens), " \u00B7 Out: ", formatTokens(outputTokens)] })] }));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=ModelListItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelListItem.js","sourceRoot":"","sources":["../../../src/tui/components/ModelListItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAUnD,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,CAAC,IAAI,aAAa;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpE,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,EACP,UAAU,EACV,WAAW,EACX,YAAY,EACZ,UAAU,GACS;IACnB,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,IAAC,eAAe,EAAE,OAAO,aAC3B,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,uBAAU,EAC5B,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,kBAAI,OAAO,SAAS,EACjE,MAAC,IAAI,IAAC,QAAQ,wBAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,IAC5C,EACN,MAAC,IAAI,IAAC,QAAQ,mBACX,IAAI,UAAM,YAAY,CAAC,WAAW,CAAC,mBAAU,YAAY,CAAC,YAAY,CAAC,IACnE,IACH,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createMemo } from "solid-js";
|
|
2
|
+
import { getModelColor } from "../utils/colors.js";
|
|
3
|
+
import { formatTokens } from "../utils/format.js";
|
|
4
|
+
export function ModelListItem(props) {
|
|
5
|
+
const color = () => getModelColor(props.modelId);
|
|
6
|
+
const isActive = createMemo(() => props.isSelected());
|
|
7
|
+
const bgColor = createMemo(() => isActive() ? "blue" : undefined);
|
|
8
|
+
return (<box flexDirection="column">
|
|
9
|
+
<box flexDirection="row" backgroundColor={bgColor()}>
|
|
10
|
+
<text fg={color()} bg={bgColor()}>●</text>
|
|
11
|
+
<text fg={isActive() ? "white" : undefined} bg={bgColor()}>{` ${props.modelId} `}</text>
|
|
12
|
+
<text dim bg={bgColor()}>{`(${props.percentage.toFixed(1)}%)`}</text>
|
|
13
|
+
</box>
|
|
14
|
+
<text dim>{` In: ${formatTokens(props.inputTokens)} · Out: ${formatTokens(props.outputTokens)}`}</text>
|
|
15
|
+
</box>);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=ModelListItem.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelListItem.jsx","sourceRoot":"","sources":["../../../src/tui/components/ModelListItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAElE,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,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,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CACvF;QAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CACtE;MAAA,EAAE,GAAG,CACL;MAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,IAAI,CACzG;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type TokenBreakdownData } from "./TokenBreakdown.js";
|
|
2
|
+
interface ModelRowProps {
|
|
3
|
+
modelId: string;
|
|
4
|
+
tokens: TokenBreakdownData;
|
|
5
|
+
percentage?: number;
|
|
6
|
+
isActive?: boolean;
|
|
7
|
+
compact?: boolean;
|
|
8
|
+
indent?: number;
|
|
9
|
+
maxNameWidth?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function ModelRow(props: ModelRowProps): any;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=ModelRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelRow.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ModelRow.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,OAgC5C"}
|
|
@@ -0,0 +1,28 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Accessor } from "solid-js";
|
|
2
|
+
import type { TUIData, SortType } from "../hooks/useData.js";
|
|
3
|
+
interface ModelViewProps {
|
|
4
|
+
data: TUIData;
|
|
5
|
+
sortBy: SortType;
|
|
6
|
+
sortDesc: boolean;
|
|
7
|
+
selectedIndex: Accessor<number>;
|
|
8
|
+
height: number;
|
|
9
|
+
width: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function ModelView(props: ModelViewProps): any;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=ModelView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelView.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ModelView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAkB7D,UAAU,cAAc;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,OAoH9C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
export function ModelView({ data, sortBy, sortDesc, selectedIndex, height }) {
|
|
4
|
+
if (!data)
|
|
5
|
+
return null;
|
|
6
|
+
const sortedEntries = [...data.modelEntries].sort((a, b) => {
|
|
7
|
+
let cmp = 0;
|
|
8
|
+
if (sortBy === "cost")
|
|
9
|
+
cmp = a.cost - b.cost;
|
|
10
|
+
else if (sortBy === "tokens")
|
|
11
|
+
cmp = a.total - b.total;
|
|
12
|
+
else
|
|
13
|
+
cmp = a.model.localeCompare(b.model);
|
|
14
|
+
return sortDesc ? -cmp : cmp;
|
|
15
|
+
});
|
|
16
|
+
const visibleEntries = sortedEntries.slice(0, height - 3);
|
|
17
|
+
const formatNum = (n) => {
|
|
18
|
+
if (n >= 1_000_000_000)
|
|
19
|
+
return `${(n / 1_000_000_000).toFixed(1)}B`;
|
|
20
|
+
if (n >= 1_000_000)
|
|
21
|
+
return `${(n / 1_000_000).toFixed(1)}M`;
|
|
22
|
+
if (n >= 1_000)
|
|
23
|
+
return `${(n / 1_000).toFixed(0)}K`;
|
|
24
|
+
return n.toLocaleString();
|
|
25
|
+
};
|
|
26
|
+
const formatCost = (cost) => `$${cost.toFixed(2)}`;
|
|
27
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { children: _jsxs(Text, { color: "cyan", bold: true, children: [" Source/Model".padEnd(24), "Input".padStart(12), "Output".padStart(12), "Cache".padStart(12), "Total".padStart(14), "Cost".padStart(12)] }) }), _jsx(Box, { borderStyle: "single", borderTop: false, borderLeft: false, borderRight: false, borderBottom: true, borderColor: "gray" }), visibleEntries.map((entry, i) => {
|
|
28
|
+
const isSelected = i === selectedIndex;
|
|
29
|
+
const sourceLabel = entry.source.charAt(0).toUpperCase() + entry.source.slice(1);
|
|
30
|
+
const displayName = `${sourceLabel} ${entry.model}`.slice(0, 22);
|
|
31
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { backgroundColor: isSelected ? "blue" : undefined, color: isSelected ? "white" : undefined, children: [displayName.padEnd(24), formatNum(entry.input).padStart(12), formatNum(entry.output).padStart(12), formatNum(entry.cacheRead).padStart(12), formatNum(entry.total).padStart(14)] }), _jsx(Text, { color: "green", backgroundColor: isSelected ? "blue" : undefined, children: formatCost(entry.cost).padStart(12) })] }, `${entry.source}-${entry.model}`));
|
|
32
|
+
})] }));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=ModelView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelView.js","sourceRoot":"","sources":["../../../src/tui/components/ModelView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAWhC,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAkB;IACzF,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACzD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,MAAM,KAAK,MAAM;YAAE,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;aACxC,IAAI,MAAM,KAAK,QAAQ;YAAE,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;;YACjD,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1D,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE;QAC9B,IAAI,CAAC,IAAI,aAAa;YAAE,OAAO,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QACpE,IAAI,CAAC,IAAI,SAAS;YAAE,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5D,IAAI,CAAC,IAAI,KAAK;YAAE,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QACpD,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,mBACpB,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,EAC3B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EACrB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EACpB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EACpB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IACf,GACH,EACN,KAAC,GAAG,IAAC,WAAW,EAAC,QAAQ,EAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,QAAC,WAAW,EAAC,MAAM,GAAG,EAEpH,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC/B,MAAM,UAAU,GAAG,CAAC,KAAK,aAAa,CAAC;gBACvC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjF,MAAM,WAAW,GAAG,GAAG,WAAW,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAEjE,OAAO,CACL,MAAC,GAAG,eACF,MAAC,IAAI,IACH,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAChD,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,aAEtC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EACtB,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EACnC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EACpC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EACvC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAC/B,EACP,KAAC,IAAI,IACH,KAAK,EAAC,OAAO,EACb,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAE/C,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAC/B,KAhBC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAiBpC,CACP,CAAC;YACJ,CAAC,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { For, createMemo } from "solid-js";
|
|
2
|
+
import { getModelColor } from "../utils/colors.js";
|
|
3
|
+
import { formatTokensCompact, formatCostFull } from "../utils/format.js";
|
|
4
|
+
import { isNarrow, isVeryNarrow } from "../utils/responsive.js";
|
|
5
|
+
const STRIPE_BG = "#232328";
|
|
6
|
+
const INPUT_COL_WIDTH = 12;
|
|
7
|
+
const OUTPUT_COL_WIDTH = 12;
|
|
8
|
+
const CACHE_COL_WIDTH = 12;
|
|
9
|
+
const TOTAL_COL_WIDTH = 14;
|
|
10
|
+
const COST_COL_WIDTH = 12;
|
|
11
|
+
const METRIC_COLUMNS_WIDTH_FULL = INPUT_COL_WIDTH + OUTPUT_COL_WIDTH + CACHE_COL_WIDTH + TOTAL_COL_WIDTH + COST_COL_WIDTH;
|
|
12
|
+
const METRIC_COLUMNS_WIDTH_NARROW = TOTAL_COL_WIDTH + COST_COL_WIDTH;
|
|
13
|
+
const SIDE_PADDING = 2;
|
|
14
|
+
const MIN_NAME_COLUMN = 16;
|
|
15
|
+
const MIN_NAME_COLUMN_NARROW = 12;
|
|
16
|
+
export function ModelView(props) {
|
|
17
|
+
const sortedEntries = createMemo(() => {
|
|
18
|
+
const entries = props.data.modelEntries;
|
|
19
|
+
const sortBy = props.sortBy;
|
|
20
|
+
const sortDesc = props.sortDesc;
|
|
21
|
+
return [...entries].sort((a, b) => {
|
|
22
|
+
let cmp = 0;
|
|
23
|
+
if (sortBy === "cost")
|
|
24
|
+
cmp = a.cost - b.cost;
|
|
25
|
+
else if (sortBy === "tokens")
|
|
26
|
+
cmp = a.total - b.total;
|
|
27
|
+
else
|
|
28
|
+
cmp = a.model.localeCompare(b.model);
|
|
29
|
+
return sortDesc ? -cmp : cmp;
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
const isNarrowTerminal = () => isNarrow(props.width);
|
|
33
|
+
const isVeryNarrowTerminal = () => isVeryNarrow(props.width);
|
|
34
|
+
const nameColumnWidths = createMemo(() => {
|
|
35
|
+
const metricWidth = isNarrowTerminal() ? METRIC_COLUMNS_WIDTH_NARROW : METRIC_COLUMNS_WIDTH_FULL;
|
|
36
|
+
const minName = isNarrowTerminal() ? MIN_NAME_COLUMN_NARROW : MIN_NAME_COLUMN;
|
|
37
|
+
const available = Math.max(props.width - SIDE_PADDING - metricWidth, minName);
|
|
38
|
+
const nameColumn = Math.max(minName, available);
|
|
39
|
+
return {
|
|
40
|
+
column: nameColumn,
|
|
41
|
+
text: Math.max(nameColumn - 1, 1),
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
const visibleEntries = createMemo(() => {
|
|
45
|
+
const maxRows = Math.max(props.height - 3, 0);
|
|
46
|
+
return sortedEntries().slice(0, maxRows);
|
|
47
|
+
});
|
|
48
|
+
const formattedRows = createMemo(() => {
|
|
49
|
+
const nameWidth = nameColumnWidths().text;
|
|
50
|
+
return visibleEntries().map((entry) => {
|
|
51
|
+
const sourceLabel = entry.source.charAt(0).toUpperCase() + entry.source.slice(1);
|
|
52
|
+
const fullName = `${sourceLabel} ${entry.model}`;
|
|
53
|
+
let displayName = fullName;
|
|
54
|
+
if (fullName.length > nameWidth) {
|
|
55
|
+
displayName = nameWidth > 1 ? `${fullName.slice(0, nameWidth - 1)}…` : fullName.slice(0, 1);
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
entry,
|
|
59
|
+
displayName,
|
|
60
|
+
nameWidth,
|
|
61
|
+
input: formatTokensCompact(entry.input),
|
|
62
|
+
output: formatTokensCompact(entry.output),
|
|
63
|
+
cache: formatTokensCompact(entry.cacheRead),
|
|
64
|
+
total: formatTokensCompact(entry.total),
|
|
65
|
+
cost: formatCostFull(entry.cost),
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
const sortArrow = () => (props.sortDesc ? "▼" : "▲");
|
|
70
|
+
const nameHeader = () => isVeryNarrowTerminal()
|
|
71
|
+
? ` Model`
|
|
72
|
+
: ` Source/Model`;
|
|
73
|
+
const totalHeader = () => (props.sortBy === "tokens" ? `${sortArrow()} Total` : "Total");
|
|
74
|
+
const costHeader = () => (props.sortBy === "cost" ? `${sortArrow()} Cost` : "Cost");
|
|
75
|
+
const renderHeader = () => {
|
|
76
|
+
if (isNarrowTerminal()) {
|
|
77
|
+
return `${nameHeader().padEnd(nameColumnWidths().column)}${totalHeader().padStart(TOTAL_COL_WIDTH)}${costHeader().padStart(COST_COL_WIDTH)}`;
|
|
78
|
+
}
|
|
79
|
+
return `${nameHeader().padEnd(nameColumnWidths().column)}${"Input".padStart(INPUT_COL_WIDTH)}${"Output".padStart(OUTPUT_COL_WIDTH)}${"Cache".padStart(CACHE_COL_WIDTH)}${totalHeader().padStart(TOTAL_COL_WIDTH)}${costHeader().padStart(COST_COL_WIDTH)}`;
|
|
80
|
+
};
|
|
81
|
+
const renderRowData = (row) => {
|
|
82
|
+
if (isNarrowTerminal()) {
|
|
83
|
+
return `${row.displayName.padEnd(row.nameWidth)}${row.total.padStart(TOTAL_COL_WIDTH)}`;
|
|
84
|
+
}
|
|
85
|
+
return `${row.displayName.padEnd(row.nameWidth)}${row.input.padStart(INPUT_COL_WIDTH)}${row.output.padStart(OUTPUT_COL_WIDTH)}${row.cache.padStart(CACHE_COL_WIDTH)}${row.total.padStart(TOTAL_COL_WIDTH)}`;
|
|
86
|
+
};
|
|
87
|
+
return (<box flexDirection="column">
|
|
88
|
+
<box flexDirection="row">
|
|
89
|
+
<text fg="cyan" bold>
|
|
90
|
+
{renderHeader()}
|
|
91
|
+
</text>
|
|
92
|
+
</box>
|
|
93
|
+
|
|
94
|
+
<For each={formattedRows()}>
|
|
95
|
+
{(row, i) => {
|
|
96
|
+
const isActive = createMemo(() => i() === props.selectedIndex());
|
|
97
|
+
const rowBg = createMemo(() => isActive() ? "blue" : (i() % 2 === 1 ? STRIPE_BG : undefined));
|
|
98
|
+
return (<box flexDirection="row">
|
|
99
|
+
<text fg={getModelColor(row.entry.model)} bg={rowBg()}>●</text>
|
|
100
|
+
<text bg={rowBg()} fg={isActive() ? "white" : undefined}>
|
|
101
|
+
{renderRowData(row)}
|
|
102
|
+
</text>
|
|
103
|
+
<text fg="green" bg={rowBg()}>
|
|
104
|
+
{row.cost.padStart(COST_COL_WIDTH)}
|
|
105
|
+
</text>
|
|
106
|
+
</box>);
|
|
107
|
+
}}
|
|
108
|
+
</For>
|
|
109
|
+
</box>);
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=ModelView.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelView.jsx","sourceRoot":"","sources":["../../../src/tui/components/ModelView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Accessor } from "solid-js";
|
|
2
|
+
import type { TUIData, SortType } from "../hooks/useData.js";
|
|
3
|
+
interface OverviewViewProps {
|
|
4
|
+
data: TUIData;
|
|
5
|
+
sortBy: SortType;
|
|
6
|
+
sortDesc: boolean;
|
|
7
|
+
selectedIndex: Accessor<number>;
|
|
8
|
+
scrollOffset: Accessor<number>;
|
|
9
|
+
height: number;
|
|
10
|
+
width: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function OverviewView(props: OverviewViewProps): any;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=OverviewView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OverviewView.d.ts","sourceRoot":"","sources":["../../../src/tui/components/OverviewView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIhE,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAI7D,UAAU,iBAAiB;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,OAyFpD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { BarChart } from "./BarChart.js";
|
|
4
|
+
import { Legend } from "./Legend.js";
|
|
5
|
+
import { ModelListItem } from "./ModelListItem.js";
|
|
6
|
+
function formatCost(cost) {
|
|
7
|
+
if (cost >= 1000)
|
|
8
|
+
return `$${(cost / 1000).toFixed(1)}K`;
|
|
9
|
+
return `$${cost.toFixed(2)}`;
|
|
10
|
+
}
|
|
11
|
+
export function OverviewView({ data, selectedIndex, scrollOffset, height, width }) {
|
|
12
|
+
if (!data)
|
|
13
|
+
return _jsx(Text, { dimColor: true, children: "No data" });
|
|
14
|
+
const safeHeight = Math.max(height, 12);
|
|
15
|
+
const chartHeight = Math.max(5, Math.floor(safeHeight * 0.35));
|
|
16
|
+
const listHeight = Math.max(4, safeHeight - chartHeight - 4);
|
|
17
|
+
const itemsPerPage = Math.max(1, Math.floor(listHeight / 2));
|
|
18
|
+
const topModelsForLegend = data.topModels.slice(0, 5).map(m => m.modelId);
|
|
19
|
+
const visibleModels = data.topModels.slice(scrollOffset, scrollOffset + itemsPerPage);
|
|
20
|
+
const totalModels = data.topModels.length;
|
|
21
|
+
const endIndex = Math.min(scrollOffset + visibleModels.length, totalModels);
|
|
22
|
+
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Box, { flexDirection: "column", children: [_jsx(BarChart, { data: data.chartData, width: width - 4, height: chartHeight }), _jsx(Legend, { models: topModelsForLegend })] }), _jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { justifyContent: "space-between", marginBottom: 0, children: [_jsx(Text, { bold: true, children: "Models by Cost" }), _jsxs(Text, { dimColor: true, children: ["Total: ", _jsx(Text, { color: "green", children: formatCost(data.totalCost) })] })] }), _jsx(Box, { flexDirection: "column", children: visibleModels.map((model, i) => (_jsx(ModelListItem, { modelId: model.modelId, percentage: model.percentage, inputTokens: model.inputTokens, outputTokens: model.outputTokens, isSelected: scrollOffset + i === selectedIndex }, model.modelId))) }), totalModels > visibleModels.length && (_jsxs(Text, { dimColor: true, children: ["\u2193 ", scrollOffset + 1, "-", endIndex, " of ", totalModels, " models (\u2191\u2193 to scroll)"] }))] })] }));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=OverviewView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OverviewView.js","sourceRoot":"","sources":["../../../src/tui/components/OverviewView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAWnD,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAqB;IAClG,IAAI,CAAC,IAAI;QAAE,OAAO,KAAC,IAAI,IAAC,QAAQ,8BAAe,CAAC;IAEhD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IAE7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAE1E,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,YAAY,CAAC,CAAC;IACtF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAE5E,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aAChC,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,GAAI,EACzE,KAAC,MAAM,IAAC,MAAM,EAAE,kBAAkB,GAAI,IAClC,EAEN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,IAAC,cAAc,EAAC,eAAe,EAAC,YAAY,EAAE,CAAC,aACjD,KAAC,IAAI,IAAC,IAAI,qCAAsB,EAChC,MAAC,IAAI,IAAC,QAAQ,8BAAQ,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAQ,IAAO,IAChF,EAEN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACxB,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAC/B,KAAC,aAAa,IAEZ,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,UAAU,EAAE,YAAY,GAAG,CAAC,KAAK,aAAa,IALzC,KAAK,CAAC,OAAO,CAMlB,CACH,CAAC,GACE,EAEL,WAAW,GAAG,aAAa,CAAC,MAAM,IAAI,CACrC,MAAC,IAAI,IAAC,QAAQ,8BACT,YAAY,GAAG,CAAC,OAAG,QAAQ,UAAM,WAAW,wCAC1C,CACR,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
|