opencode-subagent-magazine 1.1.3 → 1.2.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
@@ -11,7 +11,7 @@ import { createElement as _$createElement } from "@opentui/solid";
11
11
  import { createMemo, createSignal, createEffect, onMount, onCleanup, untrack, Show, For } from "solid-js";
12
12
 
13
13
  // src/_version.ts
14
- var PLUGIN_VERSION = "1.1.3";
14
+ var PLUGIN_VERSION = "1.2.0";
15
15
 
16
16
  // src/index.tsx
17
17
  var SUBAGENT_TOOLS = /* @__PURE__ */ new Set(["task", "delegate", "call_omo_agent"]);
@@ -30,10 +30,15 @@ var I18N = {
30
30
  "cost.label": "\u8D39\u7528",
31
31
  "scroll.more": "\u66F4\u591A",
32
32
  "scroll.top": "\u56DE\u9876",
33
+ "scroll.bottom": "\u56DE\u5E95",
33
34
  "dismiss.label": "\u6807\u8BB0\u5B8C\u6210",
34
35
  "status.running": "\u8FD0\u884C\u4E2D",
35
36
  "status.done": "\u5DF2\u5B8C\u6210",
36
- "status.error": "\u9519\u8BEF"
37
+ "status.error": "\u9519\u8BEF",
38
+ "order.desc": "\u964D\u5E8F\uFF08\u6700\u65B0\u5728\u524D\uFF09",
39
+ "order.asc": "\u5347\u5E8F\uFF08\u6700\u65E9\u5728\u524D\uFF09",
40
+ "scroll.wheel": "\u6EDA\u8F6E\u7FFB\u9875",
41
+ "scroll.click": "\u70B9\u51FB\u7FFB\u9875"
37
42
  },
38
43
  en: {
39
44
  "panel.title": "SubAgent",
@@ -49,10 +54,15 @@ var I18N = {
49
54
  "cost.label": "cost",
50
55
  "scroll.more": "more",
51
56
  "scroll.top": "Top",
57
+ "scroll.bottom": "Bottom",
52
58
  "dismiss.label": "dismiss",
53
59
  "status.running": "running",
54
60
  "status.done": "done",
55
- "status.error": "error"
61
+ "status.error": "error",
62
+ "order.desc": "Desc (newest first)",
63
+ "order.asc": "Asc (oldest first)",
64
+ "scroll.wheel": "Wheel Scroll",
65
+ "scroll.click": "Click Scroll"
56
66
  }
57
67
  };
