opencode-visual-cache 1.6.0 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/README_EN.md +3 -1
- package/dist/_version.d.ts +1 -1
- package/dist/_version.js +1 -1
- package/dist/i18n.d.ts +3 -3
- package/dist/i18n.js +12 -12
- package/dist/index.js +194 -9
- package/dist/tui.js +407 -286
- package/package.json +6 -3
- package/src/_version.ts +1 -1
- package/src/i18n.ts +12 -12
- package/src/index.tsx +209 -32
package/dist/tui.js
CHANGED
|
@@ -10,10 +10,10 @@ import { spread as _$spread } from "@opentui/solid";
|
|
|
10
10
|
import { mergeProps as _$mergeProps } from "@opentui/solid";
|
|
11
11
|
import { memo as _$memo } from "@opentui/solid";
|
|
12
12
|
import { createElement as _$createElement } from "@opentui/solid";
|
|
13
|
-
import { createMemo, createSignal, createEffect, onMount, onCleanup, Show, untrack } from "solid-js";
|
|
13
|
+
import { createMemo, createSignal, createEffect, onMount, onCleanup, Show, For, untrack } from "solid-js";
|
|
14
14
|
|
|
15
15
|
// src/_version.ts
|
|
16
|
-
var PLUGIN_VERSION = "1.6.
|
|
16
|
+
var PLUGIN_VERSION = "1.6.2";
|
|
17
17
|
|
|
18
18
|
// src/balance-providers.ts
|
|
19
19
|
var BalanceError = class extends Error {
|
|
@@ -140,11 +140,11 @@ var ZH_T = {
|
|
|
140
140
|
distTitle: "\u4F30\u7B97 Token \u5206\u5E03",
|
|
141
141
|
distSys: "\u7CFB\u7EDF\u63D0\u793A:",
|
|
142
142
|
distUser: "\u7528\u6237:",
|
|
143
|
-
distAgent: "
|
|
143
|
+
distAgent: "\u5B50\u4EE3\u7406\u6307\u4EE4:",
|
|
144
144
|
distTool: "Tool \u8C03\u7528:",
|
|
145
145
|
distRes: "Tool \u7ED3\u679C:",
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
distReason: "\u63A8\u7406:",
|
|
147
|
+
stepsCount: "\u672C\u56DE\u5408 {n} \u6B21\u8C03\u7528:",
|
|
148
148
|
secDetail: "\u660E\u7EC6",
|
|
149
149
|
secModel: "\u6A21\u578B",
|
|
150
150
|
secSkills: "\u5DF2\u52A0\u8F7D\u6280\u80FD",
|
|
@@ -221,11 +221,11 @@ var EN_T = {
|
|
|
221
221
|
distTitle: "Estimated Token Dist.",
|
|
222
222
|
distSys: "System:",
|
|
223
223
|
distUser: "User:",
|
|
224
|
-
distAgent: "Agent Instr:",
|
|
224
|
+
distAgent: "Sub-Agent Instr:",
|
|
225
225
|
distTool: "Tool Call:",
|
|
226
226
|
distRes: "Tool Result:",
|
|
227
|
-
|
|
228
|
-
|
|
227
|
+
distReason: "Reasoning:",
|
|
228
|
+
stepsCount: "Turn #{n} calls:",
|
|
229
229
|
secDetail: "Detail",
|
|
230
230
|
secModel: "Model",
|
|
231
231
|
secSkills: "Loaded Skills",
|
|
@@ -302,11 +302,11 @@ var JA_T = {
|
|
|
302
302
|
distTitle: "Token \u5206\u5E03\uFF08\u63A8\u5B9A\uFF09",
|
|
303
303
|
distSys: "\u30B7\u30B9\u30C6\u30E0:",
|
|
304
304
|
distUser: "\u30E6\u30FC\u30B6\u30FC:",
|
|
305
|
-
distAgent: "
|
|
305
|
+
distAgent: "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u6307\u793A:",
|
|
306
306
|
distTool: "Tool \u547C\u3073\u51FA\u3057:",
|
|
307
307
|
distRes: "Tool \u7D50\u679C:",
|
|
308
|
-
|
|
309
|
-
|
|
308
|
+
distReason: "\u63A8\u8AD6:",
|
|
309
|
+
stepsCount: "\u4ECA\u56DE {n} \u56DE\u547C\u51FA:",
|
|
310
310
|
secDetail: "\u660E\u7D30",
|
|
311
311
|
secModel: "\u30E2\u30C7\u30EB",
|
|
312
312
|
secSkills: "\u8AAD\u307F\u8FBC\u307F\u6E08\u307F\u30B9\u30AD\u30EB",
|
|
@@ -383,11 +383,11 @@ var KO_T = {
|
|
|
383
383
|
distTitle: "Token \uBD84\uD3EC(\uCD94\uC815)",
|
|
384
384
|
distSys: "\uC2DC\uC2A4\uD15C:",
|
|
385
385
|
distUser: "\uC0AC\uC6A9\uC790:",
|
|
386
|
-
distAgent: "
|
|
386
|
+
distAgent: "\uC11C\uBE0C \uC5D0\uC774\uC804\uD2B8 \uC9C0\uC2DC:",
|
|
387
387
|
distTool: "Tool \uD638\uCD9C:",
|
|
388
388
|
distRes: "Tool \uACB0\uACFC:",
|
|
389
|
-
|
|
390
|
-
|
|
389
|
+
distReason: "\uCD94\uB860:",
|
|
390
|
+
stepsCount: "\uC774\uBC88 \uD134 {n}\uD68C \uD638\uCD9C:",
|
|
391
391
|
secDetail: "\uC0C1\uC138",
|
|
392
392
|
secModel: "\uBAA8\uB378",
|
|
393
393
|
secSkills: "\uB85C\uB4DC\uB41C \uC2A4\uD0AC",
|
|
@@ -707,6 +707,10 @@ function TokenCachePanel(props) {
|
|
|
707
707
|
const [distOpen, setDistOpen] = createSignal(false);
|
|
708
708
|
const [skillsOpen, setSkillsOpen] = createSignal(true);
|
|
709
709
|
let boxEl;
|
|
710
|
+
createEffect(() => {
|
|
711
|
+
props.signals.setSidebarVisible(true);
|
|
712
|
+
onCleanup(() => props.signals.setSidebarVisible(false));
|
|
713
|
+
});
|
|
710
714
|
const {
|
|
711
715
|
currencySymbol,
|
|
712
716
|
setCurrencySymbol,
|
|
@@ -744,9 +748,11 @@ function TokenCachePanel(props) {
|
|
|
744
748
|
toolCall: 0,
|
|
745
749
|
toolResult: 0,
|
|
746
750
|
output: 0,
|
|
751
|
+
reasoning: 0,
|
|
747
752
|
apiOutput: 0,
|
|
748
753
|
apiInput: 0,
|
|
749
|
-
stepCost: 0
|
|
754
|
+
stepCost: 0,
|
|
755
|
+
stepCount: 0
|
|
750
756
|
});
|
|
751
757
|
const [lastHasDist, setLastHasDist] = createSignal(false);
|
|
752
758
|
const [dataSignal, setDataSignal] = createSignal({
|
|
@@ -774,9 +780,11 @@ function TokenCachePanel(props) {
|
|
|
774
780
|
toolCall: 0,
|
|
775
781
|
toolResult: 0,
|
|
776
782
|
output: 0,
|
|
783
|
+
reasoning: 0,
|
|
777
784
|
apiOutput: 0,
|
|
778
785
|
apiInput: 0,
|
|
779
|
-
stepCost: 0
|
|
786
|
+
stepCost: 0,
|
|
787
|
+
stepCount: 0
|
|
780
788
|
},
|
|
781
789
|
hasDistData: false,
|
|
782
790
|
skills: [],
|
|
@@ -890,9 +898,11 @@ function TokenCachePanel(props) {
|
|
|
890
898
|
toolCall: 0,
|
|
891
899
|
toolResult: 0,
|
|
892
900
|
output: 0,
|
|
901
|
+
reasoning: 0,
|
|
893
902
|
apiOutput: 0,
|
|
894
903
|
apiInput: 0,
|
|
895
|
-
stepCost: 0
|
|
904
|
+
stepCost: 0,
|
|
905
|
+
stepCount: 0
|
|
896
906
|
};
|
|
897
907
|
let hasDistData = false;
|
|
898
908
|
const loadedSkills = /* @__PURE__ */ new Map();
|
|
@@ -923,6 +933,7 @@ function TokenCachePanel(props) {
|
|
|
923
933
|
} else if (msg.role === "assistant") {
|
|
924
934
|
const am = msg;
|
|
925
935
|
dist.output += num(am.tokens?.output);
|
|
936
|
+
dist.reasoning += num(am.tokens?.reasoning);
|
|
926
937
|
let parts = [];
|
|
927
938
|
try {
|
|
928
939
|
parts = props.api.state.part(msg.id);
|
|
@@ -937,6 +948,12 @@ function TokenCachePanel(props) {
|
|
|
937
948
|
} catch {
|
|
938
949
|
}
|
|
939
950
|
if (rawInput) dist.toolCall += estimateTokens(rawInput);
|
|
951
|
+
if (tp.tool === "task" && tp.state?.input) {
|
|
952
|
+
const ti = tp.state.input;
|
|
953
|
+
const prompt = typeof ti.prompt === "string" ? ti.prompt : "";
|
|
954
|
+
const desc = typeof ti.description === "string" ? ti.description : "";
|
|
955
|
+
dist.agent += estimateTokens(prompt || desc);
|
|
956
|
+
}
|
|
940
957
|
if (tp.state.status === "completed") {
|
|
941
958
|
const c = tp.state;
|
|
942
959
|
if (c.output) dist.toolResult += estimateTokens(c.output);
|
|
@@ -961,8 +978,7 @@ function TokenCachePanel(props) {
|
|
|
961
978
|
}
|
|
962
979
|
}
|
|
963
980
|
}
|
|
964
|
-
} else if (p.type === "
|
|
965
|
-
else if (p.type === "subtask") {
|
|
981
|
+
} else if (p.type === "subtask") {
|
|
966
982
|
const sub = p;
|
|
967
983
|
dist.agent += estimateTokens(sub.prompt || sub.description || "");
|
|
968
984
|
}
|
|
@@ -979,7 +995,28 @@ function TokenCachePanel(props) {
|
|
|
979
995
|
}
|
|
980
996
|
dist.apiInput = num(lastAssMsg?.tokens?.input) + num(lastAssMsg?.tokens?.cache?.read) + num(lastAssMsg?.tokens?.cache?.write);
|
|
981
997
|
dist.apiOutput = num(lastAssMsg?.tokens?.output);
|
|
982
|
-
|
|
998
|
+
if (lastAssMsg) {
|
|
999
|
+
const roundParent = lastAssMsg.parentID;
|
|
1000
|
+
let lastCost;
|
|
1001
|
+
for (let i = msgs.length - 1; i >= 0; i--) {
|
|
1002
|
+
const m = msgs[i];
|
|
1003
|
+
if (m.role !== "assistant") continue;
|
|
1004
|
+
if (m.parentID !== roundParent) break;
|
|
1005
|
+
let parts = [];
|
|
1006
|
+
try {
|
|
1007
|
+
parts = props.api.state.part(m.id);
|
|
1008
|
+
} catch {
|
|
1009
|
+
}
|
|
1010
|
+
for (const p of parts) {
|
|
1011
|
+
if (p.type !== "step-finish") continue;
|
|
1012
|
+
dist.stepCount++;
|
|
1013
|
+
const sc = p.cost;
|
|
1014
|
+
if (lastCost === void 0 && typeof sc === "number" && Number.isFinite(sc)) lastCost = sc;
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
if (lastCost !== void 0) dist.stepCost = lastCost;
|
|
1018
|
+
}
|
|
1019
|
+
hasDistData = dist.system + dist.user + dist.agent + dist.toolCall + dist.toolResult > 0 || dist.apiOutput > 0 || dist.apiInput > 0 || dist.reasoning > 0;
|
|
983
1020
|
} catch {
|
|
984
1021
|
}
|
|
985
1022
|
const finalDist = hasDistData ? dist : lastDist(), finalHasDist = hasDistData || lastHasDist();
|
|
@@ -1298,25 +1335,25 @@ function TokenCachePanel(props) {
|
|
|
1298
1335
|
const prefix = " \u21B3 " + t("subPrefix");
|
|
1299
1336
|
const maxSidW = Math.max(6, panelWidth() - visualWidth(prefix));
|
|
1300
1337
|
return (() => {
|
|
1301
|
-
var _el$
|
|
1302
|
-
_$insertNode(_el$
|
|
1303
|
-
_$insertNode(_el$
|
|
1304
|
-
_$insert(_el$
|
|
1305
|
-
_$insert(_el$
|
|
1338
|
+
var _el$70 = _$createElement("text"), _el$71 = _$createElement("span"), _el$72 = _$createElement("span");
|
|
1339
|
+
_$insertNode(_el$70, _el$71);
|
|
1340
|
+
_$insertNode(_el$70, _el$72);
|
|
1341
|
+
_$insert(_el$71, prefix);
|
|
1342
|
+
_$insert(_el$72, () => truncateVisual(props.signals.overrideSessionId(), maxSidW));
|
|
1306
1343
|
_$effect((_p$) => {
|
|
1307
1344
|
var _v$17 = {
|
|
1308
1345
|
fg: pal().muted
|
|
1309
1346
|
}, _v$18 = {
|
|
1310
1347
|
fg: pal().text
|
|
1311
1348
|
};
|
|
1312
|
-
_v$17 !== _p$.e && (_p$.e = _$setProp(_el$
|
|
1313
|
-
_v$18 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
1349
|
+
_v$17 !== _p$.e && (_p$.e = _$setProp(_el$71, "style", _v$17, _p$.e));
|
|
1350
|
+
_v$18 !== _p$.t && (_p$.t = _$setProp(_el$72, "style", _v$18, _p$.t));
|
|
1314
1351
|
return _p$;
|
|
1315
1352
|
}, {
|
|
1316
1353
|
e: void 0,
|
|
1317
1354
|
t: void 0
|
|
1318
1355
|
});
|
|
1319
|
-
return _el$
|
|
1356
|
+
return _el$70;
|
|
1320
1357
|
})();
|
|
1321
1358
|
})();
|
|
1322
1359
|
}
|
|
@@ -1326,30 +1363,30 @@ function TokenCachePanel(props) {
|
|
|
1326
1363
|
},
|
|
1327
1364
|
get fallback() {
|
|
1328
1365
|
return [(() => {
|
|
1329
|
-
var _el$
|
|
1330
|
-
_$insert(_el$
|
|
1331
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1332
|
-
return _el$
|
|
1366
|
+
var _el$73 = _$createElement("text");
|
|
1367
|
+
_$insert(_el$73, sep);
|
|
1368
|
+
_$effect((_$p) => _$setProp(_el$73, "fg", pal().muted, _$p));
|
|
1369
|
+
return _el$73;
|
|
1333
1370
|
})(), (() => {
|
|
1334
|
-
var _el$
|
|
1335
|
-
_$insertNode(_el$
|
|
1336
|
-
_$insertNode(_el$
|
|
1337
|
-
_$insertNode(_el$
|
|
1338
|
-
_$insert(_el$
|
|
1371
|
+
var _el$74 = _$createElement("text"), _el$75 = _$createElement("span"), _el$77 = _$createElement("span");
|
|
1372
|
+
_$insertNode(_el$74, _el$75);
|
|
1373
|
+
_$insertNode(_el$74, _el$77);
|
|
1374
|
+
_$insertNode(_el$75, _$createTextNode(`> `));
|
|
1375
|
+
_$insert(_el$77, () => t("noData"));
|
|
1339
1376
|
_$effect((_p$) => {
|
|
1340
1377
|
var _v$19 = {
|
|
1341
1378
|
fg: pal().muted
|
|
1342
1379
|
}, _v$20 = {
|
|
1343
1380
|
fg: pal().muted
|
|
1344
1381
|
};
|
|
1345
|
-
_v$19 !== _p$.e && (_p$.e = _$setProp(_el$
|
|
1346
|
-
_v$20 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
1382
|
+
_v$19 !== _p$.e && (_p$.e = _$setProp(_el$75, "style", _v$19, _p$.e));
|
|
1383
|
+
_v$20 !== _p$.t && (_p$.t = _$setProp(_el$77, "style", _v$20, _p$.t));
|
|
1347
1384
|
return _p$;
|
|
1348
1385
|
}, {
|
|
1349
1386
|
e: void 0,
|
|
1350
1387
|
t: void 0
|
|
1351
1388
|
});
|
|
1352
|
-
return _el$
|
|
1389
|
+
return _el$74;
|
|
1353
1390
|
})()];
|
|
1354
1391
|
},
|
|
1355
1392
|
get children() {
|
|
@@ -1479,32 +1516,44 @@ function TokenCachePanel(props) {
|
|
|
1479
1516
|
_$effect((_$p) => _$setProp(_el$33, "fg", pal().muted, _$p));
|
|
1480
1517
|
return _el$33;
|
|
1481
1518
|
})(), _$createComponent(Show, {
|
|
1519
|
+
get when() {
|
|
1520
|
+
return data().dist.stepCount >= 2;
|
|
1521
|
+
},
|
|
1522
|
+
get children() {
|
|
1523
|
+
var _el$34 = _$createElement("text");
|
|
1524
|
+
_$insert(_el$34, () => justify(t("stepsCount", {
|
|
1525
|
+
n: data().dist.stepCount
|
|
1526
|
+
}), fmtCost(data().dist.stepCost, currencySymbol(), exchangeRate())));
|
|
1527
|
+
_$effect((_$p) => _$setProp(_el$34, "fg", pal().muted, _$p));
|
|
1528
|
+
return _el$34;
|
|
1529
|
+
}
|
|
1530
|
+
}), _$createComponent(Show, {
|
|
1482
1531
|
get when() {
|
|
1483
1532
|
return data().saved > 0;
|
|
1484
1533
|
},
|
|
1485
1534
|
get children() {
|
|
1486
|
-
var _el$
|
|
1487
|
-
_$insertNode(_el$
|
|
1488
|
-
_$insertNode(_el$
|
|
1489
|
-
_$insertNode(_el$
|
|
1490
|
-
_$insert(_el$
|
|
1491
|
-
_$insert(_el$
|
|
1492
|
-
_$insertNode(_el$
|
|
1493
|
-
_$insert(_el$
|
|
1535
|
+
var _el$35 = _$createElement("text"), _el$36 = _$createElement("span"), _el$37 = _$createElement("span"), _el$38 = _$createElement("span"), _el$39 = _$createTextNode(`~`);
|
|
1536
|
+
_$insertNode(_el$35, _el$36);
|
|
1537
|
+
_$insertNode(_el$35, _el$37);
|
|
1538
|
+
_$insertNode(_el$35, _el$38);
|
|
1539
|
+
_$insert(_el$36, () => t("saved"));
|
|
1540
|
+
_$insert(_el$37, () => " ".repeat(Math.max(1, panelWidth() - gutter() - visualWidth(t("saved")) - visualWidth("~" + fmtCost(data().saved, currencySymbol(), exchangeRate())))));
|
|
1541
|
+
_$insertNode(_el$38, _el$39);
|
|
1542
|
+
_$insert(_el$38, () => fmtCost(data().saved, currencySymbol(), exchangeRate()), null);
|
|
1494
1543
|
_$effect((_p$) => {
|
|
1495
1544
|
var _v$7 = {
|
|
1496
1545
|
fg: pal().muted
|
|
1497
1546
|
}, _v$8 = {
|
|
1498
1547
|
fg: pal().success
|
|
1499
1548
|
};
|
|
1500
|
-
_v$7 !== _p$.e && (_p$.e = _$setProp(_el$
|
|
1501
|
-
_v$8 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
1549
|
+
_v$7 !== _p$.e && (_p$.e = _$setProp(_el$36, "style", _v$7, _p$.e));
|
|
1550
|
+
_v$8 !== _p$.t && (_p$.t = _$setProp(_el$38, "style", _v$8, _p$.t));
|
|
1502
1551
|
return _p$;
|
|
1503
1552
|
}, {
|
|
1504
1553
|
e: void 0,
|
|
1505
1554
|
t: void 0
|
|
1506
1555
|
});
|
|
1507
|
-
return _el$
|
|
1556
|
+
return _el$35;
|
|
1508
1557
|
}
|
|
1509
1558
|
})];
|
|
1510
1559
|
}
|
|
@@ -1516,19 +1565,19 @@ function TokenCachePanel(props) {
|
|
|
1516
1565
|
},
|
|
1517
1566
|
get children() {
|
|
1518
1567
|
return [_$memo(() => (() => {
|
|
1519
|
-
var _el$
|
|
1520
|
-
_$insertNode(_el$
|
|
1521
|
-
_$insertNode(_el$
|
|
1522
|
-
_$insertNode(_el$
|
|
1523
|
-
_$setProp(_el$
|
|
1568
|
+
var _el$78 = _$createElement("text"), _el$79 = _$createElement("span"), _el$80 = _$createElement("span"), _el$81 = _$createElement("b"), _el$82 = _$createElement("span");
|
|
1569
|
+
_$insertNode(_el$78, _el$79);
|
|
1570
|
+
_$insertNode(_el$78, _el$80);
|
|
1571
|
+
_$insertNode(_el$78, _el$82);
|
|
1572
|
+
_$setProp(_el$78, "onMouseUp", () => setModelOpen((o) => {
|
|
1524
1573
|
const n = !o;
|
|
1525
1574
|
persistFold("model", n);
|
|
1526
1575
|
return n;
|
|
1527
1576
|
}));
|
|
1528
|
-
_$insert(_el$
|
|
1529
|
-
_$insertNode(_el$
|
|
1530
|
-
_$insert(_el$
|
|
1531
|
-
_$insert(_el$
|
|
1577
|
+
_$insert(_el$79, () => modelOpen() ? "\u25BC " : "\u25B6 ");
|
|
1578
|
+
_$insertNode(_el$80, _el$81);
|
|
1579
|
+
_$insert(_el$81, () => t("secModel"));
|
|
1580
|
+
_$insert(_el$82, () => sep().slice(visualWidth((modelOpen() ? "\u25BC " : "\u25B6 ") + t("secModel"))));
|
|
1532
1581
|
_$effect((_p$) => {
|
|
1533
1582
|
var _v$21 = {
|
|
1534
1583
|
fg: pal().muted
|
|
@@ -1537,70 +1586,70 @@ function TokenCachePanel(props) {
|
|
|
1537
1586
|
}, _v$23 = {
|
|
1538
1587
|
fg: pal().muted
|
|
1539
1588
|
};
|
|
1540
|
-
_v$21 !== _p$.e && (_p$.e = _$setProp(_el$
|
|
1541
|
-
_v$22 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
1542
|
-
_v$23 !== _p$.a && (_p$.a = _$setProp(_el$
|
|
1589
|
+
_v$21 !== _p$.e && (_p$.e = _$setProp(_el$79, "style", _v$21, _p$.e));
|
|
1590
|
+
_v$22 !== _p$.t && (_p$.t = _$setProp(_el$80, "style", _v$22, _p$.t));
|
|
1591
|
+
_v$23 !== _p$.a && (_p$.a = _$setProp(_el$82, "style", _v$23, _p$.a));
|
|
1543
1592
|
return _p$;
|
|
1544
1593
|
}, {
|
|
1545
1594
|
e: void 0,
|
|
1546
1595
|
t: void 0,
|
|
1547
1596
|
a: void 0
|
|
1548
1597
|
});
|
|
1549
|
-
return _el$
|
|
1598
|
+
return _el$78;
|
|
1550
1599
|
})()), _$createComponent(Show, {
|
|
1551
1600
|
get when() {
|
|
1552
1601
|
return modelOpen();
|
|
1553
1602
|
},
|
|
1554
1603
|
get children() {
|
|
1555
1604
|
return [(() => {
|
|
1556
|
-
var _el$
|
|
1557
|
-
_$insert(_el$
|
|
1558
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1559
|
-
return _el$
|
|
1605
|
+
var _el$40 = _$createElement("text");
|
|
1606
|
+
_$insert(_el$40, () => justify(t("cost"), fmtCost(data().cost, currencySymbol(), exchangeRate())));
|
|
1607
|
+
_$effect((_$p) => _$setProp(_el$40, "fg", pal().text, _$p));
|
|
1608
|
+
return _el$40;
|
|
1560
1609
|
})(), _$createComponent(Show, {
|
|
1561
1610
|
get when() {
|
|
1562
1611
|
return data().providerName;
|
|
1563
1612
|
},
|
|
1564
1613
|
get children() {
|
|
1565
|
-
var _el$
|
|
1566
|
-
_$insert(_el$
|
|
1567
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1568
|
-
return _el$
|
|
1614
|
+
var _el$41 = _$createElement("text");
|
|
1615
|
+
_$insert(_el$41, () => justify(t("provider"), data().providerName));
|
|
1616
|
+
_$effect((_$p) => _$setProp(_el$41, "fg", pal().muted, _$p));
|
|
1617
|
+
return _el$41;
|
|
1569
1618
|
}
|
|
1570
1619
|
}), (() => {
|
|
1571
|
-
var _el$
|
|
1572
|
-
_$insert(_el$
|
|
1573
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1574
|
-
return _el$
|
|
1620
|
+
var _el$42 = _$createElement("text");
|
|
1621
|
+
_$insert(_el$42, () => justify(t("model"), data().model));
|
|
1622
|
+
_$effect((_$p) => _$setProp(_el$42, "fg", pal().muted, _$p));
|
|
1623
|
+
return _el$42;
|
|
1575
1624
|
})(), _$createComponent(Show, {
|
|
1576
1625
|
get when() {
|
|
1577
1626
|
return data().hasPricing;
|
|
1578
1627
|
},
|
|
1579
1628
|
get children() {
|
|
1580
1629
|
return [(() => {
|
|
1581
|
-
var _el$
|
|
1582
|
-
_$insert(_el$
|
|
1583
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1584
|
-
return _el$
|
|
1630
|
+
var _el$43 = _$createElement("text");
|
|
1631
|
+
_$insert(_el$43, () => justify(t("rate"), currencySymbol() + (data().inputRate * exchangeRate()).toFixed(2) + "/M " + t("inputRate")));
|
|
1632
|
+
_$effect((_$p) => _$setProp(_el$43, "fg", pal().muted, _$p));
|
|
1633
|
+
return _el$43;
|
|
1585
1634
|
})(), _$createComponent(Show, {
|
|
1586
1635
|
get when() {
|
|
1587
1636
|
return data().cacheReadRate > 0;
|
|
1588
1637
|
},
|
|
1589
1638
|
get children() {
|
|
1590
|
-
var _el$
|
|
1591
|
-
_$insert(_el$
|
|
1592
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1593
|
-
return _el$
|
|
1639
|
+
var _el$44 = _$createElement("text");
|
|
1640
|
+
_$insert(_el$44, () => justify("", currencySymbol() + (data().cacheReadRate * exchangeRate()).toFixed(2) + "/M " + t("cacheRate")));
|
|
1641
|
+
_$effect((_$p) => _$setProp(_el$44, "fg", pal().muted, _$p));
|
|
1642
|
+
return _el$44;
|
|
1594
1643
|
}
|
|
1595
1644
|
}), _$createComponent(Show, {
|
|
1596
1645
|
get when() {
|
|
1597
1646
|
return data().cacheWriteRate > 0;
|
|
1598
1647
|
},
|
|
1599
1648
|
get children() {
|
|
1600
|
-
var _el$
|
|
1601
|
-
_$insert(_el$
|
|
1602
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1603
|
-
return _el$
|
|
1649
|
+
var _el$45 = _$createElement("text");
|
|
1650
|
+
_$insert(_el$45, () => justify("", currencySymbol() + (data().cacheWriteRate * exchangeRate()).toFixed(2) + "/M " + t("writeRate")));
|
|
1651
|
+
_$effect((_$p) => _$setProp(_el$45, "fg", pal().muted, _$p));
|
|
1652
|
+
return _el$45;
|
|
1604
1653
|
}
|
|
1605
1654
|
})];
|
|
1606
1655
|
}
|
|
@@ -1619,19 +1668,19 @@ function TokenCachePanel(props) {
|
|
|
1619
1668
|
},
|
|
1620
1669
|
get children() {
|
|
1621
1670
|
return [_$memo(() => (() => {
|
|
1622
|
-
var _el$
|
|
1623
|
-
_$insertNode(_el$
|
|
1624
|
-
_$insertNode(_el$
|
|
1625
|
-
_$insertNode(_el$
|
|
1626
|
-
_$setProp(_el$
|
|
1671
|
+
var _el$83 = _$createElement("text"), _el$84 = _$createElement("span"), _el$85 = _$createElement("span"), _el$86 = _$createElement("b"), _el$87 = _$createElement("span");
|
|
1672
|
+
_$insertNode(_el$83, _el$84);
|
|
1673
|
+
_$insertNode(_el$83, _el$85);
|
|
1674
|
+
_$insertNode(_el$83, _el$87);
|
|
1675
|
+
_$setProp(_el$83, "onMouseUp", () => setDistOpen((o) => {
|
|
1627
1676
|
const n = !o;
|
|
1628
1677
|
persistFold("dist", n);
|
|
1629
1678
|
return n;
|
|
1630
1679
|
}));
|
|
1631
|
-
_$insert(_el$
|
|
1632
|
-
_$insertNode(_el$
|
|
1633
|
-
_$insert(_el$
|
|
1634
|
-
_$insert(_el$
|
|
1680
|
+
_$insert(_el$84, () => distOpen() ? "\u25BC " : "\u25B6 ");
|
|
1681
|
+
_$insertNode(_el$85, _el$86);
|
|
1682
|
+
_$insert(_el$86, () => t("distTitle"));
|
|
1683
|
+
_$insert(_el$87, () => sep().slice(visualWidth((distOpen() ? "\u25BC " : "\u25B6 ") + t("distTitle"))));
|
|
1635
1684
|
_$effect((_p$) => {
|
|
1636
1685
|
var _v$24 = {
|
|
1637
1686
|
fg: pal().muted
|
|
@@ -1640,16 +1689,16 @@ function TokenCachePanel(props) {
|
|
|
1640
1689
|
}, _v$26 = {
|
|
1641
1690
|
fg: pal().muted
|
|
1642
1691
|
};
|
|
1643
|
-
_v$24 !== _p$.e && (_p$.e = _$setProp(_el$
|
|
1644
|
-
_v$25 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
1645
|
-
_v$26 !== _p$.a && (_p$.a = _$setProp(_el$
|
|
1692
|
+
_v$24 !== _p$.e && (_p$.e = _$setProp(_el$84, "style", _v$24, _p$.e));
|
|
1693
|
+
_v$25 !== _p$.t && (_p$.t = _$setProp(_el$85, "style", _v$25, _p$.t));
|
|
1694
|
+
_v$26 !== _p$.a && (_p$.a = _$setProp(_el$87, "style", _v$26, _p$.a));
|
|
1646
1695
|
return _p$;
|
|
1647
1696
|
}, {
|
|
1648
1697
|
e: void 0,
|
|
1649
1698
|
t: void 0,
|
|
1650
1699
|
a: void 0
|
|
1651
1700
|
});
|
|
1652
|
-
return _el$
|
|
1701
|
+
return _el$83;
|
|
1653
1702
|
})()), _$createComponent(Show, {
|
|
1654
1703
|
get when() {
|
|
1655
1704
|
return distOpen();
|
|
@@ -1659,58 +1708,63 @@ function TokenCachePanel(props) {
|
|
|
1659
1708
|
get when() {
|
|
1660
1709
|
return data().dist.system > 0;
|
|
1661
1710
|
},
|
|
1662
|
-
get children() {
|
|
1663
|
-
var _el$45 = _$createElement("text");
|
|
1664
|
-
_$insert(_el$45, () => justify(t("distSys"), fmt(data().dist.system), t("tok")));
|
|
1665
|
-
_$effect((_$p) => _$setProp(_el$45, "fg", pal().muted, _$p));
|
|
1666
|
-
return _el$45;
|
|
1667
|
-
}
|
|
1668
|
-
}), _$createComponent(Show, {
|
|
1669
|
-
get when() {
|
|
1670
|
-
return data().dist.user > 0;
|
|
1671
|
-
},
|
|
1672
1711
|
get children() {
|
|
1673
1712
|
var _el$46 = _$createElement("text");
|
|
1674
|
-
_$insert(_el$46, () => justify(t("
|
|
1713
|
+
_$insert(_el$46, () => justify(t("distSys"), fmt(data().dist.system), t("tok")));
|
|
1675
1714
|
_$effect((_$p) => _$setProp(_el$46, "fg", pal().muted, _$p));
|
|
1676
1715
|
return _el$46;
|
|
1677
1716
|
}
|
|
1678
1717
|
}), _$createComponent(Show, {
|
|
1679
1718
|
get when() {
|
|
1680
|
-
return data().dist.
|
|
1719
|
+
return data().dist.user > 0;
|
|
1681
1720
|
},
|
|
1682
1721
|
get children() {
|
|
1683
1722
|
var _el$47 = _$createElement("text");
|
|
1684
|
-
_$insert(_el$47, () => justify(t("
|
|
1723
|
+
_$insert(_el$47, () => justify(t("distUser"), fmt(data().dist.user), t("tok")));
|
|
1685
1724
|
_$effect((_$p) => _$setProp(_el$47, "fg", pal().muted, _$p));
|
|
1686
1725
|
return _el$47;
|
|
1687
1726
|
}
|
|
1688
1727
|
}), _$createComponent(Show, {
|
|
1689
1728
|
get when() {
|
|
1690
|
-
return data().dist.
|
|
1729
|
+
return data().dist.agent > 0;
|
|
1691
1730
|
},
|
|
1692
1731
|
get children() {
|
|
1693
1732
|
var _el$48 = _$createElement("text");
|
|
1694
|
-
_$insert(_el$48, () => justify(t("
|
|
1733
|
+
_$insert(_el$48, () => justify(t("distAgent"), fmt(data().dist.agent), t("tok")));
|
|
1695
1734
|
_$effect((_$p) => _$setProp(_el$48, "fg", pal().muted, _$p));
|
|
1696
1735
|
return _el$48;
|
|
1697
1736
|
}
|
|
1698
1737
|
}), _$createComponent(Show, {
|
|
1699
1738
|
get when() {
|
|
1700
|
-
return data().dist.
|
|
1739
|
+
return data().dist.toolCall > 0;
|
|
1701
1740
|
},
|
|
1702
1741
|
get children() {
|
|
1703
1742
|
var _el$49 = _$createElement("text");
|
|
1704
|
-
_$insert(_el$49, () => justify(t("
|
|
1743
|
+
_$insert(_el$49, () => justify(t("distTool"), fmt(data().dist.toolCall), t("tok")));
|
|
1705
1744
|
_$effect((_$p) => _$setProp(_el$49, "fg", pal().muted, _$p));
|
|
1706
1745
|
return _el$49;
|
|
1707
1746
|
}
|
|
1708
|
-
}), (
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1747
|
+
}), _$createComponent(Show, {
|
|
1748
|
+
get when() {
|
|
1749
|
+
return data().dist.toolResult > 0;
|
|
1750
|
+
},
|
|
1751
|
+
get children() {
|
|
1752
|
+
var _el$50 = _$createElement("text");
|
|
1753
|
+
_$insert(_el$50, () => justify(t("distRes"), fmt(data().dist.toolResult), t("tok")));
|
|
1754
|
+
_$effect((_$p) => _$setProp(_el$50, "fg", pal().muted, _$p));
|
|
1755
|
+
return _el$50;
|
|
1756
|
+
}
|
|
1757
|
+
}), _$createComponent(Show, {
|
|
1758
|
+
get when() {
|
|
1759
|
+
return data().dist.reasoning > 0;
|
|
1760
|
+
},
|
|
1761
|
+
get children() {
|
|
1762
|
+
var _el$51 = _$createElement("text");
|
|
1763
|
+
_$insert(_el$51, () => justify(t("distReason"), fmt(data().dist.reasoning), t("tok")));
|
|
1764
|
+
_$effect((_$p) => _$setProp(_el$51, "fg", pal().muted, _$p));
|
|
1765
|
+
return _el$51;
|
|
1766
|
+
}
|
|
1767
|
+
})];
|
|
1714
1768
|
}
|
|
1715
1769
|
})];
|
|
1716
1770
|
}
|
|
@@ -1727,23 +1781,23 @@ function TokenCachePanel(props) {
|
|
|
1727
1781
|
},
|
|
1728
1782
|
get children() {
|
|
1729
1783
|
return [_$memo(() => (() => {
|
|
1730
|
-
var _el$
|
|
1731
|
-
_$insertNode(_el$
|
|
1732
|
-
_$insertNode(_el$
|
|
1733
|
-
_$insertNode(_el$
|
|
1734
|
-
_$insertNode(_el$
|
|
1735
|
-
_$setProp(_el$
|
|
1784
|
+
var _el$88 = _$createElement("text"), _el$89 = _$createElement("span"), _el$90 = _$createElement("span"), _el$91 = _$createElement("b"), _el$92 = _$createElement("span"), _el$93 = _$createTextNode(` (`), _el$94 = _$createTextNode(`)`), _el$95 = _$createElement("span");
|
|
1785
|
+
_$insertNode(_el$88, _el$89);
|
|
1786
|
+
_$insertNode(_el$88, _el$90);
|
|
1787
|
+
_$insertNode(_el$88, _el$92);
|
|
1788
|
+
_$insertNode(_el$88, _el$95);
|
|
1789
|
+
_$setProp(_el$88, "onMouseUp", () => setSkillsOpen((o) => {
|
|
1736
1790
|
const n = !o;
|
|
1737
1791
|
persistFold("skills", n);
|
|
1738
1792
|
return n;
|
|
1739
1793
|
}));
|
|
1740
|
-
_$insert(_el$
|
|
1741
|
-
_$insertNode(_el$
|
|
1742
|
-
_$insert(_el$
|
|
1743
|
-
_$insertNode(_el$
|
|
1744
|
-
_$insertNode(_el$
|
|
1745
|
-
_$insert(_el$
|
|
1746
|
-
_$insert(_el$
|
|
1794
|
+
_$insert(_el$89, () => skillsOpen() ? "\u25BC " : "\u25B6 ");
|
|
1795
|
+
_$insertNode(_el$90, _el$91);
|
|
1796
|
+
_$insert(_el$91, () => t("secSkills"));
|
|
1797
|
+
_$insertNode(_el$92, _el$93);
|
|
1798
|
+
_$insertNode(_el$92, _el$94);
|
|
1799
|
+
_$insert(_el$92, () => data().skills.length, _el$94);
|
|
1800
|
+
_$insert(_el$95, () => sep().slice(visualWidth((skillsOpen() ? "\u25BC " : "\u25B6 ") + t("secSkills") + ` (${data().skills.length})`)));
|
|
1747
1801
|
_$effect((_p$) => {
|
|
1748
1802
|
var _v$27 = {
|
|
1749
1803
|
fg: pal().muted
|
|
@@ -1754,10 +1808,10 @@ function TokenCachePanel(props) {
|
|
|
1754
1808
|
}, _v$30 = {
|
|
1755
1809
|
fg: pal().muted
|
|
1756
1810
|
};
|
|
1757
|
-
_v$27 !== _p$.e && (_p$.e = _$setProp(_el$
|
|
1758
|
-
_v$28 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
1759
|
-
_v$29 !== _p$.a && (_p$.a = _$setProp(_el$
|
|
1760
|
-
_v$30 !== _p$.o && (_p$.o = _$setProp(_el$
|
|
1811
|
+
_v$27 !== _p$.e && (_p$.e = _$setProp(_el$89, "style", _v$27, _p$.e));
|
|
1812
|
+
_v$28 !== _p$.t && (_p$.t = _$setProp(_el$90, "style", _v$28, _p$.t));
|
|
1813
|
+
_v$29 !== _p$.a && (_p$.a = _$setProp(_el$92, "style", _v$29, _p$.a));
|
|
1814
|
+
_v$30 !== _p$.o && (_p$.o = _$setProp(_el$95, "style", _v$30, _p$.o));
|
|
1761
1815
|
return _p$;
|
|
1762
1816
|
}, {
|
|
1763
1817
|
e: void 0,
|
|
@@ -1765,7 +1819,7 @@ function TokenCachePanel(props) {
|
|
|
1765
1819
|
a: void 0,
|
|
1766
1820
|
o: void 0
|
|
1767
1821
|
});
|
|
1768
|
-
return _el$
|
|
1822
|
+
return _el$88;
|
|
1769
1823
|
})()), _$createComponent(Show, {
|
|
1770
1824
|
get when() {
|
|
1771
1825
|
return skillsOpen();
|
|
@@ -1776,10 +1830,10 @@ function TokenCachePanel(props) {
|
|
|
1776
1830
|
const maxLabel = Math.max(4, panelWidth() - gutter() - rightW - 1);
|
|
1777
1831
|
const label = truncateVisual(sk.name, maxLabel);
|
|
1778
1832
|
return (() => {
|
|
1779
|
-
var _el$
|
|
1780
|
-
_$insert(_el$
|
|
1781
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1782
|
-
return _el$
|
|
1833
|
+
var _el$96 = _$createElement("text");
|
|
1834
|
+
_$insert(_el$96, () => justify(label, fmt(sk.tokens), t("tok")));
|
|
1835
|
+
_$effect((_$p) => _$setProp(_el$96, "fg", pal().muted, _$p));
|
|
1836
|
+
return _el$96;
|
|
1783
1837
|
})();
|
|
1784
1838
|
});
|
|
1785
1839
|
}
|
|
@@ -1793,32 +1847,32 @@ function TokenCachePanel(props) {
|
|
|
1793
1847
|
},
|
|
1794
1848
|
get children() {
|
|
1795
1849
|
return [(() => {
|
|
1796
|
-
var _el$
|
|
1797
|
-
_$insert(_el$
|
|
1798
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1799
|
-
return _el$
|
|
1850
|
+
var _el$52 = _$createElement("text");
|
|
1851
|
+
_$insert(_el$52, sep);
|
|
1852
|
+
_$effect((_$p) => _$setProp(_el$52, "fg", pal().muted, _$p));
|
|
1853
|
+
return _el$52;
|
|
1800
1854
|
})(), _$createComponent(Show, {
|
|
1801
1855
|
get when() {
|
|
1802
1856
|
return balanceUnsupported();
|
|
1803
1857
|
},
|
|
1804
1858
|
get children() {
|
|
1805
|
-
var _el$
|
|
1806
|
-
_$insertNode(_el$
|
|
1807
|
-
_$insertNode(_el$
|
|
1808
|
-
_$insertNode(_el$
|
|
1809
|
-
_$insert(_el$
|
|
1859
|
+
var _el$53 = _$createElement("text"), _el$54 = _$createElement("span"), _el$56 = _$createElement("span");
|
|
1860
|
+
_$insertNode(_el$53, _el$54);
|
|
1861
|
+
_$insertNode(_el$53, _el$56);
|
|
1862
|
+
_$insertNode(_el$54, _$createTextNode(`> `));
|
|
1863
|
+
_$insert(_el$56, () => t("balUnsupported"));
|
|
1810
1864
|
_$effect((_p$) => {
|
|
1811
1865
|
var _v$9 = pal().muted, _v$0 = {
|
|
1812
1866
|
fg: pal().muted
|
|
1813
1867
|
};
|
|
1814
|
-
_v$9 !== _p$.e && (_p$.e = _$setProp(_el$
|
|
1815
|
-
_v$0 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
1868
|
+
_v$9 !== _p$.e && (_p$.e = _$setProp(_el$53, "fg", _v$9, _p$.e));
|
|
1869
|
+
_v$0 !== _p$.t && (_p$.t = _$setProp(_el$54, "style", _v$0, _p$.t));
|
|
1816
1870
|
return _p$;
|
|
1817
1871
|
}, {
|
|
1818
1872
|
e: void 0,
|
|
1819
1873
|
t: void 0
|
|
1820
1874
|
});
|
|
1821
|
-
return _el$
|
|
1875
|
+
return _el$53;
|
|
1822
1876
|
}
|
|
1823
1877
|
}), _$createComponent(Show, {
|
|
1824
1878
|
get when() {
|
|
@@ -1830,59 +1884,59 @@ function TokenCachePanel(props) {
|
|
|
1830
1884
|
return balanceState().status === "idle";
|
|
1831
1885
|
},
|
|
1832
1886
|
get children() {
|
|
1833
|
-
var _el$
|
|
1834
|
-
_$insertNode(_el$
|
|
1835
|
-
_$insertNode(_el$
|
|
1836
|
-
_$insertNode(_el$
|
|
1837
|
-
_$insert(_el$
|
|
1887
|
+
var _el$57 = _$createElement("text"), _el$58 = _$createElement("span"), _el$60 = _$createElement("span");
|
|
1888
|
+
_$insertNode(_el$57, _el$58);
|
|
1889
|
+
_$insertNode(_el$57, _el$60);
|
|
1890
|
+
_$insertNode(_el$58, _$createTextNode(`> `));
|
|
1891
|
+
_$insert(_el$60, () => t("balNoKey", {
|
|
1838
1892
|
p: providerName()
|
|
1839
1893
|
}));
|
|
1840
1894
|
_$effect((_p$) => {
|
|
1841
1895
|
var _v$1 = pal().muted, _v$10 = {
|
|
1842
1896
|
fg: pal().muted
|
|
1843
1897
|
};
|
|
1844
|
-
_v$1 !== _p$.e && (_p$.e = _$setProp(_el$
|
|
1845
|
-
_v$10 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
1898
|
+
_v$1 !== _p$.e && (_p$.e = _$setProp(_el$57, "fg", _v$1, _p$.e));
|
|
1899
|
+
_v$10 !== _p$.t && (_p$.t = _$setProp(_el$58, "style", _v$10, _p$.t));
|
|
1846
1900
|
return _p$;
|
|
1847
1901
|
}, {
|
|
1848
1902
|
e: void 0,
|
|
1849
1903
|
t: void 0
|
|
1850
1904
|
});
|
|
1851
|
-
return _el$
|
|
1905
|
+
return _el$57;
|
|
1852
1906
|
}
|
|
1853
1907
|
}), _$createComponent(Show, {
|
|
1854
1908
|
get when() {
|
|
1855
1909
|
return balanceState().status === "loading";
|
|
1856
1910
|
},
|
|
1857
1911
|
get children() {
|
|
1858
|
-
var _el$
|
|
1859
|
-
_$insertNode(_el$
|
|
1860
|
-
_$insertNode(_el$
|
|
1861
|
-
_$insertNode(_el$
|
|
1862
|
-
_$insert(_el$
|
|
1912
|
+
var _el$61 = _$createElement("text"), _el$62 = _$createElement("span"), _el$64 = _$createElement("span");
|
|
1913
|
+
_$insertNode(_el$61, _el$62);
|
|
1914
|
+
_$insertNode(_el$61, _el$64);
|
|
1915
|
+
_$insertNode(_el$62, _$createTextNode(`> `));
|
|
1916
|
+
_$insert(_el$64, () => t("balLoading"));
|
|
1863
1917
|
_$effect((_p$) => {
|
|
1864
1918
|
var _v$11 = pal().muted, _v$12 = {
|
|
1865
1919
|
fg: pal().muted
|
|
1866
1920
|
};
|
|
1867
|
-
_v$11 !== _p$.e && (_p$.e = _$setProp(_el$
|
|
1868
|
-
_v$12 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
1921
|
+
_v$11 !== _p$.e && (_p$.e = _$setProp(_el$61, "fg", _v$11, _p$.e));
|
|
1922
|
+
_v$12 !== _p$.t && (_p$.t = _$setProp(_el$62, "style", _v$12, _p$.t));
|
|
1869
1923
|
return _p$;
|
|
1870
1924
|
}, {
|
|
1871
1925
|
e: void 0,
|
|
1872
1926
|
t: void 0
|
|
1873
1927
|
});
|
|
1874
|
-
return _el$
|
|
1928
|
+
return _el$61;
|
|
1875
1929
|
}
|
|
1876
1930
|
}), _$createComponent(Show, {
|
|
1877
1931
|
get when() {
|
|
1878
1932
|
return balanceState().status === "error";
|
|
1879
1933
|
},
|
|
1880
1934
|
get children() {
|
|
1881
|
-
var _el$
|
|
1882
|
-
_$insertNode(_el$
|
|
1883
|
-
_$insertNode(_el$
|
|
1884
|
-
_$insertNode(_el$
|
|
1885
|
-
_$insert(_el$
|
|
1935
|
+
var _el$65 = _$createElement("text"), _el$66 = _$createElement("span"), _el$68 = _$createElement("span");
|
|
1936
|
+
_$insertNode(_el$65, _el$66);
|
|
1937
|
+
_$insertNode(_el$65, _el$68);
|
|
1938
|
+
_$insertNode(_el$66, _$createTextNode(`> `));
|
|
1939
|
+
_$insert(_el$68, () => {
|
|
1886
1940
|
const code = balanceState().error;
|
|
1887
1941
|
if (code === "401") return t("balErr401");
|
|
1888
1942
|
if (code === "403") return t("balErr403");
|
|
@@ -1894,24 +1948,24 @@ function TokenCachePanel(props) {
|
|
|
1894
1948
|
var _v$13 = pal().error, _v$14 = {
|
|
1895
1949
|
fg: pal().muted
|
|
1896
1950
|
};
|
|
1897
|
-
_v$13 !== _p$.e && (_p$.e = _$setProp(_el$
|
|
1898
|
-
_v$14 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
1951
|
+
_v$13 !== _p$.e && (_p$.e = _$setProp(_el$65, "fg", _v$13, _p$.e));
|
|
1952
|
+
_v$14 !== _p$.t && (_p$.t = _$setProp(_el$66, "style", _v$14, _p$.t));
|
|
1899
1953
|
return _p$;
|
|
1900
1954
|
}, {
|
|
1901
1955
|
e: void 0,
|
|
1902
1956
|
t: void 0
|
|
1903
1957
|
});
|
|
1904
|
-
return _el$
|
|
1958
|
+
return _el$65;
|
|
1905
1959
|
}
|
|
1906
1960
|
}), _$createComponent(Show, {
|
|
1907
1961
|
get when() {
|
|
1908
1962
|
return _$memo(() => balanceState().status === "ok")() && balanceState().data;
|
|
1909
1963
|
},
|
|
1910
1964
|
get children() {
|
|
1911
|
-
var _el$
|
|
1912
|
-
_$insert(_el$
|
|
1913
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1914
|
-
return _el$
|
|
1965
|
+
var _el$69 = _$createElement("text");
|
|
1966
|
+
_$insert(_el$69, () => justify(t("balTotal"), formatBalanceText(balanceState().data, balanceCurrency(), exchangeRate())));
|
|
1967
|
+
_$effect((_$p) => _$setProp(_el$69, "fg", pal().text, _$p));
|
|
1968
|
+
return _el$69;
|
|
1915
1969
|
}
|
|
1916
1970
|
})];
|
|
1917
1971
|
}
|
|
@@ -1938,6 +1992,20 @@ function TokenCachePanel(props) {
|
|
|
1938
1992
|
return _el$;
|
|
1939
1993
|
})();
|
|
1940
1994
|
}
|
|
1995
|
+
var PATH_CHROME = 2;
|
|
1996
|
+
var HIDE_PATH_BELOW = 14;
|
|
1997
|
+
function keyShortcut(api, command, fallback) {
|
|
1998
|
+
try {
|
|
1999
|
+
const binds = api.tuiConfig.keybinds.get(command);
|
|
2000
|
+
const seq = binds?.map((b) => ({
|
|
2001
|
+
key: b.key
|
|
2002
|
+
}));
|
|
2003
|
+
const s = api.keys.formatBindings(seq);
|
|
2004
|
+
return s || fallback;
|
|
2005
|
+
} catch {
|
|
2006
|
+
return fallback;
|
|
2007
|
+
}
|
|
2008
|
+
}
|
|
1941
2009
|
function BottomStatusBar(props) {
|
|
1942
2010
|
const KV_PREFIX = "cache_panel";
|
|
1943
2011
|
const t = createT(() => props.signals.langCode());
|
|
@@ -2053,6 +2121,119 @@ function BottomStatusBar(props) {
|
|
|
2053
2121
|
return "";
|
|
2054
2122
|
}
|
|
2055
2123
|
});
|
|
2124
|
+
const [termW, setTermW] = createSignal(props.api.renderer.terminalWidth);
|
|
2125
|
+
createEffect(() => {
|
|
2126
|
+
const r = props.api.renderer;
|
|
2127
|
+
if (typeof r.on !== "function" || typeof r.off !== "function") return;
|
|
2128
|
+
const onResize = () => setTermW(props.api.renderer.terminalWidth);
|
|
2129
|
+
r.on("resize", onResize);
|
|
2130
|
+
onCleanup(() => r.off("resize", onResize));
|
|
2131
|
+
});
|
|
2132
|
+
createEffect(() => {
|
|
2133
|
+
const timer = setInterval(() => setTermW(props.api.renderer.terminalWidth), 500);
|
|
2134
|
+
onCleanup(() => clearInterval(timer));
|
|
2135
|
+
});
|
|
2136
|
+
const statsSegs = createMemo(() => {
|
|
2137
|
+
const s = stats();
|
|
2138
|
+
const hr = s && s.hitRate >= 0 ? (Math.floor(s.hitRate * 10) / 10).toFixed(1) + "%" : "--";
|
|
2139
|
+
const segs = [{
|
|
2140
|
+
text: t("barHit") + " ",
|
|
2141
|
+
color: pal().muted
|
|
2142
|
+
}, {
|
|
2143
|
+
text: hr,
|
|
2144
|
+
color: hitColor()
|
|
2145
|
+
}];
|
|
2146
|
+
const tr = trend();
|
|
2147
|
+
if (tr !== null) {
|
|
2148
|
+
segs.push({
|
|
2149
|
+
text: " " + (tr > 0 ? "\u2191" : "\u2193") + Math.abs(tr).toFixed(1) + "%",
|
|
2150
|
+
color: tr > 0 ? pal().success : pal().error
|
|
2151
|
+
});
|
|
2152
|
+
}
|
|
2153
|
+
segs.push({
|
|
2154
|
+
text: " \xB7 " + t("barTok") + " ",
|
|
2155
|
+
color: pal().muted
|
|
2156
|
+
});
|
|
2157
|
+
segs.push({
|
|
2158
|
+
text: s ? fmtCompact(s.input + s.read + s.write) : "--",
|
|
2159
|
+
color: pal().text
|
|
2160
|
+
});
|
|
2161
|
+
if (!props.signals.balanceUnsupported()) {
|
|
2162
|
+
segs.push({
|
|
2163
|
+
text: " \xB7 " + t("barBal") + " ",
|
|
2164
|
+
color: pal().muted
|
|
2165
|
+
});
|
|
2166
|
+
segs.push({
|
|
2167
|
+
text: balanceText(),
|
|
2168
|
+
color: pal().text
|
|
2169
|
+
});
|
|
2170
|
+
}
|
|
2171
|
+
segs.push({
|
|
2172
|
+
text: " \xB7 ",
|
|
2173
|
+
color: pal().muted
|
|
2174
|
+
});
|
|
2175
|
+
return segs;
|
|
2176
|
+
});
|
|
2177
|
+
const statsW = createMemo(() => {
|
|
2178
|
+
let w = 0;
|
|
2179
|
+
for (const sg of statsSegs()) w += visualWidth(sg.text);
|
|
2180
|
+
return w;
|
|
2181
|
+
});
|
|
2182
|
+
const sessionCost = createMemo(() => {
|
|
2183
|
+
try {
|
|
2184
|
+
return num(props.api.state.session.get(sid)?.cost);
|
|
2185
|
+
} catch {
|
|
2186
|
+
return 0;
|
|
2187
|
+
}
|
|
2188
|
+
});
|
|
2189
|
+
const usageText = createMemo(() => {
|
|
2190
|
+
const id = sid;
|
|
2191
|
+
if (!id) return "";
|
|
2192
|
+
const msgs = props.api.state.session.messages(id);
|
|
2193
|
+
let last;
|
|
2194
|
+
for (let i = msgs.length - 1; i >= 0; i--) {
|
|
2195
|
+
const m = msgs[i];
|
|
2196
|
+
if (m.role !== "assistant") continue;
|
|
2197
|
+
const tk2 = m.tokens;
|
|
2198
|
+
if (tk2 && num(tk2.output) > 0) {
|
|
2199
|
+
last = m;
|
|
2200
|
+
break;
|
|
2201
|
+
}
|
|
2202
|
+
}
|
|
2203
|
+
if (!last) return "";
|
|
2204
|
+
const tk = last.tokens;
|
|
2205
|
+
if (!tk) return "";
|
|
2206
|
+
const tokens = num(tk.input) + num(tk.output) + num(tk.reasoning) + num(tk.cache?.read) + num(tk.cache?.write);
|
|
2207
|
+
if (tokens <= 0) return "";
|
|
2208
|
+
let pct = "";
|
|
2209
|
+
try {
|
|
2210
|
+
const p = props.api.state.provider.find((x) => x.id === last.providerID);
|
|
2211
|
+
const limit = p?.models?.[last.modelID]?.limit?.context;
|
|
2212
|
+
if (typeof limit === "number" && limit > 0) pct = ` (${Math.round(tokens / limit * 100)}%)`;
|
|
2213
|
+
} catch {
|
|
2214
|
+
}
|
|
2215
|
+
const context = fmtCompact(tokens) + pct;
|
|
2216
|
+
const cost = sessionCost();
|
|
2217
|
+
return cost > 0 ? context + " \xB7 " + fmtCost(cost) : context;
|
|
2218
|
+
});
|
|
2219
|
+
const rightText = createMemo(() => {
|
|
2220
|
+
const cmds = keyShortcut(props.api, "command.palette.show", "ctrl+p") + " commands";
|
|
2221
|
+
const u = usageText();
|
|
2222
|
+
if (u) return u + " " + cmds;
|
|
2223
|
+
return keyShortcut(props.api, "agent.cycle", "") + " agents " + cmds;
|
|
2224
|
+
});
|
|
2225
|
+
const rightW = createMemo(() => visualWidth(rightText()));
|
|
2226
|
+
const inputW = createMemo(() => termW() - (props.signals.sidebarVisible() ? 42 : 0) - 4);
|
|
2227
|
+
const dirDisplay = createMemo(() => {
|
|
2228
|
+
const avail = inputW() - statsW() - rightW() - PATH_CHROME;
|
|
2229
|
+
if (avail < HIDE_PATH_BELOW) return "";
|
|
2230
|
+
return truncateVisual(directory(), avail);
|
|
2231
|
+
});
|
|
2232
|
+
const dirFallback = createMemo(() => {
|
|
2233
|
+
const avail = inputW() - rightW() - PATH_CHROME;
|
|
2234
|
+
if (avail < HIDE_PATH_BELOW) return "";
|
|
2235
|
+
return truncateVisual(directory(), avail);
|
|
2236
|
+
});
|
|
2056
2237
|
onMount(() => {
|
|
2057
2238
|
try {
|
|
2058
2239
|
const v = props.api.kv.get(`${KV_PREFIX}.section.bottom`, true);
|
|
@@ -2066,102 +2247,39 @@ function BottomStatusBar(props) {
|
|
|
2066
2247
|
},
|
|
2067
2248
|
get fallback() {
|
|
2068
2249
|
return (() => {
|
|
2069
|
-
var _el$
|
|
2070
|
-
_$insert(_el$
|
|
2071
|
-
_$effect((_$p) => _$setProp(_el$
|
|
2072
|
-
return _el$
|
|
2250
|
+
var _el$101 = _$createElement("text");
|
|
2251
|
+
_$insert(_el$101, dirFallback);
|
|
2252
|
+
_$effect((_$p) => _$setProp(_el$101, "fg", pal().muted, _$p));
|
|
2253
|
+
return _el$101;
|
|
2073
2254
|
})();
|
|
2074
2255
|
},
|
|
2075
2256
|
get children() {
|
|
2076
|
-
var _el$
|
|
2077
|
-
_$insertNode(_el$
|
|
2078
|
-
_$insertNode(_el$
|
|
2079
|
-
_$setProp(_el$
|
|
2080
|
-
_$setProp(_el$
|
|
2081
|
-
_$setProp(_el$
|
|
2082
|
-
_$setProp(_el$
|
|
2083
|
-
_$setProp(_el$
|
|
2084
|
-
_$insert(_el$
|
|
2085
|
-
_$insertNode(_el$98, _el$99);
|
|
2086
|
-
_$insertNode(_el$98, _el$108);
|
|
2087
|
-
_$setProp(_el$98, "flexDirection", "row");
|
|
2257
|
+
var _el$97 = _$createElement("box"), _el$98 = _$createElement("text"), _el$99 = _$createElement("box"), _el$100 = _$createElement("text");
|
|
2258
|
+
_$insertNode(_el$97, _el$98);
|
|
2259
|
+
_$insertNode(_el$97, _el$99);
|
|
2260
|
+
_$setProp(_el$97, "marginLeft", 1);
|
|
2261
|
+
_$setProp(_el$97, "flexGrow", 1);
|
|
2262
|
+
_$setProp(_el$97, "flexShrink", 0);
|
|
2263
|
+
_$setProp(_el$97, "flexDirection", "row");
|
|
2264
|
+
_$setProp(_el$97, "justifyContent", "space-between");
|
|
2265
|
+
_$insert(_el$98, dirDisplay);
|
|
2088
2266
|
_$insertNode(_el$99, _el$100);
|
|
2089
|
-
_$
|
|
2090
|
-
_$
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
_$insert(_el$100, () => t("barHit"), _el$101);
|
|
2094
|
-
_$insert(_el$102, (() => {
|
|
2095
|
-
var _c$ = _$memo(() => (stats()?.hitRate ?? -1) >= 0);
|
|
2096
|
-
return () => _c$() ? (Math.floor(stats().hitRate * 10) / 10).toFixed(1) + "%" : "--";
|
|
2097
|
-
})());
|
|
2098
|
-
_$insert(_el$99, _$createComponent(Show, {
|
|
2099
|
-
get when() {
|
|
2100
|
-
return trend() !== null;
|
|
2267
|
+
_$setProp(_el$99, "flexDirection", "row");
|
|
2268
|
+
_$insert(_el$100, _$createComponent(For, {
|
|
2269
|
+
get each() {
|
|
2270
|
+
return statsSegs();
|
|
2101
2271
|
},
|
|
2102
|
-
|
|
2103
|
-
var _el$
|
|
2104
|
-
_$insert(_el$
|
|
2105
|
-
_$effect((_$p) => _$setProp(_el$
|
|
2106
|
-
fg:
|
|
2272
|
+
children: (sg) => (() => {
|
|
2273
|
+
var _el$102 = _$createElement("span");
|
|
2274
|
+
_$insert(_el$102, () => sg.text);
|
|
2275
|
+
_$effect((_$p) => _$setProp(_el$102, "style", {
|
|
2276
|
+
fg: sg.color
|
|
2107
2277
|
}, _$p));
|
|
2108
|
-
return _el$
|
|
2109
|
-
}
|
|
2110
|
-
})
|
|
2111
|
-
_$
|
|
2112
|
-
|
|
2113
|
-
var _c$2 = _$memo(() => !!stats());
|
|
2114
|
-
return () => _c$2() ? fmtCompact(stats().input + stats().read + stats().write) : "--";
|
|
2115
|
-
})());
|
|
2116
|
-
_$insert(_el$99, _$createComponent(Show, {
|
|
2117
|
-
get when() {
|
|
2118
|
-
return !props.signals.balanceUnsupported();
|
|
2119
|
-
},
|
|
2120
|
-
get children() {
|
|
2121
|
-
return [(() => {
|
|
2122
|
-
var _el$106 = _$createElement("span");
|
|
2123
|
-
_$insert(_el$106, () => " \xB7 " + t("barBal") + " ");
|
|
2124
|
-
_$effect((_$p) => _$setProp(_el$106, "style", {
|
|
2125
|
-
fg: pal().muted
|
|
2126
|
-
}, _$p));
|
|
2127
|
-
return _el$106;
|
|
2128
|
-
})(), (() => {
|
|
2129
|
-
var _el$107 = _$createElement("span");
|
|
2130
|
-
_$insert(_el$107, balanceText);
|
|
2131
|
-
_$effect((_$p) => _$setProp(_el$107, "style", {
|
|
2132
|
-
fg: pal().text
|
|
2133
|
-
}, _$p));
|
|
2134
|
-
return _el$107;
|
|
2135
|
-
})()];
|
|
2136
|
-
}
|
|
2137
|
-
}), null);
|
|
2138
|
-
_$insertNode(_el$108, _$createTextNode(` \xB7 `));
|
|
2139
|
-
_$effect((_p$) => {
|
|
2140
|
-
var _v$31 = pal().muted, _v$32 = {
|
|
2141
|
-
fg: pal().muted
|
|
2142
|
-
}, _v$33 = {
|
|
2143
|
-
fg: hitColor()
|
|
2144
|
-
}, _v$34 = {
|
|
2145
|
-
fg: pal().muted
|
|
2146
|
-
}, _v$35 = {
|
|
2147
|
-
fg: pal().text
|
|
2148
|
-
}, _v$36 = pal().muted;
|
|
2149
|
-
_v$31 !== _p$.e && (_p$.e = _$setProp(_el$97, "fg", _v$31, _p$.e));
|
|
2150
|
-
_v$32 !== _p$.t && (_p$.t = _$setProp(_el$100, "style", _v$32, _p$.t));
|
|
2151
|
-
_v$33 !== _p$.a && (_p$.a = _$setProp(_el$102, "style", _v$33, _p$.a));
|
|
2152
|
-
_v$34 !== _p$.o && (_p$.o = _$setProp(_el$104, "style", _v$34, _p$.o));
|
|
2153
|
-
_v$35 !== _p$.i && (_p$.i = _$setProp(_el$105, "style", _v$35, _p$.i));
|
|
2154
|
-
_v$36 !== _p$.n && (_p$.n = _$setProp(_el$108, "fg", _v$36, _p$.n));
|
|
2155
|
-
return _p$;
|
|
2156
|
-
}, {
|
|
2157
|
-
e: void 0,
|
|
2158
|
-
t: void 0,
|
|
2159
|
-
a: void 0,
|
|
2160
|
-
o: void 0,
|
|
2161
|
-
i: void 0,
|
|
2162
|
-
n: void 0
|
|
2163
|
-
});
|
|
2164
|
-
return _el$96;
|
|
2278
|
+
return _el$102;
|
|
2279
|
+
})()
|
|
2280
|
+
}));
|
|
2281
|
+
_$effect((_$p) => _$setProp(_el$98, "fg", pal().muted, _$p));
|
|
2282
|
+
return _el$97;
|
|
2165
2283
|
}
|
|
2166
2284
|
});
|
|
2167
2285
|
}
|
|
@@ -2209,6 +2327,7 @@ var tui = async (api) => {
|
|
|
2209
2327
|
const [borderVisible, setBorderVisible] = createSignal(true);
|
|
2210
2328
|
const [langCode, setLangCode] = createSignal(INIT_LANG);
|
|
2211
2329
|
const [overrideSessionId, setOverrideSessionId] = createSignal(void 0);
|
|
2330
|
+
const [sidebarVisible, setSidebarVisible] = createSignal(false);
|
|
2212
2331
|
const [balanceState, setBalanceState] = createSignal({
|
|
2213
2332
|
status: "idle",
|
|
2214
2333
|
data: null,
|
|
@@ -2248,7 +2367,9 @@ var tui = async (api) => {
|
|
|
2248
2367
|
borderVisible,
|
|
2249
2368
|
setBorderVisible,
|
|
2250
2369
|
overrideSessionId,
|
|
2251
|
-
setOverrideSessionId
|
|
2370
|
+
setOverrideSessionId,
|
|
2371
|
+
sidebarVisible,
|
|
2372
|
+
setSidebarVisible
|
|
2252
2373
|
};
|
|
2253
2374
|
api.slots.register(createSidebarSlot(api, signals));
|
|
2254
2375
|
api.slots.register({
|
|
@@ -2391,11 +2512,11 @@ var tui = async (api) => {
|
|
|
2391
2512
|
return provider.name;
|
|
2392
2513
|
},
|
|
2393
2514
|
description: () => (() => {
|
|
2394
|
-
var _el$
|
|
2395
|
-
_$insert(_el$
|
|
2515
|
+
var _el$103 = _$createElement("text");
|
|
2516
|
+
_$insert(_el$103, () => t("balKeyPrompt", {
|
|
2396
2517
|
p: provider.name
|
|
2397
2518
|
}));
|
|
2398
|
-
return _el$
|
|
2519
|
+
return _el$103;
|
|
2399
2520
|
})(),
|
|
2400
2521
|
get placeholder() {
|
|
2401
2522
|
return provider.keyPlaceholder ?? "sk-...";
|
|
@@ -2475,9 +2596,9 @@ var tui = async (api) => {
|
|
|
2475
2596
|
dialog?.replace(() => _$createComponent(api.ui.DialogPrompt, {
|
|
2476
2597
|
title: "Exchange Rate",
|
|
2477
2598
|
description: () => (() => {
|
|
2478
|
-
var _el$
|
|
2479
|
-
_$insertNode(_el$
|
|
2480
|
-
return _el$
|
|
2599
|
+
var _el$104 = _$createElement("text");
|
|
2600
|
+
_$insertNode(_el$104, _$createTextNode(`Enter the exchange rate from USD to your currency (e.g. 7.2 for CNY)`));
|
|
2601
|
+
return _el$104;
|
|
2481
2602
|
})(),
|
|
2482
2603
|
placeholder: "1.0",
|
|
2483
2604
|
get value() {
|
|
@@ -2889,9 +3010,9 @@ var tui = async (api) => {
|
|
|
2889
3010
|
return _$memo(() => !!signals.overrideSessionId())() ? t("subSwitchTitle") : t("subViewTitle");
|
|
2890
3011
|
},
|
|
2891
3012
|
description: () => (() => {
|
|
2892
|
-
var _el$
|
|
2893
|
-
_$insert(_el$
|
|
2894
|
-
return _el$
|
|
3013
|
+
var _el$106 = _$createElement("text");
|
|
3014
|
+
_$insert(_el$106, () => t("subNoFound"));
|
|
3015
|
+
return _el$106;
|
|
2895
3016
|
})(),
|
|
2896
3017
|
placeholder: "ses_...",
|
|
2897
3018
|
get value() {
|