opencode-visual-cache 1.2.16 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/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.2.16";
16
+ var PLUGIN_VERSION = "1.3.0";
17
17
 
18
18
  // src/index.tsx
19
19
  function charColumns(c) {
@@ -174,6 +174,14 @@ function desaturateTo(raw, maxSat, fallback) {
174
174
  const nb = Math.round(c.b + (luma - c.b) * hi);
175
175
  return "#" + [nr, ng, nb].map((v) => Math.max(0, Math.min(255, v)).toString(16).padStart(2, "0")).join("");
176
176
  }
177
+ function dimColor(hex, factor = 0.5) {
178
+ const c = rgb(hex);
179
+ if (!c) return hex;
180
+ const r = Math.round(c.r * factor);
181
+ const g = Math.round(c.g * factor);
182
+ const b = Math.round(c.b * factor);
183
+ return "#" + [r, g, b].map((v) => Math.max(0, Math.min(255, v)).toString(16).padStart(2, "0")).join("");
184
+ }
177
185
  var FALLBACK = {
178
186
  primary: "#8B9DAF",
179
187
  text: "#C5C5BB",
@@ -321,8 +329,19 @@ function TokenCachePanel(props) {
321
329
  hasSkills: false
322
330
  });
323
331
  const [refreshTick, setRefreshTick] = createSignal(0);
332
+ let lastMainSid = props.sessionId;
324
333
  createEffect(() => {
325
334
  const sid = props.sessionId;
335
+ if (sid !== lastMainSid) {
336
+ lastMainSid = sid;
337
+ if (props.signals.overrideSessionId()) {
338
+ props.signals.setOverrideSessionId(void 0);
339
+ props.api.kv.set(`${KV_PREFIX}.session`, "");
340
+ }
341
+ }
342
+ });
343
+ createEffect(() => {
344
+ const sid = props.signals.overrideSessionId() ?? props.sessionId;
326
345
  void refreshTick();
327
346
  void partVersion();
328
347
  const msgs = props.api.state.session.messages(sid);
@@ -700,12 +719,11 @@ function TokenCachePanel(props) {
700
719
  return open();
701
720
  },
702
721
  get children() {
703
- var _el$6 = _$createElement("span"), _el$7 = _$createTextNode(` (v`), _el$8 = _$createTextNode(`)`);
722
+ var _el$6 = _$createElement("span"), _el$7 = _$createTextNode(` v`);
704
723
  _$insertNode(_el$6, _el$7);
705
- _$insertNode(_el$6, _el$8);
706
- _$insert(_el$6, PLUGIN_VERSION, _el$8);
724
+ _$insert(_el$6, PLUGIN_VERSION, null);
707
725
  _$effect((_$p) => _$setProp(_el$6, "style", {
708
- fg: pal().muted
726
+ fg: dimColor(pal().muted, 0.75)
709
727
  }, _$p));
710
728
  return _el$6;
711
729
  }
@@ -721,26 +739,26 @@ function TokenCachePanel(props) {
721
739
  },
722
740
  get children() {
723
741
  return [(() => {
724
- var _el$9 = _$createElement("span");
725
- _$insert(_el$9, () => " ".repeat(Math.max(1, panelWidth() - gutter() - HEADER_PREFIX - visualWidth(t().title) - visualWidth(pct() + " " + t().hitFolded + " " + trendLabel(data().trend)))));
726
- return _el$9;
742
+ var _el$8 = _$createElement("span");
743
+ _$insert(_el$8, () => " ".repeat(Math.max(1, panelWidth() - gutter() - HEADER_PREFIX - visualWidth(t().title) - visualWidth(pct() + " " + t().hitFolded + " " + trendLabel(data().trend)))));
744
+ return _el$8;
727
745
  })(), (() => {
728
- var _el$0 = _$createElement("span"), _el$1 = _$createTextNode(` `);
729
- _$insertNode(_el$0, _el$1);
730
- _$insert(_el$0, pct, _el$1);
731
- _$insert(_el$0, () => t().hitFolded, null);
732
- _$effect((_$p) => _$setProp(_el$0, "style", {
746
+ var _el$9 = _$createElement("span"), _el$0 = _$createTextNode(` `);
747
+ _$insertNode(_el$9, _el$0);
748
+ _$insert(_el$9, pct, _el$0);
749
+ _$insert(_el$9, () => t().hitFolded, null);
750
+ _$effect((_$p) => _$setProp(_el$9, "style", {
733
751
  fg: hitColor()
734
752
  }, _$p));
735
- return _el$0;
753
+ return _el$9;
736
754
  })(), (() => {
737
- var _el$10 = _$createElement("span"), _el$11 = _$createTextNode(` `);
738
- _$insertNode(_el$10, _el$11);
739
- _$insert(_el$10, () => trendLabel(data().trend), null);
740
- _$effect((_$p) => _$setProp(_el$10, "style", {
755
+ var _el$1 = _$createElement("span"), _el$10 = _$createTextNode(` `);
756
+ _$insertNode(_el$1, _el$10);
757
+ _$insert(_el$1, () => trendLabel(data().trend), null);
758
+ _$effect((_$p) => _$setProp(_el$1, "style", {
741
759
  fg: data().trend !== 0 ? data().trend > 0 ? pal().success : pal().error : pal().text
742
760
  }, _$p));
743
- return _el$10;
761
+ return _el$1;
744
762
  })()];
745
763
  }
746
764
  }), _$createComponent(Show, {
@@ -749,18 +767,18 @@ function TokenCachePanel(props) {
749
767
  },
750
768
  get children() {
751
769
  return [(() => {
752
- var _el$12 = _$createElement("span");
753
- _$insert(_el$12, () => " ".repeat(Math.max(1, panelWidth() - gutter() - HEADER_PREFIX - visualWidth(t().title) - visualWidth(pct() + " " + t().hitFolded))));
754
- return _el$12;
770
+ var _el$11 = _$createElement("span");
771
+ _$insert(_el$11, () => " ".repeat(Math.max(1, panelWidth() - gutter() - HEADER_PREFIX - visualWidth(t().title) - visualWidth(pct() + " " + t().hitFolded))));
772
+ return _el$11;
755
773
  })(), (() => {
756
- var _el$13 = _$createElement("span"), _el$14 = _$createTextNode(` `);
757
- _$insertNode(_el$13, _el$14);
758
- _$insert(_el$13, pct, _el$14);
759
- _$insert(_el$13, () => t().hitFolded, null);
760
- _$effect((_$p) => _$setProp(_el$13, "style", {
774
+ var _el$12 = _$createElement("span"), _el$13 = _$createTextNode(` `);
775
+ _$insertNode(_el$12, _el$13);
776
+ _$insert(_el$12, pct, _el$13);
777
+ _$insert(_el$12, () => t().hitFolded, null);
778
+ _$effect((_$p) => _$setProp(_el$12, "style", {
761
779
  fg: hitColor()
762
780
  }, _$p));
763
- return _el$13;
781
+ return _el$12;
764
782
  })()];
765
783
  }
766
784
  })];
@@ -771,67 +789,98 @@ function TokenCachePanel(props) {
771
789
  return open();
772
790
  },
773
791
  get children() {
774
- return _$createComponent(Show, {
792
+ return [_$createComponent(Show, {
793
+ get when() {
794
+ return props.signals.overrideSessionId();
795
+ },
796
+ get children() {
797
+ return (() => {
798
+ const prefix = " \u21B3 " + (langZH() ? "\u5B50\u4EE3\u7406: " : "Sub: ");
799
+ const maxSidW = Math.max(6, panelWidth() - visualWidth(prefix));
800
+ return (() => {
801
+ var _el$51 = _$createElement("text"), _el$52 = _$createElement("span"), _el$53 = _$createElement("span");
802
+ _$insertNode(_el$51, _el$52);
803
+ _$insertNode(_el$51, _el$53);
804
+ _$insert(_el$52, prefix);
805
+ _$insert(_el$53, () => truncateVisual(props.signals.overrideSessionId(), maxSidW));
806
+ _$effect((_p$) => {
807
+ var _v$1 = {
808
+ fg: pal().muted
809
+ }, _v$10 = {
810
+ fg: pal().text
811
+ };
812
+ _v$1 !== _p$.e && (_p$.e = _$setProp(_el$52, "style", _v$1, _p$.e));
813
+ _v$10 !== _p$.t && (_p$.t = _$setProp(_el$53, "style", _v$10, _p$.t));
814
+ return _p$;
815
+ }, {
816
+ e: void 0,
817
+ t: void 0
818
+ });
819
+ return _el$51;
820
+ })();
821
+ })();
822
+ }
823
+ }), _$createComponent(Show, {
775
824
  get when() {
776
825
  return data().hasData;
777
826
  },
778
827
  get fallback() {
779
828
  return [(() => {
780
- var _el$52 = _$createElement("text");
781
- _$insert(_el$52, sep);
782
- _$effect((_$p) => _$setProp(_el$52, "fg", pal().muted, _$p));
783
- return _el$52;
829
+ var _el$54 = _$createElement("text");
830
+ _$insert(_el$54, sep);
831
+ _$effect((_$p) => _$setProp(_el$54, "fg", pal().muted, _$p));
832
+ return _el$54;
784
833
  })(), (() => {
785
- var _el$53 = _$createElement("text"), _el$54 = _$createElement("span"), _el$56 = _$createElement("span");
786
- _$insertNode(_el$53, _el$54);
787
- _$insertNode(_el$53, _el$56);
788
- _$insertNode(_el$54, _$createTextNode(`> `));
789
- _$insert(_el$56, () => t().noData);
834
+ var _el$55 = _$createElement("text"), _el$56 = _$createElement("span"), _el$58 = _$createElement("span");
835
+ _$insertNode(_el$55, _el$56);
836
+ _$insertNode(_el$55, _el$58);
837
+ _$insertNode(_el$56, _$createTextNode(`> `));
838
+ _$insert(_el$58, () => t().noData);
790
839
  _$effect((_p$) => {
791
- var _v$1 = {
840
+ var _v$11 = {
792
841
  fg: pal().muted
793
- }, _v$10 = {
842
+ }, _v$12 = {
794
843
  fg: pal().muted
795
844
  };
796
- _v$1 !== _p$.e && (_p$.e = _$setProp(_el$54, "style", _v$1, _p$.e));
797
- _v$10 !== _p$.t && (_p$.t = _$setProp(_el$56, "style", _v$10, _p$.t));
845
+ _v$11 !== _p$.e && (_p$.e = _$setProp(_el$56, "style", _v$11, _p$.e));
846
+ _v$12 !== _p$.t && (_p$.t = _$setProp(_el$58, "style", _v$12, _p$.t));
798
847
  return _p$;
799
848
  }, {
800
849
  e: void 0,
801
850
  t: void 0
802
851
  });
803
- return _el$53;
852
+ return _el$55;
804
853
  })()];
805
854
  },
806
855
  get children() {
807
856
  return [(() => {
808
- var _el$15 = _$createElement("text");
809
- _$insert(_el$15, sep);
810
- _$effect((_$p) => _$setProp(_el$15, "fg", pal().muted, _$p));
811
- return _el$15;
857
+ var _el$14 = _$createElement("text");
858
+ _$insert(_el$14, sep);
859
+ _$effect((_$p) => _$setProp(_el$14, "fg", pal().muted, _$p));
860
+ return _el$14;
812
861
  })(), (() => {
813
- var _el$16 = _$createElement("text"), _el$17 = _$createElement("span"), _el$18 = _$createTextNode(` `), _el$19 = _$createElement("span"), _el$20 = _$createTextNode(`[`), _el$21 = _$createTextNode(`] `), _el$22 = _$createElement("span");
862
+ 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");
863
+ _$insertNode(_el$15, _el$16);
864
+ _$insertNode(_el$15, _el$18);
865
+ _$insertNode(_el$15, _el$21);
814
866
  _$insertNode(_el$16, _el$17);
815
- _$insertNode(_el$16, _el$19);
816
- _$insertNode(_el$16, _el$22);
817
- _$insertNode(_el$17, _el$18);
818
- _$insert(_el$17, () => t().hit, _el$18);
819
- _$insertNode(_el$19, _el$20);
820
- _$insertNode(_el$19, _el$21);
821
- _$insert(_el$19, bar, _el$21);
822
- _$insert(_el$22, pct);
823
- _$insert(_el$16, _$createComponent(Show, {
867
+ _$insert(_el$16, () => t().hit, _el$17);
868
+ _$insertNode(_el$18, _el$19);
869
+ _$insertNode(_el$18, _el$20);
870
+ _$insert(_el$18, bar, _el$20);
871
+ _$insert(_el$21, pct);
872
+ _$insert(_el$15, _$createComponent(Show, {
824
873
  get when() {
825
874
  return data().hasTrendData;
826
875
  },
827
876
  get children() {
828
- var _el$23 = _$createElement("span"), _el$24 = _$createTextNode(` `);
829
- _$insertNode(_el$23, _el$24);
830
- _$insert(_el$23, () => trendLabel(data().trend), null);
831
- _$effect((_$p) => _$setProp(_el$23, "style", {
877
+ var _el$22 = _$createElement("span"), _el$23 = _$createTextNode(` `);
878
+ _$insertNode(_el$22, _el$23);
879
+ _$insert(_el$22, () => trendLabel(data().trend), null);
880
+ _$effect((_$p) => _$setProp(_el$22, "style", {
832
881
  fg: data().trend !== 0 ? data().trend > 0 ? pal().success : pal().error : pal().text
833
882
  }, _$p));
834
- return _el$23;
883
+ return _el$22;
835
884
  }
836
885
  }), null);
837
886
  _$effect((_p$) => {
@@ -842,40 +891,40 @@ function TokenCachePanel(props) {
842
891
  }, _v$3 = {
843
892
  fg: pal().text
844
893
  };
845
- _v$ !== _p$.e && (_p$.e = _$setProp(_el$17, "style", _v$, _p$.e));
846
- _v$2 !== _p$.t && (_p$.t = _$setProp(_el$19, "style", _v$2, _p$.t));
847
- _v$3 !== _p$.a && (_p$.a = _$setProp(_el$22, "style", _v$3, _p$.a));
894
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$16, "style", _v$, _p$.e));
895
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$18, "style", _v$2, _p$.t));
896
+ _v$3 !== _p$.a && (_p$.a = _$setProp(_el$21, "style", _v$3, _p$.a));
848
897
  return _p$;
849
898
  }, {
850
899
  e: void 0,
851
900
  t: void 0,
852
901
  a: void 0
853
902
  });
854
- return _el$16;
903
+ return _el$15;
855
904
  })(), (() => {
856
- var _el$25 = _$createElement("text");
857
- _$insert(_el$25, () => justify(t().totalHit, (Math.floor(data().sessionHitRate * 10) / 10).toFixed(1) + "%"));
858
- _$effect((_$p) => _$setProp(_el$25, "fg", pal().muted, _$p));
859
- return _el$25;
905
+ var _el$24 = _$createElement("text");
906
+ _$insert(_el$24, () => justify(t().totalHit, (Math.floor(data().sessionHitRate * 10) / 10).toFixed(1) + "%"));
907
+ _$effect((_$p) => _$setProp(_el$24, "fg", pal().muted, _$p));
908
+ return _el$24;
860
909
  })(), _$createComponent(Show, {
861
910
  get when() {
862
911
  return sectionDetail();
863
912
  },
864
913
  get children() {
865
914
  return [(() => {
866
- var _el$26 = _$createElement("text"), _el$27 = _$createElement("span"), _el$28 = _$createElement("span"), _el$29 = _$createElement("b"), _el$30 = _$createElement("span");
867
- _$insertNode(_el$26, _el$27);
868
- _$insertNode(_el$26, _el$28);
869
- _$insertNode(_el$26, _el$30);
870
- _$setProp(_el$26, "onMouseUp", () => setDetailOpen((o) => {
915
+ var _el$25 = _$createElement("text"), _el$26 = _$createElement("span"), _el$27 = _$createElement("span"), _el$28 = _$createElement("b"), _el$29 = _$createElement("span");
916
+ _$insertNode(_el$25, _el$26);
917
+ _$insertNode(_el$25, _el$27);
918
+ _$insertNode(_el$25, _el$29);
919
+ _$setProp(_el$25, "onMouseUp", () => setDetailOpen((o) => {
871
920
  const n = !o;
872
921
  persistFold("detail", n);
873
922
  return n;
874
923
  }));
875
- _$insert(_el$27, () => detailOpen() ? "\u25BC " : "\u25B6 ");
876
- _$insertNode(_el$28, _el$29);
877
- _$insert(_el$29, () => t().secDetail);
878
- _$insert(_el$30, () => sep().slice(visualWidth((detailOpen() ? "\u25BC " : "\u25B6 ") + t().secDetail)));
924
+ _$insert(_el$26, () => detailOpen() ? "\u25BC " : "\u25B6 ");
925
+ _$insertNode(_el$27, _el$28);
926
+ _$insert(_el$28, () => t().secDetail);
927
+ _$insert(_el$29, () => sep().slice(visualWidth((detailOpen() ? "\u25BC " : "\u25B6 ") + t().secDetail)));
879
928
  _$effect((_p$) => {
880
929
  var _v$4 = {
881
930
  fg: pal().muted
@@ -884,16 +933,16 @@ function TokenCachePanel(props) {
884
933
  }, _v$6 = {
885
934
  fg: pal().muted
886
935
  };
887
- _v$4 !== _p$.e && (_p$.e = _$setProp(_el$27, "style", _v$4, _p$.e));
888
- _v$5 !== _p$.t && (_p$.t = _$setProp(_el$28, "style", _v$5, _p$.t));
889
- _v$6 !== _p$.a && (_p$.a = _$setProp(_el$30, "style", _v$6, _p$.a));
936
+ _v$4 !== _p$.e && (_p$.e = _$setProp(_el$26, "style", _v$4, _p$.e));
937
+ _v$5 !== _p$.t && (_p$.t = _$setProp(_el$27, "style", _v$5, _p$.t));
938
+ _v$6 !== _p$.a && (_p$.a = _$setProp(_el$29, "style", _v$6, _p$.a));
890
939
  return _p$;
891
940
  }, {
892
941
  e: void 0,
893
942
  t: void 0,
894
943
  a: void 0
895
944
  });
896
- return _el$26;
945
+ return _el$25;
897
946
  })(), _$createComponent(Show, {
898
947
  get when() {
899
948
  return detailOpen();
@@ -904,58 +953,58 @@ function TokenCachePanel(props) {
904
953
  return data().read > 0;
905
954
  },
906
955
  get children() {
907
- var _el$31 = _$createElement("text");
908
- _$insert(_el$31, () => justify(t().read, fmt(data().read), t().tok));
909
- _$effect((_$p) => _$setProp(_el$31, "fg", pal().muted, _$p));
910
- return _el$31;
956
+ var _el$30 = _$createElement("text");
957
+ _$insert(_el$30, () => justify(t().read, fmt(data().read), t().tok));
958
+ _$effect((_$p) => _$setProp(_el$30, "fg", pal().muted, _$p));
959
+ return _el$30;
911
960
  }
912
961
  }), _$createComponent(Show, {
913
962
  get when() {
914
963
  return data().write > 0;
915
964
  },
916
965
  get children() {
917
- var _el$32 = _$createElement("text");
918
- _$insert(_el$32, () => justify(t().write, fmt(data().write), t().tok));
919
- _$effect((_$p) => _$setProp(_el$32, "fg", pal().muted, _$p));
920
- return _el$32;
966
+ var _el$31 = _$createElement("text");
967
+ _$insert(_el$31, () => justify(t().write, fmt(data().write), t().tok));
968
+ _$effect((_$p) => _$setProp(_el$31, "fg", pal().muted, _$p));
969
+ return _el$31;
921
970
  }
922
971
  }), (() => {
972
+ var _el$32 = _$createElement("text");
973
+ _$insert(_el$32, () => justify(t().miss, fmt(data().freshInput), t().tok));
974
+ _$effect((_$p) => _$setProp(_el$32, "fg", pal().muted, _$p));
975
+ return _el$32;
976
+ })(), (() => {
923
977
  var _el$33 = _$createElement("text");
924
- _$insert(_el$33, () => justify(t().miss, fmt(data().freshInput), t().tok));
978
+ _$insert(_el$33, () => justify(t().out, fmt(data().output), t().tok));
925
979
  _$effect((_$p) => _$setProp(_el$33, "fg", pal().muted, _$p));
926
980
  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
981
  })(), _$createComponent(Show, {
933
982
  get when() {
934
983
  return data().saved > 0;
935
984
  },
936
985
  get children() {
937
- var _el$35 = _$createElement("text"), _el$36 = _$createElement("span"), _el$37 = _$createElement("span"), _el$38 = _$createElement("span"), _el$39 = _$createTextNode(`~`);
938
- _$insertNode(_el$35, _el$36);
939
- _$insertNode(_el$35, _el$37);
940
- _$insertNode(_el$35, _el$38);
941
- _$insert(_el$36, () => t().saved);
942
- _$insert(_el$37, () => " ".repeat(Math.max(1, panelWidth() - gutter() - visualWidth(t().saved) - visualWidth("~" + fmtCost(data().saved, currencySymbol(), exchangeRate())))));
943
- _$insertNode(_el$38, _el$39);
944
- _$insert(_el$38, () => fmtCost(data().saved, currencySymbol(), exchangeRate()), null);
986
+ var _el$34 = _$createElement("text"), _el$35 = _$createElement("span"), _el$36 = _$createElement("span"), _el$37 = _$createElement("span"), _el$38 = _$createTextNode(`~`);
987
+ _$insertNode(_el$34, _el$35);
988
+ _$insertNode(_el$34, _el$36);
989
+ _$insertNode(_el$34, _el$37);
990
+ _$insert(_el$35, () => t().saved);
991
+ _$insert(_el$36, () => " ".repeat(Math.max(1, panelWidth() - gutter() - visualWidth(t().saved) - visualWidth("~" + fmtCost(data().saved, currencySymbol(), exchangeRate())))));
992
+ _$insertNode(_el$37, _el$38);
993
+ _$insert(_el$37, () => fmtCost(data().saved, currencySymbol(), exchangeRate()), null);
945
994
  _$effect((_p$) => {
946
995
  var _v$7 = {
947
996
  fg: pal().muted
948
997
  }, _v$8 = {
949
998
  fg: pal().success
950
999
  };
951
- _v$7 !== _p$.e && (_p$.e = _$setProp(_el$36, "style", _v$7, _p$.e));
952
- _v$8 !== _p$.t && (_p$.t = _$setProp(_el$38, "style", _v$8, _p$.t));
1000
+ _v$7 !== _p$.e && (_p$.e = _$setProp(_el$35, "style", _v$7, _p$.e));
1001
+ _v$8 !== _p$.t && (_p$.t = _$setProp(_el$37, "style", _v$8, _p$.t));
953
1002
  return _p$;
954
1003
  }, {
955
1004
  e: void 0,
956
1005
  t: void 0
957
1006
  });
958
- return _el$35;
1007
+ return _el$34;
959
1008
  }
960
1009
  })];
961
1010
  }
@@ -967,91 +1016,91 @@ function TokenCachePanel(props) {
967
1016
  },
968
1017
  get children() {
969
1018
  return [_$memo(() => (() => {
970
- var _el$57 = _$createElement("text"), _el$58 = _$createElement("span"), _el$59 = _$createElement("span"), _el$60 = _$createElement("b"), _el$61 = _$createElement("span");
971
- _$insertNode(_el$57, _el$58);
972
- _$insertNode(_el$57, _el$59);
973
- _$insertNode(_el$57, _el$61);
974
- _$setProp(_el$57, "onMouseUp", () => setModelOpen((o) => {
1019
+ var _el$59 = _$createElement("text"), _el$60 = _$createElement("span"), _el$61 = _$createElement("span"), _el$62 = _$createElement("b"), _el$63 = _$createElement("span");
1020
+ _$insertNode(_el$59, _el$60);
1021
+ _$insertNode(_el$59, _el$61);
1022
+ _$insertNode(_el$59, _el$63);
1023
+ _$setProp(_el$59, "onMouseUp", () => setModelOpen((o) => {
975
1024
  const n = !o;
976
1025
  persistFold("model", n);
977
1026
  return n;
978
1027
  }));
979
- _$insert(_el$58, () => modelOpen() ? "\u25BC " : "\u25B6 ");
980
- _$insertNode(_el$59, _el$60);
981
- _$insert(_el$60, () => t().secModel);
982
- _$insert(_el$61, () => sep().slice(visualWidth((modelOpen() ? "\u25BC " : "\u25B6 ") + t().secModel)));
1028
+ _$insert(_el$60, () => modelOpen() ? "\u25BC " : "\u25B6 ");
1029
+ _$insertNode(_el$61, _el$62);
1030
+ _$insert(_el$62, () => t().secModel);
1031
+ _$insert(_el$63, () => sep().slice(visualWidth((modelOpen() ? "\u25BC " : "\u25B6 ") + t().secModel)));
983
1032
  _$effect((_p$) => {
984
- var _v$11 = {
1033
+ var _v$13 = {
985
1034
  fg: pal().muted
986
- }, _v$12 = {
1035
+ }, _v$14 = {
987
1036
  fg: pal().primary
988
- }, _v$13 = {
1037
+ }, _v$15 = {
989
1038
  fg: pal().muted
990
1039
  };
991
- _v$11 !== _p$.e && (_p$.e = _$setProp(_el$58, "style", _v$11, _p$.e));
992
- _v$12 !== _p$.t && (_p$.t = _$setProp(_el$59, "style", _v$12, _p$.t));
993
- _v$13 !== _p$.a && (_p$.a = _$setProp(_el$61, "style", _v$13, _p$.a));
1040
+ _v$13 !== _p$.e && (_p$.e = _$setProp(_el$60, "style", _v$13, _p$.e));
1041
+ _v$14 !== _p$.t && (_p$.t = _$setProp(_el$61, "style", _v$14, _p$.t));
1042
+ _v$15 !== _p$.a && (_p$.a = _$setProp(_el$63, "style", _v$15, _p$.a));
994
1043
  return _p$;
995
1044
  }, {
996
1045
  e: void 0,
997
1046
  t: void 0,
998
1047
  a: void 0
999
1048
  });
1000
- return _el$57;
1049
+ return _el$59;
1001
1050
  })()), _$createComponent(Show, {
1002
1051
  get when() {
1003
1052
  return modelOpen();
1004
1053
  },
1005
1054
  get children() {
1006
1055
  return [(() => {
1007
- var _el$40 = _$createElement("text");
1008
- _$insert(_el$40, () => justify(t().cost, fmtCost(data().cost, currencySymbol(), exchangeRate())));
1009
- _$effect((_$p) => _$setProp(_el$40, "fg", pal().text, _$p));
1010
- return _el$40;
1056
+ var _el$39 = _$createElement("text");
1057
+ _$insert(_el$39, () => justify(t().cost, fmtCost(data().cost, currencySymbol(), exchangeRate())));
1058
+ _$effect((_$p) => _$setProp(_el$39, "fg", pal().text, _$p));
1059
+ return _el$39;
1011
1060
  })(), _$createComponent(Show, {
1012
1061
  get when() {
1013
1062
  return data().providerName;
1014
1063
  },
1015
1064
  get children() {
1016
- var _el$41 = _$createElement("text");
1017
- _$insert(_el$41, () => justify(t().provider, data().providerName));
1018
- _$effect((_$p) => _$setProp(_el$41, "fg", pal().muted, _$p));
1019
- return _el$41;
1065
+ var _el$40 = _$createElement("text");
1066
+ _$insert(_el$40, () => justify(t().provider, data().providerName));
1067
+ _$effect((_$p) => _$setProp(_el$40, "fg", pal().muted, _$p));
1068
+ return _el$40;
1020
1069
  }
1021
1070
  }), (() => {
1022
- var _el$42 = _$createElement("text");
1023
- _$insert(_el$42, () => justify(t().model, data().model));
1024
- _$effect((_$p) => _$setProp(_el$42, "fg", pal().muted, _$p));
1025
- return _el$42;
1071
+ var _el$41 = _$createElement("text");
1072
+ _$insert(_el$41, () => justify(t().model, data().model));
1073
+ _$effect((_$p) => _$setProp(_el$41, "fg", pal().muted, _$p));
1074
+ return _el$41;
1026
1075
  })(), _$createComponent(Show, {
1027
1076
  get when() {
1028
1077
  return data().hasPricing;
1029
1078
  },
1030
1079
  get children() {
1031
1080
  return [(() => {
1032
- var _el$43 = _$createElement("text");
1033
- _$insert(_el$43, () => justify(t().rate, currencySymbol() + (data().inputRate * exchangeRate()).toFixed(2) + "/M " + t().inputRate));
1034
- _$effect((_$p) => _$setProp(_el$43, "fg", pal().muted, _$p));
1035
- return _el$43;
1081
+ var _el$42 = _$createElement("text");
1082
+ _$insert(_el$42, () => justify(t().rate, currencySymbol() + (data().inputRate * exchangeRate()).toFixed(2) + "/M " + t().inputRate));
1083
+ _$effect((_$p) => _$setProp(_el$42, "fg", pal().muted, _$p));
1084
+ return _el$42;
1036
1085
  })(), _$createComponent(Show, {
1037
1086
  get when() {
1038
1087
  return data().cacheReadRate > 0;
1039
1088
  },
1040
1089
  get children() {
1041
- var _el$44 = _$createElement("text");
1042
- _$insert(_el$44, () => justify("", currencySymbol() + (data().cacheReadRate * exchangeRate()).toFixed(2) + "/M " + t().cacheRate));
1043
- _$effect((_$p) => _$setProp(_el$44, "fg", pal().muted, _$p));
1044
- return _el$44;
1090
+ var _el$43 = _$createElement("text");
1091
+ _$insert(_el$43, () => justify("", currencySymbol() + (data().cacheReadRate * exchangeRate()).toFixed(2) + "/M " + t().cacheRate));
1092
+ _$effect((_$p) => _$setProp(_el$43, "fg", pal().muted, _$p));
1093
+ return _el$43;
1045
1094
  }
1046
1095
  }), _$createComponent(Show, {
1047
1096
  get when() {
1048
1097
  return data().cacheWriteRate > 0;
1049
1098
  },
1050
1099
  get children() {
1051
- var _el$45 = _$createElement("text");
1052
- _$insert(_el$45, () => justify("", currencySymbol() + (data().cacheWriteRate * exchangeRate()).toFixed(2) + "/M " + t().writeRate));
1053
- _$effect((_$p) => _$setProp(_el$45, "fg", pal().muted, _$p));
1054
- return _el$45;
1100
+ var _el$44 = _$createElement("text");
1101
+ _$insert(_el$44, () => justify("", currencySymbol() + (data().cacheWriteRate * exchangeRate()).toFixed(2) + "/M " + t().writeRate));
1102
+ _$effect((_$p) => _$setProp(_el$44, "fg", pal().muted, _$p));
1103
+ return _el$44;
1055
1104
  }
1056
1105
  })];
1057
1106
  }
@@ -1070,37 +1119,37 @@ function TokenCachePanel(props) {
1070
1119
  },
1071
1120
  get children() {
1072
1121
  return [_$memo(() => (() => {
1073
- var _el$62 = _$createElement("text"), _el$63 = _$createElement("span"), _el$64 = _$createElement("span"), _el$65 = _$createElement("b"), _el$66 = _$createElement("span");
1074
- _$insertNode(_el$62, _el$63);
1075
- _$insertNode(_el$62, _el$64);
1076
- _$insertNode(_el$62, _el$66);
1077
- _$setProp(_el$62, "onMouseUp", () => setDistOpen((o) => {
1122
+ var _el$64 = _$createElement("text"), _el$65 = _$createElement("span"), _el$66 = _$createElement("span"), _el$67 = _$createElement("b"), _el$68 = _$createElement("span");
1123
+ _$insertNode(_el$64, _el$65);
1124
+ _$insertNode(_el$64, _el$66);
1125
+ _$insertNode(_el$64, _el$68);
1126
+ _$setProp(_el$64, "onMouseUp", () => setDistOpen((o) => {
1078
1127
  const n = !o;
1079
1128
  persistFold("dist", n);
1080
1129
  return n;
1081
1130
  }));
1082
- _$insert(_el$63, () => distOpen() ? "\u25BC " : "\u25B6 ");
1083
- _$insertNode(_el$64, _el$65);
1084
- _$insert(_el$65, () => t().distTitle);
1085
- _$insert(_el$66, () => sep().slice(visualWidth((distOpen() ? "\u25BC " : "\u25B6 ") + t().distTitle)));
1131
+ _$insert(_el$65, () => distOpen() ? "\u25BC " : "\u25B6 ");
1132
+ _$insertNode(_el$66, _el$67);
1133
+ _$insert(_el$67, () => t().distTitle);
1134
+ _$insert(_el$68, () => sep().slice(visualWidth((distOpen() ? "\u25BC " : "\u25B6 ") + t().distTitle)));
1086
1135
  _$effect((_p$) => {
1087
- var _v$14 = {
1136
+ var _v$16 = {
1088
1137
  fg: pal().muted
1089
- }, _v$15 = {
1138
+ }, _v$17 = {
1090
1139
  fg: pal().primary
1091
- }, _v$16 = {
1140
+ }, _v$18 = {
1092
1141
  fg: pal().muted
1093
1142
  };
1094
- _v$14 !== _p$.e && (_p$.e = _$setProp(_el$63, "style", _v$14, _p$.e));
1095
- _v$15 !== _p$.t && (_p$.t = _$setProp(_el$64, "style", _v$15, _p$.t));
1096
- _v$16 !== _p$.a && (_p$.a = _$setProp(_el$66, "style", _v$16, _p$.a));
1143
+ _v$16 !== _p$.e && (_p$.e = _$setProp(_el$65, "style", _v$16, _p$.e));
1144
+ _v$17 !== _p$.t && (_p$.t = _$setProp(_el$66, "style", _v$17, _p$.t));
1145
+ _v$18 !== _p$.a && (_p$.a = _$setProp(_el$68, "style", _v$18, _p$.a));
1097
1146
  return _p$;
1098
1147
  }, {
1099
1148
  e: void 0,
1100
1149
  t: void 0,
1101
1150
  a: void 0
1102
1151
  });
1103
- return _el$62;
1152
+ return _el$64;
1104
1153
  })()), _$createComponent(Show, {
1105
1154
  get when() {
1106
1155
  return distOpen();
@@ -1110,57 +1159,57 @@ function TokenCachePanel(props) {
1110
1159
  get when() {
1111
1160
  return data().dist.system > 0;
1112
1161
  },
1162
+ get children() {
1163
+ var _el$45 = _$createElement("text");
1164
+ _$insert(_el$45, () => justify(t().distSys, fmt(data().dist.system), t().tok));
1165
+ _$effect((_$p) => _$setProp(_el$45, "fg", pal().muted, _$p));
1166
+ return _el$45;
1167
+ }
1168
+ }), _$createComponent(Show, {
1169
+ get when() {
1170
+ return data().dist.user > 0;
1171
+ },
1113
1172
  get children() {
1114
1173
  var _el$46 = _$createElement("text");
1115
- _$insert(_el$46, () => justify(t().distSys, fmt(data().dist.system), t().tok));
1174
+ _$insert(_el$46, () => justify(t().distUser, fmt(data().dist.user), t().tok));
1116
1175
  _$effect((_$p) => _$setProp(_el$46, "fg", pal().muted, _$p));
1117
1176
  return _el$46;
1118
1177
  }
1119
1178
  }), _$createComponent(Show, {
1120
1179
  get when() {
1121
- return data().dist.user > 0;
1180
+ return data().dist.agent > 0;
1122
1181
  },
1123
1182
  get children() {
1124
1183
  var _el$47 = _$createElement("text");
1125
- _$insert(_el$47, () => justify(t().distUser, fmt(data().dist.user), t().tok));
1184
+ _$insert(_el$47, () => justify(t().distAgent, fmt(data().dist.agent), t().tok));
1126
1185
  _$effect((_$p) => _$setProp(_el$47, "fg", pal().muted, _$p));
1127
1186
  return _el$47;
1128
1187
  }
1129
1188
  }), _$createComponent(Show, {
1130
1189
  get when() {
1131
- return data().dist.agent > 0;
1190
+ return data().dist.toolCall > 0;
1132
1191
  },
1133
1192
  get children() {
1134
1193
  var _el$48 = _$createElement("text");
1135
- _$insert(_el$48, () => justify(t().distAgent, fmt(data().dist.agent), t().tok));
1194
+ _$insert(_el$48, () => justify(t().distTool, fmt(data().dist.toolCall), t().tok));
1136
1195
  _$effect((_$p) => _$setProp(_el$48, "fg", pal().muted, _$p));
1137
1196
  return _el$48;
1138
1197
  }
1139
1198
  }), _$createComponent(Show, {
1140
1199
  get when() {
1141
- return data().dist.toolCall > 0;
1200
+ return data().dist.toolResult > 0;
1142
1201
  },
1143
1202
  get children() {
1144
1203
  var _el$49 = _$createElement("text");
1145
- _$insert(_el$49, () => justify(t().distTool, fmt(data().dist.toolCall), t().tok));
1204
+ _$insert(_el$49, () => justify(t().distRes, fmt(data().dist.toolResult), t().tok));
1146
1205
  _$effect((_$p) => _$setProp(_el$49, "fg", pal().muted, _$p));
1147
1206
  return _el$49;
1148
1207
  }
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
1208
  }), (() => {
1160
- var _el$51 = _$createElement("text");
1161
- _$insert(_el$51, () => justify(t().distTotal, fmt(data().dist.apiInput), t().tok));
1162
- _$effect((_$p) => _$setProp(_el$51, "fg", pal().text, _$p));
1163
- return _el$51;
1209
+ var _el$50 = _$createElement("text");
1210
+ _$insert(_el$50, () => justify(t().distTotal, fmt(data().dist.apiInput), t().tok));
1211
+ _$effect((_$p) => _$setProp(_el$50, "fg", pal().text, _$p));
1212
+ return _el$50;
1164
1213
  })()];
1165
1214
  }
1166
1215
  })];
@@ -1178,37 +1227,37 @@ function TokenCachePanel(props) {
1178
1227
  },
1179
1228
  get children() {
1180
1229
  return [_$memo(() => (() => {
1181
- var _el$67 = _$createElement("text"), _el$68 = _$createElement("span"), _el$69 = _$createElement("span"), _el$70 = _$createElement("b"), _el$71 = _$createElement("span"), _el$72 = _$createTextNode(` (`), _el$73 = _$createTextNode(`)`), _el$74 = _$createElement("span");
1182
- _$insertNode(_el$67, _el$68);
1183
- _$insertNode(_el$67, _el$69);
1184
- _$insertNode(_el$67, _el$71);
1185
- _$insertNode(_el$67, _el$74);
1186
- _$setProp(_el$67, "onMouseUp", () => setSkillsOpen((o) => {
1230
+ var _el$69 = _$createElement("text"), _el$70 = _$createElement("span"), _el$71 = _$createElement("span"), _el$72 = _$createElement("b"), _el$73 = _$createElement("span"), _el$74 = _$createTextNode(` (`), _el$75 = _$createTextNode(`)`), _el$76 = _$createElement("span");
1231
+ _$insertNode(_el$69, _el$70);
1232
+ _$insertNode(_el$69, _el$71);
1233
+ _$insertNode(_el$69, _el$73);
1234
+ _$insertNode(_el$69, _el$76);
1235
+ _$setProp(_el$69, "onMouseUp", () => setSkillsOpen((o) => {
1187
1236
  const n = !o;
1188
1237
  persistFold("skills", n);
1189
1238
  return n;
1190
1239
  }));
1191
- _$insert(_el$68, () => skillsOpen() ? "\u25BC " : "\u25B6 ");
1192
- _$insertNode(_el$69, _el$70);
1193
- _$insert(_el$70, () => t().secSkills);
1240
+ _$insert(_el$70, () => skillsOpen() ? "\u25BC " : "\u25B6 ");
1194
1241
  _$insertNode(_el$71, _el$72);
1195
- _$insertNode(_el$71, _el$73);
1196
- _$insert(_el$71, () => data().skills.length, _el$73);
1197
- _$insert(_el$74, () => sep().slice(visualWidth((skillsOpen() ? "\u25BC " : "\u25B6 ") + t().secSkills + ` (${data().skills.length})`)));
1242
+ _$insert(_el$72, () => t().secSkills);
1243
+ _$insertNode(_el$73, _el$74);
1244
+ _$insertNode(_el$73, _el$75);
1245
+ _$insert(_el$73, () => data().skills.length, _el$75);
1246
+ _$insert(_el$76, () => sep().slice(visualWidth((skillsOpen() ? "\u25BC " : "\u25B6 ") + t().secSkills + ` (${data().skills.length})`)));
1198
1247
  _$effect((_p$) => {
1199
- var _v$17 = {
1248
+ var _v$19 = {
1200
1249
  fg: pal().muted
1201
- }, _v$18 = {
1250
+ }, _v$20 = {
1202
1251
  fg: pal().primary
1203
- }, _v$19 = {
1252
+ }, _v$21 = {
1204
1253
  fg: pal().muted
1205
- }, _v$20 = {
1254
+ }, _v$22 = {
1206
1255
  fg: pal().muted
1207
1256
  };
1208
- _v$17 !== _p$.e && (_p$.e = _$setProp(_el$68, "style", _v$17, _p$.e));
1209
- _v$18 !== _p$.t && (_p$.t = _$setProp(_el$69, "style", _v$18, _p$.t));
1210
- _v$19 !== _p$.a && (_p$.a = _$setProp(_el$71, "style", _v$19, _p$.a));
1211
- _v$20 !== _p$.o && (_p$.o = _$setProp(_el$74, "style", _v$20, _p$.o));
1257
+ _v$19 !== _p$.e && (_p$.e = _$setProp(_el$70, "style", _v$19, _p$.e));
1258
+ _v$20 !== _p$.t && (_p$.t = _$setProp(_el$71, "style", _v$20, _p$.t));
1259
+ _v$21 !== _p$.a && (_p$.a = _$setProp(_el$73, "style", _v$21, _p$.a));
1260
+ _v$22 !== _p$.o && (_p$.o = _$setProp(_el$76, "style", _v$22, _p$.o));
1212
1261
  return _p$;
1213
1262
  }, {
1214
1263
  e: void 0,
@@ -1216,7 +1265,7 @@ function TokenCachePanel(props) {
1216
1265
  a: void 0,
1217
1266
  o: void 0
1218
1267
  });
1219
- return _el$67;
1268
+ return _el$69;
1220
1269
  })()), _$createComponent(Show, {
1221
1270
  get when() {
1222
1271
  return skillsOpen();
@@ -1227,10 +1276,10 @@ function TokenCachePanel(props) {
1227
1276
  const maxLabel = Math.max(4, panelWidth() - gutter() - rightW - 1);
1228
1277
  const label = truncateVisual(sk.name, maxLabel);
1229
1278
  return (() => {
1230
- var _el$75 = _$createElement("text");
1231
- _$insert(_el$75, () => justify(label, fmt(sk.tokens), t().tok));
1232
- _$effect((_$p) => _$setProp(_el$75, "fg", pal().muted, _$p));
1233
- return _el$75;
1279
+ var _el$77 = _$createElement("text");
1280
+ _$insert(_el$77, () => justify(label, fmt(sk.tokens), t().tok));
1281
+ _$effect((_$p) => _$setProp(_el$77, "fg", pal().muted, _$p));
1282
+ return _el$77;
1234
1283
  })();
1235
1284
  });
1236
1285
  }
@@ -1240,7 +1289,7 @@ function TokenCachePanel(props) {
1240
1289
  }
1241
1290
  })];
1242
1291
  }
1243
- });
1292
+ })];
1244
1293
  }
1245
1294
  }), null);
1246
1295
  _$effect((_p$) => {
@@ -1260,10 +1309,18 @@ function TokenCachePanel(props) {
1260
1309
  })();
1261
1310
  }
1262
1311
  function createSidebarSlot(api, signals) {
1312
+ let lastSlotSid = "";
1263
1313
  return {
1264
1314
  order: 55,
1265
1315
  slots: {
1266
1316
  sidebar_content(ctx, input) {
1317
+ if (input.session_id !== lastSlotSid) {
1318
+ lastSlotSid = input.session_id;
1319
+ if (signals.overrideSessionId()) {
1320
+ signals.setOverrideSessionId(void 0);
1321
+ api.kv.set("cache_panel.session", "");
1322
+ }
1323
+ }
1267
1324
  return _$createComponent(TokenCachePanel, {
1268
1325
  get theme() {
1269
1326
  return ctx.theme.current;
@@ -1287,6 +1344,7 @@ var tui = async (api) => {
1287
1344
  const [sectionSkills, setSectionSkills] = createSignal(true);
1288
1345
  const [borderVisible, setBorderVisible] = createSignal(true);
1289
1346
  const [langZH, setLangZH] = createSignal(LANG_ZH);
1347
+ const [overrideSessionId, setOverrideSessionId] = createSignal(void 0);
1290
1348
  const signals = {
1291
1349
  currencySymbol,
1292
1350
  setCurrencySymbol,
@@ -1303,7 +1361,9 @@ var tui = async (api) => {
1303
1361
  sectionSkills,
1304
1362
  setSectionSkills,
1305
1363
  borderVisible,
1306
- setBorderVisible
1364
+ setBorderVisible,
1365
+ overrideSessionId,
1366
+ setOverrideSessionId
1307
1367
  };
1308
1368
  api.slots.register(createSidebarSlot(api, signals));
1309
1369
  const KV_PREFIX = "cache_panel";
@@ -1348,9 +1408,9 @@ var tui = async (api) => {
1348
1408
  dialog?.replace(() => _$createComponent(api.ui.DialogPrompt, {
1349
1409
  title: "Exchange Rate",
1350
1410
  description: () => (() => {
1351
- var _el$76 = _$createElement("text");
1352
- _$insertNode(_el$76, _$createTextNode(`Enter the exchange rate from USD to your currency (e.g. 7.2 for CNY)`));
1353
- return _el$76;
1411
+ var _el$78 = _$createElement("text");
1412
+ _$insertNode(_el$78, _$createTextNode(`Enter the exchange rate from USD to your currency (e.g. 7.2 for CNY)`));
1413
+ return _el$78;
1354
1414
  })(),
1355
1415
  placeholder: "1.0",
1356
1416
  get value() {
@@ -1521,6 +1581,147 @@ var tui = async (api) => {
1521
1581
  duration: 15e3
1522
1582
  });
1523
1583
  }
1584
+ }, {
1585
+ title: "Cache: Sub-Agent Stats",
1586
+ value: "cache.session",
1587
+ description: "View token cache statistics for a sub-agent by session ID",
1588
+ slash: {
1589
+ name: "cache-session"
1590
+ },
1591
+ onSelect: (dialog) => {
1592
+ const rt = api.route.current;
1593
+ const parentSid = rt.name === "session" && rt.params ? String(rt.params.sessionID) : "";
1594
+ const SUBAGENT_TOOLS = /* @__PURE__ */ new Set(["task", "delegate", "call_omo_agent"]);
1595
+ const children = [];
1596
+ if (parentSid) {
1597
+ try {
1598
+ const msgs = api.state.session.messages(parentSid);
1599
+ for (const msg of msgs) {
1600
+ if (msg.role !== "assistant") continue;
1601
+ let parts = [];
1602
+ try {
1603
+ parts = api.state.part(msg.id);
1604
+ } catch {
1605
+ }
1606
+ for (const p of parts) {
1607
+ if (p.type !== "tool") continue;
1608
+ const tool = String(p.tool ?? "");
1609
+ if (!SUBAGENT_TOOLS.has(tool)) continue;
1610
+ const st = p.state;
1611
+ const stMeta = st?.metadata;
1612
+ const subSid = stMeta?.session_id ?? stMeta?.sessionId;
1613
+ if (!subSid) continue;
1614
+ const sidStr = String(subSid);
1615
+ const input = st?.input;
1616
+ const agent = String(p.subagent_type ?? input?.subagent_type ?? input?.category ?? tool);
1617
+ const prompt = String(input?.prompt ?? "");
1618
+ const desc = input?.description ? String(input.description) : "";
1619
+ const title = desc || prompt.replace(/\n/g, " ").replace(/\s+/g, " ").trim().slice(0, 40) || agent;
1620
+ children.push({
1621
+ title,
1622
+ value: sidStr,
1623
+ description: `${agent} \xB7 ${sidStr.slice(0, 24)}\u2026`
1624
+ });
1625
+ }
1626
+ }
1627
+ } catch {
1628
+ }
1629
+ }
1630
+ const seen = /* @__PURE__ */ new Set();
1631
+ const unique = children.filter((c) => {
1632
+ if (seen.has(c.value)) return false;
1633
+ seen.add(c.value);
1634
+ return true;
1635
+ });
1636
+ if (unique.length > 0) {
1637
+ const zh = langZH();
1638
+ const currentSid = signals.overrideSessionId() ?? api.kv.get(`${KV_PREFIX}.session`, "");
1639
+ const options = unique.map((c, i) => ({
1640
+ title: `${i + 1}. ${c.title}`,
1641
+ value: c.value,
1642
+ description: c.description
1643
+ }));
1644
+ const backValue = "__main__";
1645
+ const backTitle = `\u2500 ${zh ? "\u56DE\u5230\u4E3B\u4F1A\u8BDD" : "Back to Main"}`;
1646
+ options.unshift({
1647
+ title: backTitle,
1648
+ value: backValue,
1649
+ description: ""
1650
+ });
1651
+ options.push({
1652
+ title: backTitle,
1653
+ value: backValue,
1654
+ description: ""
1655
+ });
1656
+ const currentIdx = currentSid ? options.findIndex((o) => o.value === currentSid) : -1;
1657
+ dialog?.replace(() => _$createComponent(api.ui.DialogSelect, {
1658
+ title: zh ? "\u9009\u62E9\u5B50\u4EE3\u7406" : "Select Sub-Agent",
1659
+ options,
1660
+ get current() {
1661
+ return currentIdx >= 0 ? options[currentIdx].value : void 0;
1662
+ },
1663
+ onSelect: (opt) => {
1664
+ if (opt.value === backValue) {
1665
+ signals.setOverrideSessionId(void 0);
1666
+ api.kv.set(`${KV_PREFIX}.session`, "");
1667
+ api.ui.toast({
1668
+ message: zh ? "\u5DF2\u5207\u56DE\u4E3B\u4F1A\u8BDD" : "Switched to main session"
1669
+ });
1670
+ } else {
1671
+ signals.setOverrideSessionId(opt.value);
1672
+ api.kv.set(`${KV_PREFIX}.session`, opt.value);
1673
+ api.ui.toast({
1674
+ message: (zh ? "\u5DF2\u5207\u6362\u81F3\u5B50\u4EE3\u7406: " : "Showing sub-agent: ") + opt.value.slice(0, 24) + "\u2026"
1675
+ });
1676
+ }
1677
+ dialog?.clear();
1678
+ }
1679
+ }));
1680
+ } else {
1681
+ const zh = langZH();
1682
+ dialog?.replace(() => _$createComponent(api.ui.DialogPrompt, {
1683
+ get title() {
1684
+ return signals.overrideSessionId() ? zh ? "\u5207\u6362\u5B50\u4EE3\u7406" : "Switch Sub" : zh ? "\u67E5\u770B\u5B50\u4EE3\u7406\u7F13\u5B58" : "View Sub Cache";
1685
+ },
1686
+ description: () => (() => {
1687
+ var _el$80 = _$createElement("text");
1688
+ _$insert(_el$80, zh ? "\u672A\u627E\u5230\u5B50\u4EE3\u7406\uFF0C\u8BF7\u624B\u52A8\u7C98\u8D34 Session ID" : "No sub-agents found. Paste a Session ID manually");
1689
+ return _el$80;
1690
+ })(),
1691
+ placeholder: "ses_...",
1692
+ get value() {
1693
+ return signals.overrideSessionId() ?? api.kv.get(`${KV_PREFIX}.session`, "") ?? "";
1694
+ },
1695
+ onConfirm: (val) => {
1696
+ const sid = val.trim();
1697
+ if (sid) {
1698
+ signals.setOverrideSessionId(sid);
1699
+ api.kv.set(`${KV_PREFIX}.session`, sid);
1700
+ api.ui.toast({
1701
+ message: (langZH() ? "\u5DF2\u5207\u6362\u81F3\u5B50\u4EE3\u7406: " : "Showing sub-agent: ") + sid.slice(0, 24) + "\u2026"
1702
+ });
1703
+ }
1704
+ dialog?.clear();
1705
+ },
1706
+ onCancel: () => dialog?.clear()
1707
+ }));
1708
+ }
1709
+ }
1710
+ }, {
1711
+ title: "Cache: Back to Main",
1712
+ value: "cache.session.back",
1713
+ description: "Return to main session stats",
1714
+ slash: {
1715
+ name: "cache-session-back"
1716
+ },
1717
+ onSelect: (dialog) => {
1718
+ signals.setOverrideSessionId(void 0);
1719
+ api.kv.set(`${KV_PREFIX}.session`, "");
1720
+ api.ui.toast({
1721
+ message: langZH() ? "\u5DF2\u5207\u56DE\u4E3B\u4F1A\u8BDD" : "Switched to main session"
1722
+ });
1723
+ dialog?.clear();
1724
+ }
1524
1725
  }]);
1525
1726
  };
1526
1727
  var mod = {