opencode-visual-cache 1.2.16 → 1.4.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/README.md +4 -1
- package/README_EN.md +4 -1
- package/dist/_version.d.ts +1 -1
- package/dist/_version.js +1 -1
- package/dist/index.js +343 -9
- package/dist/tui.js +735 -223
- package/package.json +1 -1
- package/src/_version.ts +1 -1
- package/src/index.tsx +417 -3
package/dist/tui.js
CHANGED
|
@@ -13,7 +13,7 @@ import { createElement as _$createElement } from "@opentui/solid";
|
|
|
13
13
|
import { createMemo, createSignal, createEffect, onMount, onCleanup, Show, untrack } from "solid-js";
|
|
14
14
|
|
|
15
15
|
// src/_version.ts
|
|
16
|
-
var PLUGIN_VERSION = "1.
|
|
16
|
+
var PLUGIN_VERSION = "1.4.0";
|
|
17
17
|
|
|
18
18
|
// src/index.tsx
|
|
19
19
|
function charColumns(c) {
|
|
@@ -89,7 +89,15 @@ var ZH_T = {
|
|
|
89
89
|
distOut: "\u8F93\u51FA:",
|
|
90
90
|
secDetail: "\u660E\u7EC6",
|
|
91
91
|
secModel: "\u6A21\u578B",
|
|
92
|
-
secSkills: "\u5DF2\u52A0\u8F7D\u6280\u80FD"
|
|
92
|
+
secSkills: "\u5DF2\u52A0\u8F7D\u6280\u80FD",
|
|
93
|
+
balTotal: "\u603B\u4F59\u989D:",
|
|
94
|
+
balNoKey: "\u672A\u914D\u7F6E API Key",
|
|
95
|
+
balLoading: "\u67E5\u8BE2\u4E2D...",
|
|
96
|
+
balError: "\u67E5\u8BE2\u5931\u8D25",
|
|
97
|
+
balErr401: "API Key \u65E0\u6548",
|
|
98
|
+
balErr403: "\u4F59\u989D\u67E5\u8BE2\u88AB\u62D2\u7EDD",
|
|
99
|
+
balErrEmpty: "\u672A\u83B7\u53D6\u5230\u4F59\u989D\u6570\u636E",
|
|
100
|
+
balErrTimeout: "\u67E5\u8BE2\u8D85\u65F6"
|
|
93
101
|
};
|
|
94
102
|
var EN_T = {
|
|
95
103
|
title: "Token Cache",
|
|
@@ -120,7 +128,15 @@ var EN_T = {
|
|
|
120
128
|
distOut: "Output:",
|
|
121
129
|
secDetail: "Detail",
|
|
122
130
|
secModel: "Model",
|
|
123
|
-
secSkills: "Loaded Skills"
|
|
131
|
+
secSkills: "Loaded Skills",
|
|
132
|
+
balTotal: "Total:",
|
|
133
|
+
balNoKey: "No API Key set",
|
|
134
|
+
balLoading: "Fetching...",
|
|
135
|
+
balError: "Fetch failed",
|
|
136
|
+
balErr401: "Invalid API Key",
|
|
137
|
+
balErr403: "Balance request rejected",
|
|
138
|
+
balErrEmpty: "No balance data",
|
|
139
|
+
balErrTimeout: "Request timed out"
|
|
124
140
|
};
|
|
125
141
|
function rgb(raw) {
|
|
126
142
|
if (typeof raw === "string" && raw.startsWith("#")) {
|
|
@@ -174,6 +190,14 @@ function desaturateTo(raw, maxSat, fallback) {
|
|
|
174
190
|
const nb = Math.round(c.b + (luma - c.b) * hi);
|
|
175
191
|
return "#" + [nr, ng, nb].map((v) => Math.max(0, Math.min(255, v)).toString(16).padStart(2, "0")).join("");
|
|
176
192
|
}
|
|
193
|
+
function dimColor(hex, factor = 0.5) {
|
|
194
|
+
const c = rgb(hex);
|
|
195
|
+
if (!c) return hex;
|
|
196
|
+
const r = Math.round(c.r * factor);
|
|
197
|
+
const g = Math.round(c.g * factor);
|
|
198
|
+
const b = Math.round(c.b * factor);
|
|
199
|
+
return "#" + [r, g, b].map((v) => Math.max(0, Math.min(255, v)).toString(16).padStart(2, "0")).join("");
|
|
200
|
+
}
|
|
177
201
|
var FALLBACK = {
|
|
178
202
|
primary: "#8B9DAF",
|
|
179
203
|
text: "#C5C5BB",
|
|
@@ -224,6 +248,38 @@ function estimateTokens(text) {
|
|
|
224
248
|
const asciiPerToken = jsonLike ? 3.5 : codeLike ? 3.5 : 4;
|
|
225
249
|
return Math.max(1, Math.ceil(ascii / asciiPerToken + cjk / 1));
|
|
226
250
|
}
|
|
251
|
+
var BALANCE_POLL_MS = 5 * 60 * 1e3;
|
|
252
|
+
async function fetchDeepSeekBalance(apiKey, signal) {
|
|
253
|
+
const res = await fetch("https://api.deepseek.com/user/balance", {
|
|
254
|
+
headers: {
|
|
255
|
+
Authorization: `Bearer ${apiKey}`,
|
|
256
|
+
Accept: "application/json"
|
|
257
|
+
},
|
|
258
|
+
signal
|
|
259
|
+
});
|
|
260
|
+
if (!res.ok) {
|
|
261
|
+
if (res.status === 401) throw new Error("401");
|
|
262
|
+
if (res.status === 402 || res.status === 403) throw new Error("403");
|
|
263
|
+
throw new Error(String(res.status));
|
|
264
|
+
}
|
|
265
|
+
const json = await res.json();
|
|
266
|
+
const infos = json.balance_infos ?? [];
|
|
267
|
+
if (infos.length === 0) throw new Error("EMPTY");
|
|
268
|
+
return infos.map((info) => ({
|
|
269
|
+
currency: info.currency ?? "CNY",
|
|
270
|
+
total: info.total_balance ?? "0"
|
|
271
|
+
}));
|
|
272
|
+
}
|
|
273
|
+
function convertBalance(target, targetRate, amount, from) {
|
|
274
|
+
if (from === target) return amount;
|
|
275
|
+
const fromRate = DEFAULT_RATES[from] ?? 1;
|
|
276
|
+
const usd = from === "USD" ? amount : amount / fromRate;
|
|
277
|
+
return target === "USD" ? usd : usd * targetRate;
|
|
278
|
+
}
|
|
279
|
+
function balanceSymbol(currency) {
|
|
280
|
+
const sym = CURRENCIES[currency];
|
|
281
|
+
return sym ?? currency + " ";
|
|
282
|
+
}
|
|
227
283
|
var CURRENCIES = {
|
|
228
284
|
USD: "$",
|
|
229
285
|
CNY: "\xA5",
|
|
@@ -271,6 +327,11 @@ function TokenCachePanel(props) {
|
|
|
271
327
|
setSectionDist,
|
|
272
328
|
sectionSkills,
|
|
273
329
|
setSectionSkills,
|
|
330
|
+
sectionBalance,
|
|
331
|
+
setSectionBalance,
|
|
332
|
+
balanceRefresh,
|
|
333
|
+
balanceCurrency,
|
|
334
|
+
setBalanceCurrency,
|
|
274
335
|
borderVisible,
|
|
275
336
|
setBorderVisible
|
|
276
337
|
} = props.signals;
|
|
@@ -321,8 +382,83 @@ function TokenCachePanel(props) {
|
|
|
321
382
|
hasSkills: false
|
|
322
383
|
});
|
|
323
384
|
const [refreshTick, setRefreshTick] = createSignal(0);
|
|
385
|
+
const [balanceState, setBalanceState] = createSignal({
|
|
386
|
+
status: "idle",
|
|
387
|
+
data: null,
|
|
388
|
+
lastFetch: 0
|
|
389
|
+
});
|
|
390
|
+
let balanceSeq = 0;
|
|
391
|
+
const pollBalance = async () => {
|
|
392
|
+
const key = props.api.kv.get(`${KV_PREFIX}.ds_key`, "");
|
|
393
|
+
if (!key) {
|
|
394
|
+
setBalanceState({
|
|
395
|
+
status: "idle",
|
|
396
|
+
data: null,
|
|
397
|
+
lastFetch: 0,
|
|
398
|
+
error: void 0,
|
|
399
|
+
key: void 0
|
|
400
|
+
});
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
const now = Date.now();
|
|
404
|
+
const prev = balanceState();
|
|
405
|
+
if (prev.status === "ok" && prev.key === key && now - prev.lastFetch < BALANCE_POLL_MS) return;
|
|
406
|
+
const seq = ++balanceSeq;
|
|
407
|
+
setBalanceState({
|
|
408
|
+
...prev,
|
|
409
|
+
status: "loading",
|
|
410
|
+
error: void 0,
|
|
411
|
+
key
|
|
412
|
+
});
|
|
413
|
+
const controller = new AbortController();
|
|
414
|
+
let timedOut = false;
|
|
415
|
+
const timer = setTimeout(() => {
|
|
416
|
+
timedOut = true;
|
|
417
|
+
controller.abort();
|
|
418
|
+
}, 1e4);
|
|
419
|
+
try {
|
|
420
|
+
const data2 = await fetchDeepSeekBalance(key, controller.signal);
|
|
421
|
+
clearTimeout(timer);
|
|
422
|
+
if (seq !== balanceSeq) return;
|
|
423
|
+
setBalanceState({
|
|
424
|
+
status: "ok",
|
|
425
|
+
data: data2,
|
|
426
|
+
lastFetch: Date.now(),
|
|
427
|
+
error: void 0,
|
|
428
|
+
key
|
|
429
|
+
});
|
|
430
|
+
} catch (err) {
|
|
431
|
+
clearTimeout(timer);
|
|
432
|
+
if (seq !== balanceSeq) return;
|
|
433
|
+
const code = timedOut ? "TIMEOUT" : err instanceof Error ? err.message : "";
|
|
434
|
+
setBalanceState({
|
|
435
|
+
status: "error",
|
|
436
|
+
data: null,
|
|
437
|
+
lastFetch: 0,
|
|
438
|
+
error: code,
|
|
439
|
+
key
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
};
|
|
443
|
+
createEffect(() => {
|
|
444
|
+
void balanceRefresh();
|
|
445
|
+
untrack(() => {
|
|
446
|
+
void pollBalance();
|
|
447
|
+
});
|
|
448
|
+
});
|
|
449
|
+
let lastMainSid = props.sessionId;
|
|
324
450
|
createEffect(() => {
|
|
325
451
|
const sid = props.sessionId;
|
|
452
|
+
if (sid !== lastMainSid) {
|
|
453
|
+
lastMainSid = sid;
|
|
454
|
+
if (props.signals.overrideSessionId()) {
|
|
455
|
+
props.signals.setOverrideSessionId(void 0);
|
|
456
|
+
props.api.kv.set(`${KV_PREFIX}.session`, "");
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
});
|
|
460
|
+
createEffect(() => {
|
|
461
|
+
const sid = props.signals.overrideSessionId() ?? props.sessionId;
|
|
326
462
|
void refreshTick();
|
|
327
463
|
void partVersion();
|
|
328
464
|
const msgs = props.api.state.session.messages(sid);
|
|
@@ -551,10 +687,13 @@ function TokenCachePanel(props) {
|
|
|
551
687
|
const rate = props.api.kv.get(`${KV_PREFIX}.rate`);
|
|
552
688
|
if (typeof sym === "string") setCurrencySymbol(sym);
|
|
553
689
|
if (typeof rate === "number" && rate > 0) setExchangeRate(rate);
|
|
690
|
+
const balCur = props.api.kv.get(`${KV_PREFIX}.balance_currency`);
|
|
691
|
+
if (typeof balCur === "string") setBalanceCurrency(balCur);
|
|
554
692
|
setSectionDetail(Boolean(props.api.kv.get(`${KV_PREFIX}.section.detail`, true)));
|
|
555
693
|
setSectionModel(Boolean(props.api.kv.get(`${KV_PREFIX}.section.model`, true)));
|
|
556
694
|
setSectionDist(Boolean(props.api.kv.get(`${KV_PREFIX}.section.dist`, true)));
|
|
557
695
|
setSectionSkills(Boolean(props.api.kv.get(`${KV_PREFIX}.section.skills`, true)));
|
|
696
|
+
setSectionBalance(Boolean(props.api.kv.get(`${KV_PREFIX}.section.balance`, true)));
|
|
558
697
|
const bv = props.api.kv.get(`${KV_PREFIX}.border`, true);
|
|
559
698
|
setBorderVisible(bv !== false);
|
|
560
699
|
const savedLang = props.api.kv.get(`${KV_PREFIX}.lang`);
|
|
@@ -607,8 +746,10 @@ function TokenCachePanel(props) {
|
|
|
607
746
|
setRefreshTick((v) => v + 1);
|
|
608
747
|
});
|
|
609
748
|
setRefreshTick((v) => v + 1);
|
|
749
|
+
const balanceTimer = setInterval(pollBalance, BALANCE_POLL_MS);
|
|
610
750
|
onCleanup(() => {
|
|
611
751
|
clearTimeout(partTimer);
|
|
752
|
+
clearInterval(balanceTimer);
|
|
612
753
|
unsubPart();
|
|
613
754
|
unsubMsg();
|
|
614
755
|
unsubSession();
|
|
@@ -700,12 +841,11 @@ function TokenCachePanel(props) {
|
|
|
700
841
|
return open();
|
|
701
842
|
},
|
|
702
843
|
get children() {
|
|
703
|
-
var _el$6 = _$createElement("span"), _el$7 = _$createTextNode(`
|
|
844
|
+
var _el$6 = _$createElement("span"), _el$7 = _$createTextNode(` v`);
|
|
704
845
|
_$insertNode(_el$6, _el$7);
|
|
705
|
-
_$
|
|
706
|
-
_$insert(_el$6, PLUGIN_VERSION, _el$8);
|
|
846
|
+
_$insert(_el$6, PLUGIN_VERSION, null);
|
|
707
847
|
_$effect((_$p) => _$setProp(_el$6, "style", {
|
|
708
|
-
fg: pal().muted
|
|
848
|
+
fg: dimColor(pal().muted, 0.75)
|
|
709
849
|
}, _$p));
|
|
710
850
|
return _el$6;
|
|
711
851
|
}
|
|
@@ -721,26 +861,26 @@ function TokenCachePanel(props) {
|
|
|
721
861
|
},
|
|
722
862
|
get children() {
|
|
723
863
|
return [(() => {
|
|
724
|
-
var _el$
|
|
725
|
-
_$insert(_el$
|
|
726
|
-
return _el$
|
|
864
|
+
var _el$8 = _$createElement("span");
|
|
865
|
+
_$insert(_el$8, () => " ".repeat(Math.max(1, panelWidth() - gutter() - HEADER_PREFIX - visualWidth(t().title) - visualWidth(pct() + " " + t().hitFolded + " " + trendLabel(data().trend)))));
|
|
866
|
+
return _el$8;
|
|
727
867
|
})(), (() => {
|
|
728
|
-
var _el$
|
|
729
|
-
_$insertNode(_el$
|
|
730
|
-
_$insert(_el$
|
|
731
|
-
_$insert(_el$
|
|
732
|
-
_$effect((_$p) => _$setProp(_el$
|
|
868
|
+
var _el$9 = _$createElement("span"), _el$0 = _$createTextNode(` `);
|
|
869
|
+
_$insertNode(_el$9, _el$0);
|
|
870
|
+
_$insert(_el$9, pct, _el$0);
|
|
871
|
+
_$insert(_el$9, () => t().hitFolded, null);
|
|
872
|
+
_$effect((_$p) => _$setProp(_el$9, "style", {
|
|
733
873
|
fg: hitColor()
|
|
734
874
|
}, _$p));
|
|
735
|
-
return _el$
|
|
875
|
+
return _el$9;
|
|
736
876
|
})(), (() => {
|
|
737
|
-
var _el$
|
|
738
|
-
_$insertNode(_el$
|
|
739
|
-
_$insert(_el$
|
|
740
|
-
_$effect((_$p) => _$setProp(_el$
|
|
877
|
+
var _el$1 = _$createElement("span"), _el$10 = _$createTextNode(` `);
|
|
878
|
+
_$insertNode(_el$1, _el$10);
|
|
879
|
+
_$insert(_el$1, () => trendLabel(data().trend), null);
|
|
880
|
+
_$effect((_$p) => _$setProp(_el$1, "style", {
|
|
741
881
|
fg: data().trend !== 0 ? data().trend > 0 ? pal().success : pal().error : pal().text
|
|
742
882
|
}, _$p));
|
|
743
|
-
return _el$
|
|
883
|
+
return _el$1;
|
|
744
884
|
})()];
|
|
745
885
|
}
|
|
746
886
|
}), _$createComponent(Show, {
|
|
@@ -749,18 +889,18 @@ function TokenCachePanel(props) {
|
|
|
749
889
|
},
|
|
750
890
|
get children() {
|
|
751
891
|
return [(() => {
|
|
752
|
-
var _el$
|
|
753
|
-
_$insert(_el$
|
|
754
|
-
return _el$
|
|
892
|
+
var _el$11 = _$createElement("span");
|
|
893
|
+
_$insert(_el$11, () => " ".repeat(Math.max(1, panelWidth() - gutter() - HEADER_PREFIX - visualWidth(t().title) - visualWidth(pct() + " " + t().hitFolded))));
|
|
894
|
+
return _el$11;
|
|
755
895
|
})(), (() => {
|
|
756
|
-
var _el$
|
|
757
|
-
_$insertNode(_el$
|
|
758
|
-
_$insert(_el$
|
|
759
|
-
_$insert(_el$
|
|
760
|
-
_$effect((_$p) => _$setProp(_el$
|
|
896
|
+
var _el$12 = _$createElement("span"), _el$13 = _$createTextNode(` `);
|
|
897
|
+
_$insertNode(_el$12, _el$13);
|
|
898
|
+
_$insert(_el$12, pct, _el$13);
|
|
899
|
+
_$insert(_el$12, () => t().hitFolded, null);
|
|
900
|
+
_$effect((_$p) => _$setProp(_el$12, "style", {
|
|
761
901
|
fg: hitColor()
|
|
762
902
|
}, _$p));
|
|
763
|
-
return _el$
|
|
903
|
+
return _el$12;
|
|
764
904
|
})()];
|
|
765
905
|
}
|
|
766
906
|
})];
|
|
@@ -771,67 +911,98 @@ function TokenCachePanel(props) {
|
|
|
771
911
|
return open();
|
|
772
912
|
},
|
|
773
913
|
get children() {
|
|
774
|
-
return _$createComponent(Show, {
|
|
914
|
+
return [_$createComponent(Show, {
|
|
915
|
+
get when() {
|
|
916
|
+
return props.signals.overrideSessionId();
|
|
917
|
+
},
|
|
918
|
+
get children() {
|
|
919
|
+
return (() => {
|
|
920
|
+
const prefix = " \u21B3 " + (langZH() ? "\u5B50\u4EE3\u7406: " : "Sub: ");
|
|
921
|
+
const maxSidW = Math.max(6, panelWidth() - visualWidth(prefix));
|
|
922
|
+
return (() => {
|
|
923
|
+
var _el$64 = _$createElement("text"), _el$65 = _$createElement("span"), _el$66 = _$createElement("span");
|
|
924
|
+
_$insertNode(_el$64, _el$65);
|
|
925
|
+
_$insertNode(_el$64, _el$66);
|
|
926
|
+
_$insert(_el$65, prefix);
|
|
927
|
+
_$insert(_el$66, () => truncateVisual(props.signals.overrideSessionId(), maxSidW));
|
|
928
|
+
_$effect((_p$) => {
|
|
929
|
+
var _v$15 = {
|
|
930
|
+
fg: pal().muted
|
|
931
|
+
}, _v$16 = {
|
|
932
|
+
fg: pal().text
|
|
933
|
+
};
|
|
934
|
+
_v$15 !== _p$.e && (_p$.e = _$setProp(_el$65, "style", _v$15, _p$.e));
|
|
935
|
+
_v$16 !== _p$.t && (_p$.t = _$setProp(_el$66, "style", _v$16, _p$.t));
|
|
936
|
+
return _p$;
|
|
937
|
+
}, {
|
|
938
|
+
e: void 0,
|
|
939
|
+
t: void 0
|
|
940
|
+
});
|
|
941
|
+
return _el$64;
|
|
942
|
+
})();
|
|
943
|
+
})();
|
|
944
|
+
}
|
|
945
|
+
}), _$createComponent(Show, {
|
|
775
946
|
get when() {
|
|
776
947
|
return data().hasData;
|
|
777
948
|
},
|
|
778
949
|
get fallback() {
|
|
779
950
|
return [(() => {
|
|
780
|
-
var _el$
|
|
781
|
-
_$insert(_el$
|
|
782
|
-
_$effect((_$p) => _$setProp(_el$
|
|
783
|
-
return _el$
|
|
951
|
+
var _el$67 = _$createElement("text");
|
|
952
|
+
_$insert(_el$67, sep);
|
|
953
|
+
_$effect((_$p) => _$setProp(_el$67, "fg", pal().muted, _$p));
|
|
954
|
+
return _el$67;
|
|
784
955
|
})(), (() => {
|
|
785
|
-
var _el$
|
|
786
|
-
_$insertNode(_el$
|
|
787
|
-
_$insertNode(_el$
|
|
788
|
-
_$insertNode(_el$
|
|
789
|
-
_$insert(_el$
|
|
956
|
+
var _el$68 = _$createElement("text"), _el$69 = _$createElement("span"), _el$71 = _$createElement("span");
|
|
957
|
+
_$insertNode(_el$68, _el$69);
|
|
958
|
+
_$insertNode(_el$68, _el$71);
|
|
959
|
+
_$insertNode(_el$69, _$createTextNode(`> `));
|
|
960
|
+
_$insert(_el$71, () => t().noData);
|
|
790
961
|
_$effect((_p$) => {
|
|
791
|
-
var _v$
|
|
962
|
+
var _v$17 = {
|
|
792
963
|
fg: pal().muted
|
|
793
|
-
}, _v$
|
|
964
|
+
}, _v$18 = {
|
|
794
965
|
fg: pal().muted
|
|
795
966
|
};
|
|
796
|
-
_v$
|
|
797
|
-
_v$
|
|
967
|
+
_v$17 !== _p$.e && (_p$.e = _$setProp(_el$69, "style", _v$17, _p$.e));
|
|
968
|
+
_v$18 !== _p$.t && (_p$.t = _$setProp(_el$71, "style", _v$18, _p$.t));
|
|
798
969
|
return _p$;
|
|
799
970
|
}, {
|
|
800
971
|
e: void 0,
|
|
801
972
|
t: void 0
|
|
802
973
|
});
|
|
803
|
-
return _el$
|
|
974
|
+
return _el$68;
|
|
804
975
|
})()];
|
|
805
976
|
},
|
|
806
977
|
get children() {
|
|
807
978
|
return [(() => {
|
|
808
|
-
var _el$
|
|
809
|
-
_$insert(_el$
|
|
810
|
-
_$effect((_$p) => _$setProp(_el$
|
|
811
|
-
return _el$
|
|
979
|
+
var _el$14 = _$createElement("text");
|
|
980
|
+
_$insert(_el$14, sep);
|
|
981
|
+
_$effect((_$p) => _$setProp(_el$14, "fg", pal().muted, _$p));
|
|
982
|
+
return _el$14;
|
|
812
983
|
})(), (() => {
|
|
813
|
-
var _el$
|
|
984
|
+
var _el$15 = _$createElement("text"), _el$16 = _$createElement("span"), _el$17 = _$createTextNode(` `), _el$18 = _$createElement("span"), _el$19 = _$createTextNode(`[`), _el$20 = _$createTextNode(`] `), _el$21 = _$createElement("span");
|
|
985
|
+
_$insertNode(_el$15, _el$16);
|
|
986
|
+
_$insertNode(_el$15, _el$18);
|
|
987
|
+
_$insertNode(_el$15, _el$21);
|
|
814
988
|
_$insertNode(_el$16, _el$17);
|
|
815
|
-
_$
|
|
816
|
-
_$insertNode(_el$
|
|
817
|
-
_$insertNode(_el$
|
|
818
|
-
_$insert(_el$
|
|
819
|
-
_$
|
|
820
|
-
_$
|
|
821
|
-
_$insert(_el$19, bar, _el$21);
|
|
822
|
-
_$insert(_el$22, pct);
|
|
823
|
-
_$insert(_el$16, _$createComponent(Show, {
|
|
989
|
+
_$insert(_el$16, () => t().hit, _el$17);
|
|
990
|
+
_$insertNode(_el$18, _el$19);
|
|
991
|
+
_$insertNode(_el$18, _el$20);
|
|
992
|
+
_$insert(_el$18, bar, _el$20);
|
|
993
|
+
_$insert(_el$21, pct);
|
|
994
|
+
_$insert(_el$15, _$createComponent(Show, {
|
|
824
995
|
get when() {
|
|
825
996
|
return data().hasTrendData;
|
|
826
997
|
},
|
|
827
998
|
get children() {
|
|
828
|
-
var _el$
|
|
829
|
-
_$insertNode(_el$
|
|
830
|
-
_$insert(_el$
|
|
831
|
-
_$effect((_$p) => _$setProp(_el$
|
|
999
|
+
var _el$22 = _$createElement("span"), _el$23 = _$createTextNode(` `);
|
|
1000
|
+
_$insertNode(_el$22, _el$23);
|
|
1001
|
+
_$insert(_el$22, () => trendLabel(data().trend), null);
|
|
1002
|
+
_$effect((_$p) => _$setProp(_el$22, "style", {
|
|
832
1003
|
fg: data().trend !== 0 ? data().trend > 0 ? pal().success : pal().error : pal().text
|
|
833
1004
|
}, _$p));
|
|
834
|
-
return _el$
|
|
1005
|
+
return _el$22;
|
|
835
1006
|
}
|
|
836
1007
|
}), null);
|
|
837
1008
|
_$effect((_p$) => {
|
|
@@ -842,40 +1013,40 @@ function TokenCachePanel(props) {
|
|
|
842
1013
|
}, _v$3 = {
|
|
843
1014
|
fg: pal().text
|
|
844
1015
|
};
|
|
845
|
-
_v$ !== _p$.e && (_p$.e = _$setProp(_el$
|
|
846
|
-
_v$2 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
847
|
-
_v$3 !== _p$.a && (_p$.a = _$setProp(_el$
|
|
1016
|
+
_v$ !== _p$.e && (_p$.e = _$setProp(_el$16, "style", _v$, _p$.e));
|
|
1017
|
+
_v$2 !== _p$.t && (_p$.t = _$setProp(_el$18, "style", _v$2, _p$.t));
|
|
1018
|
+
_v$3 !== _p$.a && (_p$.a = _$setProp(_el$21, "style", _v$3, _p$.a));
|
|
848
1019
|
return _p$;
|
|
849
1020
|
}, {
|
|
850
1021
|
e: void 0,
|
|
851
1022
|
t: void 0,
|
|
852
1023
|
a: void 0
|
|
853
1024
|
});
|
|
854
|
-
return _el$
|
|
1025
|
+
return _el$15;
|
|
855
1026
|
})(), (() => {
|
|
856
|
-
var _el$
|
|
857
|
-
_$insert(_el$
|
|
858
|
-
_$effect((_$p) => _$setProp(_el$
|
|
859
|
-
return _el$
|
|
1027
|
+
var _el$24 = _$createElement("text");
|
|
1028
|
+
_$insert(_el$24, () => justify(t().totalHit, (Math.floor(data().sessionHitRate * 10) / 10).toFixed(1) + "%"));
|
|
1029
|
+
_$effect((_$p) => _$setProp(_el$24, "fg", pal().muted, _$p));
|
|
1030
|
+
return _el$24;
|
|
860
1031
|
})(), _$createComponent(Show, {
|
|
861
1032
|
get when() {
|
|
862
1033
|
return sectionDetail();
|
|
863
1034
|
},
|
|
864
1035
|
get children() {
|
|
865
1036
|
return [(() => {
|
|
866
|
-
var _el$
|
|
867
|
-
_$insertNode(_el$
|
|
868
|
-
_$insertNode(_el$
|
|
869
|
-
_$insertNode(_el$
|
|
870
|
-
_$setProp(_el$
|
|
1037
|
+
var _el$25 = _$createElement("text"), _el$26 = _$createElement("span"), _el$27 = _$createElement("span"), _el$28 = _$createElement("b"), _el$29 = _$createElement("span");
|
|
1038
|
+
_$insertNode(_el$25, _el$26);
|
|
1039
|
+
_$insertNode(_el$25, _el$27);
|
|
1040
|
+
_$insertNode(_el$25, _el$29);
|
|
1041
|
+
_$setProp(_el$25, "onMouseUp", () => setDetailOpen((o) => {
|
|
871
1042
|
const n = !o;
|
|
872
1043
|
persistFold("detail", n);
|
|
873
1044
|
return n;
|
|
874
1045
|
}));
|
|
875
|
-
_$insert(_el$
|
|
876
|
-
_$insertNode(_el$
|
|
877
|
-
_$insert(_el$
|
|
878
|
-
_$insert(_el$
|
|
1046
|
+
_$insert(_el$26, () => detailOpen() ? "\u25BC " : "\u25B6 ");
|
|
1047
|
+
_$insertNode(_el$27, _el$28);
|
|
1048
|
+
_$insert(_el$28, () => t().secDetail);
|
|
1049
|
+
_$insert(_el$29, () => sep().slice(visualWidth((detailOpen() ? "\u25BC " : "\u25B6 ") + t().secDetail)));
|
|
879
1050
|
_$effect((_p$) => {
|
|
880
1051
|
var _v$4 = {
|
|
881
1052
|
fg: pal().muted
|
|
@@ -884,16 +1055,16 @@ function TokenCachePanel(props) {
|
|
|
884
1055
|
}, _v$6 = {
|
|
885
1056
|
fg: pal().muted
|
|
886
1057
|
};
|
|
887
|
-
_v$4 !== _p$.e && (_p$.e = _$setProp(_el$
|
|
888
|
-
_v$5 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
889
|
-
_v$6 !== _p$.a && (_p$.a = _$setProp(_el$
|
|
1058
|
+
_v$4 !== _p$.e && (_p$.e = _$setProp(_el$26, "style", _v$4, _p$.e));
|
|
1059
|
+
_v$5 !== _p$.t && (_p$.t = _$setProp(_el$27, "style", _v$5, _p$.t));
|
|
1060
|
+
_v$6 !== _p$.a && (_p$.a = _$setProp(_el$29, "style", _v$6, _p$.a));
|
|
890
1061
|
return _p$;
|
|
891
1062
|
}, {
|
|
892
1063
|
e: void 0,
|
|
893
1064
|
t: void 0,
|
|
894
1065
|
a: void 0
|
|
895
1066
|
});
|
|
896
|
-
return _el$
|
|
1067
|
+
return _el$25;
|
|
897
1068
|
})(), _$createComponent(Show, {
|
|
898
1069
|
get when() {
|
|
899
1070
|
return detailOpen();
|
|
@@ -904,58 +1075,58 @@ function TokenCachePanel(props) {
|
|
|
904
1075
|
return data().read > 0;
|
|
905
1076
|
},
|
|
906
1077
|
get children() {
|
|
907
|
-
var _el$
|
|
908
|
-
_$insert(_el$
|
|
909
|
-
_$effect((_$p) => _$setProp(_el$
|
|
910
|
-
return _el$
|
|
1078
|
+
var _el$30 = _$createElement("text");
|
|
1079
|
+
_$insert(_el$30, () => justify(t().read, fmt(data().read), t().tok));
|
|
1080
|
+
_$effect((_$p) => _$setProp(_el$30, "fg", pal().muted, _$p));
|
|
1081
|
+
return _el$30;
|
|
911
1082
|
}
|
|
912
1083
|
}), _$createComponent(Show, {
|
|
913
1084
|
get when() {
|
|
914
1085
|
return data().write > 0;
|
|
915
1086
|
},
|
|
916
1087
|
get children() {
|
|
917
|
-
var _el$
|
|
918
|
-
_$insert(_el$
|
|
919
|
-
_$effect((_$p) => _$setProp(_el$
|
|
920
|
-
return _el$
|
|
1088
|
+
var _el$31 = _$createElement("text");
|
|
1089
|
+
_$insert(_el$31, () => justify(t().write, fmt(data().write), t().tok));
|
|
1090
|
+
_$effect((_$p) => _$setProp(_el$31, "fg", pal().muted, _$p));
|
|
1091
|
+
return _el$31;
|
|
921
1092
|
}
|
|
922
1093
|
}), (() => {
|
|
1094
|
+
var _el$32 = _$createElement("text");
|
|
1095
|
+
_$insert(_el$32, () => justify(t().miss, fmt(data().freshInput), t().tok));
|
|
1096
|
+
_$effect((_$p) => _$setProp(_el$32, "fg", pal().muted, _$p));
|
|
1097
|
+
return _el$32;
|
|
1098
|
+
})(), (() => {
|
|
923
1099
|
var _el$33 = _$createElement("text");
|
|
924
|
-
_$insert(_el$33, () => justify(t().
|
|
1100
|
+
_$insert(_el$33, () => justify(t().out, fmt(data().output), t().tok));
|
|
925
1101
|
_$effect((_$p) => _$setProp(_el$33, "fg", pal().muted, _$p));
|
|
926
1102
|
return _el$33;
|
|
927
|
-
})(), (() => {
|
|
928
|
-
var _el$34 = _$createElement("text");
|
|
929
|
-
_$insert(_el$34, () => justify(t().out, fmt(data().output), t().tok));
|
|
930
|
-
_$effect((_$p) => _$setProp(_el$34, "fg", pal().muted, _$p));
|
|
931
|
-
return _el$34;
|
|
932
1103
|
})(), _$createComponent(Show, {
|
|
933
1104
|
get when() {
|
|
934
1105
|
return data().saved > 0;
|
|
935
1106
|
},
|
|
936
1107
|
get children() {
|
|
937
|
-
var _el$
|
|
938
|
-
_$insertNode(_el$
|
|
939
|
-
_$insertNode(_el$
|
|
940
|
-
_$insertNode(_el$
|
|
941
|
-
_$insert(_el$
|
|
942
|
-
_$insert(_el$
|
|
943
|
-
_$insertNode(_el$
|
|
944
|
-
_$insert(_el$
|
|
1108
|
+
var _el$34 = _$createElement("text"), _el$35 = _$createElement("span"), _el$36 = _$createElement("span"), _el$37 = _$createElement("span"), _el$38 = _$createTextNode(`~`);
|
|
1109
|
+
_$insertNode(_el$34, _el$35);
|
|
1110
|
+
_$insertNode(_el$34, _el$36);
|
|
1111
|
+
_$insertNode(_el$34, _el$37);
|
|
1112
|
+
_$insert(_el$35, () => t().saved);
|
|
1113
|
+
_$insert(_el$36, () => " ".repeat(Math.max(1, panelWidth() - gutter() - visualWidth(t().saved) - visualWidth("~" + fmtCost(data().saved, currencySymbol(), exchangeRate())))));
|
|
1114
|
+
_$insertNode(_el$37, _el$38);
|
|
1115
|
+
_$insert(_el$37, () => fmtCost(data().saved, currencySymbol(), exchangeRate()), null);
|
|
945
1116
|
_$effect((_p$) => {
|
|
946
1117
|
var _v$7 = {
|
|
947
1118
|
fg: pal().muted
|
|
948
1119
|
}, _v$8 = {
|
|
949
1120
|
fg: pal().success
|
|
950
1121
|
};
|
|
951
|
-
_v$7 !== _p$.e && (_p$.e = _$setProp(_el$
|
|
952
|
-
_v$8 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
1122
|
+
_v$7 !== _p$.e && (_p$.e = _$setProp(_el$35, "style", _v$7, _p$.e));
|
|
1123
|
+
_v$8 !== _p$.t && (_p$.t = _$setProp(_el$37, "style", _v$8, _p$.t));
|
|
953
1124
|
return _p$;
|
|
954
1125
|
}, {
|
|
955
1126
|
e: void 0,
|
|
956
1127
|
t: void 0
|
|
957
1128
|
});
|
|
958
|
-
return _el$
|
|
1129
|
+
return _el$34;
|
|
959
1130
|
}
|
|
960
1131
|
})];
|
|
961
1132
|
}
|
|
@@ -967,91 +1138,91 @@ function TokenCachePanel(props) {
|
|
|
967
1138
|
},
|
|
968
1139
|
get children() {
|
|
969
1140
|
return [_$memo(() => (() => {
|
|
970
|
-
var _el$
|
|
971
|
-
_$insertNode(_el$
|
|
972
|
-
_$insertNode(_el$
|
|
973
|
-
_$insertNode(_el$
|
|
974
|
-
_$setProp(_el$
|
|
1141
|
+
var _el$72 = _$createElement("text"), _el$73 = _$createElement("span"), _el$74 = _$createElement("span"), _el$75 = _$createElement("b"), _el$76 = _$createElement("span");
|
|
1142
|
+
_$insertNode(_el$72, _el$73);
|
|
1143
|
+
_$insertNode(_el$72, _el$74);
|
|
1144
|
+
_$insertNode(_el$72, _el$76);
|
|
1145
|
+
_$setProp(_el$72, "onMouseUp", () => setModelOpen((o) => {
|
|
975
1146
|
const n = !o;
|
|
976
1147
|
persistFold("model", n);
|
|
977
1148
|
return n;
|
|
978
1149
|
}));
|
|
979
|
-
_$insert(_el$
|
|
980
|
-
_$insertNode(_el$
|
|
981
|
-
_$insert(_el$
|
|
982
|
-
_$insert(_el$
|
|
1150
|
+
_$insert(_el$73, () => modelOpen() ? "\u25BC " : "\u25B6 ");
|
|
1151
|
+
_$insertNode(_el$74, _el$75);
|
|
1152
|
+
_$insert(_el$75, () => t().secModel);
|
|
1153
|
+
_$insert(_el$76, () => sep().slice(visualWidth((modelOpen() ? "\u25BC " : "\u25B6 ") + t().secModel)));
|
|
983
1154
|
_$effect((_p$) => {
|
|
984
|
-
var _v$
|
|
1155
|
+
var _v$19 = {
|
|
985
1156
|
fg: pal().muted
|
|
986
|
-
}, _v$
|
|
1157
|
+
}, _v$20 = {
|
|
987
1158
|
fg: pal().primary
|
|
988
|
-
}, _v$
|
|
1159
|
+
}, _v$21 = {
|
|
989
1160
|
fg: pal().muted
|
|
990
1161
|
};
|
|
991
|
-
_v$
|
|
992
|
-
_v$
|
|
993
|
-
_v$
|
|
1162
|
+
_v$19 !== _p$.e && (_p$.e = _$setProp(_el$73, "style", _v$19, _p$.e));
|
|
1163
|
+
_v$20 !== _p$.t && (_p$.t = _$setProp(_el$74, "style", _v$20, _p$.t));
|
|
1164
|
+
_v$21 !== _p$.a && (_p$.a = _$setProp(_el$76, "style", _v$21, _p$.a));
|
|
994
1165
|
return _p$;
|
|
995
1166
|
}, {
|
|
996
1167
|
e: void 0,
|
|
997
1168
|
t: void 0,
|
|
998
1169
|
a: void 0
|
|
999
1170
|
});
|
|
1000
|
-
return _el$
|
|
1171
|
+
return _el$72;
|
|
1001
1172
|
})()), _$createComponent(Show, {
|
|
1002
1173
|
get when() {
|
|
1003
1174
|
return modelOpen();
|
|
1004
1175
|
},
|
|
1005
1176
|
get children() {
|
|
1006
1177
|
return [(() => {
|
|
1007
|
-
var _el$
|
|
1008
|
-
_$insert(_el$
|
|
1009
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1010
|
-
return _el$
|
|
1178
|
+
var _el$39 = _$createElement("text");
|
|
1179
|
+
_$insert(_el$39, () => justify(t().cost, fmtCost(data().cost, currencySymbol(), exchangeRate())));
|
|
1180
|
+
_$effect((_$p) => _$setProp(_el$39, "fg", pal().text, _$p));
|
|
1181
|
+
return _el$39;
|
|
1011
1182
|
})(), _$createComponent(Show, {
|
|
1012
1183
|
get when() {
|
|
1013
1184
|
return data().providerName;
|
|
1014
1185
|
},
|
|
1015
1186
|
get children() {
|
|
1016
|
-
var _el$
|
|
1017
|
-
_$insert(_el$
|
|
1018
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1019
|
-
return _el$
|
|
1187
|
+
var _el$40 = _$createElement("text");
|
|
1188
|
+
_$insert(_el$40, () => justify(t().provider, data().providerName));
|
|
1189
|
+
_$effect((_$p) => _$setProp(_el$40, "fg", pal().muted, _$p));
|
|
1190
|
+
return _el$40;
|
|
1020
1191
|
}
|
|
1021
1192
|
}), (() => {
|
|
1022
|
-
var _el$
|
|
1023
|
-
_$insert(_el$
|
|
1024
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1025
|
-
return _el$
|
|
1193
|
+
var _el$41 = _$createElement("text");
|
|
1194
|
+
_$insert(_el$41, () => justify(t().model, data().model));
|
|
1195
|
+
_$effect((_$p) => _$setProp(_el$41, "fg", pal().muted, _$p));
|
|
1196
|
+
return _el$41;
|
|
1026
1197
|
})(), _$createComponent(Show, {
|
|
1027
1198
|
get when() {
|
|
1028
1199
|
return data().hasPricing;
|
|
1029
1200
|
},
|
|
1030
1201
|
get children() {
|
|
1031
1202
|
return [(() => {
|
|
1032
|
-
var _el$
|
|
1033
|
-
_$insert(_el$
|
|
1034
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1035
|
-
return _el$
|
|
1203
|
+
var _el$42 = _$createElement("text");
|
|
1204
|
+
_$insert(_el$42, () => justify(t().rate, currencySymbol() + (data().inputRate * exchangeRate()).toFixed(2) + "/M " + t().inputRate));
|
|
1205
|
+
_$effect((_$p) => _$setProp(_el$42, "fg", pal().muted, _$p));
|
|
1206
|
+
return _el$42;
|
|
1036
1207
|
})(), _$createComponent(Show, {
|
|
1037
1208
|
get when() {
|
|
1038
1209
|
return data().cacheReadRate > 0;
|
|
1039
1210
|
},
|
|
1040
1211
|
get children() {
|
|
1041
|
-
var _el$
|
|
1042
|
-
_$insert(_el$
|
|
1043
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1044
|
-
return _el$
|
|
1212
|
+
var _el$43 = _$createElement("text");
|
|
1213
|
+
_$insert(_el$43, () => justify("", currencySymbol() + (data().cacheReadRate * exchangeRate()).toFixed(2) + "/M " + t().cacheRate));
|
|
1214
|
+
_$effect((_$p) => _$setProp(_el$43, "fg", pal().muted, _$p));
|
|
1215
|
+
return _el$43;
|
|
1045
1216
|
}
|
|
1046
1217
|
}), _$createComponent(Show, {
|
|
1047
1218
|
get when() {
|
|
1048
1219
|
return data().cacheWriteRate > 0;
|
|
1049
1220
|
},
|
|
1050
1221
|
get children() {
|
|
1051
|
-
var _el$
|
|
1052
|
-
_$insert(_el$
|
|
1053
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1054
|
-
return _el$
|
|
1222
|
+
var _el$44 = _$createElement("text");
|
|
1223
|
+
_$insert(_el$44, () => justify("", currencySymbol() + (data().cacheWriteRate * exchangeRate()).toFixed(2) + "/M " + t().writeRate));
|
|
1224
|
+
_$effect((_$p) => _$setProp(_el$44, "fg", pal().muted, _$p));
|
|
1225
|
+
return _el$44;
|
|
1055
1226
|
}
|
|
1056
1227
|
})];
|
|
1057
1228
|
}
|
|
@@ -1070,37 +1241,37 @@ function TokenCachePanel(props) {
|
|
|
1070
1241
|
},
|
|
1071
1242
|
get children() {
|
|
1072
1243
|
return [_$memo(() => (() => {
|
|
1073
|
-
var _el$
|
|
1074
|
-
_$insertNode(_el$
|
|
1075
|
-
_$insertNode(_el$
|
|
1076
|
-
_$insertNode(_el$
|
|
1077
|
-
_$setProp(_el$
|
|
1244
|
+
var _el$77 = _$createElement("text"), _el$78 = _$createElement("span"), _el$79 = _$createElement("span"), _el$80 = _$createElement("b"), _el$81 = _$createElement("span");
|
|
1245
|
+
_$insertNode(_el$77, _el$78);
|
|
1246
|
+
_$insertNode(_el$77, _el$79);
|
|
1247
|
+
_$insertNode(_el$77, _el$81);
|
|
1248
|
+
_$setProp(_el$77, "onMouseUp", () => setDistOpen((o) => {
|
|
1078
1249
|
const n = !o;
|
|
1079
1250
|
persistFold("dist", n);
|
|
1080
1251
|
return n;
|
|
1081
1252
|
}));
|
|
1082
|
-
_$insert(_el$
|
|
1083
|
-
_$insertNode(_el$
|
|
1084
|
-
_$insert(_el$
|
|
1085
|
-
_$insert(_el$
|
|
1253
|
+
_$insert(_el$78, () => distOpen() ? "\u25BC " : "\u25B6 ");
|
|
1254
|
+
_$insertNode(_el$79, _el$80);
|
|
1255
|
+
_$insert(_el$80, () => t().distTitle);
|
|
1256
|
+
_$insert(_el$81, () => sep().slice(visualWidth((distOpen() ? "\u25BC " : "\u25B6 ") + t().distTitle)));
|
|
1086
1257
|
_$effect((_p$) => {
|
|
1087
|
-
var _v$
|
|
1258
|
+
var _v$22 = {
|
|
1088
1259
|
fg: pal().muted
|
|
1089
|
-
}, _v$
|
|
1260
|
+
}, _v$23 = {
|
|
1090
1261
|
fg: pal().primary
|
|
1091
|
-
}, _v$
|
|
1262
|
+
}, _v$24 = {
|
|
1092
1263
|
fg: pal().muted
|
|
1093
1264
|
};
|
|
1094
|
-
_v$
|
|
1095
|
-
_v$
|
|
1096
|
-
_v$
|
|
1265
|
+
_v$22 !== _p$.e && (_p$.e = _$setProp(_el$78, "style", _v$22, _p$.e));
|
|
1266
|
+
_v$23 !== _p$.t && (_p$.t = _$setProp(_el$79, "style", _v$23, _p$.t));
|
|
1267
|
+
_v$24 !== _p$.a && (_p$.a = _$setProp(_el$81, "style", _v$24, _p$.a));
|
|
1097
1268
|
return _p$;
|
|
1098
1269
|
}, {
|
|
1099
1270
|
e: void 0,
|
|
1100
1271
|
t: void 0,
|
|
1101
1272
|
a: void 0
|
|
1102
1273
|
});
|
|
1103
|
-
return _el$
|
|
1274
|
+
return _el$77;
|
|
1104
1275
|
})()), _$createComponent(Show, {
|
|
1105
1276
|
get when() {
|
|
1106
1277
|
return distOpen();
|
|
@@ -1110,57 +1281,57 @@ function TokenCachePanel(props) {
|
|
|
1110
1281
|
get when() {
|
|
1111
1282
|
return data().dist.system > 0;
|
|
1112
1283
|
},
|
|
1284
|
+
get children() {
|
|
1285
|
+
var _el$45 = _$createElement("text");
|
|
1286
|
+
_$insert(_el$45, () => justify(t().distSys, fmt(data().dist.system), t().tok));
|
|
1287
|
+
_$effect((_$p) => _$setProp(_el$45, "fg", pal().muted, _$p));
|
|
1288
|
+
return _el$45;
|
|
1289
|
+
}
|
|
1290
|
+
}), _$createComponent(Show, {
|
|
1291
|
+
get when() {
|
|
1292
|
+
return data().dist.user > 0;
|
|
1293
|
+
},
|
|
1113
1294
|
get children() {
|
|
1114
1295
|
var _el$46 = _$createElement("text");
|
|
1115
|
-
_$insert(_el$46, () => justify(t().
|
|
1296
|
+
_$insert(_el$46, () => justify(t().distUser, fmt(data().dist.user), t().tok));
|
|
1116
1297
|
_$effect((_$p) => _$setProp(_el$46, "fg", pal().muted, _$p));
|
|
1117
1298
|
return _el$46;
|
|
1118
1299
|
}
|
|
1119
1300
|
}), _$createComponent(Show, {
|
|
1120
1301
|
get when() {
|
|
1121
|
-
return data().dist.
|
|
1302
|
+
return data().dist.agent > 0;
|
|
1122
1303
|
},
|
|
1123
1304
|
get children() {
|
|
1124
1305
|
var _el$47 = _$createElement("text");
|
|
1125
|
-
_$insert(_el$47, () => justify(t().
|
|
1306
|
+
_$insert(_el$47, () => justify(t().distAgent, fmt(data().dist.agent), t().tok));
|
|
1126
1307
|
_$effect((_$p) => _$setProp(_el$47, "fg", pal().muted, _$p));
|
|
1127
1308
|
return _el$47;
|
|
1128
1309
|
}
|
|
1129
1310
|
}), _$createComponent(Show, {
|
|
1130
1311
|
get when() {
|
|
1131
|
-
return data().dist.
|
|
1312
|
+
return data().dist.toolCall > 0;
|
|
1132
1313
|
},
|
|
1133
1314
|
get children() {
|
|
1134
1315
|
var _el$48 = _$createElement("text");
|
|
1135
|
-
_$insert(_el$48, () => justify(t().
|
|
1316
|
+
_$insert(_el$48, () => justify(t().distTool, fmt(data().dist.toolCall), t().tok));
|
|
1136
1317
|
_$effect((_$p) => _$setProp(_el$48, "fg", pal().muted, _$p));
|
|
1137
1318
|
return _el$48;
|
|
1138
1319
|
}
|
|
1139
1320
|
}), _$createComponent(Show, {
|
|
1140
1321
|
get when() {
|
|
1141
|
-
return data().dist.
|
|
1322
|
+
return data().dist.toolResult > 0;
|
|
1142
1323
|
},
|
|
1143
1324
|
get children() {
|
|
1144
1325
|
var _el$49 = _$createElement("text");
|
|
1145
|
-
_$insert(_el$49, () => justify(t().
|
|
1326
|
+
_$insert(_el$49, () => justify(t().distRes, fmt(data().dist.toolResult), t().tok));
|
|
1146
1327
|
_$effect((_$p) => _$setProp(_el$49, "fg", pal().muted, _$p));
|
|
1147
1328
|
return _el$49;
|
|
1148
1329
|
}
|
|
1149
|
-
}), _$createComponent(Show, {
|
|
1150
|
-
get when() {
|
|
1151
|
-
return data().dist.toolResult > 0;
|
|
1152
|
-
},
|
|
1153
|
-
get children() {
|
|
1154
|
-
var _el$50 = _$createElement("text");
|
|
1155
|
-
_$insert(_el$50, () => justify(t().distRes, fmt(data().dist.toolResult), t().tok));
|
|
1156
|
-
_$effect((_$p) => _$setProp(_el$50, "fg", pal().muted, _$p));
|
|
1157
|
-
return _el$50;
|
|
1158
|
-
}
|
|
1159
1330
|
}), (() => {
|
|
1160
|
-
var _el$
|
|
1161
|
-
_$insert(_el$
|
|
1162
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1163
|
-
return _el$
|
|
1331
|
+
var _el$50 = _$createElement("text");
|
|
1332
|
+
_$insert(_el$50, () => justify(t().distTotal, fmt(data().dist.apiInput), t().tok));
|
|
1333
|
+
_$effect((_$p) => _$setProp(_el$50, "fg", pal().text, _$p));
|
|
1334
|
+
return _el$50;
|
|
1164
1335
|
})()];
|
|
1165
1336
|
}
|
|
1166
1337
|
})];
|
|
@@ -1178,37 +1349,37 @@ function TokenCachePanel(props) {
|
|
|
1178
1349
|
},
|
|
1179
1350
|
get children() {
|
|
1180
1351
|
return [_$memo(() => (() => {
|
|
1181
|
-
var _el$
|
|
1182
|
-
_$insertNode(_el$
|
|
1183
|
-
_$insertNode(_el$
|
|
1184
|
-
_$insertNode(_el$
|
|
1185
|
-
_$insertNode(_el$
|
|
1186
|
-
_$setProp(_el$
|
|
1352
|
+
var _el$82 = _$createElement("text"), _el$83 = _$createElement("span"), _el$84 = _$createElement("span"), _el$85 = _$createElement("b"), _el$86 = _$createElement("span"), _el$87 = _$createTextNode(` (`), _el$88 = _$createTextNode(`)`), _el$89 = _$createElement("span");
|
|
1353
|
+
_$insertNode(_el$82, _el$83);
|
|
1354
|
+
_$insertNode(_el$82, _el$84);
|
|
1355
|
+
_$insertNode(_el$82, _el$86);
|
|
1356
|
+
_$insertNode(_el$82, _el$89);
|
|
1357
|
+
_$setProp(_el$82, "onMouseUp", () => setSkillsOpen((o) => {
|
|
1187
1358
|
const n = !o;
|
|
1188
1359
|
persistFold("skills", n);
|
|
1189
1360
|
return n;
|
|
1190
1361
|
}));
|
|
1191
|
-
_$insert(_el$
|
|
1192
|
-
_$insertNode(_el$
|
|
1193
|
-
_$insert(_el$
|
|
1194
|
-
_$insertNode(_el$
|
|
1195
|
-
_$insertNode(_el$
|
|
1196
|
-
_$insert(_el$
|
|
1197
|
-
_$insert(_el$
|
|
1362
|
+
_$insert(_el$83, () => skillsOpen() ? "\u25BC " : "\u25B6 ");
|
|
1363
|
+
_$insertNode(_el$84, _el$85);
|
|
1364
|
+
_$insert(_el$85, () => t().secSkills);
|
|
1365
|
+
_$insertNode(_el$86, _el$87);
|
|
1366
|
+
_$insertNode(_el$86, _el$88);
|
|
1367
|
+
_$insert(_el$86, () => data().skills.length, _el$88);
|
|
1368
|
+
_$insert(_el$89, () => sep().slice(visualWidth((skillsOpen() ? "\u25BC " : "\u25B6 ") + t().secSkills + ` (${data().skills.length})`)));
|
|
1198
1369
|
_$effect((_p$) => {
|
|
1199
|
-
var _v$
|
|
1370
|
+
var _v$25 = {
|
|
1200
1371
|
fg: pal().muted
|
|
1201
|
-
}, _v$
|
|
1372
|
+
}, _v$26 = {
|
|
1202
1373
|
fg: pal().primary
|
|
1203
|
-
}, _v$
|
|
1374
|
+
}, _v$27 = {
|
|
1204
1375
|
fg: pal().muted
|
|
1205
|
-
}, _v$
|
|
1376
|
+
}, _v$28 = {
|
|
1206
1377
|
fg: pal().muted
|
|
1207
1378
|
};
|
|
1208
|
-
_v$
|
|
1209
|
-
_v$
|
|
1210
|
-
_v$
|
|
1211
|
-
_v$
|
|
1379
|
+
_v$25 !== _p$.e && (_p$.e = _$setProp(_el$83, "style", _v$25, _p$.e));
|
|
1380
|
+
_v$26 !== _p$.t && (_p$.t = _$setProp(_el$84, "style", _v$26, _p$.t));
|
|
1381
|
+
_v$27 !== _p$.a && (_p$.a = _$setProp(_el$86, "style", _v$27, _p$.a));
|
|
1382
|
+
_v$28 !== _p$.o && (_p$.o = _$setProp(_el$89, "style", _v$28, _p$.o));
|
|
1212
1383
|
return _p$;
|
|
1213
1384
|
}, {
|
|
1214
1385
|
e: void 0,
|
|
@@ -1216,7 +1387,7 @@ function TokenCachePanel(props) {
|
|
|
1216
1387
|
a: void 0,
|
|
1217
1388
|
o: void 0
|
|
1218
1389
|
});
|
|
1219
|
-
return _el$
|
|
1390
|
+
return _el$82;
|
|
1220
1391
|
})()), _$createComponent(Show, {
|
|
1221
1392
|
get when() {
|
|
1222
1393
|
return skillsOpen();
|
|
@@ -1227,10 +1398,10 @@ function TokenCachePanel(props) {
|
|
|
1227
1398
|
const maxLabel = Math.max(4, panelWidth() - gutter() - rightW - 1);
|
|
1228
1399
|
const label = truncateVisual(sk.name, maxLabel);
|
|
1229
1400
|
return (() => {
|
|
1230
|
-
var _el$
|
|
1231
|
-
_$insert(_el$
|
|
1232
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1233
|
-
return _el$
|
|
1401
|
+
var _el$90 = _$createElement("text");
|
|
1402
|
+
_$insert(_el$90, () => justify(label, fmt(sk.tokens), t().tok));
|
|
1403
|
+
_$effect((_$p) => _$setProp(_el$90, "fg", pal().muted, _$p));
|
|
1404
|
+
return _el$90;
|
|
1234
1405
|
})();
|
|
1235
1406
|
});
|
|
1236
1407
|
}
|
|
@@ -1238,19 +1409,138 @@ function TokenCachePanel(props) {
|
|
|
1238
1409
|
}
|
|
1239
1410
|
});
|
|
1240
1411
|
}
|
|
1412
|
+
}), _$createComponent(Show, {
|
|
1413
|
+
get when() {
|
|
1414
|
+
return sectionBalance();
|
|
1415
|
+
},
|
|
1416
|
+
get children() {
|
|
1417
|
+
return [(() => {
|
|
1418
|
+
var _el$51 = _$createElement("text");
|
|
1419
|
+
_$insert(_el$51, sep);
|
|
1420
|
+
_$effect((_$p) => _$setProp(_el$51, "fg", pal().muted, _$p));
|
|
1421
|
+
return _el$51;
|
|
1422
|
+
})(), _$createComponent(Show, {
|
|
1423
|
+
get when() {
|
|
1424
|
+
return balanceState().status === "idle";
|
|
1425
|
+
},
|
|
1426
|
+
get children() {
|
|
1427
|
+
var _el$52 = _$createElement("text"), _el$53 = _$createElement("span"), _el$55 = _$createElement("span");
|
|
1428
|
+
_$insertNode(_el$52, _el$53);
|
|
1429
|
+
_$insertNode(_el$52, _el$55);
|
|
1430
|
+
_$insertNode(_el$53, _$createTextNode(`> `));
|
|
1431
|
+
_$insert(_el$55, () => t().balNoKey);
|
|
1432
|
+
_$effect((_p$) => {
|
|
1433
|
+
var _v$9 = pal().muted, _v$0 = {
|
|
1434
|
+
fg: pal().muted
|
|
1435
|
+
};
|
|
1436
|
+
_v$9 !== _p$.e && (_p$.e = _$setProp(_el$52, "fg", _v$9, _p$.e));
|
|
1437
|
+
_v$0 !== _p$.t && (_p$.t = _$setProp(_el$53, "style", _v$0, _p$.t));
|
|
1438
|
+
return _p$;
|
|
1439
|
+
}, {
|
|
1440
|
+
e: void 0,
|
|
1441
|
+
t: void 0
|
|
1442
|
+
});
|
|
1443
|
+
return _el$52;
|
|
1444
|
+
}
|
|
1445
|
+
}), _$createComponent(Show, {
|
|
1446
|
+
get when() {
|
|
1447
|
+
return balanceState().status === "loading";
|
|
1448
|
+
},
|
|
1449
|
+
get children() {
|
|
1450
|
+
var _el$56 = _$createElement("text"), _el$57 = _$createElement("span"), _el$59 = _$createElement("span");
|
|
1451
|
+
_$insertNode(_el$56, _el$57);
|
|
1452
|
+
_$insertNode(_el$56, _el$59);
|
|
1453
|
+
_$insertNode(_el$57, _$createTextNode(`> `));
|
|
1454
|
+
_$insert(_el$59, () => t().balLoading);
|
|
1455
|
+
_$effect((_p$) => {
|
|
1456
|
+
var _v$1 = pal().muted, _v$10 = {
|
|
1457
|
+
fg: pal().muted
|
|
1458
|
+
};
|
|
1459
|
+
_v$1 !== _p$.e && (_p$.e = _$setProp(_el$56, "fg", _v$1, _p$.e));
|
|
1460
|
+
_v$10 !== _p$.t && (_p$.t = _$setProp(_el$57, "style", _v$10, _p$.t));
|
|
1461
|
+
return _p$;
|
|
1462
|
+
}, {
|
|
1463
|
+
e: void 0,
|
|
1464
|
+
t: void 0
|
|
1465
|
+
});
|
|
1466
|
+
return _el$56;
|
|
1467
|
+
}
|
|
1468
|
+
}), _$createComponent(Show, {
|
|
1469
|
+
get when() {
|
|
1470
|
+
return balanceState().status === "error";
|
|
1471
|
+
},
|
|
1472
|
+
get children() {
|
|
1473
|
+
var _el$60 = _$createElement("text"), _el$61 = _$createElement("span"), _el$63 = _$createElement("span");
|
|
1474
|
+
_$insertNode(_el$60, _el$61);
|
|
1475
|
+
_$insertNode(_el$60, _el$63);
|
|
1476
|
+
_$insertNode(_el$61, _$createTextNode(`> `));
|
|
1477
|
+
_$insert(_el$63, () => {
|
|
1478
|
+
const code = balanceState().error;
|
|
1479
|
+
if (code === "401") return t().balErr401;
|
|
1480
|
+
if (code === "403") return t().balErr403;
|
|
1481
|
+
if (code === "EMPTY") return t().balErrEmpty;
|
|
1482
|
+
if (code === "TIMEOUT") return t().balErrTimeout;
|
|
1483
|
+
return t().balError + (code ? ` (${code})` : "");
|
|
1484
|
+
});
|
|
1485
|
+
_$effect((_p$) => {
|
|
1486
|
+
var _v$11 = pal().error, _v$12 = {
|
|
1487
|
+
fg: pal().muted
|
|
1488
|
+
};
|
|
1489
|
+
_v$11 !== _p$.e && (_p$.e = _$setProp(_el$60, "fg", _v$11, _p$.e));
|
|
1490
|
+
_v$12 !== _p$.t && (_p$.t = _$setProp(_el$61, "style", _v$12, _p$.t));
|
|
1491
|
+
return _p$;
|
|
1492
|
+
}, {
|
|
1493
|
+
e: void 0,
|
|
1494
|
+
t: void 0
|
|
1495
|
+
});
|
|
1496
|
+
return _el$60;
|
|
1497
|
+
}
|
|
1498
|
+
}), _$createComponent(Show, {
|
|
1499
|
+
get when() {
|
|
1500
|
+
return _$memo(() => balanceState().status === "ok")() && balanceState().data;
|
|
1501
|
+
},
|
|
1502
|
+
get children() {
|
|
1503
|
+
return (() => {
|
|
1504
|
+
const list = balanceState().data;
|
|
1505
|
+
const pref = balanceCurrency();
|
|
1506
|
+
const native = pref ? list.find((x) => x.currency === pref) : void 0;
|
|
1507
|
+
if (native) {
|
|
1508
|
+
return (() => {
|
|
1509
|
+
var _el$91 = _$createElement("text");
|
|
1510
|
+
_$insert(_el$91, () => justify(t().balTotal, balanceSymbol(native.currency) + native.total));
|
|
1511
|
+
_$effect((_$p) => _$setProp(_el$91, "fg", pal().text, _$p));
|
|
1512
|
+
return _el$91;
|
|
1513
|
+
})();
|
|
1514
|
+
}
|
|
1515
|
+
const base = list[0];
|
|
1516
|
+
const baseAmt = parseFloat(base.total);
|
|
1517
|
+
const converted = Number.isFinite(baseAmt) ? convertBalance(pref || base.currency, exchangeRate(), baseAmt, base.currency) : baseAmt;
|
|
1518
|
+
const shown = pref && base.currency !== pref ? converted.toLocaleString("en-US", {
|
|
1519
|
+
maximumFractionDigits: 2
|
|
1520
|
+
}) : base.total;
|
|
1521
|
+
return (() => {
|
|
1522
|
+
var _el$92 = _$createElement("text");
|
|
1523
|
+
_$insert(_el$92, () => justify(t().balTotal, balanceSymbol(pref || base.currency) + shown));
|
|
1524
|
+
_$effect((_$p) => _$setProp(_el$92, "fg", pal().text, _$p));
|
|
1525
|
+
return _el$92;
|
|
1526
|
+
})();
|
|
1527
|
+
})();
|
|
1528
|
+
}
|
|
1529
|
+
})];
|
|
1530
|
+
}
|
|
1241
1531
|
})];
|
|
1242
1532
|
}
|
|
1243
|
-
});
|
|
1533
|
+
})];
|
|
1244
1534
|
}
|
|
1245
1535
|
}), null);
|
|
1246
1536
|
_$effect((_p$) => {
|
|
1247
|
-
var _v$
|
|
1537
|
+
var _v$13 = {
|
|
1248
1538
|
fg: pal().muted
|
|
1249
|
-
}, _v$
|
|
1539
|
+
}, _v$14 = {
|
|
1250
1540
|
fg: pal().primary
|
|
1251
1541
|
};
|
|
1252
|
-
_v$
|
|
1253
|
-
_v$
|
|
1542
|
+
_v$13 !== _p$.e && (_p$.e = _$setProp(_el$3, "style", _v$13, _p$.e));
|
|
1543
|
+
_v$14 !== _p$.t && (_p$.t = _$setProp(_el$4, "style", _v$14, _p$.t));
|
|
1254
1544
|
return _p$;
|
|
1255
1545
|
}, {
|
|
1256
1546
|
e: void 0,
|
|
@@ -1260,10 +1550,18 @@ function TokenCachePanel(props) {
|
|
|
1260
1550
|
})();
|
|
1261
1551
|
}
|
|
1262
1552
|
function createSidebarSlot(api, signals) {
|
|
1553
|
+
let lastSlotSid = "";
|
|
1263
1554
|
return {
|
|
1264
1555
|
order: 55,
|
|
1265
1556
|
slots: {
|
|
1266
1557
|
sidebar_content(ctx, input) {
|
|
1558
|
+
if (input.session_id !== lastSlotSid) {
|
|
1559
|
+
lastSlotSid = input.session_id;
|
|
1560
|
+
if (signals.overrideSessionId()) {
|
|
1561
|
+
signals.setOverrideSessionId(void 0);
|
|
1562
|
+
api.kv.set("cache_panel.session", "");
|
|
1563
|
+
}
|
|
1564
|
+
}
|
|
1267
1565
|
return _$createComponent(TokenCachePanel, {
|
|
1268
1566
|
get theme() {
|
|
1269
1567
|
return ctx.theme.current;
|
|
@@ -1285,8 +1583,12 @@ var tui = async (api) => {
|
|
|
1285
1583
|
const [sectionModel, setSectionModel] = createSignal(true);
|
|
1286
1584
|
const [sectionDist, setSectionDist] = createSignal(true);
|
|
1287
1585
|
const [sectionSkills, setSectionSkills] = createSignal(true);
|
|
1586
|
+
const [sectionBalance, setSectionBalance] = createSignal(true);
|
|
1587
|
+
const [balanceRefresh, setBalanceRefresh] = createSignal(0);
|
|
1588
|
+
const [balanceCurrency, setBalanceCurrency] = createSignal("");
|
|
1288
1589
|
const [borderVisible, setBorderVisible] = createSignal(true);
|
|
1289
1590
|
const [langZH, setLangZH] = createSignal(LANG_ZH);
|
|
1591
|
+
const [overrideSessionId, setOverrideSessionId] = createSignal(void 0);
|
|
1290
1592
|
const signals = {
|
|
1291
1593
|
currencySymbol,
|
|
1292
1594
|
setCurrencySymbol,
|
|
@@ -1302,8 +1604,16 @@ var tui = async (api) => {
|
|
|
1302
1604
|
setSectionDist,
|
|
1303
1605
|
sectionSkills,
|
|
1304
1606
|
setSectionSkills,
|
|
1607
|
+
sectionBalance,
|
|
1608
|
+
setSectionBalance,
|
|
1609
|
+
balanceRefresh,
|
|
1610
|
+
setBalanceRefresh,
|
|
1611
|
+
balanceCurrency,
|
|
1612
|
+
setBalanceCurrency,
|
|
1305
1613
|
borderVisible,
|
|
1306
|
-
setBorderVisible
|
|
1614
|
+
setBorderVisible,
|
|
1615
|
+
overrideSessionId,
|
|
1616
|
+
setOverrideSessionId
|
|
1307
1617
|
};
|
|
1308
1618
|
api.slots.register(createSidebarSlot(api, signals));
|
|
1309
1619
|
const KV_PREFIX = "cache_panel";
|
|
@@ -1328,6 +1638,8 @@ var tui = async (api) => {
|
|
|
1328
1638
|
const defRate = DEFAULT_RATES[opt.value] ?? 1;
|
|
1329
1639
|
api.kv.set(`${KV_PREFIX}.currency`, sym);
|
|
1330
1640
|
api.kv.set(`${KV_PREFIX}.rate`, defRate);
|
|
1641
|
+
api.kv.set(`${KV_PREFIX}.balance_currency`, opt.value);
|
|
1642
|
+
signals.setBalanceCurrency(opt.value);
|
|
1331
1643
|
signals.setCurrencySymbol(sym);
|
|
1332
1644
|
signals.setExchangeRate(defRate);
|
|
1333
1645
|
api.ui.toast({
|
|
@@ -1348,9 +1660,9 @@ var tui = async (api) => {
|
|
|
1348
1660
|
dialog?.replace(() => _$createComponent(api.ui.DialogPrompt, {
|
|
1349
1661
|
title: "Exchange Rate",
|
|
1350
1662
|
description: () => (() => {
|
|
1351
|
-
var _el$
|
|
1352
|
-
_$insertNode(_el$
|
|
1353
|
-
return _el$
|
|
1663
|
+
var _el$93 = _$createElement("text");
|
|
1664
|
+
_$insertNode(_el$93, _$createTextNode(`Enter the exchange rate from USD to your currency (e.g. 7.2 for CNY)`));
|
|
1665
|
+
return _el$93;
|
|
1354
1666
|
})(),
|
|
1355
1667
|
placeholder: "1.0",
|
|
1356
1668
|
get value() {
|
|
@@ -1381,6 +1693,7 @@ var tui = async (api) => {
|
|
|
1381
1693
|
const modelOn = Boolean(api.kv.get(`${KV_PREFIX}.section.model`, true));
|
|
1382
1694
|
const distOn = Boolean(api.kv.get(`${KV_PREFIX}.section.dist`, true));
|
|
1383
1695
|
const skillsOn = Boolean(api.kv.get(`${KV_PREFIX}.section.skills`, true));
|
|
1696
|
+
const balanceOn = Boolean(api.kv.get(`${KV_PREFIX}.section.balance`, true));
|
|
1384
1697
|
const borderOn = Boolean(api.kv.get(`${KV_PREFIX}.border`, true));
|
|
1385
1698
|
dialog?.replace(() => _$createComponent(api.ui.DialogSelect, {
|
|
1386
1699
|
title: "Toggle Section",
|
|
@@ -1396,6 +1709,9 @@ var tui = async (api) => {
|
|
|
1396
1709
|
}, {
|
|
1397
1710
|
title: `Loaded Skills [${skillsOn ? "ON" : "OFF"}]`,
|
|
1398
1711
|
value: "skills"
|
|
1712
|
+
}, {
|
|
1713
|
+
title: `DS Balance [${balanceOn ? "ON" : "OFF"}]`,
|
|
1714
|
+
value: "balance"
|
|
1399
1715
|
}, {
|
|
1400
1716
|
title: `Panel Border [${borderOn ? "ON" : "OFF"}]`,
|
|
1401
1717
|
value: "border"
|
|
@@ -1416,6 +1732,7 @@ var tui = async (api) => {
|
|
|
1416
1732
|
if (opt.value === "model") signals.setSectionModel(!cur);
|
|
1417
1733
|
if (opt.value === "dist") signals.setSectionDist(!cur);
|
|
1418
1734
|
if (opt.value === "skills") signals.setSectionSkills(!cur);
|
|
1735
|
+
if (opt.value === "balance") signals.setSectionBalance(!cur);
|
|
1419
1736
|
api.ui.toast({
|
|
1420
1737
|
message: `${opt.value} section ${!cur ? "shown" : "hidden"}`
|
|
1421
1738
|
});
|
|
@@ -1438,9 +1755,10 @@ var tui = async (api) => {
|
|
|
1438
1755
|
const model = Boolean(api.kv.get(`${KV_PREFIX}.section.model`, true));
|
|
1439
1756
|
const dist = Boolean(api.kv.get(`${KV_PREFIX}.section.dist`, true));
|
|
1440
1757
|
const skills = Boolean(api.kv.get(`${KV_PREFIX}.section.skills`, true));
|
|
1758
|
+
const balance = Boolean(api.kv.get(`${KV_PREFIX}.section.balance`, true));
|
|
1441
1759
|
api.ui.toast({
|
|
1442
1760
|
title: "Cache Panel Config",
|
|
1443
|
-
message: `Currency: ${sym} | Rate: ${rate} | Detail: ${detail ? "ON" : "OFF"} | Model: ${model ? "ON" : "OFF"} | Dist: ${dist ? "ON" : "OFF"} | Skills: ${skills ? "ON" : "OFF"}`,
|
|
1761
|
+
message: `Currency: ${sym} | Rate: ${rate} | Detail: ${detail ? "ON" : "OFF"} | Model: ${model ? "ON" : "OFF"} | Dist: ${dist ? "ON" : "OFF"} | Skills: ${skills ? "ON" : "OFF"} | Balance: ${balance ? "ON" : "OFF"}`,
|
|
1444
1762
|
duration: 8e3
|
|
1445
1763
|
});
|
|
1446
1764
|
dialog?.clear();
|
|
@@ -1474,6 +1792,59 @@ var tui = async (api) => {
|
|
|
1474
1792
|
}
|
|
1475
1793
|
}));
|
|
1476
1794
|
}
|
|
1795
|
+
}, {
|
|
1796
|
+
title: "Cache: Set DeepSeek API Key",
|
|
1797
|
+
value: "cache.balance.key",
|
|
1798
|
+
description: "Set or update the DeepSeek API key for balance display",
|
|
1799
|
+
slash: {
|
|
1800
|
+
name: "cache-balance-key"
|
|
1801
|
+
},
|
|
1802
|
+
onSelect: (dialog) => {
|
|
1803
|
+
const zh = langZH();
|
|
1804
|
+
const current = api.kv.get(`${KV_PREFIX}.ds_key`, "");
|
|
1805
|
+
const maskKey = (k) => {
|
|
1806
|
+
if (!k) return "";
|
|
1807
|
+
const prefix = k.startsWith("sk-") ? "sk-" : "";
|
|
1808
|
+
const body = prefix ? k.slice(3) : k;
|
|
1809
|
+
if (body.length <= 10) return prefix + body.slice(0, 5) + "*".repeat(Math.max(3, body.length - 5));
|
|
1810
|
+
return prefix + body.slice(0, 5) + "*".repeat(Math.max(3, body.length - 10)) + body.slice(-5);
|
|
1811
|
+
};
|
|
1812
|
+
const masked = maskKey(current);
|
|
1813
|
+
dialog?.replace(() => _$createComponent(api.ui.DialogPrompt, {
|
|
1814
|
+
title: zh ? "DeepSeek API Key" : "DeepSeek API Key",
|
|
1815
|
+
description: () => (() => {
|
|
1816
|
+
var _el$95 = _$createElement("text");
|
|
1817
|
+
_$insert(_el$95, zh ? "\u8F93\u5165 DeepSeek API Key \u4EE5\u663E\u793A\u8D26\u6237\u4F59\u989D\uFF08\u7559\u7A7A\u6E05\u9664\uFF09" : "Enter your DeepSeek API key to show account balance (leave empty to clear)");
|
|
1818
|
+
return _el$95;
|
|
1819
|
+
})(),
|
|
1820
|
+
placeholder: "sk-...",
|
|
1821
|
+
value: masked,
|
|
1822
|
+
onConfirm: (val) => {
|
|
1823
|
+
const input = val.trim();
|
|
1824
|
+
let key;
|
|
1825
|
+
if (input === "") {
|
|
1826
|
+
key = "";
|
|
1827
|
+
} else if (input.includes("*")) {
|
|
1828
|
+
key = current;
|
|
1829
|
+
} else {
|
|
1830
|
+
key = input;
|
|
1831
|
+
}
|
|
1832
|
+
api.kv.set(`${KV_PREFIX}.ds_key`, key);
|
|
1833
|
+
setBalanceRefresh((v) => v + 1);
|
|
1834
|
+
if (key) {
|
|
1835
|
+
api.ui.toast({
|
|
1836
|
+
message: zh ? "API Key \u5DF2\u4FDD\u5B58\uFF0C\u6B63\u5728\u67E5\u8BE2\u4F59\u989D..." : "API Key saved, fetching balance..."
|
|
1837
|
+
});
|
|
1838
|
+
} else {
|
|
1839
|
+
api.ui.toast({
|
|
1840
|
+
message: zh ? "API Key \u5DF2\u6E05\u9664" : "API Key cleared"
|
|
1841
|
+
});
|
|
1842
|
+
}
|
|
1843
|
+
dialog?.clear();
|
|
1844
|
+
},
|
|
1845
|
+
onCancel: () => dialog?.clear()
|
|
1846
|
+
}));
|
|
1847
|
+
}
|
|
1477
1848
|
}, {
|
|
1478
1849
|
title: "Cache: Debug Skills Detection",
|
|
1479
1850
|
value: "cache.debug-skills",
|
|
@@ -1521,6 +1892,147 @@ var tui = async (api) => {
|
|
|
1521
1892
|
duration: 15e3
|
|
1522
1893
|
});
|
|
1523
1894
|
}
|
|
1895
|
+
}, {
|
|
1896
|
+
title: "Cache: Sub-Agent Stats",
|
|
1897
|
+
value: "cache.session",
|
|
1898
|
+
description: "View token cache statistics for a sub-agent by session ID",
|
|
1899
|
+
slash: {
|
|
1900
|
+
name: "cache-session"
|
|
1901
|
+
},
|
|
1902
|
+
onSelect: (dialog) => {
|
|
1903
|
+
const rt = api.route.current;
|
|
1904
|
+
const parentSid = rt.name === "session" && rt.params ? String(rt.params.sessionID) : "";
|
|
1905
|
+
const SUBAGENT_TOOLS = /* @__PURE__ */ new Set(["task", "delegate", "call_omo_agent"]);
|
|
1906
|
+
const children = [];
|
|
1907
|
+
if (parentSid) {
|
|
1908
|
+
try {
|
|
1909
|
+
const msgs = api.state.session.messages(parentSid);
|
|
1910
|
+
for (const msg of msgs) {
|
|
1911
|
+
if (msg.role !== "assistant") continue;
|
|
1912
|
+
let parts = [];
|
|
1913
|
+
try {
|
|
1914
|
+
parts = api.state.part(msg.id);
|
|
1915
|
+
} catch {
|
|
1916
|
+
}
|
|
1917
|
+
for (const p of parts) {
|
|
1918
|
+
if (p.type !== "tool") continue;
|
|
1919
|
+
const tool = String(p.tool ?? "");
|
|
1920
|
+
if (!SUBAGENT_TOOLS.has(tool)) continue;
|
|
1921
|
+
const st = p.state;
|
|
1922
|
+
const stMeta = st?.metadata;
|
|
1923
|
+
const subSid = stMeta?.session_id ?? stMeta?.sessionId;
|
|
1924
|
+
if (!subSid) continue;
|
|
1925
|
+
const sidStr = String(subSid);
|
|
1926
|
+
const input = st?.input;
|
|
1927
|
+
const agent = String(p.subagent_type ?? input?.subagent_type ?? input?.category ?? tool);
|
|
1928
|
+
const prompt = String(input?.prompt ?? "");
|
|
1929
|
+
const desc = input?.description ? String(input.description) : "";
|
|
1930
|
+
const title = desc || prompt.replace(/\n/g, " ").replace(/\s+/g, " ").trim().slice(0, 40) || agent;
|
|
1931
|
+
children.push({
|
|
1932
|
+
title,
|
|
1933
|
+
value: sidStr,
|
|
1934
|
+
description: `${agent} \xB7 ${sidStr.slice(0, 24)}\u2026`
|
|
1935
|
+
});
|
|
1936
|
+
}
|
|
1937
|
+
}
|
|
1938
|
+
} catch {
|
|
1939
|
+
}
|
|
1940
|
+
}
|
|
1941
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1942
|
+
const unique = children.filter((c) => {
|
|
1943
|
+
if (seen.has(c.value)) return false;
|
|
1944
|
+
seen.add(c.value);
|
|
1945
|
+
return true;
|
|
1946
|
+
});
|
|
1947
|
+
if (unique.length > 0) {
|
|
1948
|
+
const zh = langZH();
|
|
1949
|
+
const currentSid = signals.overrideSessionId() ?? api.kv.get(`${KV_PREFIX}.session`, "");
|
|
1950
|
+
const options = unique.map((c, i) => ({
|
|
1951
|
+
title: `${i + 1}. ${c.title}`,
|
|
1952
|
+
value: c.value,
|
|
1953
|
+
description: c.description
|
|
1954
|
+
}));
|
|
1955
|
+
const backValue = "__main__";
|
|
1956
|
+
const backTitle = `\u2500 ${zh ? "\u56DE\u5230\u4E3B\u4F1A\u8BDD" : "Back to Main"}`;
|
|
1957
|
+
options.unshift({
|
|
1958
|
+
title: backTitle,
|
|
1959
|
+
value: backValue,
|
|
1960
|
+
description: ""
|
|
1961
|
+
});
|
|
1962
|
+
options.push({
|
|
1963
|
+
title: backTitle,
|
|
1964
|
+
value: backValue,
|
|
1965
|
+
description: ""
|
|
1966
|
+
});
|
|
1967
|
+
const currentIdx = currentSid ? options.findIndex((o) => o.value === currentSid) : -1;
|
|
1968
|
+
dialog?.replace(() => _$createComponent(api.ui.DialogSelect, {
|
|
1969
|
+
title: zh ? "\u9009\u62E9\u5B50\u4EE3\u7406" : "Select Sub-Agent",
|
|
1970
|
+
options,
|
|
1971
|
+
get current() {
|
|
1972
|
+
return currentIdx >= 0 ? options[currentIdx].value : void 0;
|
|
1973
|
+
},
|
|
1974
|
+
onSelect: (opt) => {
|
|
1975
|
+
if (opt.value === backValue) {
|
|
1976
|
+
signals.setOverrideSessionId(void 0);
|
|
1977
|
+
api.kv.set(`${KV_PREFIX}.session`, "");
|
|
1978
|
+
api.ui.toast({
|
|
1979
|
+
message: zh ? "\u5DF2\u5207\u56DE\u4E3B\u4F1A\u8BDD" : "Switched to main session"
|
|
1980
|
+
});
|
|
1981
|
+
} else {
|
|
1982
|
+
signals.setOverrideSessionId(opt.value);
|
|
1983
|
+
api.kv.set(`${KV_PREFIX}.session`, opt.value);
|
|
1984
|
+
api.ui.toast({
|
|
1985
|
+
message: (zh ? "\u5DF2\u5207\u6362\u81F3\u5B50\u4EE3\u7406: " : "Showing sub-agent: ") + opt.value.slice(0, 24) + "\u2026"
|
|
1986
|
+
});
|
|
1987
|
+
}
|
|
1988
|
+
dialog?.clear();
|
|
1989
|
+
}
|
|
1990
|
+
}));
|
|
1991
|
+
} else {
|
|
1992
|
+
const zh = langZH();
|
|
1993
|
+
dialog?.replace(() => _$createComponent(api.ui.DialogPrompt, {
|
|
1994
|
+
get title() {
|
|
1995
|
+
return signals.overrideSessionId() ? zh ? "\u5207\u6362\u5B50\u4EE3\u7406" : "Switch Sub" : zh ? "\u67E5\u770B\u5B50\u4EE3\u7406\u7F13\u5B58" : "View Sub Cache";
|
|
1996
|
+
},
|
|
1997
|
+
description: () => (() => {
|
|
1998
|
+
var _el$96 = _$createElement("text");
|
|
1999
|
+
_$insert(_el$96, zh ? "\u672A\u627E\u5230\u5B50\u4EE3\u7406\uFF0C\u8BF7\u624B\u52A8\u7C98\u8D34 Session ID" : "No sub-agents found. Paste a Session ID manually");
|
|
2000
|
+
return _el$96;
|
|
2001
|
+
})(),
|
|
2002
|
+
placeholder: "ses_...",
|
|
2003
|
+
get value() {
|
|
2004
|
+
return signals.overrideSessionId() ?? api.kv.get(`${KV_PREFIX}.session`, "") ?? "";
|
|
2005
|
+
},
|
|
2006
|
+
onConfirm: (val) => {
|
|
2007
|
+
const sid = val.trim();
|
|
2008
|
+
if (sid) {
|
|
2009
|
+
signals.setOverrideSessionId(sid);
|
|
2010
|
+
api.kv.set(`${KV_PREFIX}.session`, sid);
|
|
2011
|
+
api.ui.toast({
|
|
2012
|
+
message: (langZH() ? "\u5DF2\u5207\u6362\u81F3\u5B50\u4EE3\u7406: " : "Showing sub-agent: ") + sid.slice(0, 24) + "\u2026"
|
|
2013
|
+
});
|
|
2014
|
+
}
|
|
2015
|
+
dialog?.clear();
|
|
2016
|
+
},
|
|
2017
|
+
onCancel: () => dialog?.clear()
|
|
2018
|
+
}));
|
|
2019
|
+
}
|
|
2020
|
+
}
|
|
2021
|
+
}, {
|
|
2022
|
+
title: "Cache: Back to Main",
|
|
2023
|
+
value: "cache.session.back",
|
|
2024
|
+
description: "Return to main session stats",
|
|
2025
|
+
slash: {
|
|
2026
|
+
name: "cache-session-back"
|
|
2027
|
+
},
|
|
2028
|
+
onSelect: (dialog) => {
|
|
2029
|
+
signals.setOverrideSessionId(void 0);
|
|
2030
|
+
api.kv.set(`${KV_PREFIX}.session`, "");
|
|
2031
|
+
api.ui.toast({
|
|
2032
|
+
message: langZH() ? "\u5DF2\u5207\u56DE\u4E3B\u4F1A\u8BDD" : "Switched to main session"
|
|
2033
|
+
});
|
|
2034
|
+
dialog?.clear();
|
|
2035
|
+
}
|
|
1524
2036
|
}]);
|
|
1525
2037
|
};
|
|
1526
2038
|
var mod = {
|