58
68
  function detectLang() {
@@ -311,6 +321,8 @@ function SubAgentPanel(props) {
311
321
  const [hoveredOpen, setHoveredOpen] = createSignal(void 0);
312
322
  const [hoveredDismiss, setHoveredDismiss] = createSignal(void 0);
313
323
  const [hoveredTop, setHoveredTop] = createSignal(false);
324
+ const [hoveredMoreAbove, setHoveredMoreAbove] = createSignal(false);
325
+ const [hoveredMoreBelow, setHoveredMoreBelow] = createSignal(false);
314
326
  const [scrollOffset, setScrollOffset] = createSignal((() => {
315
327
  try {
316
328
  return loadSessionData()[props.sessionId]?.scroll ?? 0;
@@ -909,7 +921,11 @@ function SubAgentPanel(props) {
909
921
  };
910
922
  });
911
923
  const entryList = createMemo(() => {
912
- return [...entryMap().values()].sort((a, b) => b.startedAt - a.startedAt);
924
+ const entries2 = [...entryMap().values()];
925
+ if (props.sortOrder() === "desc") {
926
+ return entries2.sort((a, b) => b.startedAt - a.startedAt);
927
+ }
928
+ return entries2.sort((a, b) => a.startedAt - b.startedAt);
913
929
  });
914
930
  const max = props.maxEntries;
915
931
  const clampedOffset = createMemo(() => {
@@ -921,6 +937,49 @@ function SubAgentPanel(props) {
921
937
  const visibleList = createMemo(() => entryList().slice(clampedOffset(), clampedOffset() + max()));
922
938
  const hiddenAbove = createMemo(() => clampedOffset());
923
939
  const hiddenBelow = createMemo(() => Math.max(0, entryList().length - clampedOffset() - max()));
940
+ createEffect(() => {
941
+ if (hiddenAbove() === 0) setHoveredMoreAbove(false);
942
+ });
943
+ let sortInitialized = false;
944
+ createEffect(() => {
945
+ props.sortOrder();
946
+ if (!sortInitialized) {
947
+ sortInitialized = true;
948
+ return;
949
+ }
950
+ const total = untrack(() => entryList().length);
951
+ const m = untrack(() => max());
952
+ const target = props.sortOrder() === "desc" ? 0 : Math.max(0, total - m);
953
+ setScrollOffset(target);
954
+ setTimeout(() => {
955
+ try {
956
+ persistScroll(props.sessionId, target);
957
+ } catch {
958
+ }
959
+ }, 0);
960
+ });
961
+ let prevEntryCount = 0;
962
+ createEffect(() => {
963
+ const total = entryList().length;
964
+ if (prevEntryCount === 0) {
965
+ prevEntryCount = total;
966
+ return;
967
+ }
968
+ if (total === prevEntryCount) return;
969
+ const m = max();
970
+ const wasAtNewest = props.sortOrder() === "desc" ? untrack(() => scrollOffset() === 0) : untrack(() => scrollOffset() >= prevEntryCount - m);
971
+ prevEntryCount = total;
972
+ if (wasAtNewest) {
973
+ const target = props.sortOrder() === "desc" ? 0 : Math.max(0, total - m);
974
+ setScrollOffset(target);
975
+ setTimeout(() => {
976
+ try {
977
+ persistScroll(props.sessionId, target);
978
+ } catch {
979
+ }
980
+ }, 0);
981
+ }
982
+ });
924
983
  const entries = createMemo(() => {
925
984
  const nowVal = now();
926
985
  return entryList().map((e) => ({
@@ -1051,51 +1110,51 @@ function SubAgentPanel(props) {
1051
1110
  _$insert(_el$2, (() => {
1052
1111
  var _c$ = _$memo(() => !!anyEntry());
1053
1112
  return () => _c$() ? [(() => {
1054
- var _el$10 = _$createElement("span");
1055
- _$insert(_el$10, () => " ".repeat(spacerCols()));
1056
- _$effect((_$p) => _$setProp(_el$10, "style", {
1113
+ var _el$11 = _$createElement("span");
1114
+ _$insert(_el$11, () => " ".repeat(spacerCols()));
1115
+ _$effect((_$p) => _$setProp(_el$11, "style", {
1057
1116
  fg: pal().muted
1058
1117
  }, _$p));
1059
- return _el$10;
1118
+ return _el$11;
1060
1119
  })(), (() => {
1061
- var _el$11 = _$createElement("span");
1062
- _$insert(_el$11, () => summaryParts().done);
1063
- _$effect((_$p) => _$setProp(_el$11, "style", {
1120
+ var _el$12 = _$createElement("span");
1121
+ _$insert(_el$12, () => summaryParts().done);
1122
+ _$effect((_$p) => _$setProp(_el$12, "style", {
1064
1123
  fg: pal().success
1065
1124
  }, _$p));
1066
- return _el$11;
1125
+ return _el$12;
1067
1126
  })(), _$memo(() => _$memo(() => runningCount() > 0)() && (() => {
1068
- var _el$12 = _$createElement("span"), _el$13 = _$createTextNode(` `);
1069
- _$insertNode(_el$12, _el$13);
1070
- _$insert(_el$12, () => summaryParts().running, null);
1071
- _$effect((_$p) => _$setProp(_el$12, "style", {
1127
+ var _el$13 = _$createElement("span"), _el$14 = _$createTextNode(` `);
1128
+ _$insertNode(_el$13, _el$14);
1129
+ _$insert(_el$13, () => summaryParts().running, null);
1130
+ _$effect((_$p) => _$setProp(_el$13, "style", {
1072
1131
  fg: pal().warning
1073
1132
  }, _$p));
1074
- return _el$12;
1133
+ return _el$13;
1075
1134
  })()), _$memo(() => _$memo(() => errCount() > 0)() && (() => {
1076
- var _el$14 = _$createElement("span"), _el$15 = _$createTextNode(` `);
1077
- _$insertNode(_el$14, _el$15);
1078
- _$insert(_el$14, () => summaryParts().err, null);
1079
- _$effect((_$p) => _$setProp(_el$14, "style", {
1135
+ var _el$15 = _$createElement("span"), _el$16 = _$createTextNode(` `);
1136
+ _$insertNode(_el$15, _el$16);
1137
+ _$insert(_el$15, () => summaryParts().err, null);
1138
+ _$effect((_$p) => _$setProp(_el$15, "style", {
1080
1139
  fg: pal().error
1081
1140
  }, _$p));
1082
- return _el$14;
1141
+ return _el$15;
1083
1142
  })()), _$memo(() => _$memo(() => !!summaryParts().duration)() ? (() => {
1084
- var _el$16 = _$createElement("span"), _el$17 = _$createTextNode(` `);
1085
- _$insertNode(_el$16, _el$17);
1086
- _$insert(_el$16, () => summaryParts().duration, null);
1087
- _$effect((_$p) => _$setProp(_el$16, "style", {
1143
+ var _el$17 = _$createElement("span"), _el$18 = _$createTextNode(` `);
1144
+ _$insertNode(_el$17, _el$18);
1145
+ _$insert(_el$17, () => summaryParts().duration, null);
1146
+ _$effect((_$p) => _$setProp(_el$17, "style", {
1088
1147
  fg: pal().muted
1089
1148
  }, _$p));
1090
- return _el$16;
1149
+ return _el$17;
1091
1150
  })() : null), _$memo(() => _$memo(() => !!summaryParts().cost)() ? (() => {
1092
- var _el$18 = _$createElement("span"), _el$19 = _$createTextNode(` `);
1093
- _$insertNode(_el$18, _el$19);
1094
- _$insert(_el$18, () => summaryParts().cost, null);
1095
- _$effect((_$p) => _$setProp(_el$18, "style", {
1151
+ var _el$19 = _$createElement("span"), _el$20 = _$createTextNode(` `);
1152
+ _$insertNode(_el$19, _el$20);
1153
+ _$insert(_el$19, () => summaryParts().cost, null);
1154
+ _$effect((_$p) => _$setProp(_el$19, "style", {
1096
1155
  fg: pal().warning
1097
1156
  }, _$p));
1098
- return _el$18;
1157
+ return _el$19;
1099
1158
  })() : null)] : null;
1100
1159
  })(), null);
1101
1160
  _$insert(_el$, _$createComponent(Show, {
@@ -1114,19 +1173,20 @@ function SubAgentPanel(props) {
1114
1173
  },
1115
1174
  get fallback() {
1116
1175
  return (() => {
1117
- var _el$20 = _$createElement("text"), _el$21 = _$createTextNode(` > `), _el$23 = _$createTextNode(` `);
1118
- _$insertNode(_el$20, _el$21);
1119
- _$insertNode(_el$20, _el$23);
1120
- _$insert(_el$20, () => t("status.none"), _el$23);
1121
- _$effect((_$p) => _$setProp(_el$20, "style", {
1176
+ var _el$21 = _$createElement("text"), _el$22 = _$createTextNode(` > `), _el$24 = _$createTextNode(` `);
1177
+ _$insertNode(_el$21, _el$22);
1178
+ _$insertNode(_el$21, _el$24);
1179
+ _$insert(_el$21, () => t("status.none"), _el$24);
1180
+ _$effect((_$p) => _$setProp(_el$21, "style", {
1122
1181
  fg: pal().muted
1123
1182
  }, _$p));
1124
- return _el$20;
1183
+ return _el$21;
1125
1184
  })();
1126
1185
  },
1127
1186
  get children() {
1128
1187
  var _el$7 = _$createElement("box");
1129
1188
  _$setProp(_el$7, "onMouseScroll", (e) => {
1189
+ if (props.scrollMode() === "click") return;
1130
1190
  const total = entryList().length;
1131
1191
  const m = max();
1132
1192
  if (total <= m) return;
@@ -1145,13 +1205,37 @@ function SubAgentPanel(props) {
1145
1205
  return hiddenAbove() > 0;
1146
1206
  },
1147
1207
  get children() {
1148
- var _el$8 = _$createElement("text"), _el$9 = _$createTextNode(` &uarr; `), _el$1 = _$createTextNode(` `);
1208
+ var _el$8 = _$createElement("text"), _el$9 = _$createElement("span"), _el$0 = _$createTextNode(` &uarr; `), _el$10 = _$createTextNode(` `);
1149
1209
  _$insertNode(_el$8, _el$9);
1150
- _$insertNode(_el$8, _el$1);
1151
- _$insert(_el$8, hiddenAbove, _el$1);
1152
- _$insert(_el$8, () => t("scroll.more"), null);
1153
- _$effect((_$p) => _$setProp(_el$8, "style", {
1154
- fg: pal().muted
1210
+ _$setProp(_el$8, "onMouseOver", () => setHoveredMoreAbove(true));
1211
+ _$setProp(_el$8, "onMouseOut", () => setHoveredMoreAbove(false));
1212
+ _$setProp(_el$8, "onMouseUp", () => {
1213
+ const total = entryList().length;
1214
+ const m = max();
1215
+ if (total <= m) return;
1216
+ const next = Math.max(0, scrollOffset() - m);
1217
+ if (next === 0) {
1218
+ setTimeout(() => {
1219
+ setScrollOffset(next);
1220
+ try {
1221
+ persistScroll(props.sessionId, next);
1222
+ } catch {
1223
+ }
1224
+ }, 0);
1225
+ } else {
1226
+ setScrollOffset(next);
1227
+ try {
1228
+ persistScroll(props.sessionId, next);
1229
+ } catch {
1230
+ }
1231
+ }
1232
+ });
1233
+ _$insertNode(_el$9, _el$0);
1234
+ _$insertNode(_el$9, _el$10);
1235
+ _$insert(_el$9, hiddenAbove, _el$10);
1236
+ _$insert(_el$9, () => t("scroll.more"), null);
1237
+ _$effect((_$p) => _$setProp(_el$9, "style", {
1238
+ fg: hoveredMoreAbove() ? pal().warning : pal().muted
1155
1239
  }, _$p));
1156
1240
  return _el$8;
1157
1241
  }
@@ -1196,36 +1280,36 @@ function SubAgentPanel(props) {
1196
1280
  return truncated + " ".repeat(pad);
1197
1281
  };
1198
1282
  return [(() => {
1199
- var _el$24 = _$createElement("text"), _el$25 = _$createElement("span"), _el$26 = _$createTextNode(` `), _el$27 = _$createElement("span"), _el$28 = _$createTextNode(` `), _el$29 = _$createElement("span");
1200
- _$insertNode(_el$24, _el$25);
1201
- _$insertNode(_el$24, _el$26);
1202
- _$insertNode(_el$24, _el$27);
1203
- _$insertNode(_el$24, _el$28);
1204
- _$insertNode(_el$24, _el$29);
1205
- _$setProp(_el$24, "onMouseUp", () => toggleExpand(entry.id));
1206
- _$insert(_el$25, () => isExpanded() ? "\u25BC" : "\u25B6");
1207
- _$insert(_el$27, statusDot);
1208
- _$insert(_el$29, labelText);
1209
- _$insert(_el$24, (() => {
1283
+ var _el$25 = _$createElement("text"), _el$26 = _$createElement("span"), _el$27 = _$createTextNode(` `), _el$28 = _$createElement("span"), _el$29 = _$createTextNode(` `), _el$30 = _$createElement("span");
1284
+ _$insertNode(_el$25, _el$26);
1285
+ _$insertNode(_el$25, _el$27);
1286
+ _$insertNode(_el$25, _el$28);
1287
+ _$insertNode(_el$25, _el$29);
1288
+ _$insertNode(_el$25, _el$30);
1289
+ _$setProp(_el$25, "onMouseUp", () => toggleExpand(entry.id));
1290
+ _$insert(_el$26, () => isExpanded() ? "\u25BC" : "\u25B6");
1291
+ _$insert(_el$28, statusDot);
1292
+ _$insert(_el$30, labelText);
1293
+ _$insert(_el$25, (() => {
1210
1294
  var _c$2 = _$memo(() => !!timeText());
1211
1295
  return () => _c$2() ? [" ", (() => {
1212
- var _el$80 = _$createElement("span");
1213
- _$insert(_el$80, timeText);
1214
- _$effect((_$p) => _$setProp(_el$80, "style", {
1296
+ var _el$81 = _$createElement("span");
1297
+ _$insert(_el$81, timeText);
1298
+ _$effect((_$p) => _$setProp(_el$81, "style", {
1215
1299
  fg: timeColor()
1216
1300
  }, _$p));
1217
- return _el$80;
1301
+ return _el$81;
1218
1302
  })()] : null;
1219
1303
  })(), null);
1220
- _$insert(_el$24, (() => {
1304
+ _$insert(_el$25, (() => {
1221
1305
  var _c$3 = _$memo(() => !!tokenText());
1222
1306
  return () => _c$3() ? (() => {
1223
- var _el$81 = _$createElement("span");
1224
- _$insert(_el$81, tokenText);
1225
- _$effect((_$p) => _$setProp(_el$81, "style", {
1307
+ var _el$82 = _$createElement("span");
1308
+ _$insert(_el$82, tokenText);
1309
+ _$effect((_$p) => _$setProp(_el$82, "style", {
1226
1310
  fg: pal().muted
1227
1311
  }, _$p));
1228
- return _el$81;
1312
+ return _el$82;
1229
1313
  })() : null;
1230
1314
  })(), null);
1231
1315
  _$effect((_p$) => {
@@ -1236,31 +1320,31 @@ function SubAgentPanel(props) {
1236
1320
  }, _v$5 = {
1237
1321
  fg: pal().text
1238
1322
  };
1239
- _v$3 !== _p$.e && (_p$.e = _$setProp(_el$25, "style", _v$3, _p$.e));
1240
- _v$4 !== _p$.t && (_p$.t = _$setProp(_el$27, "style", _v$4, _p$.t));
1241
- _v$5 !== _p$.a && (_p$.a = _$setProp(_el$29, "style", _v$5, _p$.a));
1323
+ _v$3 !== _p$.e && (_p$.e = _$setProp(_el$26, "style", _v$3, _p$.e));
1324
+ _v$4 !== _p$.t && (_p$.t = _$setProp(_el$28, "style", _v$4, _p$.t));
1325
+ _v$5 !== _p$.a && (_p$.a = _$setProp(_el$30, "style", _v$5, _p$.a));
1242
1326
  return _p$;
1243
1327
  }, {
1244
1328
  e: void 0,
1245
1329
  t: void 0,
1246
1330
  a: void 0
1247
1331
  });
1248
- return _el$24;
1332
+ return _el$25;
1249
1333
  })(), _$createComponent(Show, {
1250
1334
  get when() {
1251
1335
  return isExpanded();
1252
1336
  },
1253
1337
  get children() {
1254
1338
  return [(() => {
1255
- var _el$30 = _$createElement("text"), _el$31 = _$createTextNode(` `), _el$32 = _$createElement("span"), _el$33 = _$createTextNode(`: `), _el$34 = _$createElement("span"), _el$35 = _$createElement("span");
1256
- _$insertNode(_el$30, _el$31);
1257
- _$insertNode(_el$30, _el$32);
1258
- _$insertNode(_el$30, _el$34);
1259
- _$insertNode(_el$30, _el$35);
1260
- _$insertNode(_el$32, _el$33);
1261
- _$insert(_el$32, () => t("agent.label"), _el$33);
1262
- _$insert(_el$34, () => " ".repeat(expandedPad(t("agent.label"))));
1263
- _$insert(_el$35, () => entry.agent);
1339
+ var _el$31 = _$createElement("text"), _el$32 = _$createTextNode(` `), _el$33 = _$createElement("span"), _el$34 = _$createTextNode(`: `), _el$35 = _$createElement("span"), _el$36 = _$createElement("span");
1340
+ _$insertNode(_el$31, _el$32);
1341
+ _$insertNode(_el$31, _el$33);
1342
+ _$insertNode(_el$31, _el$35);
1343
+ _$insertNode(_el$31, _el$36);
1344
+ _$insertNode(_el$33, _el$34);
1345
+ _$insert(_el$33, () => t("agent.label"), _el$34);
1346
+ _$insert(_el$35, () => " ".repeat(expandedPad(t("agent.label"))));
1347
+ _$insert(_el$36, () => entry.agent);
1264
1348
  _$effect((_p$) => {
1265
1349
  var _v$6 = {
1266
1350
  fg: pal().primary
@@ -1269,26 +1353,26 @@ function SubAgentPanel(props) {
1269
1353
  }, _v$8 = {
1270
1354
  fg: pal().muted
1271
1355
  };
1272
- _v$6 !== _p$.e && (_p$.e = _$setProp(_el$32, "style", _v$6, _p$.e));
1273
- _v$7 !== _p$.t && (_p$.t = _$setProp(_el$34, "style", _v$7, _p$.t));
1274
- _v$8 !== _p$.a && (_p$.a = _$setProp(_el$35, "style", _v$8, _p$.a));
1356
+ _v$6 !== _p$.e && (_p$.e = _$setProp(_el$33, "style", _v$6, _p$.e));
1357
+ _v$7 !== _p$.t && (_p$.t = _$setProp(_el$35, "style", _v$7, _p$.t));
1358
+ _v$8 !== _p$.a && (_p$.a = _$setProp(_el$36, "style", _v$8, _p$.a));
1275
1359
  return _p$;
1276
1360
  }, {
1277
1361
  e: void 0,
1278
1362
  t: void 0,
1279
1363
  a: void 0
1280
1364
  });
1281
- return _el$30;
1365
+ return _el$31;
1282
1366
  })(), (() => {
1283
- var _el$36 = _$createElement("text"), _el$37 = _$createTextNode(` `), _el$38 = _$createElement("span"), _el$39 = _$createTextNode(`: `), _el$40 = _$createElement("span"), _el$41 = _$createElement("span");
1284
- _$insertNode(_el$36, _el$37);
1285
- _$insertNode(_el$36, _el$38);
1286
- _$insertNode(_el$36, _el$40);
1287
- _$insertNode(_el$36, _el$41);
1288
- _$insertNode(_el$38, _el$39);
1289
- _$insert(_el$38, () => t("status.label"), _el$39);
1290
- _$insert(_el$40, () => " ".repeat(expandedPad(t("status.label"))));
1291
- _$insert(_el$41, () => isRunning ? t("status.running") : isError ? t("status.error") : t("status.done"));
1367
+ var _el$37 = _$createElement("text"), _el$38 = _$createTextNode(` `), _el$39 = _$createElement("span"), _el$40 = _$createTextNode(`: `), _el$41 = _$createElement("span"), _el$42 = _$createElement("span");
1368
+ _$insertNode(_el$37, _el$38);
1369
+ _$insertNode(_el$37, _el$39);
1370
+ _$insertNode(_el$37, _el$41);
1371
+ _$insertNode(_el$37, _el$42);
1372
+ _$insertNode(_el$39, _el$40);
1373
+ _$insert(_el$39, () => t("status.label"), _el$40);
1374
+ _$insert(_el$41, () => " ".repeat(expandedPad(t("status.label"))));
1375
+ _$insert(_el$42, () => isRunning ? t("status.running") : isError ? t("status.error") : t("status.done"));
1292
1376
  _$effect((_p$) => {
1293
1377
  var _v$9 = {
1294
1378
  fg: pal().primary
@@ -1297,30 +1381,30 @@ function SubAgentPanel(props) {
1297
1381
  }, _v$1 = {
1298
1382
  fg: isRunning ? pal().warning : isError ? pal().error : pal().success
1299
1383
  };
1300
- _v$9 !== _p$.e && (_p$.e = _$setProp(_el$38, "style", _v$9, _p$.e));
1301
- _v$0 !== _p$.t && (_p$.t = _$setProp(_el$40, "style", _v$0, _p$.t));
1302
- _v$1 !== _p$.a && (_p$.a = _$setProp(_el$41, "style", _v$1, _p$.a));
1384
+ _v$9 !== _p$.e && (_p$.e = _$setProp(_el$39, "style", _v$9, _p$.e));
1385
+ _v$0 !== _p$.t && (_p$.t = _$setProp(_el$41, "style", _v$0, _p$.t));
1386
+ _v$1 !== _p$.a && (_p$.a = _$setProp(_el$42, "style", _v$1, _p$.a));
1303
1387
  return _p$;
1304
1388
  }, {
1305
1389
  e: void 0,
1306
1390
  t: void 0,
1307
1391
  a: void 0
1308
1392
  });
1309
- return _el$36;
1393
+ return _el$37;
1310
1394
  })(), _$createComponent(Show, {
1311
1395
  get when() {
1312
1396
  return elapsed() >= 2e3 || entry.endedAt !== void 0;
1313
1397
  },
1314
1398
  get children() {
1315
- var _el$42 = _$createElement("text"), _el$43 = _$createTextNode(` `), _el$44 = _$createElement("span"), _el$45 = _$createTextNode(`: `), _el$46 = _$createElement("span"), _el$47 = _$createElement("span");
1316
- _$insertNode(_el$42, _el$43);
1317
- _$insertNode(_el$42, _el$44);
1318
- _$insertNode(_el$42, _el$46);
1319
- _$insertNode(_el$42, _el$47);
1320
- _$insertNode(_el$44, _el$45);
1321
- _$insert(_el$44, () => t("time.label"), _el$45);
1322
- _$insert(_el$46, () => " ".repeat(expandedPad(t("time.label"))));
1323
- _$insert(_el$47, () => fmtDurationShort(elapsed(), isRunning));
1399
+ var _el$43 = _$createElement("text"), _el$44 = _$createTextNode(` `), _el$45 = _$createElement("span"), _el$46 = _$createTextNode(`: `), _el$47 = _$createElement("span"), _el$48 = _$createElement("span");
1400
+ _$insertNode(_el$43, _el$44);
1401
+ _$insertNode(_el$43, _el$45);
1402
+ _$insertNode(_el$43, _el$47);
1403
+ _$insertNode(_el$43, _el$48);
1404
+ _$insertNode(_el$45, _el$46);
1405
+ _$insert(_el$45, () => t("time.label"), _el$46);
1406
+ _$insert(_el$47, () => " ".repeat(expandedPad(t("time.label"))));
1407
+ _$insert(_el$48, () => fmtDurationShort(elapsed(), isRunning));
1324
1408
  _$effect((_p$) => {
1325
1409
  var _v$10 = {
1326
1410
  fg: pal().primary
@@ -1329,31 +1413,31 @@ function SubAgentPanel(props) {
1329
1413
  }, _v$12 = {
1330
1414
  fg: pal().muted
1331
1415
  };
1332
- _v$10 !== _p$.e && (_p$.e = _$setProp(_el$44, "style", _v$10, _p$.e));
1333
- _v$11 !== _p$.t && (_p$.t = _$setProp(_el$46, "style", _v$11, _p$.t));
1334
- _v$12 !== _p$.a && (_p$.a = _$setProp(_el$47, "style", _v$12, _p$.a));
1416
+ _v$10 !== _p$.e && (_p$.e = _$setProp(_el$45, "style", _v$10, _p$.e));
1417
+ _v$11 !== _p$.t && (_p$.t = _$setProp(_el$47, "style", _v$11, _p$.t));
1418
+ _v$12 !== _p$.a && (_p$.a = _$setProp(_el$48, "style", _v$12, _p$.a));
1335
1419
  return _p$;
1336
1420
  }, {
1337
1421
  e: void 0,
1338
1422
  t: void 0,
1339
1423
  a: void 0
1340
1424
  });
1341
- return _el$42;
1425
+ return _el$43;
1342
1426
  }
1343
1427
  }), _$createComponent(Show, {
1344
1428
  get when() {
1345
1429
  return entry.tokens !== void 0;
1346
1430
  },
1347
1431
  get children() {
1348
- var _el$48 = _$createElement("text"), _el$49 = _$createTextNode(` `), _el$50 = _$createElement("span"), _el$51 = _$createTextNode(`: `), _el$52 = _$createElement("span"), _el$53 = _$createElement("span");
1349
- _$insertNode(_el$48, _el$49);
1350
- _$insertNode(_el$48, _el$50);
1351
- _$insertNode(_el$48, _el$52);
1352
- _$insertNode(_el$48, _el$53);
1353
- _$insertNode(_el$50, _el$51);
1354
- _$insert(_el$50, () => t("tokens.label"), _el$51);
1355
- _$insert(_el$52, () => " ".repeat(expandedPad(t("tokens.label"))));
1356
- _$insert(_el$53, () => fmtTokens(entry.tokens));
1432
+ var _el$49 = _$createElement("text"), _el$50 = _$createTextNode(` `), _el$51 = _$createElement("span"), _el$52 = _$createTextNode(`: `), _el$53 = _$createElement("span"), _el$54 = _$createElement("span");
1433
+ _$insertNode(_el$49, _el$50);
1434
+ _$insertNode(_el$49, _el$51);
1435
+ _$insertNode(_el$49, _el$53);
1436
+ _$insertNode(_el$49, _el$54);
1437
+ _$insertNode(_el$51, _el$52);
1438
+ _$insert(_el$51, () => t("tokens.label"), _el$52);
1439
+ _$insert(_el$53, () => " ".repeat(expandedPad(t("tokens.label"))));
1440
+ _$insert(_el$54, () => fmtTokens(entry.tokens));
1357
1441
  _$effect((_p$) => {
1358
1442
  var _v$13 = {
1359
1443
  fg: pal().primary
@@ -1362,31 +1446,31 @@ function SubAgentPanel(props) {
1362
1446
  }, _v$15 = {
1363
1447
  fg: pal().muted
1364
1448
  };
1365
- _v$13 !== _p$.e && (_p$.e = _$setProp(_el$50, "style", _v$13, _p$.e));
1366
- _v$14 !== _p$.t && (_p$.t = _$setProp(_el$52, "style", _v$14, _p$.t));
1367
- _v$15 !== _p$.a && (_p$.a = _$setProp(_el$53, "style", _v$15, _p$.a));
1449
+ _v$13 !== _p$.e && (_p$.e = _$setProp(_el$51, "style", _v$13, _p$.e));
1450
+ _v$14 !== _p$.t && (_p$.t = _$setProp(_el$53, "style", _v$14, _p$.t));
1451
+ _v$15 !== _p$.a && (_p$.a = _$setProp(_el$54, "style", _v$15, _p$.a));
1368
1452
  return _p$;
1369
1453
  }, {
1370
1454
  e: void 0,
1371
1455
  t: void 0,
1372
1456
  a: void 0
1373
1457
  });
1374
- return _el$48;
1458
+ return _el$49;
1375
1459
  }
1376
1460
  }), _$createComponent(Show, {
1377
1461
  get when() {
1378
1462
  return entry.error;
1379
1463
  },
1380
1464
  get children() {
1381
- var _el$54 = _$createElement("text"), _el$55 = _$createTextNode(` `), _el$56 = _$createElement("span"), _el$57 = _$createTextNode(`: `), _el$58 = _$createElement("span"), _el$59 = _$createElement("span");
1382
- _$insertNode(_el$54, _el$55);
1383
- _$insertNode(_el$54, _el$56);
1384
- _$insertNode(_el$54, _el$58);
1385
- _$insertNode(_el$54, _el$59);
1386
- _$insertNode(_el$56, _el$57);
1387
- _$insert(_el$56, () => t("error.label"), _el$57);
1388
- _$insert(_el$58, () => " ".repeat(expandedPad(t("error.label"))));
1389
- _$insert(_el$59, () => truncate(String(entry.error), expandedValAvail()));
1465
+ var _el$55 = _$createElement("text"), _el$56 = _$createTextNode(` `), _el$57 = _$createElement("span"), _el$58 = _$createTextNode(`: `), _el$59 = _$createElement("span"), _el$60 = _$createElement("span");
1466
+ _$insertNode(_el$55, _el$56);
1467
+ _$insertNode(_el$55, _el$57);
1468
+ _$insertNode(_el$55, _el$59);
1469
+ _$insertNode(_el$55, _el$60);
1470
+ _$insertNode(_el$57, _el$58);
1471
+ _$insert(_el$57, () => t("error.label"), _el$58);
1472
+ _$insert(_el$59, () => " ".repeat(expandedPad(t("error.label"))));
1473
+ _$insert(_el$60, () => truncate(String(entry.error), expandedValAvail()));
1390
1474
  _$effect((_p$) => {
1391
1475
  var _v$16 = {
1392
1476
  fg: pal().error
@@ -1395,32 +1479,32 @@ function SubAgentPanel(props) {
1395
1479
  }, _v$18 = {
1396
1480
  fg: pal().error
1397
1481
  };
1398
- _v$16 !== _p$.e && (_p$.e = _$setProp(_el$56, "style", _v$16, _p$.e));
1399
- _v$17 !== _p$.t && (_p$.t = _$setProp(_el$58, "style", _v$17, _p$.t));
1400
- _v$18 !== _p$.a && (_p$.a = _$setProp(_el$59, "style", _v$18, _p$.a));
1482
+ _v$16 !== _p$.e && (_p$.e = _$setProp(_el$57, "style", _v$16, _p$.e));
1483
+ _v$17 !== _p$.t && (_p$.t = _$setProp(_el$59, "style", _v$17, _p$.t));
1484
+ _v$18 !== _p$.a && (_p$.a = _$setProp(_el$60, "style", _v$18, _p$.a));
1401
1485
  return _p$;
1402
1486
  }, {
1403
1487
  e: void 0,
1404
1488
  t: void 0,
1405
1489
  a: void 0
1406
1490
  });
1407
- return _el$54;
1491
+ return _el$55;
1408
1492
  }
1409
1493
  }), _$createComponent(Show, {
1410
1494
  get when() {
1411
1495
  return entry.cost !== void 0;
1412
1496
  },
1413
1497
  get children() {
1414
- var _el$60 = _$createElement("text"), _el$61 = _$createTextNode(` `), _el$62 = _$createElement("span"), _el$63 = _$createTextNode(`: `), _el$64 = _$createElement("span"), _el$65 = _$createElement("span"), _el$66 = _$createTextNode(`$`);
1415
- _$insertNode(_el$60, _el$61);
1416
- _$insertNode(_el$60, _el$62);
1417
- _$insertNode(_el$60, _el$64);
1418
- _$insertNode(_el$60, _el$65);
1419
- _$insertNode(_el$62, _el$63);
1420
- _$insert(_el$62, () => t("cost.label"), _el$63);
1421
- _$insert(_el$64, () => " ".repeat(expandedPad(t("cost.label"))));
1422
- _$insertNode(_el$65, _el$66);
1423
- _$insert(_el$65, () => entry.cost.toFixed(4), null);
1498
+ var _el$61 = _$createElement("text"), _el$62 = _$createTextNode(` `), _el$63 = _$createElement("span"), _el$64 = _$createTextNode(`: `), _el$65 = _$createElement("span"), _el$66 = _$createElement("span"), _el$67 = _$createTextNode(`$`);
1499
+ _$insertNode(_el$61, _el$62);
1500
+ _$insertNode(_el$61, _el$63);
1501
+ _$insertNode(_el$61, _el$65);
1502
+ _$insertNode(_el$61, _el$66);
1503
+ _$insertNode(_el$63, _el$64);
1504
+ _$insert(_el$63, () => t("cost.label"), _el$64);
1505
+ _$insert(_el$65, () => " ".repeat(expandedPad(t("cost.label"))));
1506
+ _$insertNode(_el$66, _el$67);
1507
+ _$insert(_el$66, () => entry.cost.toFixed(4), null);
1424
1508
  _$effect((_p$) => {
1425
1509
  var _v$19 = {
1426
1510
  fg: pal().primary
@@ -1429,31 +1513,31 @@ function SubAgentPanel(props) {
1429
1513
  }, _v$21 = {
1430
1514
  fg: pal().muted
1431
1515
  };
1432
- _v$19 !== _p$.e && (_p$.e = _$setProp(_el$62, "style", _v$19, _p$.e));
1433
- _v$20 !== _p$.t && (_p$.t = _$setProp(_el$64, "style", _v$20, _p$.t));
1434
- _v$21 !== _p$.a && (_p$.a = _$setProp(_el$65, "style", _v$21, _p$.a));
1516
+ _v$19 !== _p$.e && (_p$.e = _$setProp(_el$63, "style", _v$19, _p$.e));
1517
+ _v$20 !== _p$.t && (_p$.t = _$setProp(_el$65, "style", _v$20, _p$.t));
1518
+ _v$21 !== _p$.a && (_p$.a = _$setProp(_el$66, "style", _v$21, _p$.a));
1435
1519
  return _p$;
1436
1520
  }, {
1437
1521
  e: void 0,
1438
1522
  t: void 0,
1439
1523
  a: void 0
1440
1524
  });
1441
- return _el$60;
1525
+ return _el$61;
1442
1526
  }
1443
1527
  }), _$createComponent(Show, {
1444
1528
  get when() {
1445
1529
  return entry.model;
1446
1530
  },
1447
1531
  get children() {
1448
- var _el$67 = _$createElement("text"), _el$68 = _$createTextNode(` `), _el$69 = _$createElement("span"), _el$70 = _$createTextNode(`: `), _el$71 = _$createElement("span"), _el$72 = _$createElement("span");
1449
- _$insertNode(_el$67, _el$68);
1450
- _$insertNode(_el$67, _el$69);
1451
- _$insertNode(_el$67, _el$71);
1452
- _$insertNode(_el$67, _el$72);
1453
- _$insertNode(_el$69, _el$70);
1454
- _$insert(_el$69, () => t("model.label"), _el$70);
1455
- _$insert(_el$71, () => " ".repeat(expandedPad(t("model.label"))));
1456
- _$insert(_el$72, () => truncate(entry.model, expandedValAvail()));
1532
+ var _el$68 = _$createElement("text"), _el$69 = _$createTextNode(` `), _el$70 = _$createElement("span"), _el$71 = _$createTextNode(`: `), _el$72 = _$createElement("span"), _el$73 = _$createElement("span");
1533
+ _$insertNode(_el$68, _el$69);
1534
+ _$insertNode(_el$68, _el$70);
1535
+ _$insertNode(_el$68, _el$72);
1536
+ _$insertNode(_el$68, _el$73);
1537
+ _$insertNode(_el$70, _el$71);
1538
+ _$insert(_el$70, () => t("model.label"), _el$71);
1539
+ _$insert(_el$72, () => " ".repeat(expandedPad(t("model.label"))));
1540
+ _$insert(_el$73, () => truncate(entry.model, expandedValAvail()));
1457
1541
  _$effect((_p$) => {
1458
1542
  var _v$22 = {
1459
1543
  fg: pal().primary
@@ -1462,33 +1546,33 @@ function SubAgentPanel(props) {
1462
1546
  }, _v$24 = {
1463
1547
  fg: pal().muted
1464
1548
  };
1465
- _v$22 !== _p$.e && (_p$.e = _$setProp(_el$69, "style", _v$22, _p$.e));
1466
- _v$23 !== _p$.t && (_p$.t = _$setProp(_el$71, "style", _v$23, _p$.t));
1467
- _v$24 !== _p$.a && (_p$.a = _$setProp(_el$72, "style", _v$24, _p$.a));
1549
+ _v$22 !== _p$.e && (_p$.e = _$setProp(_el$70, "style", _v$22, _p$.e));
1550
+ _v$23 !== _p$.t && (_p$.t = _$setProp(_el$72, "style", _v$23, _p$.t));
1551
+ _v$24 !== _p$.a && (_p$.a = _$setProp(_el$73, "style", _v$24, _p$.a));
1468
1552
  return _p$;
1469
1553
  }, {
1470
1554
  e: void 0,
1471
1555
  t: void 0,
1472
1556
  a: void 0
1473
1557
  });
1474
- return _el$67;
1558
+ return _el$68;
1475
1559
  }
1476
1560
  }), _$createComponent(Show, {
1477
1561
  get when() {
1478
1562
  return entry.todoTotal !== void 0;
1479
1563
  },
1480
1564
  get children() {
1481
- var _el$73 = _$createElement("text"), _el$74 = _$createTextNode(` `), _el$75 = _$createElement("span"), _el$76 = _$createTextNode(`: `), _el$77 = _$createElement("span"), _el$78 = _$createElement("span"), _el$79 = _$createTextNode(`/`);
1482
- _$insertNode(_el$73, _el$74);
1483
- _$insertNode(_el$73, _el$75);
1484
- _$insertNode(_el$73, _el$77);
1485
- _$insertNode(_el$73, _el$78);
1486
- _$insertNode(_el$75, _el$76);
1487
- _$insert(_el$75, () => t("todo.label"), _el$76);
1488
- _$insert(_el$77, () => " ".repeat(expandedPad(t("todo.label"))));
1489
- _$insertNode(_el$78, _el$79);
1490
- _$insert(_el$78, () => entry.todoDone, _el$79);
1491
- _$insert(_el$78, () => entry.todoTotal, null);
1565
+ var _el$74 = _$createElement("text"), _el$75 = _$createTextNode(` `), _el$76 = _$createElement("span"), _el$77 = _$createTextNode(`: `), _el$78 = _$createElement("span"), _el$79 = _$createElement("span"), _el$80 = _$createTextNode(`/`);
1566
+ _$insertNode(_el$74, _el$75);
1567
+ _$insertNode(_el$74, _el$76);
1568
+ _$insertNode(_el$74, _el$78);
1569
+ _$insertNode(_el$74, _el$79);
1570
+ _$insertNode(_el$76, _el$77);
1571
+ _$insert(_el$76, () => t("todo.label"), _el$77);
1572
+ _$insert(_el$78, () => " ".repeat(expandedPad(t("todo.label"))));
1573
+ _$insertNode(_el$79, _el$80);
1574
+ _$insert(_el$79, () => entry.todoDone, _el$80);
1575
+ _$insert(_el$79, () => entry.todoTotal, null);
1492
1576
  _$effect((_p$) => {
1493
1577
  var _v$25 = {
1494
1578
  fg: pal().primary
@@ -1497,16 +1581,16 @@ function SubAgentPanel(props) {
1497
1581
  }, _v$27 = {
1498
1582
  fg: pal().muted
1499
1583
  };
1500
- _v$25 !== _p$.e && (_p$.e = _$setProp(_el$75, "style", _v$25, _p$.e));
1501
- _v$26 !== _p$.t && (_p$.t = _$setProp(_el$77, "style", _v$26, _p$.t));
1502
- _v$27 !== _p$.a && (_p$.a = _$setProp(_el$78, "style", _v$27, _p$.a));
1584
+ _v$25 !== _p$.e && (_p$.e = _$setProp(_el$76, "style", _v$25, _p$.e));
1585
+ _v$26 !== _p$.t && (_p$.t = _$setProp(_el$78, "style", _v$26, _p$.t));
1586
+ _v$27 !== _p$.a && (_p$.a = _$setProp(_el$79, "style", _v$27, _p$.a));
1503
1587
  return _p$;
1504
1588
  }, {
1505
1589
  e: void 0,
1506
1590
  t: void 0,
1507
1591
  a: void 0
1508
1592
  });
1509
- return _el$73;
1593
+ return _el$74;
1510
1594
  }
1511
1595
  }), _$createComponent(Show, {
1512
1596
  get when() {
@@ -1524,66 +1608,66 @@ function SubAgentPanel(props) {
1524
1608
  /* indent */
1525
1609
  );
1526
1610
  return (() => {
1527
- var _el$82 = _$createElement("box");
1528
- _$setProp(_el$82, "flexDirection", "row");
1529
- _$insert(_el$82, _$createComponent(Show, {
1611
+ var _el$83 = _$createElement("box");
1612
+ _$setProp(_el$83, "flexDirection", "row");
1613
+ _$insert(_el$83, _$createComponent(Show, {
1530
1614
  get when() {
1531
1615
  return entry.sessionId;
1532
1616
  },
1533
1617
  get fallback() {
1534
1618
  return (() => {
1535
- var _el$89 = _$createElement("text");
1536
- _$insertNode(_el$89, _$createTextNode(` `));
1537
- return _el$89;
1619
+ var _el$90 = _$createElement("text");
1620
+ _$insertNode(_el$90, _$createTextNode(` `));
1621
+ return _el$90;
1538
1622
  })();
1539
1623
  },
1540
1624
  get children() {
1541
- var _el$83 = _$createElement("text"), _el$84 = _$createElement("span"), _el$85 = _$createElement("span");
1542
- _$insertNode(_el$83, _el$84);
1543
- _$insertNode(_el$83, _el$85);
1544
- _$setProp(_el$83, "onMouseOver", () => setHoveredOpen(entry.id));
1545
- _$setProp(_el$83, "onMouseOut", () => setHoveredOpen(void 0));
1546
- _$setProp(_el$83, "onMouseUp", () => {
1625
+ var _el$84 = _$createElement("text"), _el$85 = _$createElement("span"), _el$86 = _$createElement("span");
1626
+ _$insertNode(_el$84, _el$85);
1627
+ _$insertNode(_el$84, _el$86);
1628
+ _$setProp(_el$84, "onMouseOver", () => setHoveredOpen(entry.id));
1629
+ _$setProp(_el$84, "onMouseOut", () => setHoveredOpen(void 0));
1630
+ _$setProp(_el$84, "onMouseUp", () => {
1547
1631
  if (entry.sessionId) {
1548
1632
  props.api.route.navigate("session", {
1549
1633
  sessionID: entry.sessionId
1550
1634
  });
1551
1635
  }
1552
1636
  });
1553
- _$insert(_el$84, openPrefix);
1554
- _$insert(_el$85, () => t("open.label"));
1637
+ _$insert(_el$85, openPrefix);
1638
+ _$insert(_el$86, () => t("open.label"));
1555
1639
  _$effect((_p$) => {
1556
1640
  var _v$28 = {
1557
1641
  fg: hoveredOpen() === entry.id ? pal().warning : pal().primary
1558
1642
  }, _v$29 = {
1559
1643
  fg: hoveredOpen() === entry.id ? pal().warning : pal().primary
1560
1644
  };
1561
- _v$28 !== _p$.e && (_p$.e = _$setProp(_el$84, "style", _v$28, _p$.e));
1562
- _v$29 !== _p$.t && (_p$.t = _$setProp(_el$85, "style", _v$29, _p$.t));
1645
+ _v$28 !== _p$.e && (_p$.e = _$setProp(_el$85, "style", _v$28, _p$.e));
1646
+ _v$29 !== _p$.t && (_p$.t = _$setProp(_el$86, "style", _v$29, _p$.t));
1563
1647
  return _p$;
1564
1648
  }, {
1565
1649
  e: void 0,
1566
1650
  t: void 0
1567
1651
  });
1568
- return _el$83;
1652
+ return _el$84;
1569
1653
  }
1570
1654
  }), null);
1571
- _$insert(_el$82, _$createComponent(Show, {
1655
+ _$insert(_el$83, _$createComponent(Show, {
1572
1656
  when: isRunning,
1573
1657
  get children() {
1574
1658
  return [(() => {
1575
- var _el$86 = _$createElement("text");
1576
- _$insert(_el$86, () => " ".repeat(spacerW()));
1577
- _$effect((_$p) => _$setProp(_el$86, "style", {
1659
+ var _el$87 = _$createElement("text");
1660
+ _$insert(_el$87, () => " ".repeat(spacerW()));
1661
+ _$effect((_$p) => _$setProp(_el$87, "style", {
1578
1662
  fg: pal().muted
1579
1663
  }, _$p));
1580
- return _el$86;
1664
+ return _el$87;
1581
1665
  })(), (() => {
1582
- var _el$87 = _$createElement("text"), _el$88 = _$createElement("span");
1583
- _$insertNode(_el$87, _el$88);
1584
- _$setProp(_el$87, "onMouseOver", () => setHoveredDismiss(entry.id));
1585
- _$setProp(_el$87, "onMouseOut", () => setHoveredDismiss(void 0));
1586
- _$setProp(_el$87, "onMouseUp", () => {
1666
+ var _el$88 = _$createElement("text"), _el$89 = _$createElement("span");
1667
+ _$insertNode(_el$88, _el$89);
1668
+ _$setProp(_el$88, "onMouseOver", () => setHoveredDismiss(entry.id));
1669
+ _$setProp(_el$88, "onMouseOut", () => setHoveredDismiss(void 0));
1670
+ _$setProp(_el$88, "onMouseUp", () => {
1587
1671
  upsertEntry({
1588
1672
  id: entry.id,
1589
1673
  title: entry.title,
@@ -1592,15 +1676,15 @@ function SubAgentPanel(props) {
1592
1676
  status: "done"
1593
1677
  });
1594
1678
  });
1595
- _$insert(_el$88, dismissLabel);
1596
- _$effect((_$p) => _$setProp(_el$88, "style", {
1679
+ _$insert(_el$89, dismissLabel);
1680
+ _$effect((_$p) => _$setProp(_el$89, "style", {
1597
1681
  fg: hoveredDismiss() === entry.id ? pal().warning : pal().muted
1598
1682
  }, _$p));
1599
- return _el$87;
1683
+ return _el$88;
1600
1684
  })()];
1601
1685
  }
1602
1686
  }), null);
1603
- return _el$82;
1687
+ return _el$83;
1604
1688
  })();
1605
1689
  })();
1606
1690
  }
@@ -1611,46 +1695,67 @@ function SubAgentPanel(props) {
1611
1695
  }), null);
1612
1696
  _$insert(_el$7, _$createComponent(Show, {
1613
1697
  get when() {
1614
- return hiddenBelow() > 0 || scrollOffset() > 0;
1698
+ return hiddenBelow() > 0 || (props.sortOrder() === "desc" ? scrollOffset() > 0 : entryList().length > max() && clampedOffset() < entryList().length - max());
1615
1699
  },
1616
1700
  get children() {
1617
1701
  return (() => {
1618
1702
  const showMore = hiddenBelow() > 0;
1619
- const showTop = scrollOffset() > 0;
1703
+ const showTop = props.sortOrder() === "desc" ? scrollOffset() > 0 : entryList().length > max() && clampedOffset() < entryList().length - max();
1620
1704
  const left = showMore ? ` \u2193 ${hiddenBelow()} ${t("scroll.more")}` : " ";
1621
- const right = `\u2191 ${t("scroll.top")}`;
1705
+ const right = props.sortOrder() === "desc" ? `\u2191 ${t("scroll.top")}` : `\u2193 ${t("scroll.bottom")}`;
1622
1706
  const pad = showTop ? Math.max(1, panelWidth() - visualWidth(left) - visualWidth(right)) : 0;
1623
1707
  return (() => {
1624
- var _el$91 = _$createElement("box"), _el$92 = _$createElement("text");
1625
- _$insertNode(_el$91, _el$92);
1626
- _$setProp(_el$91, "flexDirection", "row");
1627
- _$insert(_el$92, left);
1628
- _$insert(_el$91, showTop ? [(() => {
1629
- var _el$93 = _$createElement("text");
1630
- _$insert(_el$93, () => " ".repeat(pad));
1631
- _$effect((_$p) => _$setProp(_el$93, "style", {
1708
+ var _el$92 = _$createElement("box"), _el$93 = _$createElement("text"), _el$94 = _$createElement("span");
1709
+ _$insertNode(_el$92, _el$93);
1710
+ _$setProp(_el$92, "flexDirection", "row");
1711
+ _$insertNode(_el$93, _el$94);
1712
+ _$setProp(_el$93, "onMouseOver", () => showMore && setHoveredMoreBelow(true));
1713
+ _$setProp(_el$93, "onMouseOut", () => setHoveredMoreBelow(false));
1714
+ _$setProp(_el$93, "onMouseUp", () => {
1715
+ if (!showMore) return;
1716
+ const total = entryList().length;
1717
+ const m = max();
1718
+ if (total <= m) return;
1719
+ setScrollOffset((prev) => Math.min(total - m, prev + m));
1720
+ try {
1721
+ persistScroll(props.sessionId, scrollOffset());
1722
+ } catch {
1723
+ }
1724
+ setHoveredMoreBelow(false);
1725
+ });
1726
+ _$insert(_el$94, left);
1727
+ _$insert(_el$92, showTop ? [(() => {
1728
+ var _el$95 = _$createElement("text");
1729
+ _$insert(_el$95, () => " ".repeat(pad));
1730
+ _$effect((_$p) => _$setProp(_el$95, "style", {
1632
1731
  fg: pal().muted
1633
1732
  }, _$p));
1634
- return _el$93;
1733
+ return _el$95;
1635
1734
  })(), (() => {
1636
- var _el$94 = _$createElement("text"), _el$95 = _$createElement("span");
1637
- _$insertNode(_el$94, _el$95);
1638
- _$setProp(_el$94, "onMouseOver", () => setHoveredTop(true));
1639
- _$setProp(_el$94, "onMouseOut", () => setHoveredTop(false));
1640
- _$setProp(_el$94, "onMouseUp", () => {
1641
- setScrollOffset(0);
1735
+ var _el$96 = _$createElement("text"), _el$97 = _$createElement("span");
1736
+ _$insertNode(_el$96, _el$97);
1737
+ _$setProp(_el$96, "onMouseOver", () => setHoveredTop(true));
1738
+ _$setProp(_el$96, "onMouseOut", () => setHoveredTop(false));
1739
+ _$setProp(_el$96, "onMouseUp", () => {
1740
+ const total = entryList().length;
1741
+ const m = max();
1742
+ if (props.sortOrder() === "desc") {
1743
+ setScrollOffset(0);
1744
+ } else {
1745
+ setScrollOffset(Math.max(0, total - m));
1746
+ }
1642
1747
  setHoveredTop(false);
1643
1748
  });
1644
- _$insert(_el$95, right);
1645
- _$effect((_$p) => _$setProp(_el$95, "style", {
1749
+ _$insert(_el$97, right);
1750
+ _$effect((_$p) => _$setProp(_el$97, "style", {
1646
1751
  fg: hoveredTop() ? pal().warning : pal().muted
1647
1752
  }, _$p));
1648
- return _el$94;
1753
+ return _el$96;
1649
1754
  })()] : null, null);
1650
- _$effect((_$p) => _$setProp(_el$92, "style", {
1651
- fg: pal().muted
1755
+ _$effect((_$p) => _$setProp(_el$94, "style", {
1756
+ fg: showMore && hoveredMoreBelow() ? pal().warning : pal().muted
1652
1757
  }, _$p));
1653
- return _el$91;
1758
+ return _el$92;
1654
1759
  })();
1655
1760
  })();
1656
1761
  }
@@ -1693,6 +1798,12 @@ function createSidebarSlot(api, sig) {
1693
1798
  get maxEntries() {
1694
1799
  return sig.maxEntries;
1695
1800
  },
1801
+ get sortOrder() {
1802
+ return sig.sortOrder;
1803
+ },
1804
+ get scrollMode() {
1805
+ return sig.scrollMode;
1806
+ },
1696
1807
  get sessionId() {
1697
1808
  return input.session_id;
1698
1809
  }
@@ -1707,11 +1818,17 @@ var tui = async (api) => {
1707
1818
  const initialLang = stored === "zh" || stored === "en" ? stored : detectLang();
1708
1819
  const [lang, setLang] = createSignal(initialLang);
1709
1820
  const [maxEntries, setMaxEntries] = createSignal(parseInt(String(api.kv.get(`${KV_PREFIX}.max_entries`, "10")), 10) || 10);
1821
+ const [sortOrder, setSortOrder] = createSignal(String(api.kv.get(`${KV_PREFIX}.order`, "desc")) === "asc" ? "asc" : "desc");
1822
+ const [scrollMode, setScrollMode] = createSignal(String(api.kv.get(`${KV_PREFIX}.scroll_mode`, "wheel")) === "click" ? "click" : "wheel");
1710
1823
  const signals = {
1711
1824
  lang,
1712
1825
  setLang,
1713
1826
  maxEntries,
1714
1827
  setMaxEntries,
1828
+ sortOrder,
1829
+ setSortOrder,
1830
+ scrollMode,
1831
+ setScrollMode,
1715
1832
  sessionId: ""
1716
1833
  };
1717
1834
  api.slots.register(createSidebarSlot(api, signals));
@@ -1743,6 +1860,68 @@ var tui = async (api) => {
1743
1860
  }
1744
1861
  }));
1745
1862
  }
1863
+ }, {
1864
+ title: "SubAgent Magazine: Sort Order",
1865
+ value: "subagent-order",
1866
+ description: "Set sub-agent entry sort order (desc / asc)",
1867
+ slash: {
1868
+ name: "subagent-order"
1869
+ },
1870
+ onSelect: (dialog) => {
1871
+ const t = (k) => I18N[lang()][k] ?? k;
1872
+ dialog?.replace(() => _$createComponent(api.ui.DialogSelect, {
1873
+ title: "Sort Order / \u6392\u5E8F\u65B9\u5F0F",
1874
+ get options() {
1875
+ return [{
1876
+ title: t("order.desc"),
1877
+ value: "desc"
1878
+ }, {
1879
+ title: t("order.asc"),
1880
+ value: "asc"
1881
+ }];
1882
+ },
1883
+ onSelect: (opt) => {
1884
+ const o = opt.value;
1885
+ setSortOrder(o);
1886
+ api.kv.set(`${KV_PREFIX}.order`, o);
1887
+ api.ui.toast({
1888
+ message: o === "desc" ? t("order.desc") : t("order.asc")
1889
+ });
1890
+ dialog?.clear();
1891
+ }
1892
+ }));
1893
+ }
1894
+ }, {
1895
+ title: "SubAgent Magazine: Scroll Mode",
1896
+ value: "subagent-scroll",
1897
+ description: "Set scroll mode (wheel / click)",
1898
+ slash: {
1899
+ name: "subagent-scroll"
1900
+ },
1901
+ onSelect: (dialog) => {
1902
+ const t = (k) => I18N[lang()][k] ?? k;
1903
+ dialog?.replace(() => _$createComponent(api.ui.DialogSelect, {
1904
+ title: "Scroll Mode / \u6EDA\u52A8\u6A21\u5F0F",
1905
+ get options() {
1906
+ return [{
1907
+ title: t("scroll.wheel"),
1908
+ value: "wheel"
1909
+ }, {
1910
+ title: t("scroll.click"),
1911
+ value: "click"
1912
+ }];
1913
+ },
1914
+ onSelect: (opt) => {
1915
+ const m = opt.value;
1916
+ setScrollMode(m);
1917
+ api.kv.set(`${KV_PREFIX}.scroll_mode`, m);
1918
+ api.ui.toast({
1919
+ message: m === "wheel" ? t("scroll.wheel") : t("scroll.click")
1920
+ });
1921
+ dialog?.clear();
1922
+ }
1923
+ }));
1924
+ }
1746
1925
  }, {
1747
1926
  title: "SubAgent Magazine: Max Entries",
1748
1927
  value: "subagent-max",
@@ -1754,9 +1933,9 @@ var tui = async (api) => {
1754
1933
  dialog?.replace(() => _$createComponent(api.ui.DialogPrompt, {
1755
1934
  title: "Max Visible Entries",
1756
1935
  description: () => (() => {
1757
- var _el$96 = _$createElement("text");
1758
- _$insertNode(_el$96, _$createTextNode(`Number of entries to show in the sidebar (1\u201350)`));
1759
- return _el$96;
1936
+ var _el$98 = _$createElement("text");
1937
+ _$insertNode(_el$98, _$createTextNode(`Number of entries to show in the sidebar (1\u201350)`));
1938
+ return _el$98;
1760
1939
  })(),
1761
1940
  get value() {
1762
1941
  return String(maxEntries());