@tokscale/cli 1.4.2 → 2.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/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +128 -0
- package/dist/index.js.map +1 -0
- package/package.json +19 -26
- package/dist/auth.d.ts +0 -17
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -162
- package/dist/auth.js.map +0 -1
- package/dist/cli.d.ts +0 -9
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -1523
- package/dist/cli.js.map +0 -1
- package/dist/credentials.d.ts +0 -50
- package/dist/credentials.d.ts.map +0 -1
- package/dist/credentials.js +0 -151
- package/dist/credentials.js.map +0 -1
- package/dist/cursor.d.ts +0 -167
- package/dist/cursor.d.ts.map +0 -1
- package/dist/cursor.js +0 -906
- package/dist/cursor.js.map +0 -1
- package/dist/date-utils.d.ts +0 -10
- package/dist/date-utils.d.ts.map +0 -1
- package/dist/date-utils.js +0 -47
- package/dist/date-utils.js.map +0 -1
- package/dist/graph-types.d.ts +0 -142
- package/dist/graph-types.d.ts.map +0 -1
- package/dist/graph-types.js +0 -6
- package/dist/graph-types.js.map +0 -1
- package/dist/native-runner.d.ts +0 -11
- package/dist/native-runner.d.ts.map +0 -1
- package/dist/native-runner.js +0 -77
- package/dist/native-runner.js.map +0 -1
- package/dist/native.d.ts +0 -105
- package/dist/native.d.ts.map +0 -1
- package/dist/native.js +0 -302
- package/dist/native.js.map +0 -1
- package/dist/sessions/types.d.ts +0 -28
- package/dist/sessions/types.d.ts.map +0 -1
- package/dist/sessions/types.js +0 -27
- package/dist/sessions/types.js.map +0 -1
- package/dist/spinner.d.ts +0 -75
- package/dist/spinner.d.ts.map +0 -1
- package/dist/spinner.js +0 -203
- package/dist/spinner.js.map +0 -1
- package/dist/submit.d.ts +0 -22
- package/dist/submit.d.ts.map +0 -1
- package/dist/submit.js +0 -292
- package/dist/submit.js.map +0 -1
- package/dist/table.d.ts +0 -42
- package/dist/table.d.ts.map +0 -1
- package/dist/table.js +0 -181
- package/dist/table.js.map +0 -1
- package/dist/tui/App.d.ts +0 -4
- package/dist/tui/App.d.ts.map +0 -1
- package/dist/tui/App.js +0 -350
- package/dist/tui/App.js.map +0 -1
- package/dist/tui/components/BarChart.d.ts +0 -17
- package/dist/tui/components/BarChart.d.ts.map +0 -1
- package/dist/tui/components/BarChart.js +0 -146
- package/dist/tui/components/BarChart.js.map +0 -1
- package/dist/tui/components/DailyView.d.ts +0 -13
- package/dist/tui/components/DailyView.d.ts.map +0 -1
- package/dist/tui/components/DailyView.js +0 -86
- package/dist/tui/components/DailyView.js.map +0 -1
- package/dist/tui/components/DateBreakdownPanel.d.ts +0 -7
- package/dist/tui/components/DateBreakdownPanel.d.ts.map +0 -1
- package/dist/tui/components/DateBreakdownPanel.js +0 -36
- package/dist/tui/components/DateBreakdownPanel.js.map +0 -1
- package/dist/tui/components/Footer.d.ts +0 -28
- package/dist/tui/components/Footer.d.ts.map +0 -1
- package/dist/tui/components/Footer.js +0 -130
- package/dist/tui/components/Footer.js.map +0 -1
- package/dist/tui/components/Header.d.ts +0 -9
- package/dist/tui/components/Header.d.ts.map +0 -1
- package/dist/tui/components/Header.js +0 -20
- package/dist/tui/components/Header.js.map +0 -1
- package/dist/tui/components/Legend.d.ts +0 -7
- package/dist/tui/components/Legend.d.ts.map +0 -1
- package/dist/tui/components/Legend.js +0 -16
- package/dist/tui/components/Legend.js.map +0 -1
- package/dist/tui/components/LoadingSpinner.d.ts +0 -8
- package/dist/tui/components/LoadingSpinner.d.ts.map +0 -1
- package/dist/tui/components/LoadingSpinner.js +0 -55
- package/dist/tui/components/LoadingSpinner.js.map +0 -1
- package/dist/tui/components/ModelRow.d.ts +0 -13
- package/dist/tui/components/ModelRow.d.ts.map +0 -1
- package/dist/tui/components/ModelRow.js +0 -15
- package/dist/tui/components/ModelRow.js.map +0 -1
- package/dist/tui/components/ModelView.d.ts +0 -13
- package/dist/tui/components/ModelView.d.ts.map +0 -1
- package/dist/tui/components/ModelView.js +0 -96
- package/dist/tui/components/ModelView.js.map +0 -1
- package/dist/tui/components/OverviewView.d.ts +0 -14
- package/dist/tui/components/OverviewView.d.ts.map +0 -1
- package/dist/tui/components/OverviewView.js +0 -65
- package/dist/tui/components/OverviewView.js.map +0 -1
- package/dist/tui/components/StatsView.d.ts +0 -14
- package/dist/tui/components/StatsView.d.ts.map +0 -1
- package/dist/tui/components/StatsView.js +0 -102
- package/dist/tui/components/StatsView.js.map +0 -1
- package/dist/tui/components/TokenBreakdown.d.ts +0 -14
- package/dist/tui/components/TokenBreakdown.d.ts.map +0 -1
- package/dist/tui/components/TokenBreakdown.js +0 -10
- package/dist/tui/components/TokenBreakdown.js.map +0 -1
- package/dist/tui/components/index.d.ts +0 -16
- package/dist/tui/components/index.d.ts.map +0 -1
- package/dist/tui/components/index.js +0 -13
- package/dist/tui/components/index.js.map +0 -1
- package/dist/tui/config/settings.d.ts +0 -15
- package/dist/tui/config/settings.d.ts.map +0 -1
- package/dist/tui/config/settings.js +0 -147
- package/dist/tui/config/settings.js.map +0 -1
- package/dist/tui/config/themes.d.ts +0 -15
- package/dist/tui/config/themes.d.ts.map +0 -1
- package/dist/tui/config/themes.js +0 -82
- package/dist/tui/config/themes.js.map +0 -1
- package/dist/tui/hooks/useData.d.ts +0 -19
- package/dist/tui/hooks/useData.d.ts.map +0 -1
- package/dist/tui/hooks/useData.js +0 -467
- package/dist/tui/hooks/useData.js.map +0 -1
- package/dist/tui/index.d.ts +0 -4
- package/dist/tui/index.d.ts.map +0 -1
- package/dist/tui/index.js +0 -36
- package/dist/tui/index.js.map +0 -1
- package/dist/tui/types/index.d.ts +0 -137
- package/dist/tui/types/index.d.ts.map +0 -1
- package/dist/tui/types/index.js +0 -25
- package/dist/tui/types/index.js.map +0 -1
- package/dist/tui/utils/cleanup.d.ts +0 -22
- package/dist/tui/utils/cleanup.d.ts.map +0 -1
- package/dist/tui/utils/cleanup.js +0 -59
- package/dist/tui/utils/cleanup.js.map +0 -1
- package/dist/tui/utils/colors.d.ts +0 -19
- package/dist/tui/utils/colors.d.ts.map +0 -1
- package/dist/tui/utils/colors.js +0 -68
- package/dist/tui/utils/colors.js.map +0 -1
- package/dist/tui/utils/format.d.ts +0 -7
- package/dist/tui/utils/format.d.ts.map +0 -1
- package/dist/tui/utils/format.js +0 -45
- package/dist/tui/utils/format.js.map +0 -1
- package/dist/tui/utils/responsive.d.ts +0 -5
- package/dist/tui/utils/responsive.d.ts.map +0 -1
- package/dist/tui/utils/responsive.js +0 -5
- package/dist/tui/utils/responsive.js.map +0 -1
- package/dist/wrapped.d.ts +0 -43
- package/dist/wrapped.d.ts.map +0 -1
- package/dist/wrapped.js +0 -716
- package/dist/wrapped.js.map +0 -1
- package/src/auth.ts +0 -211
- package/src/cli.ts +0 -1865
- package/src/credentials.ts +0 -176
- package/src/cursor.ts +0 -1044
- package/src/date-utils.ts +0 -51
- package/src/graph-types.ts +0 -175
- package/src/native-runner.js +0 -4
- package/src/native-runner.ts +0 -91
- package/src/native.ts +0 -631
- package/src/sessions/types.ts +0 -59
- package/src/spinner.ts +0 -283
- package/src/submit.ts +0 -358
- package/src/table.ts +0 -233
- package/src/tui/App.tsx +0 -443
- package/src/tui/components/BarChart.tsx +0 -205
- package/src/tui/components/DailyView.tsx +0 -132
- package/src/tui/components/DateBreakdownPanel.tsx +0 -79
- package/src/tui/components/Footer.tsx +0 -368
- package/src/tui/components/Header.tsx +0 -68
- package/src/tui/components/Legend.tsx +0 -39
- package/src/tui/components/LoadingSpinner.tsx +0 -81
- package/src/tui/components/ModelRow.tsx +0 -47
- package/src/tui/components/ModelView.tsx +0 -147
- package/src/tui/components/OverviewView.tsx +0 -121
- package/src/tui/components/StatsView.tsx +0 -249
- package/src/tui/components/TokenBreakdown.tsx +0 -46
- package/src/tui/components/index.ts +0 -15
- package/src/tui/config/settings.ts +0 -183
- package/src/tui/config/themes.ts +0 -115
- package/src/tui/hooks/useData.ts +0 -557
- package/src/tui/index.tsx +0 -44
- package/src/tui/opentui.d.ts +0 -166
- package/src/tui/types/index.ts +0 -172
- package/src/tui/utils/cleanup.ts +0 -65
- package/src/tui/utils/colors.ts +0 -76
- package/src/tui/utils/format.ts +0 -36
- package/src/tui/utils/responsive.ts +0 -8
- package/src/types.d.ts +0 -28
- package/src/wrapped.ts +0 -845
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
|
|
2
|
-
import { For, createMemo } from "solid-js";
|
|
3
|
-
import { formatTokensCompact, formatCostFull } from "../utils/format.js";
|
|
4
|
-
import { isNarrow } from "../utils/responsive.js";
|
|
5
|
-
const STRIPE_BG = "#232328";
|
|
6
|
-
const INPUT_COL_WIDTH = 12;
|
|
7
|
-
const OUTPUT_COL_WIDTH = 12;
|
|
8
|
-
const CACHE_READ_COL_WIDTH = 10;
|
|
9
|
-
const CACHE_WRITE_COL_WIDTH = 10;
|
|
10
|
-
const TOTAL_COL_WIDTH = 14;
|
|
11
|
-
const COST_COL_WIDTH = 12;
|
|
12
|
-
const METRIC_COLUMNS_WIDTH_FULL = INPUT_COL_WIDTH + OUTPUT_COL_WIDTH + CACHE_READ_COL_WIDTH + CACHE_WRITE_COL_WIDTH + TOTAL_COL_WIDTH + COST_COL_WIDTH;
|
|
13
|
-
const METRIC_COLUMNS_WIDTH_NARROW = TOTAL_COL_WIDTH + COST_COL_WIDTH;
|
|
14
|
-
const SIDE_PADDING = 2;
|
|
15
|
-
const MIN_DATE_COLUMN = 14;
|
|
16
|
-
export function DailyView(props) {
|
|
17
|
-
const isNarrowTerminal = () => isNarrow(props.width);
|
|
18
|
-
const terminalWidth = () => props.width ?? process.stdout.columns ?? 80;
|
|
19
|
-
const dateColumnWidths = createMemo(() => {
|
|
20
|
-
const metricWidth = isNarrowTerminal() ? METRIC_COLUMNS_WIDTH_NARROW : METRIC_COLUMNS_WIDTH_FULL;
|
|
21
|
-
const minDate = MIN_DATE_COLUMN;
|
|
22
|
-
const available = Math.max(terminalWidth() - SIDE_PADDING - metricWidth, minDate);
|
|
23
|
-
const dateColumn = Math.max(minDate, available);
|
|
24
|
-
return {
|
|
25
|
-
column: dateColumn,
|
|
26
|
-
text: dateColumn,
|
|
27
|
-
};
|
|
28
|
-
});
|
|
29
|
-
const sortedEntries = createMemo(() => {
|
|
30
|
-
const entries = props.data.dailyEntries;
|
|
31
|
-
const sortBy = props.sortBy;
|
|
32
|
-
const sortDesc = props.sortDesc;
|
|
33
|
-
return [...entries].sort((a, b) => {
|
|
34
|
-
let cmp = 0;
|
|
35
|
-
if (sortBy === "cost")
|
|
36
|
-
cmp = a.cost - b.cost;
|
|
37
|
-
else if (sortBy === "tokens")
|
|
38
|
-
cmp = a.total - b.total;
|
|
39
|
-
else if (sortBy === "date")
|
|
40
|
-
cmp = a.date.localeCompare(b.date);
|
|
41
|
-
return sortDesc ? -cmp : cmp;
|
|
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 dateColWidth = dateColumnWidths().column;
|
|
50
|
-
const narrow = isNarrowTerminal();
|
|
51
|
-
return visibleEntries().map((entry) => ({
|
|
52
|
-
entry,
|
|
53
|
-
dateColWidth,
|
|
54
|
-
narrow,
|
|
55
|
-
input: formatTokensCompact(entry.input),
|
|
56
|
-
output: formatTokensCompact(entry.output),
|
|
57
|
-
cacheRead: formatTokensCompact(entry.cacheRead),
|
|
58
|
-
cacheWrite: formatTokensCompact(entry.cacheWrite),
|
|
59
|
-
total: formatTokensCompact(entry.total),
|
|
60
|
-
cost: formatCostFull(entry.cost),
|
|
61
|
-
}));
|
|
62
|
-
});
|
|
63
|
-
const sortArrow = () => (props.sortDesc ? "▼" : "▲");
|
|
64
|
-
const dateHeader = () => (props.sortBy === "date" ? `${sortArrow()} Date` : "Date");
|
|
65
|
-
const totalHeader = () => (props.sortBy === "tokens" ? `${sortArrow()} Total` : "Total");
|
|
66
|
-
const costHeader = () => (props.sortBy === "cost" ? `${sortArrow()} Cost` : "Cost");
|
|
67
|
-
const renderHeader = () => {
|
|
68
|
-
const dateColWidth = dateColumnWidths().column;
|
|
69
|
-
if (isNarrowTerminal()) {
|
|
70
|
-
return `${"Date".padEnd(dateColWidth)}${totalHeader().padStart(TOTAL_COL_WIDTH)}${costHeader().padStart(COST_COL_WIDTH)}`;
|
|
71
|
-
}
|
|
72
|
-
return `${(" " + dateHeader()).padEnd(dateColWidth)}${"Input".padStart(INPUT_COL_WIDTH)}${"Output".padStart(OUTPUT_COL_WIDTH)}${"C.Read".padStart(CACHE_READ_COL_WIDTH)}${"C.Write".padStart(CACHE_WRITE_COL_WIDTH)}${totalHeader().padStart(TOTAL_COL_WIDTH)}${costHeader().padStart(COST_COL_WIDTH)}`;
|
|
73
|
-
};
|
|
74
|
-
const renderRowData = (row) => {
|
|
75
|
-
if (row.narrow) {
|
|
76
|
-
return `${row.entry.date.padEnd(row.dateColWidth)}${row.total.padStart(TOTAL_COL_WIDTH)}`;
|
|
77
|
-
}
|
|
78
|
-
return `${row.entry.date.padEnd(row.dateColWidth)}${row.input.padStart(INPUT_COL_WIDTH)}${row.output.padStart(OUTPUT_COL_WIDTH)}${row.cacheRead.padStart(CACHE_READ_COL_WIDTH)}${row.cacheWrite.padStart(CACHE_WRITE_COL_WIDTH)}${row.total.padStart(TOTAL_COL_WIDTH)}`;
|
|
79
|
-
};
|
|
80
|
-
return (_jsxs("box", { flexDirection: "column", children: [_jsx("box", { flexDirection: "row", children: _jsx("text", { fg: "cyan", bold: true, children: renderHeader() }) }), _jsx(For, { each: formattedRows(), children: (row, i) => {
|
|
81
|
-
const isActive = createMemo(() => i() === props.selectedIndex());
|
|
82
|
-
const rowBg = createMemo(() => isActive() ? "blue" : (i() % 2 === 1 ? STRIPE_BG : undefined));
|
|
83
|
-
return (_jsxs("box", { flexDirection: "row", children: [_jsx("text", { bg: rowBg(), fg: isActive() ? "white" : undefined, children: renderRowData(row) }), _jsx("text", { fg: "green", bg: rowBg(), children: row.cost.padStart(COST_COL_WIDTH) })] }));
|
|
84
|
-
} })] }));
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=DailyView.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DailyView.js","sourceRoot":"","sources":["../../../src/tui/components/DailyView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { DailyModelBreakdown } from "../types/index.js";
|
|
2
|
-
export interface DateBreakdownPanelProps {
|
|
3
|
-
breakdown: DailyModelBreakdown;
|
|
4
|
-
isNarrow: boolean;
|
|
5
|
-
}
|
|
6
|
-
export declare function DateBreakdownPanel(props: DateBreakdownPanelProps): any;
|
|
7
|
-
//# sourceMappingURL=DateBreakdownPanel.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DateBreakdownPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/components/DateBreakdownPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAU7D,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,OA8DhE"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
|
|
2
|
-
import { For, createMemo } from "solid-js";
|
|
3
|
-
import { getSourceColor, getSourceDisplayName } from "../utils/colors.js";
|
|
4
|
-
import { formatTokens, formatCost } from "../utils/format.js";
|
|
5
|
-
import { ModelRow } from "./ModelRow.js";
|
|
6
|
-
function formatDateDisplay(dateStr) {
|
|
7
|
-
const date = new Date(dateStr + "T00:00:00");
|
|
8
|
-
return date.toLocaleDateString("en-US", { weekday: "short", month: "short", day: "numeric", year: "numeric" });
|
|
9
|
-
}
|
|
10
|
-
export function DateBreakdownPanel(props) {
|
|
11
|
-
const groupedBySource = createMemo(() => {
|
|
12
|
-
if (!props.breakdown?.models)
|
|
13
|
-
return new Map();
|
|
14
|
-
const groups = new Map();
|
|
15
|
-
for (const model of props.breakdown.models) {
|
|
16
|
-
const existing = groups.get(model.source) || [];
|
|
17
|
-
existing.push(model);
|
|
18
|
-
groups.set(model.source, existing);
|
|
19
|
-
}
|
|
20
|
-
for (const [, models] of groups) {
|
|
21
|
-
models.sort((a, b) => {
|
|
22
|
-
const totalA = a.tokens.input + a.tokens.output + (a.tokens.cacheRead || 0) + (a.tokens.cacheWrite || 0);
|
|
23
|
-
const totalB = b.tokens.input + b.tokens.output + (b.tokens.cacheRead || 0) + (b.tokens.cacheWrite || 0);
|
|
24
|
-
return totalB - totalA;
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
return groups;
|
|
28
|
-
});
|
|
29
|
-
return (_jsxs("box", { flexDirection: "column", marginTop: 1, paddingX: 1, children: [_jsxs("box", { flexDirection: "row", justifyContent: "space-between", children: [_jsx("text", { bold: true, fg: "white", children: formatDateDisplay(props.breakdown.date) }), _jsxs("box", { flexDirection: "row", gap: 2, children: [_jsx("text", { fg: "cyan", children: formatTokens(props.breakdown.totalTokens) }), _jsx("text", { fg: "green", bold: true, children: formatCost(props.breakdown.cost) })] })] }), _jsx("box", { flexDirection: "column", marginTop: 1, children: _jsx(For, { each: Array.from(groupedBySource().entries()), children: ([source, models]) => (_jsxs("box", { flexDirection: "column", children: [_jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: getSourceColor(source), bold: true, children: `● ${getSourceDisplayName(source)}` }), _jsx("text", { dim: true, children: `(${models.length} model${models.length > 1 ? "s" : ""})` })] }), _jsx(For, { each: models, children: (model) => (_jsx(ModelRow, { modelId: model.modelId, tokens: {
|
|
30
|
-
input: model.tokens.input,
|
|
31
|
-
output: model.tokens.output,
|
|
32
|
-
cacheRead: model.tokens.cacheRead,
|
|
33
|
-
cacheWrite: model.tokens.cacheWrite,
|
|
34
|
-
}, compact: props.isNarrow, indent: 2 })) })] })) }) }), _jsx("box", { flexDirection: "row", marginTop: 1, children: _jsx("text", { dim: true, children: "Click another day or same day to close" }) })] }));
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=DateBreakdownPanel.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DateBreakdownPanel.js","sourceRoot":"","sources":["../../../src/tui/components/DateBreakdownPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { SourceType, SortType, TabType, LoadingPhase } from "../types/index.js";
|
|
2
|
-
import type { ColorPaletteName } from "../config/themes.js";
|
|
3
|
-
import type { TotalBreakdown } from "../hooks/useData.js";
|
|
4
|
-
interface FooterProps {
|
|
5
|
-
enabledSources: Set<SourceType>;
|
|
6
|
-
sortBy: SortType;
|
|
7
|
-
totals?: TotalBreakdown;
|
|
8
|
-
modelCount: number;
|
|
9
|
-
activeTab: TabType;
|
|
10
|
-
scrollStart?: number;
|
|
11
|
-
scrollEnd?: number;
|
|
12
|
-
totalItems?: number;
|
|
13
|
-
colorPalette: ColorPaletteName;
|
|
14
|
-
statusMessage?: string | null;
|
|
15
|
-
isRefreshing?: boolean;
|
|
16
|
-
loadingPhase?: LoadingPhase;
|
|
17
|
-
cacheTimestamp?: number | null;
|
|
18
|
-
autoRefreshEnabled?: boolean;
|
|
19
|
-
autoRefreshMs?: number;
|
|
20
|
-
width?: number;
|
|
21
|
-
onSourceToggle?: (source: SourceType) => void;
|
|
22
|
-
onSortChange?: (sort: SortType) => void;
|
|
23
|
-
onPaletteChange?: () => void;
|
|
24
|
-
onRefresh?: () => void;
|
|
25
|
-
}
|
|
26
|
-
export declare function Footer(props: FooterProps): any;
|
|
27
|
-
export {};
|
|
28
|
-
//# sourceMappingURL=Footer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../src/tui/components/Footer.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,YAAY,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1D,UAAU,WAAW;IACnB,cAAc,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAqBD,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,OA4LxC"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@opentui/solid/jsx-runtime";
|
|
2
|
-
import { Show, createSignal, createEffect, onMount, onCleanup, } from "solid-js";
|
|
3
|
-
import { getPalette } from "../config/themes.js";
|
|
4
|
-
import { formatTokens } from "../utils/format.js";
|
|
5
|
-
import { isVeryNarrow } from "../utils/responsive.js";
|
|
6
|
-
function formatTimeAgo(timestamp, now) {
|
|
7
|
-
const seconds = Math.max(Math.floor((now - timestamp) / 1000), 0);
|
|
8
|
-
if (seconds < 60)
|
|
9
|
-
return `${seconds}s ago`;
|
|
10
|
-
const minutes = Math.floor(seconds / 60);
|
|
11
|
-
if (minutes < 60)
|
|
12
|
-
return `${minutes}m ago`;
|
|
13
|
-
const hours = Math.floor(minutes / 60);
|
|
14
|
-
if (hours < 24)
|
|
15
|
-
return `${hours}h ago`;
|
|
16
|
-
const days = Math.floor(hours / 24);
|
|
17
|
-
return `${days}d ago`;
|
|
18
|
-
}
|
|
19
|
-
function formatIntervalSeconds(ms) {
|
|
20
|
-
if (!ms || ms <= 0)
|
|
21
|
-
return "0s";
|
|
22
|
-
const seconds = Math.round(ms / 1000);
|
|
23
|
-
if (seconds < 60)
|
|
24
|
-
return `${seconds}s`;
|
|
25
|
-
const minutes = Math.round(seconds / 60);
|
|
26
|
-
return `${minutes}m`;
|
|
27
|
-
}
|
|
28
|
-
export function Footer(props) {
|
|
29
|
-
const palette = () => getPalette(props.colorPalette);
|
|
30
|
-
const isVeryNarrowTerminal = () => isVeryNarrow(props.width);
|
|
31
|
-
const [now, setNow] = createSignal(Date.now());
|
|
32
|
-
let nowInterval = null;
|
|
33
|
-
createEffect(() => {
|
|
34
|
-
if (props.cacheTimestamp) {
|
|
35
|
-
if (!nowInterval) {
|
|
36
|
-
nowInterval = setInterval(() => setNow(Date.now()), 1000);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
else if (nowInterval) {
|
|
40
|
-
clearInterval(nowInterval);
|
|
41
|
-
nowInterval = null;
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
onCleanup(() => {
|
|
45
|
-
if (nowInterval)
|
|
46
|
-
clearInterval(nowInterval);
|
|
47
|
-
});
|
|
48
|
-
const showScrollInfo = () => props.activeTab === "overview" &&
|
|
49
|
-
props.totalItems &&
|
|
50
|
-
props.scrollStart !== undefined &&
|
|
51
|
-
props.scrollEnd !== undefined;
|
|
52
|
-
const totals = () => props.totals || {
|
|
53
|
-
input: 0,
|
|
54
|
-
output: 0,
|
|
55
|
-
cacheRead: 0,
|
|
56
|
-
cacheWrite: 0,
|
|
57
|
-
reasoning: 0,
|
|
58
|
-
total: 0,
|
|
59
|
-
cost: 0,
|
|
60
|
-
};
|
|
61
|
-
return (_jsxs("box", { flexDirection: "column", paddingX: 1, children: [_jsxs("box", { flexDirection: "row", justifyContent: "space-between", children: [_jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "1" : "1:OC", source: "opencode", enabled: props.enabledSources.has("opencode"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "2" : "2:CC", source: "claude", enabled: props.enabledSources.has("claude"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "3" : "3:CX", source: "codex", enabled: props.enabledSources.has("codex"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "4" : "4:CR", source: "cursor", enabled: props.enabledSources.has("cursor"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "5" : "5:GM", source: "gemini", enabled: props.enabledSources.has("gemini"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "6" : "6:AM", source: "amp", enabled: props.enabledSources.has("amp"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "7" : "7:DR", source: "droid", enabled: props.enabledSources.has("droid"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "8" : "8:CL", source: "openclaw", enabled: props.enabledSources.has("openclaw"), onToggle: props.onSourceToggle }), _jsxs(Show, { when: !isVeryNarrowTerminal(), children: [_jsx("text", { dim: true, children: "|" }), _jsx(SortButton, { label: "Date", sortType: "date", active: props.sortBy === "date", onClick: props.onSortChange }), _jsx(SortButton, { label: "Cost", sortType: "cost", active: props.sortBy === "cost", onClick: props.onSortChange }), _jsx(SortButton, { label: "Tokens", sortType: "tokens", active: props.sortBy === "tokens", onClick: props.onSortChange })] }), _jsxs(Show, { when: showScrollInfo() && !isVeryNarrowTerminal(), children: [_jsx("text", { dim: true, children: "|" }), _jsx("text", { dim: true, children: `↓ ${props.scrollStart + 1}-${props.scrollEnd} of ${props.totalItems}` })] })] }), _jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: "cyan", children: formatTokens(totals().total) }), _jsx("text", { dim: true, children: "tokens" }), _jsx("text", { dim: true, children: "|" }), _jsx("text", { fg: "green", bold: true, children: `$${totals().cost.toFixed(2)}` }), _jsx(Show, { when: !isVeryNarrowTerminal(), children: _jsxs("text", { dim: true, children: ["(", props.modelCount, " models)"] }) })] })] }), _jsx("box", { flexDirection: "row", gap: 1, children: _jsx(Show, { when: props.statusMessage, fallback: _jsxs(Show, { when: isVeryNarrowTerminal(), fallback: _jsxs(_Fragment, { children: [_jsx("text", { dim: true, children: "\u2191\u2193 scroll \u2022 \u2190\u2192/tab view \u2022 y copy \u2022" }), _jsx("box", { onMouseDown: props.onPaletteChange, children: _jsx("text", { fg: "magenta", children: `[p:${palette().name}]` }) }), _jsx("text", { fg: props.autoRefreshEnabled ? "green" : "gray", children: `[Shift+R:auto update ${formatIntervalSeconds(props.autoRefreshMs)}]` }), _jsx("text", { dim: true, children: "[-/+ interval]\u2022" }), _jsx("box", { onMouseDown: props.onRefresh, children: _jsx("text", { fg: "yellow", children: "[r:refresh]" }) }), _jsx("text", { dim: true, children: "\u2022 e export \u2022 q quit" })] }), children: [_jsx("text", { dim: true, children: "\u2191\u2193\u2022\u2190\u2192\u2022y\u2022" }), _jsx("box", { onMouseDown: props.onPaletteChange, children: _jsx("text", { fg: "magenta", children: "[p]" }) }), _jsx("text", { fg: props.autoRefreshEnabled ? "green" : "gray", children: `[Shift+R:auto update ${formatIntervalSeconds(props.autoRefreshMs)}]` }), _jsx("text", { dim: true, children: "-+\u2022" }), _jsx("box", { onMouseDown: props.onRefresh, children: _jsx("text", { fg: "yellow", children: "[r]" }) }), _jsx("text", { dim: true, children: "\u2022e\u2022q" })] }), children: _jsx("text", { fg: "green", bold: true, children: props.statusMessage }) }) }), _jsx(Show, { when: props.isRefreshing, children: _jsx(LoadingStatusLine, { phase: props.loadingPhase }) }), _jsx(Show, { when: !props.isRefreshing && props.cacheTimestamp, children: _jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { dim: true, children: `Last updated: ${formatTimeAgo(props.cacheTimestamp, now())}` }), _jsx(Show, { when: props.autoRefreshEnabled, children: _jsx("text", { dim: true, children: `• Auto: ${formatIntervalSeconds(props.autoRefreshMs)}` }) })] }) })] }));
|
|
62
|
-
}
|
|
63
|
-
function SourceBadge(props) {
|
|
64
|
-
const handleClick = () => props.onToggle?.(props.source);
|
|
65
|
-
return (_jsx("box", { onMouseDown: handleClick, children: _jsx("text", { fg: props.enabled ? "green" : "gray", children: `[${props.enabled ? "●" : "○"}${props.name}]` }) }));
|
|
66
|
-
}
|
|
67
|
-
function SortButton(props) {
|
|
68
|
-
const handleClick = () => props.onClick?.(props.sortType);
|
|
69
|
-
return (_jsx("box", { onMouseDown: handleClick, children: _jsx("text", { fg: props.active ? "white" : "gray", bold: props.active, children: props.label }) }));
|
|
70
|
-
}
|
|
71
|
-
const SPINNER_COLORS = [
|
|
72
|
-
"#00FFFF",
|
|
73
|
-
"#00D7D7",
|
|
74
|
-
"#00AFAF",
|
|
75
|
-
"#008787",
|
|
76
|
-
"#666666",
|
|
77
|
-
"#666666",
|
|
78
|
-
];
|
|
79
|
-
const SPINNER_WIDTH = 6;
|
|
80
|
-
const SPINNER_HOLD_START = 20;
|
|
81
|
-
const SPINNER_HOLD_END = 6;
|
|
82
|
-
const SPINNER_TRAIL = 3;
|
|
83
|
-
const SPINNER_INTERVAL = 40;
|
|
84
|
-
const PHASE_MESSAGES = {
|
|
85
|
-
idle: "Initializing...",
|
|
86
|
-
"parsing-sources": "Scanning session data...",
|
|
87
|
-
"loading-pricing": "Loading pricing data...",
|
|
88
|
-
"finalizing-report": "Finalizing report...",
|
|
89
|
-
complete: "Complete",
|
|
90
|
-
};
|
|
91
|
-
function LoadingStatusLine(props) {
|
|
92
|
-
const [frame, setFrame] = createSignal(0);
|
|
93
|
-
onMount(() => {
|
|
94
|
-
const id = setInterval(() => setFrame((f) => f + 1), SPINNER_INTERVAL);
|
|
95
|
-
onCleanup(() => clearInterval(id));
|
|
96
|
-
});
|
|
97
|
-
const getSpinnerState = () => {
|
|
98
|
-
const forwardFrames = SPINNER_WIDTH;
|
|
99
|
-
const backwardFrames = SPINNER_WIDTH - 1;
|
|
100
|
-
const totalCycle = forwardFrames + SPINNER_HOLD_END + backwardFrames + SPINNER_HOLD_START;
|
|
101
|
-
const normalized = frame() % totalCycle;
|
|
102
|
-
if (normalized < forwardFrames) {
|
|
103
|
-
return { position: normalized, forward: true };
|
|
104
|
-
}
|
|
105
|
-
else if (normalized < forwardFrames + SPINNER_HOLD_END) {
|
|
106
|
-
return { position: SPINNER_WIDTH - 1, forward: true };
|
|
107
|
-
}
|
|
108
|
-
else if (normalized < forwardFrames + SPINNER_HOLD_END + backwardFrames) {
|
|
109
|
-
return {
|
|
110
|
-
position: SPINNER_WIDTH - 2 - (normalized - forwardFrames - SPINNER_HOLD_END),
|
|
111
|
-
forward: false,
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
return { position: 0, forward: false };
|
|
115
|
-
};
|
|
116
|
-
const getCharProps = (index) => {
|
|
117
|
-
const { position, forward } = getSpinnerState();
|
|
118
|
-
const distance = forward ? position - index : index - position;
|
|
119
|
-
if (distance >= 0 && distance < SPINNER_TRAIL) {
|
|
120
|
-
return { char: "■", color: SPINNER_COLORS[distance] };
|
|
121
|
-
}
|
|
122
|
-
return { char: "⬝", color: "#444444" };
|
|
123
|
-
};
|
|
124
|
-
const message = () => props.phase ? PHASE_MESSAGES[props.phase] : "Refreshing...";
|
|
125
|
-
return (_jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("box", { flexDirection: "row", gap: 0, children: Array.from({ length: SPINNER_WIDTH }, (_, i) => {
|
|
126
|
-
const { char, color } = getCharProps(i);
|
|
127
|
-
return _jsx("text", { fg: color, children: char });
|
|
128
|
-
}) }), _jsx("text", { dim: true, children: message() })] }));
|
|
129
|
-
}
|
|
130
|
-
//# sourceMappingURL=Footer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../src/tui/components/Footer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
|
|
2
|
-
import { Show } from "solid-js";
|
|
3
|
-
import { exec } from "node:child_process";
|
|
4
|
-
import { isNarrow, isVeryNarrow } from "../utils/responsive.js";
|
|
5
|
-
const REPO_URL = "https://github.com/junhoyeo/tokscale";
|
|
6
|
-
function openUrl(url) {
|
|
7
|
-
const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
|
|
8
|
-
exec(`${cmd} ${url}`);
|
|
9
|
-
}
|
|
10
|
-
export function Header(props) {
|
|
11
|
-
const isNarrowTerminal = () => isNarrow(props.width);
|
|
12
|
-
const isVeryNarrowTerminal = () => isVeryNarrow(props.width);
|
|
13
|
-
const getTabName = (fullName, shortName) => isVeryNarrowTerminal() ? shortName : fullName;
|
|
14
|
-
return (_jsxs("box", { flexDirection: "row", paddingX: 1, paddingY: 0, justifyContent: "space-between", children: [_jsxs("box", { flexDirection: "row", gap: isVeryNarrowTerminal() ? 1 : 2, children: [_jsx(Tab, { name: getTabName("Overview", "Ovw"), tabId: "overview", active: props.activeTab === "overview", onClick: props.onTabClick }), _jsx(Tab, { name: getTabName("Models", "Mod"), tabId: "model", active: props.activeTab === "model", onClick: props.onTabClick }), _jsx(Tab, { name: getTabName("Daily", "Day"), tabId: "daily", active: props.activeTab === "daily", onClick: props.onTabClick }), _jsx(Tab, { name: getTabName("Stats", "Sta"), tabId: "stats", active: props.activeTab === "stats", onClick: props.onTabClick })] }), _jsx(Show, { when: !isNarrowTerminal(), children: _jsxs("box", { flexDirection: "row", onMouseDown: () => openUrl(REPO_URL), children: [_jsx("text", { fg: "cyan", bold: true, children: "tokscale" }), _jsx("text", { fg: "#666666", children: " | GitHub" })] }) })] }));
|
|
15
|
-
}
|
|
16
|
-
function Tab(props) {
|
|
17
|
-
const handleClick = () => props.onClick?.(props.tabId);
|
|
18
|
-
return (_jsx(Show, { when: props.active, fallback: _jsx("box", { onMouseDown: handleClick, children: _jsx("text", { dim: true, children: props.name }) }), children: _jsx("box", { onMouseDown: handleClick, children: _jsx("text", { bg: "cyan", fg: "black", bold: true, children: ` ${props.name} ` }) }) }));
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=Header.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
|
|
2
|
-
import { For, Show } from "solid-js";
|
|
3
|
-
import { getModelColor } from "../utils/colors.js";
|
|
4
|
-
import { isNarrow, isVeryNarrow } from "../utils/responsive.js";
|
|
5
|
-
export function Legend(props) {
|
|
6
|
-
const isNarrowTerminal = () => isNarrow(props.width);
|
|
7
|
-
const isVeryNarrowTerminal = () => isVeryNarrow(props.width);
|
|
8
|
-
const maxModelNameWidth = () => isVeryNarrowTerminal() ? 12 : isNarrowTerminal() ? 18 : 30;
|
|
9
|
-
const truncateModelName = (name) => {
|
|
10
|
-
const max = maxModelNameWidth();
|
|
11
|
-
return name.length > max ? name.slice(0, max - 1) + "…" : name;
|
|
12
|
-
};
|
|
13
|
-
const models = () => props.models;
|
|
14
|
-
return (_jsx(Show, { when: models().length > 0, children: _jsx("box", { flexDirection: "row", gap: 1, flexWrap: "wrap", children: _jsx(For, { each: models(), children: (modelId, i) => (_jsxs("box", { flexDirection: "row", gap: 0, children: [_jsx("text", { fg: getModelColor(modelId), children: "\u25CF" }), _jsx("text", { children: ` ${truncateModelName(modelId)}` }), _jsx(Show, { when: i() < models().length - 1, children: _jsx("text", { dim: true, children: isVeryNarrowTerminal() ? " " : " ·" }) })] })) }) }) }));
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=Legend.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Legend.js","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,KAAC,IAAI,IAAC,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,YAC7B,cAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAC,MAAM,YAC9C,KAAC,GAAG,IAAC,IAAI,EAAE,MAAM,EAAE,YAChB,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CACf,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAC7B,eAAM,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC,uBAAU,EAC1C,yBAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,GAAQ,EAC/C,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,YACnC,eAAM,GAAG,kBAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAQ,GAClD,IACH,CACP,GACG,GACF,GACD,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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;AAsCtD,UAAU,mBAAmB;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,OAoCxD"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
|
|
2
|
-
import { createSignal, onMount, onCleanup } from "solid-js";
|
|
3
|
-
const COLORS = ["#00FFFF", "#00D7D7", "#00AFAF", "#008787", "#666666", "#666666", "#666666", "#666666"];
|
|
4
|
-
const WIDTH = 8;
|
|
5
|
-
const HOLD_START = 30;
|
|
6
|
-
const HOLD_END = 9;
|
|
7
|
-
const TRAIL_LENGTH = 4;
|
|
8
|
-
const INTERVAL = 40;
|
|
9
|
-
function getScannerState(frame) {
|
|
10
|
-
const forwardFrames = WIDTH;
|
|
11
|
-
const backwardFrames = WIDTH - 1;
|
|
12
|
-
const totalCycle = forwardFrames + HOLD_END + backwardFrames + HOLD_START;
|
|
13
|
-
const normalized = frame % totalCycle;
|
|
14
|
-
if (normalized < forwardFrames) {
|
|
15
|
-
return { position: normalized, forward: true };
|
|
16
|
-
}
|
|
17
|
-
else if (normalized < forwardFrames + HOLD_END) {
|
|
18
|
-
return { position: WIDTH - 1, forward: true };
|
|
19
|
-
}
|
|
20
|
-
else if (normalized < forwardFrames + HOLD_END + backwardFrames) {
|
|
21
|
-
return { position: WIDTH - 2 - (normalized - forwardFrames - HOLD_END), forward: false };
|
|
22
|
-
}
|
|
23
|
-
return { position: 0, forward: false };
|
|
24
|
-
}
|
|
25
|
-
const PHASE_MESSAGES = {
|
|
26
|
-
"idle": "Initializing...",
|
|
27
|
-
"parsing-sources": "Scanning session data...",
|
|
28
|
-
"loading-pricing": "Loading pricing data...",
|
|
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 (_jsxs("box", { flexDirection: "column", justifyContent: "center", alignItems: "center", flexGrow: 1, children: [_jsx("box", { flexDirection: "row", gap: 0, children: Array.from({ length: WIDTH }, (_, i) => {
|
|
51
|
-
const { char, color } = getCharProps(i);
|
|
52
|
-
return _jsx("text", { fg: color, children: char });
|
|
53
|
-
}) }), _jsx("box", { marginTop: 1, children: _jsx("text", { dim: true, children: displayMessage() }) })] }));
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=LoadingSpinner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LoadingSpinner.js","sourceRoot":"","sources":["../../../src/tui/components/LoadingSpinner.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
|
|
2
|
-
import { Show, createMemo } from "solid-js";
|
|
3
|
-
import { TokenBreakdown } from "./TokenBreakdown.js";
|
|
4
|
-
import { getModelColor } from "../utils/colors.js";
|
|
5
|
-
export function ModelRow(props) {
|
|
6
|
-
const color = () => getModelColor(props.modelId);
|
|
7
|
-
const bgColor = createMemo(() => props.isActive ? "blue" : undefined);
|
|
8
|
-
const truncateName = (name) => {
|
|
9
|
-
const max = props.maxNameWidth ?? 50;
|
|
10
|
-
return name.length > max ? name.slice(0, max - 1) + "…" : name;
|
|
11
|
-
};
|
|
12
|
-
const indentStr = () => " ".repeat(props.indent ?? 0);
|
|
13
|
-
return (_jsxs("box", { flexDirection: "column", children: [_jsxs("box", { flexDirection: "row", backgroundColor: bgColor(), children: [_jsx(Show, { when: props.indent, children: _jsx("text", { children: indentStr() }) }), _jsx("text", { fg: color(), bg: bgColor(), children: "\u25CF" }), _jsx("text", { fg: props.isActive ? "white" : undefined, bg: bgColor(), children: ` ${truncateName(props.modelId)}` }), _jsx(Show, { when: props.percentage !== undefined, children: _jsx("text", { dim: true, bg: bgColor(), children: ` (${props.percentage.toFixed(1)}%)` }) })] }), _jsx("box", { flexDirection: "row", children: _jsx(TokenBreakdown, { tokens: props.tokens, compact: props.compact, indent: (props.indent ?? 0) + 2 }) })] }));
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=ModelRow.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ModelRow.js","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,eAAK,aAAa,EAAC,QAAQ,aACzB,eAAK,aAAa,EAAC,KAAK,EAAC,eAAe,EAAE,OAAO,EAAE,aACjD,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,CAAC,MAAM,YACtB,yBAAO,SAAS,EAAE,GAAQ,GACrB,EACP,eAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,uBAAU,EAC1C,eAAM,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,YAAG,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAQ,EACzG,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,CAAC,UAAU,KAAK,SAAS,YACxC,eAAM,GAAG,QAAC,EAAE,EAAE,OAAO,EAAE,YAAG,KAAK,KAAK,CAAC,UAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAQ,GAClE,IACH,EACN,cAAK,aAAa,EAAC,KAAK,YACtB,KAAC,cAAc,IACb,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,GAC/B,GACE,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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;AAmB7D,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,OAqH9C"}
|