opencode-subagent-magazine 1.7.0 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/_version.d.ts +1 -1
  2. package/dist/core/kv.d.ts +1 -0
  3. package/dist/core/types.d.ts +8 -0
  4. package/dist/i18n.d.ts +5 -0
  5. package/dist/panel/SubAgentPanel.d.ts +1 -0
  6. package/dist/panel/entry-map.d.ts +1 -0
  7. package/dist/panel/panel-api.d.ts +16 -0
  8. package/dist/tui.js +385 -218
  9. package/dist/v2/db.d.ts +14 -1
  10. package/dist/v2.js +473 -223
  11. package/package.json +17 -4
  12. package/dist/_version.js +0 -2
  13. package/dist/clipboard.js +0 -85
  14. package/dist/core/color.js +0 -68
  15. package/dist/core/format.js +0 -113
  16. package/dist/core/index.js +0 -6
  17. package/dist/core/kv.js +0 -63
  18. package/dist/core/state-machine.js +0 -27
  19. package/dist/core/types.js +0 -2
  20. package/dist/core/usage.js +0 -1
  21. package/dist/i18n.js +0 -333
  22. package/dist/index.js +0 -511
  23. package/dist/panel/SubAgentPanel.js +0 -1572
  24. package/dist/panel/entry-map.js +0 -99
  25. package/dist/panel/panel-api.js +0 -1
  26. package/dist/panel/session-routing.js +0 -4
  27. package/dist/panel/store.js +0 -5
  28. package/dist/server.js +0 -14
  29. package/dist/v2/commands.js +0 -420
  30. package/dist/v2/db.js +0 -267
  31. package/dist/v2/index.js +0 -83
  32. package/dist/v2/settings-menu.js +0 -225
  33. package/dist/v2/theme.js +0 -12
  34. package/dist/v2/types.js +0 -6
  35. package/dist/v2/v2-panel-api.js +0 -612
  36. package/src/_version.ts +0 -2
  37. package/src/clipboard.ts +0 -134
  38. package/src/core/color.ts +0 -70
  39. package/src/core/format.ts +0 -105
  40. package/src/core/index.ts +0 -6
  41. package/src/core/kv.ts +0 -77
  42. package/src/core/state-machine.ts +0 -46
  43. package/src/core/types.ts +0 -72
  44. package/src/core/usage.ts +0 -16
  45. package/src/i18n.ts +0 -345
  46. package/src/index.tsx +0 -564
  47. package/src/panel/SubAgentPanel.tsx +0 -1802
  48. package/src/panel/entry-map.ts +0 -115
  49. package/src/panel/panel-api.ts +0 -83
  50. package/src/panel/session-routing.ts +0 -10
  51. package/src/panel/store.ts +0 -8
  52. package/src/server.ts +0 -19
  53. package/src/v2/commands.ts +0 -408
  54. package/src/v2/db.ts +0 -274
  55. package/src/v2/index.tsx +0 -144
  56. package/src/v2/settings-menu.ts +0 -241
  57. package/src/v2/theme.ts +0 -14
  58. package/src/v2/types.ts +0 -167
  59. package/src/v2/v2-panel-api.ts +0 -515
package/dist/tui.js CHANGED
@@ -6,13 +6,17 @@ import { createComponent as _$createComponent2 } from "@opentui/solid";
6
6
  import { createSignal as createSignal3 } from "solid-js";
7
7
 
8
8
  // src/_version.ts
9
- var PLUGIN_VERSION = "1.7.0";
9
+ var PLUGIN_VERSION = "1.7.2";
10
10
 
11
11
  // src/i18n.ts
12
12
  var ZH_T = {
13
13
  "panel.title": "\u5B50\u4EE3\u7406",
14
14
  "status.none": "\u6682\u65E0\u5B50\u4EE3\u7406",
15
15
  "agent.label": "\u4EE3\u7406",
16
+ "origin.label": "\u6765\u6E90",
17
+ "origin.tool": "\u5B50\u4EE3\u7406\u8C03\u7528",
18
+ "origin.sub": "\u884D\u751F\u4F1A\u8BDD",
19
+ "origin.background": "\u540E\u53F0",
16
20
  "status.label": "\u72B6\u6001",
17
21
  "time.label": "\u8017\u65F6",
18
22
  "tokens.label": "\u4E0A\u4E0B\u6587",
@@ -74,6 +78,7 @@ var ZH_T = {
74
78
  "settings.showEntryTime": "\u5217\u8868\u4E2D\u663E\u793A\u8017\u65F6",
75
79
  "settings.showEntryTokens": "\u5217\u8868\u4E2D\u663E\u793A Token \u6570",
76
80
  "settings.timeFormat": "\u65F6\u95F4\u683C\u5F0F",
81
+ "settings.showOrigin": "\u5217\u8868\u663E\u793A\u6765\u6E90\u6807\u8BB0",
77
82
  "settings.dbSync": "\u672C\u5730\u6570\u636E\u5E93\u8865\u5168",
78
83
  "settings.on": "\u5F00",
79
84
  "settings.off": "\u5173",
@@ -85,6 +90,10 @@ var EN_T = {
85
90
  "panel.title": "SubAgent",
86
91
  "status.none": "No sub-agents yet",
87
92
  "agent.label": "agent",
93
+ "origin.label": "origin",
94
+ "origin.tool": "sub-agent call",
95
+ "origin.sub": "spawned session",
96
+ "origin.background": "background",
88
97
  "status.label": "status",
89
98
  "time.label": "time",
90
99
  "tokens.label": "tokens",
@@ -145,6 +154,7 @@ var EN_T = {
145
154
  "settings.showEntryCost": "Cost per sub-agent",
146
155
  "settings.showEntryTime": "Elapsed time in list",
147
156
  "settings.showEntryTokens": "Token count in list",
157
+ "settings.showOrigin": "Origin indicators in list",
148
158
  "settings.timeFormat": "Time format",
149
159
  "settings.dbSync": "Local database enrichment",
150
160
  "settings.on": "on",
@@ -157,6 +167,10 @@ var JA_T = {
157
167
  "panel.title": "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8",
158
168
  "status.none": "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306A\u3057",
159
169
  "agent.label": "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8",
170
+ "origin.label": "\u767A\u751F\u5143",
171
+ "origin.tool": "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u547C\u3073\u51FA\u3057",
172
+ "origin.sub": "\u751F\u6210\u3055\u308C\u305F\u30BB\u30C3\u30B7\u30E7\u30F3",
173
+ "origin.background": "\u30D0\u30C3\u30AF\u30B0\u30E9\u30A6\u30F3\u30C9",
160
174
  "status.label": "\u72B6\u614B",
161
175
  "time.label": "\u6642\u9593",
162
176
  "tokens.label": "\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8",
@@ -217,6 +231,7 @@ var JA_T = {
217
231
  "settings.showEntryCost": "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u6BCE\u306E\u8CBB\u7528",
218
232
  "settings.showEntryTime": "\u4E00\u89A7\u306B\u6240\u8981\u6642\u9593\u3092\u8868\u793A",
219
233
  "settings.showEntryTokens": "\u4E00\u89A7\u306B\u30C8\u30FC\u30AF\u30F3\u6570\u3092\u8868\u793A",
234
+ "settings.showOrigin": "\u4E00\u89A7\u306B\u7531\u6765\u30DE\u30FC\u30AF\u3092\u8868\u793A",
220
235
  "settings.timeFormat": "\u6642\u9593\u5F62\u5F0F",
221
236
  "settings.dbSync": "\u30ED\u30FC\u30AB\u30EBDB\u88DC\u5B8C",
222
237
  "settings.on": "\u30AA\u30F3",
@@ -229,6 +244,10 @@ var KO_T = {
229
244
  "panel.title": "\uC11C\uBE0C \uC5D0\uC774\uC804\uD2B8",
230
245
  "status.none": "\uC11C\uBE0C \uC5D0\uC774\uC804\uD2B8 \uC5C6\uC74C",
231
246
  "agent.label": "\uC5D0\uC774\uC804\uD2B8",
247
+ "origin.label": "\uCD9C\uCC98",
248
+ "origin.tool": "\uD558\uC704 \uC5D0\uC774\uC804\uD2B8 \uD638\uCD9C",
249
+ "origin.sub": "\uC0DD\uC131\uB41C \uC138\uC158",
250
+ "origin.background": "\uBC31\uADF8\uB77C\uC6B4\uB4DC",
232
251
  "status.label": "\uC0C1\uD0DC",
233
252
  "time.label": "\uC2DC\uAC04",
234
253
  "tokens.label": "\uCEE8\uD14D\uC2A4\uD2B8",
@@ -289,6 +308,7 @@ var KO_T = {
289
308
  "settings.showEntryCost": "\uD558\uC704 \uC5D0\uC774\uC804\uD2B8\uBCC4 \uBE44\uC6A9",
290
309
  "settings.showEntryTime": "\uBAA9\uB85D\uC5D0 \uC18C\uC694 \uC2DC\uAC04 \uD45C\uC2DC",
291
310
  "settings.showEntryTokens": "\uBAA9\uB85D\uC5D0 \uD1A0\uD070 \uC218 \uD45C\uC2DC",
311
+ "settings.showOrigin": "\uBAA9\uB85D\uC5D0 \uCD9C\uCC98 \uC544\uC774\uCF58 \uD45C\uC2DC",
292
312
  "settings.timeFormat": "\uC2DC\uAC04 \uD615\uC2DD",
293
313
  "settings.dbSync": "\uB85C\uCEEC DB \uBCF4\uC644",
294
314
  "settings.on": "\uCF2C",
@@ -341,6 +361,7 @@ var SETTING_KEYS = {
341
361
  showEntryTime: `${KV_PREFIX}.show_entry_time`,
342
362
  showEntryTokens: `${KV_PREFIX}.show_entry_tokens`,
343
363
  timeFormat: `${KV_PREFIX}.time_format`,
364
+ showOrigin: `${KV_PREFIX}.show_origin`,
344
365
  dbSync: `${KV_PREFIX}.db_sync`
345
366
  };
346
367
  function loadSessionData(kv) {
@@ -568,6 +589,11 @@ async function copyText(text) {
568
589
 
569
590
  // src/core/types.ts
570
591
  var SUBAGENT_TOOLS = /* @__PURE__ */ new Set(["task", "subagent", "delegate", "call_omo_agent"]);
592
+ function isBackgroundInput(input) {
593
+ if (!input || typeof input !== "object") return false;
594
+ const i = input;
595
+ return i.background === true || i.run_in_background === true;
596
+ }
571
597
 
572
598
  // src/core/color.ts
573
599
  function rgb(raw) {
@@ -667,7 +693,7 @@ function upsertSubEntry(entries, partial, now = Date.now()) {
667
693
  ...partial,
668
694
  id: existing?.id ?? partial.id,
669
695
  startedAt: existing?.startedAt || partial.startedAt || now,
670
- endedAt: ended ? existing?.endedAt || now : void 0
696
+ endedAt: ended ? existing?.endedAt ?? partial.endedAt ?? now : void 0
671
697
  });
672
698
  return next;
673
699
  }
@@ -1105,7 +1131,8 @@ function SubAgentPanel(props) {
1105
1131
  prompt,
1106
1132
  sessionId: subSid,
1107
1133
  status: "running",
1108
- model: modelId
1134
+ model: modelId,
1135
+ origin: "sub"
1109
1136
  });
1110
1137
  }
1111
1138
  if (part.type === "tool") {
@@ -1128,7 +1155,9 @@ function SubAgentPanel(props) {
1128
1155
  agent: existing.agent,
1129
1156
  prompt: existing.prompt,
1130
1157
  sessionId: existing.sessionId ?? errorSid,
1131
- status: "error"
1158
+ status: "error",
1159
+ origin: "tool",
1160
+ background: isBackgroundInput(st?.input)
1132
1161
  });
1133
1162
  }
1134
1163
  return;
@@ -1136,7 +1165,7 @@ function SubAgentPanel(props) {
1136
1165
  const input = st?.input;
1137
1166
  let status = "running";
1138
1167
  if (rawStatus === "completed") status = "done";
1139
- if ((input?.run_in_background === true || input?.background === true) && status === "done") {
1168
+ if (isBackgroundInput(input) && status === "done") {
1140
1169
  const stMetaCheck = partMetadata(part, st);
1141
1170
  const hasChild = stMetaCheck?.session_id !== void 0 || stMetaCheck?.sessionId !== void 0;
1142
1171
  if (hasChild) status = "running";
@@ -1154,7 +1183,9 @@ function SubAgentPanel(props) {
1154
1183
  agent,
1155
1184
  prompt,
1156
1185
  sessionId: subSid,
1157
- status
1186
+ status,
1187
+ origin: "tool",
1188
+ background: isBackgroundInput(input)
1158
1189
  });
1159
1190
  }
1160
1191
  };
@@ -1515,7 +1546,7 @@ function SubAgentPanel(props) {
1515
1546
  if (settled && !needsRepair) continue;
1516
1547
  let status = "running";
1517
1548
  if (rawStatus === "completed") status = "done";
1518
- if ((scanInput?.run_in_background === true || scanInput?.background === true) && status === "done") {
1549
+ if (isBackgroundInput(scanInput) && status === "done") {
1519
1550
  if (scanSubSid !== void 0) status = "running";
1520
1551
  }
1521
1552
  if (status === "done" && scanSubSid) {
@@ -1564,7 +1595,9 @@ function SubAgentPanel(props) {
1564
1595
  sessionId: exists?.sessionId ?? scanSubSid,
1565
1596
  status,
1566
1597
  startedAt: exists?.startedAt || Date.now(),
1567
- endedAt: exists?.endedAt ?? (status === "done" ? Date.now() : void 0)
1598
+ endedAt: exists?.endedAt ?? (status === "done" ? Date.now() : void 0),
1599
+ origin: "tool",
1600
+ background: isBackgroundInput(scanInput) || exists?.background === true
1568
1601
  });
1569
1602
  if (entryKey !== id) next.delete(id);
1570
1603
  }
@@ -1606,7 +1639,7 @@ function SubAgentPanel(props) {
1606
1639
  const entry = key ? map.get(key) : void 0;
1607
1640
  if (!entry) return true;
1608
1641
  const input = st?.input;
1609
- const isBackground = input?.background === true || input?.run_in_background === true;
1642
+ const isBackground = isBackgroundInput(input);
1610
1643
  const stillRunning = entry.status === "running" || entry.status === "cancel_requested";
1611
1644
  if (rawStatus === "completed" && !isBackground && stillRunning) return true;
1612
1645
  }
@@ -1642,6 +1675,60 @@ function SubAgentPanel(props) {
1642
1675
  setEntryMapRaw((prev) => {
1643
1676
  let changed = false;
1644
1677
  const next = new Map(prev);
1678
+ if (tick % 4 === 0) {
1679
+ try {
1680
+ const children = props.api.session.listChildren?.(props.sessionId);
1681
+ if (children) {
1682
+ const linked = /* @__PURE__ */ new Set();
1683
+ for (const e of next.values()) if (e.sessionId) linked.add(e.sessionId);
1684
+ const {
1685
+ parentSid,
1686
+ isChild
1687
+ } = resolveParent(props.sessionId);
1688
+ const rec = loadSessionData2()[parentSid];
1689
+ const cleared = new Set(isChild ? rec?.children?.[props.sessionId]?.clearedIds : rec?.clearedIds);
1690
+ for (const child of children) {
1691
+ if (!child.id || linked.has(child.id)) continue;
1692
+ const id = `sub:${child.id}`;
1693
+ if (cleared.has(id)) continue;
1694
+ const finished = child.timeIdle != null && child.active !== true;
1695
+ const status = finished ? child.idleOutcome === "interrupted" ? "cancelled" : "done" : "running";
1696
+ next.set(id, {
1697
+ id,
1698
+ title: child.title ?? child.agent ?? "",
1699
+ agent: child.agent ?? "?",
1700
+ prompt: "",
1701
+ status,
1702
+ sessionId: child.id,
1703
+ startedAt: child.timeCreated ?? Date.now(),
1704
+ endedAt: finished ? child.timeIdle : void 0,
1705
+ tokens: child.tokens,
1706
+ cost: child.cost,
1707
+ model: child.model,
1708
+ origin: "sub"
1709
+ });
1710
+ changed = true;
1711
+ }
1712
+ }
1713
+ } catch {
1714
+ }
1715
+ for (const [id, entry] of next) {
1716
+ if (entry.status !== "done" && entry.status !== "error") continue;
1717
+ const sid = entry.sessionId;
1718
+ if (!sid) continue;
1719
+ try {
1720
+ if (props.api.session.status(sid)?.type === "busy") {
1721
+ next.set(id, {
1722
+ ...entry,
1723
+ status: "running",
1724
+ endedAt: void 0
1725
+ });
1726
+ changed = true;
1727
+ }
1728
+ } catch {
1729
+ }
1730
+ }
1731
+ }
1645
1732
  const candidates = [];
1646
1733
  for (const [id, entry] of next) {
1647
1734
  const running = entry.status === "running" || entry.status === "cancel_requested";
@@ -2208,6 +2295,12 @@ function SubAgentPanel(props) {
2208
2295
  const tokenText = () => !isExpanded() && props.showEntryTokens() && entry.tokens !== void 0 && entry.tokens > 0 ? ` ${fmtTokens(entry.tokens)}` : "";
2209
2296
  const costText = () => !isExpanded() && props.showEntryCost() && entry.cost !== void 0 && entry.cost > 0 ? ` $${entry.cost.toFixed(4)}` : "";
2210
2297
  const timeText = () => !isExpanded() && props.showEntryTime() && (elapsed() >= 2e3 || entry.endedAt !== void 0) ? fmtDuration(elapsed(), isActiveRunning, props.timeFormat()) : "";
2298
+ const originMark = () => {
2299
+ if (!props.showOrigin()) return "";
2300
+ if (entry.origin === "sub") return "\u21B3";
2301
+ return entry.background === true ? "\u21E2" : "";
2302
+ };
2303
+ const originW = () => originMark() ? 2 : 0;
2211
2304
  const suffixW = () => {
2212
2305
  let w = 0;
2213
2306
  const t2 = timeText();
@@ -2218,7 +2311,7 @@ function SubAgentPanel(props) {
2218
2311
  if (c) w += visualWidth(c);
2219
2312
  return w;
2220
2313
  };
2221
- const labelAvail = () => Math.max(6, panelWidth() - gutter() - LEFT_PAD - suffixW());
2314
+ const labelAvail = () => Math.max(6, panelWidth() - gutter() - LEFT_PAD - originW() - suffixW());
2222
2315
  const labelText = () => {
2223
2316
  const max2 = labelAvail();
2224
2317
  const text = entry.title || entry.agent;
@@ -2236,38 +2329,49 @@ function SubAgentPanel(props) {
2236
2329
  _$setProp(_el$25, "onMouseUp", () => toggleExpand(entry.id));
2237
2330
  _$insert(_el$26, () => isExpanded() ? "\u25BC" : "\u25B6");
2238
2331
  _$insert(_el$28, statusDot);
2332
+ _$insert(_el$25, (() => {
2333
+ var _c$2 = _$memo(() => !!originMark());
2334
+ return () => _c$2() ? (() => {
2335
+ var _el$88 = _$createElement("span");
2336
+ _$insert(_el$88, () => originMark() + " ");
2337
+ _$effect((_$p) => _$setProp(_el$88, "style", {
2338
+ fg: pal().muted
2339
+ }, _$p));
2340
+ return _el$88;
2341
+ })() : null;
2342
+ })(), _el$30);
2239
2343
  _$insert(_el$30, labelText);
2240
2344
  _$insert(_el$25, (() => {
2241
- var _c$2 = _$memo(() => !!timeText());
2242
- return () => _c$2() ? [" ", (() => {
2243
- var _el$82 = _$createElement("span");
2244
- _$insert(_el$82, timeText);
2245
- _$effect((_$p) => _$setProp(_el$82, "style", {
2345
+ var _c$3 = _$memo(() => !!timeText());
2346
+ return () => _c$3() ? [" ", (() => {
2347
+ var _el$89 = _$createElement("span");
2348
+ _$insert(_el$89, timeText);
2349
+ _$effect((_$p) => _$setProp(_el$89, "style", {
2246
2350
  fg: timeColor()
2247
2351
  }, _$p));
2248
- return _el$82;
2352
+ return _el$89;
2249
2353
  })()] : null;
2250
2354
  })(), null);
2251
2355
  _$insert(_el$25, (() => {
2252
- var _c$3 = _$memo(() => !!tokenText());
2253
- return () => _c$3() ? (() => {
2254
- var _el$83 = _$createElement("span");
2255
- _$insert(_el$83, tokenText);
2256
- _$effect((_$p) => _$setProp(_el$83, "style", {
2356
+ var _c$4 = _$memo(() => !!tokenText());
2357
+ return () => _c$4() ? (() => {
2358
+ var _el$90 = _$createElement("span");
2359
+ _$insert(_el$90, tokenText);
2360
+ _$effect((_$p) => _$setProp(_el$90, "style", {
2257
2361
  fg: pal().muted
2258
2362
  }, _$p));
2259
- return _el$83;
2363
+ return _el$90;
2260
2364
  })() : null;
2261
2365
  })(), null);
2262
2366
  _$insert(_el$25, (() => {
2263
- var _c$4 = _$memo(() => !!costText());
2264
- return () => _c$4() ? (() => {
2265
- var _el$84 = _$createElement("span");
2266
- _$insert(_el$84, costText);
2267
- _$effect((_$p) => _$setProp(_el$84, "style", {
2367
+ var _c$5 = _$memo(() => !!costText());
2368
+ return () => _c$5() ? (() => {
2369
+ var _el$91 = _$createElement("span");
2370
+ _$insert(_el$91, costText);
2371
+ _$effect((_$p) => _$setProp(_el$91, "style", {
2268
2372
  fg: pal().warning
2269
2373
  }, _$p));
2270
- return _el$84;
2374
+ return _el$91;
2271
2375
  })() : null;
2272
2376
  })(), null);
2273
2377
  _$effect((_p$) => {
@@ -2321,70 +2425,77 @@ function SubAgentPanel(props) {
2321
2425
  a: void 0
2322
2426
  });
2323
2427
  return _el$31;
2324
- })(), (() => {
2325
- var _el$37 = _$createElement("text"), _el$38 = _$createTextNode(` `), _el$39 = _$createElement("span"), _el$40 = _$createTextNode(`: `), _el$41 = _$createElement("span"), _el$42 = _$createElement("span");
2326
- _$insertNode(_el$37, _el$38);
2327
- _$insertNode(_el$37, _el$39);
2328
- _$insertNode(_el$37, _el$41);
2329
- _$insertNode(_el$37, _el$42);
2330
- _$insertNode(_el$39, _el$40);
2331
- _$insert(_el$39, () => t("status.label"), _el$40);
2332
- _$insert(_el$41, () => " ".repeat(expandedPad(t("status.label"))));
2333
- _$insert(_el$42, () => isActiveRunning ? t("status.running") : isCancelled ? t("status.cancelled") : isError ? t("status.error") : t("status.done"));
2334
- _$effect((_p$) => {
2335
- var _v$9 = {
2336
- fg: pal().primary
2337
- }, _v$0 = {
2338
- fg: pal().muted
2339
- }, _v$1 = {
2340
- fg: isActiveRunning ? pal().warning : isCancelled ? pal().muted : isError ? pal().error : pal().success
2341
- };
2342
- _v$9 !== _p$.e && (_p$.e = _$setProp(_el$39, "style", _v$9, _p$.e));
2343
- _v$0 !== _p$.t && (_p$.t = _$setProp(_el$41, "style", _v$0, _p$.t));
2344
- _v$1 !== _p$.a && (_p$.a = _$setProp(_el$42, "style", _v$1, _p$.a));
2345
- return _p$;
2346
- }, {
2347
- e: void 0,
2348
- t: void 0,
2349
- a: void 0
2350
- });
2351
- return _el$37;
2352
2428
  })(), _$createComponent(Show, {
2353
2429
  get when() {
2354
- return elapsed() >= 2e3 || entry.endedAt !== void 0;
2430
+ return props.showOrigin();
2355
2431
  },
2356
2432
  get children() {
2357
- var _el$43 = _$createElement("text"), _el$44 = _$createTextNode(` `), _el$45 = _$createElement("span"), _el$46 = _$createTextNode(`: `), _el$47 = _$createElement("span"), _el$48 = _$createElement("span");
2358
- _$insertNode(_el$43, _el$44);
2359
- _$insertNode(_el$43, _el$45);
2360
- _$insertNode(_el$43, _el$47);
2361
- _$insertNode(_el$43, _el$48);
2362
- _$insertNode(_el$45, _el$46);
2363
- _$insert(_el$45, () => t("time.label"), _el$46);
2364
- _$insert(_el$47, () => " ".repeat(expandedPad(t("time.label"))));
2365
- _$insert(_el$48, () => fmtDuration(elapsed(), isActiveRunning, props.timeFormat()));
2433
+ var _el$37 = _$createElement("text"), _el$38 = _$createTextNode(` `), _el$39 = _$createElement("span"), _el$40 = _$createTextNode(`: `), _el$41 = _$createElement("span"), _el$42 = _$createElement("span");
2434
+ _$insertNode(_el$37, _el$38);
2435
+ _$insertNode(_el$37, _el$39);
2436
+ _$insertNode(_el$37, _el$41);
2437
+ _$insertNode(_el$37, _el$42);
2438
+ _$insertNode(_el$39, _el$40);
2439
+ _$insert(_el$39, () => t("origin.label"), _el$40);
2440
+ _$insert(_el$41, () => " ".repeat(expandedPad(t("origin.label"))));
2441
+ _$insert(_el$42, (() => {
2442
+ var _c$6 = _$memo(() => entry.origin === "sub");
2443
+ return () => _c$6() ? t("origin.sub") : t("origin.tool");
2444
+ })(), null);
2445
+ _$insert(_el$42, (() => {
2446
+ var _c$7 = _$memo(() => entry.background === true);
2447
+ return () => _c$7() ? ` (${t("origin.background")})` : "";
2448
+ })(), null);
2366
2449
  _$effect((_p$) => {
2367
- var _v$10 = {
2450
+ var _v$9 = {
2368
2451
  fg: pal().primary
2369
- }, _v$11 = {
2452
+ }, _v$0 = {
2370
2453
  fg: pal().muted
2371
- }, _v$12 = {
2454
+ }, _v$1 = {
2372
2455
  fg: pal().muted
2373
2456
  };
2374
- _v$10 !== _p$.e && (_p$.e = _$setProp(_el$45, "style", _v$10, _p$.e));
2375
- _v$11 !== _p$.t && (_p$.t = _$setProp(_el$47, "style", _v$11, _p$.t));
2376
- _v$12 !== _p$.a && (_p$.a = _$setProp(_el$48, "style", _v$12, _p$.a));
2457
+ _v$9 !== _p$.e && (_p$.e = _$setProp(_el$39, "style", _v$9, _p$.e));
2458
+ _v$0 !== _p$.t && (_p$.t = _$setProp(_el$41, "style", _v$0, _p$.t));
2459
+ _v$1 !== _p$.a && (_p$.a = _$setProp(_el$42, "style", _v$1, _p$.a));
2377
2460
  return _p$;
2378
2461
  }, {
2379
2462
  e: void 0,
2380
2463
  t: void 0,
2381
2464
  a: void 0
2382
2465
  });
2383
- return _el$43;
2466
+ return _el$37;
2384
2467
  }
2385
- }), _$createComponent(Show, {
2468
+ }), (() => {
2469
+ var _el$43 = _$createElement("text"), _el$44 = _$createTextNode(` `), _el$45 = _$createElement("span"), _el$46 = _$createTextNode(`: `), _el$47 = _$createElement("span"), _el$48 = _$createElement("span");
2470
+ _$insertNode(_el$43, _el$44);
2471
+ _$insertNode(_el$43, _el$45);
2472
+ _$insertNode(_el$43, _el$47);
2473
+ _$insertNode(_el$43, _el$48);
2474
+ _$insertNode(_el$45, _el$46);
2475
+ _$insert(_el$45, () => t("status.label"), _el$46);
2476
+ _$insert(_el$47, () => " ".repeat(expandedPad(t("status.label"))));
2477
+ _$insert(_el$48, () => isActiveRunning ? t("status.running") : isCancelled ? t("status.cancelled") : isError ? t("status.error") : t("status.done"));
2478
+ _$effect((_p$) => {
2479
+ var _v$10 = {
2480
+ fg: pal().primary
2481
+ }, _v$11 = {
2482
+ fg: pal().muted
2483
+ }, _v$12 = {
2484
+ fg: isActiveRunning ? pal().warning : isCancelled ? pal().muted : isError ? pal().error : pal().success
2485
+ };
2486
+ _v$10 !== _p$.e && (_p$.e = _$setProp(_el$45, "style", _v$10, _p$.e));
2487
+ _v$11 !== _p$.t && (_p$.t = _$setProp(_el$47, "style", _v$11, _p$.t));
2488
+ _v$12 !== _p$.a && (_p$.a = _$setProp(_el$48, "style", _v$12, _p$.a));
2489
+ return _p$;
2490
+ }, {
2491
+ e: void 0,
2492
+ t: void 0,
2493
+ a: void 0
2494
+ });
2495
+ return _el$43;
2496
+ })(), _$createComponent(Show, {
2386
2497
  get when() {
2387
- return entry.tokens !== void 0;
2498
+ return elapsed() >= 2e3 || entry.endedAt !== void 0;
2388
2499
  },
2389
2500
  get children() {
2390
2501
  var _el$49 = _$createElement("text"), _el$50 = _$createTextNode(` `), _el$51 = _$createElement("span"), _el$52 = _$createTextNode(`: `), _el$53 = _$createElement("span"), _el$54 = _$createElement("span");
@@ -2393,9 +2504,9 @@ function SubAgentPanel(props) {
2393
2504
  _$insertNode(_el$49, _el$53);
2394
2505
  _$insertNode(_el$49, _el$54);
2395
2506
  _$insertNode(_el$51, _el$52);
2396
- _$insert(_el$51, () => t("tokens.label"), _el$52);
2397
- _$insert(_el$53, () => " ".repeat(expandedPad(t("tokens.label"))));
2398
- _$insert(_el$54, () => fmtTokens(entry.tokens));
2507
+ _$insert(_el$51, () => t("time.label"), _el$52);
2508
+ _$insert(_el$53, () => " ".repeat(expandedPad(t("time.label"))));
2509
+ _$insert(_el$54, () => fmtDuration(elapsed(), isActiveRunning, props.timeFormat()));
2399
2510
  _$effect((_p$) => {
2400
2511
  var _v$13 = {
2401
2512
  fg: pal().primary
@@ -2417,7 +2528,7 @@ function SubAgentPanel(props) {
2417
2528
  }
2418
2529
  }), _$createComponent(Show, {
2419
2530
  get when() {
2420
- return entry.error;
2531
+ return entry.tokens !== void 0;
2421
2532
  },
2422
2533
  get children() {
2423
2534
  var _el$55 = _$createElement("text"), _el$56 = _$createTextNode(` `), _el$57 = _$createElement("span"), _el$58 = _$createTextNode(`: `), _el$59 = _$createElement("span"), _el$60 = _$createElement("span");
@@ -2426,16 +2537,16 @@ function SubAgentPanel(props) {
2426
2537
  _$insertNode(_el$55, _el$59);
2427
2538
  _$insertNode(_el$55, _el$60);
2428
2539
  _$insertNode(_el$57, _el$58);
2429
- _$insert(_el$57, () => t("error.label"), _el$58);
2430
- _$insert(_el$59, () => " ".repeat(expandedPad(t("error.label"))));
2431
- _$insert(_el$60, () => truncate(String(entry.error), expandedValAvail()));
2540
+ _$insert(_el$57, () => t("tokens.label"), _el$58);
2541
+ _$insert(_el$59, () => " ".repeat(expandedPad(t("tokens.label"))));
2542
+ _$insert(_el$60, () => fmtTokens(entry.tokens));
2432
2543
  _$effect((_p$) => {
2433
2544
  var _v$16 = {
2434
- fg: pal().error
2545
+ fg: pal().primary
2435
2546
  }, _v$17 = {
2436
2547
  fg: pal().muted
2437
2548
  }, _v$18 = {
2438
- fg: pal().error
2549
+ fg: pal().muted
2439
2550
  };
2440
2551
  _v$16 !== _p$.e && (_p$.e = _$setProp(_el$57, "style", _v$16, _p$.e));
2441
2552
  _v$17 !== _p$.t && (_p$.t = _$setProp(_el$59, "style", _v$17, _p$.t));
@@ -2448,6 +2559,39 @@ function SubAgentPanel(props) {
2448
2559
  });
2449
2560
  return _el$55;
2450
2561
  }
2562
+ }), _$createComponent(Show, {
2563
+ get when() {
2564
+ return entry.error;
2565
+ },
2566
+ get children() {
2567
+ var _el$61 = _$createElement("text"), _el$62 = _$createTextNode(` `), _el$63 = _$createElement("span"), _el$64 = _$createTextNode(`: `), _el$65 = _$createElement("span"), _el$66 = _$createElement("span");
2568
+ _$insertNode(_el$61, _el$62);
2569
+ _$insertNode(_el$61, _el$63);
2570
+ _$insertNode(_el$61, _el$65);
2571
+ _$insertNode(_el$61, _el$66);
2572
+ _$insertNode(_el$63, _el$64);
2573
+ _$insert(_el$63, () => t("error.label"), _el$64);
2574
+ _$insert(_el$65, () => " ".repeat(expandedPad(t("error.label"))));
2575
+ _$insert(_el$66, () => truncate(String(entry.error), expandedValAvail()));
2576
+ _$effect((_p$) => {
2577
+ var _v$19 = {
2578
+ fg: pal().error
2579
+ }, _v$20 = {
2580
+ fg: pal().muted
2581
+ }, _v$21 = {
2582
+ fg: pal().error
2583
+ };
2584
+ _v$19 !== _p$.e && (_p$.e = _$setProp(_el$63, "style", _v$19, _p$.e));
2585
+ _v$20 !== _p$.t && (_p$.t = _$setProp(_el$65, "style", _v$20, _p$.t));
2586
+ _v$21 !== _p$.a && (_p$.a = _$setProp(_el$66, "style", _v$21, _p$.a));
2587
+ return _p$;
2588
+ }, {
2589
+ e: void 0,
2590
+ t: void 0,
2591
+ a: void 0
2592
+ });
2593
+ return _el$61;
2594
+ }
2451
2595
  }), _$createComponent(Show, {
2452
2596
  get when() {
2453
2597
  return entry.cost !== void 0;
@@ -2456,34 +2600,34 @@ function SubAgentPanel(props) {
2456
2600
  return (() => {
2457
2601
  const cost = entry.cost;
2458
2602
  return (() => {
2459
- var _el$85 = _$createElement("text"), _el$86 = _$createTextNode(` `), _el$87 = _$createElement("span"), _el$88 = _$createTextNode(`: `), _el$89 = _$createElement("span"), _el$90 = _$createElement("span"), _el$91 = _$createTextNode(`$`);
2460
- _$insertNode(_el$85, _el$86);
2461
- _$insertNode(_el$85, _el$87);
2462
- _$insertNode(_el$85, _el$89);
2463
- _$insertNode(_el$85, _el$90);
2464
- _$insertNode(_el$87, _el$88);
2465
- _$insert(_el$87, () => t("cost.label"), _el$88);
2466
- _$insert(_el$89, () => " ".repeat(expandedPad(t("cost.label"))));
2467
- _$insertNode(_el$90, _el$91);
2468
- _$insert(_el$90, () => cost.toFixed(4), null);
2603
+ var _el$92 = _$createElement("text"), _el$93 = _$createTextNode(` `), _el$94 = _$createElement("span"), _el$95 = _$createTextNode(`: `), _el$96 = _$createElement("span"), _el$97 = _$createElement("span"), _el$98 = _$createTextNode(`$`);
2604
+ _$insertNode(_el$92, _el$93);
2605
+ _$insertNode(_el$92, _el$94);
2606
+ _$insertNode(_el$92, _el$96);
2607
+ _$insertNode(_el$92, _el$97);
2608
+ _$insertNode(_el$94, _el$95);
2609
+ _$insert(_el$94, () => t("cost.label"), _el$95);
2610
+ _$insert(_el$96, () => " ".repeat(expandedPad(t("cost.label"))));
2611
+ _$insertNode(_el$97, _el$98);
2612
+ _$insert(_el$97, () => cost.toFixed(4), null);
2469
2613
  _$effect((_p$) => {
2470
- var _v$29 = {
2614
+ var _v$32 = {
2471
2615
  fg: pal().primary
2472
- }, _v$30 = {
2616
+ }, _v$33 = {
2473
2617
  fg: pal().muted
2474
- }, _v$31 = {
2618
+ }, _v$34 = {
2475
2619
  fg: pal().muted
2476
2620
  };
2477
- _v$29 !== _p$.e && (_p$.e = _$setProp(_el$87, "style", _v$29, _p$.e));
2478
- _v$30 !== _p$.t && (_p$.t = _$setProp(_el$89, "style", _v$30, _p$.t));
2479
- _v$31 !== _p$.a && (_p$.a = _$setProp(_el$90, "style", _v$31, _p$.a));
2621
+ _v$32 !== _p$.e && (_p$.e = _$setProp(_el$94, "style", _v$32, _p$.e));
2622
+ _v$33 !== _p$.t && (_p$.t = _$setProp(_el$96, "style", _v$33, _p$.t));
2623
+ _v$34 !== _p$.a && (_p$.a = _$setProp(_el$97, "style", _v$34, _p$.a));
2480
2624
  return _p$;
2481
2625
  }, {
2482
2626
  e: void 0,
2483
2627
  t: void 0,
2484
2628
  a: void 0
2485
2629
  });
2486
- return _el$85;
2630
+ return _el$92;
2487
2631
  })();
2488
2632
  })();
2489
2633
  }
@@ -2492,81 +2636,81 @@ function SubAgentPanel(props) {
2492
2636
  return _$memo(() => !!validModel(entry.model))() ? entry.model : void 0;
2493
2637
  },
2494
2638
  get children() {
2495
- var _el$61 = _$createElement("text"), _el$62 = _$createTextNode(` `), _el$63 = _$createElement("span"), _el$64 = _$createTextNode(`: `), _el$65 = _$createElement("span"), _el$66 = _$createElement("span");
2496
- _$insertNode(_el$61, _el$62);
2497
- _$insertNode(_el$61, _el$63);
2498
- _$insertNode(_el$61, _el$65);
2499
- _$insertNode(_el$61, _el$66);
2500
- _$insertNode(_el$63, _el$64);
2501
- _$insert(_el$63, () => t("model.label"), _el$64);
2502
- _$insert(_el$65, () => " ".repeat(expandedPad(t("model.label"))));
2503
- _$insert(_el$66, () => truncate(entry.model, expandedValAvail()));
2639
+ var _el$67 = _$createElement("text"), _el$68 = _$createTextNode(` `), _el$69 = _$createElement("span"), _el$70 = _$createTextNode(`: `), _el$71 = _$createElement("span"), _el$72 = _$createElement("span");
2640
+ _$insertNode(_el$67, _el$68);
2641
+ _$insertNode(_el$67, _el$69);
2642
+ _$insertNode(_el$67, _el$71);
2643
+ _$insertNode(_el$67, _el$72);
2644
+ _$insertNode(_el$69, _el$70);
2645
+ _$insert(_el$69, () => t("model.label"), _el$70);
2646
+ _$insert(_el$71, () => " ".repeat(expandedPad(t("model.label"))));
2647
+ _$insert(_el$72, () => truncate(entry.model, expandedValAvail()));
2504
2648
  _$effect((_p$) => {
2505
- var _v$19 = {
2649
+ var _v$22 = {
2506
2650
  fg: pal().primary
2507
- }, _v$20 = {
2651
+ }, _v$23 = {
2508
2652
  fg: pal().muted
2509
- }, _v$21 = {
2653
+ }, _v$24 = {
2510
2654
  fg: pal().muted
2511
2655
  };
2512
- _v$19 !== _p$.e && (_p$.e = _$setProp(_el$63, "style", _v$19, _p$.e));
2513
- _v$20 !== _p$.t && (_p$.t = _$setProp(_el$65, "style", _v$20, _p$.t));
2514
- _v$21 !== _p$.a && (_p$.a = _$setProp(_el$66, "style", _v$21, _p$.a));
2656
+ _v$22 !== _p$.e && (_p$.e = _$setProp(_el$69, "style", _v$22, _p$.e));
2657
+ _v$23 !== _p$.t && (_p$.t = _$setProp(_el$71, "style", _v$23, _p$.t));
2658
+ _v$24 !== _p$.a && (_p$.a = _$setProp(_el$72, "style", _v$24, _p$.a));
2515
2659
  return _p$;
2516
2660
  }, {
2517
2661
  e: void 0,
2518
2662
  t: void 0,
2519
2663
  a: void 0
2520
2664
  });
2521
- return _el$61;
2665
+ return _el$67;
2522
2666
  }
2523
2667
  }), _$createComponent(Show, {
2524
2668
  get when() {
2525
2669
  return entry.todoTotal !== void 0;
2526
2670
  },
2527
2671
  get children() {
2528
- var _el$67 = _$createElement("text"), _el$68 = _$createTextNode(` `), _el$69 = _$createElement("span"), _el$70 = _$createTextNode(`: `), _el$71 = _$createElement("span"), _el$72 = _$createElement("span"), _el$73 = _$createTextNode(`/`);
2529
- _$insertNode(_el$67, _el$68);
2530
- _$insertNode(_el$67, _el$69);
2531
- _$insertNode(_el$67, _el$71);
2532
- _$insertNode(_el$67, _el$72);
2533
- _$insertNode(_el$69, _el$70);
2534
- _$insert(_el$69, () => t("todo.label"), _el$70);
2535
- _$insert(_el$71, () => " ".repeat(expandedPad(t("todo.label"))));
2536
- _$insertNode(_el$72, _el$73);
2537
- _$insert(_el$72, () => entry.todoDone, _el$73);
2538
- _$insert(_el$72, () => entry.todoTotal, null);
2672
+ 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(`/`);
2673
+ _$insertNode(_el$73, _el$74);
2674
+ _$insertNode(_el$73, _el$75);
2675
+ _$insertNode(_el$73, _el$77);
2676
+ _$insertNode(_el$73, _el$78);
2677
+ _$insertNode(_el$75, _el$76);
2678
+ _$insert(_el$75, () => t("todo.label"), _el$76);
2679
+ _$insert(_el$77, () => " ".repeat(expandedPad(t("todo.label"))));
2680
+ _$insertNode(_el$78, _el$79);
2681
+ _$insert(_el$78, () => entry.todoDone, _el$79);
2682
+ _$insert(_el$78, () => entry.todoTotal, null);
2539
2683
  _$effect((_p$) => {
2540
- var _v$22 = {
2684
+ var _v$25 = {
2541
2685
  fg: pal().primary
2542
- }, _v$23 = {
2686
+ }, _v$26 = {
2543
2687
  fg: pal().muted
2544
- }, _v$24 = {
2688
+ }, _v$27 = {
2545
2689
  fg: pal().muted
2546
2690
  };
2547
- _v$22 !== _p$.e && (_p$.e = _$setProp(_el$69, "style", _v$22, _p$.e));
2548
- _v$23 !== _p$.t && (_p$.t = _$setProp(_el$71, "style", _v$23, _p$.t));
2549
- _v$24 !== _p$.a && (_p$.a = _$setProp(_el$72, "style", _v$24, _p$.a));
2691
+ _v$25 !== _p$.e && (_p$.e = _$setProp(_el$75, "style", _v$25, _p$.e));
2692
+ _v$26 !== _p$.t && (_p$.t = _$setProp(_el$77, "style", _v$26, _p$.t));
2693
+ _v$27 !== _p$.a && (_p$.a = _$setProp(_el$78, "style", _v$27, _p$.a));
2550
2694
  return _p$;
2551
2695
  }, {
2552
2696
  e: void 0,
2553
2697
  t: void 0,
2554
2698
  a: void 0
2555
2699
  });
2556
- return _el$67;
2700
+ return _el$73;
2557
2701
  }
2558
2702
  }), _$createComponent(Show, {
2559
2703
  get when() {
2560
2704
  return entry.sessionId;
2561
2705
  },
2562
2706
  get children() {
2563
- 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 = _$createElement("span");
2564
- _$insertNode(_el$74, _el$75);
2565
- _$insertNode(_el$74, _el$76);
2566
- _$insertNode(_el$74, _el$78);
2567
- _$insertNode(_el$74, _el$79);
2568
- _$insertNode(_el$74, _el$80);
2569
- _$setProp(_el$74, "onMouseUp", async () => {
2707
+ var _el$80 = _$createElement("text"), _el$81 = _$createTextNode(` `), _el$82 = _$createElement("span"), _el$83 = _$createTextNode(`: `), _el$84 = _$createElement("span"), _el$85 = _$createElement("span"), _el$86 = _$createElement("span");
2708
+ _$insertNode(_el$80, _el$81);
2709
+ _$insertNode(_el$80, _el$82);
2710
+ _$insertNode(_el$80, _el$84);
2711
+ _$insertNode(_el$80, _el$85);
2712
+ _$insertNode(_el$80, _el$86);
2713
+ _$setProp(_el$80, "onMouseUp", async () => {
2570
2714
  const sessionId = entry.sessionId;
2571
2715
  if (!sessionId) return;
2572
2716
  const result = await copyText(sessionId);
@@ -2586,25 +2730,25 @@ ${t("session.toast.copy_failed")}`, {
2586
2730
  duration: 8e3
2587
2731
  });
2588
2732
  });
2589
- _$insertNode(_el$76, _el$77);
2590
- _$insert(_el$76, () => t("session.label"), _el$77);
2591
- _$insert(_el$78, () => " ".repeat(expandedPad(t("session.label"))));
2592
- _$insert(_el$79, () => truncate(entry.sessionId, expandedValAvail() - visualWidth(" \u2398")));
2593
- _$insertNode(_el$80, _$createTextNode(` \u2398`));
2733
+ _$insertNode(_el$82, _el$83);
2734
+ _$insert(_el$82, () => t("session.label"), _el$83);
2735
+ _$insert(_el$84, () => " ".repeat(expandedPad(t("session.label"))));
2736
+ _$insert(_el$85, () => truncate(entry.sessionId, expandedValAvail() - visualWidth(" \u2398")));
2737
+ _$insertNode(_el$86, _$createTextNode(` \u2398`));
2594
2738
  _$effect((_p$) => {
2595
- var _v$25 = {
2739
+ var _v$28 = {
2596
2740
  fg: pal().primary
2597
- }, _v$26 = {
2741
+ }, _v$29 = {
2598
2742
  fg: pal().muted
2599
- }, _v$27 = {
2743
+ }, _v$30 = {
2600
2744
  fg: pal().muted
2601
- }, _v$28 = {
2745
+ }, _v$31 = {
2602
2746
  fg: pal().warning
2603
2747
  };
2604
- _v$25 !== _p$.e && (_p$.e = _$setProp(_el$76, "style", _v$25, _p$.e));
2605
- _v$26 !== _p$.t && (_p$.t = _$setProp(_el$78, "style", _v$26, _p$.t));
2606
- _v$27 !== _p$.a && (_p$.a = _$setProp(_el$79, "style", _v$27, _p$.a));
2607
- _v$28 !== _p$.o && (_p$.o = _$setProp(_el$80, "style", _v$28, _p$.o));
2748
+ _v$28 !== _p$.e && (_p$.e = _$setProp(_el$82, "style", _v$28, _p$.e));
2749
+ _v$29 !== _p$.t && (_p$.t = _$setProp(_el$84, "style", _v$29, _p$.t));
2750
+ _v$30 !== _p$.a && (_p$.a = _$setProp(_el$85, "style", _v$30, _p$.a));
2751
+ _v$31 !== _p$.o && (_p$.o = _$setProp(_el$86, "style", _v$31, _p$.o));
2608
2752
  return _p$;
2609
2753
  }, {
2610
2754
  e: void 0,
@@ -2612,7 +2756,7 @@ ${t("session.toast.copy_failed")}`, {
2612
2756
  a: void 0,
2613
2757
  o: void 0
2614
2758
  });
2615
- return _el$74;
2759
+ return _el$80;
2616
2760
  }
2617
2761
  }), _$createComponent(Show, {
2618
2762
  get when() {
@@ -2628,68 +2772,68 @@ ${t("session.toast.copy_failed")}`, {
2628
2772
  const rightW = (isRunning ? visualWidth(dismissLabel()) : 0) + (isRunning && entry.sessionId ? visualWidth(cancelLabel()) : 0);
2629
2773
  const spacerW = () => Math.max(1, panelWidth() - gutter() - openW() - rightW - 2);
2630
2774
  return (() => {
2631
- var _el$92 = _$createElement("box"), _el$96 = _$createElement("text");
2632
- _$insertNode(_el$92, _el$96);
2633
- _$setProp(_el$92, "flexDirection", "row");
2634
- _$insert(_el$92, _$createComponent(Show, {
2775
+ var _el$99 = _$createElement("box"), _el$103 = _$createElement("text");
2776
+ _$insertNode(_el$99, _el$103);
2777
+ _$setProp(_el$99, "flexDirection", "row");
2778
+ _$insert(_el$99, _$createComponent(Show, {
2635
2779
  get when() {
2636
2780
  return entry.sessionId;
2637
2781
  },
2638
2782
  get children() {
2639
- var _el$93 = _$createElement("text"), _el$94 = _$createElement("span"), _el$95 = _$createElement("span");
2640
- _$insertNode(_el$93, _el$94);
2641
- _$insertNode(_el$93, _el$95);
2642
- _$setProp(_el$93, "onMouseOver", () => setHoveredOpen(entry.id));
2643
- _$setProp(_el$93, "onMouseOut", () => setHoveredOpen(void 0));
2644
- _$setProp(_el$93, "onMouseUp", () => {
2783
+ var _el$100 = _$createElement("text"), _el$101 = _$createElement("span"), _el$102 = _$createElement("span");
2784
+ _$insertNode(_el$100, _el$101);
2785
+ _$insertNode(_el$100, _el$102);
2786
+ _$setProp(_el$100, "onMouseOver", () => setHoveredOpen(entry.id));
2787
+ _$setProp(_el$100, "onMouseOut", () => setHoveredOpen(void 0));
2788
+ _$setProp(_el$100, "onMouseUp", () => {
2645
2789
  if (entry.sessionId) {
2646
2790
  props.api.route.navigateSession(entry.sessionId);
2647
2791
  }
2648
2792
  });
2649
- _$insert(_el$94, openPrefix);
2650
- _$insert(_el$95, () => t("open.label"));
2793
+ _$insert(_el$101, openPrefix);
2794
+ _$insert(_el$102, () => t("open.label"));
2651
2795
  _$effect((_p$) => {
2652
- var _v$32 = {
2796
+ var _v$35 = {
2653
2797
  fg: hoveredOpen() === entry.id ? pal().warning : pal().primary
2654
- }, _v$33 = {
2798
+ }, _v$36 = {
2655
2799
  fg: hoveredOpen() === entry.id ? pal().warning : pal().primary
2656
2800
  };
2657
- _v$32 !== _p$.e && (_p$.e = _$setProp(_el$94, "style", _v$32, _p$.e));
2658
- _v$33 !== _p$.t && (_p$.t = _$setProp(_el$95, "style", _v$33, _p$.t));
2801
+ _v$35 !== _p$.e && (_p$.e = _$setProp(_el$101, "style", _v$35, _p$.e));
2802
+ _v$36 !== _p$.t && (_p$.t = _$setProp(_el$102, "style", _v$36, _p$.t));
2659
2803
  return _p$;
2660
2804
  }, {
2661
2805
  e: void 0,
2662
2806
  t: void 0
2663
2807
  });
2664
- return _el$93;
2808
+ return _el$100;
2665
2809
  }
2666
- }), _el$96);
2667
- _$insert(_el$96, () => " ".repeat(spacerW()));
2668
- _$insert(_el$92, _$createComponent(Show, {
2810
+ }), _el$103);
2811
+ _$insert(_el$103, () => " ".repeat(spacerW()));
2812
+ _$insert(_el$99, _$createComponent(Show, {
2669
2813
  get when() {
2670
2814
  return isRunning && entry.sessionId;
2671
2815
  },
2672
2816
  get children() {
2673
- var _el$97 = _$createElement("text"), _el$98 = _$createElement("span");
2674
- _$insertNode(_el$97, _el$98);
2675
- _$setProp(_el$97, "onMouseOver", () => setHoveredCancel(entry.id));
2676
- _$setProp(_el$97, "onMouseOut", () => setHoveredCancel(void 0));
2677
- _$setProp(_el$97, "onMouseUp", () => cancelEntry(entry));
2678
- _$insert(_el$98, cancelLabel);
2679
- _$effect((_$p) => _$setProp(_el$98, "style", {
2817
+ var _el$104 = _$createElement("text"), _el$105 = _$createElement("span");
2818
+ _$insertNode(_el$104, _el$105);
2819
+ _$setProp(_el$104, "onMouseOver", () => setHoveredCancel(entry.id));
2820
+ _$setProp(_el$104, "onMouseOut", () => setHoveredCancel(void 0));
2821
+ _$setProp(_el$104, "onMouseUp", () => cancelEntry(entry));
2822
+ _$insert(_el$105, cancelLabel);
2823
+ _$effect((_$p) => _$setProp(_el$105, "style", {
2680
2824
  fg: hoveredCancel() === entry.id ? pal().warning : pal().error
2681
2825
  }, _$p));
2682
- return _el$97;
2826
+ return _el$104;
2683
2827
  }
2684
2828
  }), null);
2685
- _$insert(_el$92, _$createComponent(Show, {
2829
+ _$insert(_el$99, _$createComponent(Show, {
2686
2830
  when: isRunning,
2687
2831
  get children() {
2688
- var _el$99 = _$createElement("text"), _el$100 = _$createElement("span");
2689
- _$insertNode(_el$99, _el$100);
2690
- _$setProp(_el$99, "onMouseOver", () => setHoveredDismiss(entry.id));
2691
- _$setProp(_el$99, "onMouseOut", () => setHoveredDismiss(void 0));
2692
- _$setProp(_el$99, "onMouseUp", () => {
2832
+ var _el$106 = _$createElement("text"), _el$107 = _$createElement("span");
2833
+ _$insertNode(_el$106, _el$107);
2834
+ _$setProp(_el$106, "onMouseOver", () => setHoveredDismiss(entry.id));
2835
+ _$setProp(_el$106, "onMouseOut", () => setHoveredDismiss(void 0));
2836
+ _$setProp(_el$106, "onMouseUp", () => {
2693
2837
  upsertEntry({
2694
2838
  id: entry.id,
2695
2839
  title: entry.title,
@@ -2698,17 +2842,17 @@ ${t("session.toast.copy_failed")}`, {
2698
2842
  status: "done"
2699
2843
  });
2700
2844
  });
2701
- _$insert(_el$100, dismissLabel);
2702
- _$effect((_$p) => _$setProp(_el$100, "style", {
2845
+ _$insert(_el$107, dismissLabel);
2846
+ _$effect((_$p) => _$setProp(_el$107, "style", {
2703
2847
  fg: hoveredDismiss() === entry.id ? pal().warning : pal().muted
2704
2848
  }, _$p));
2705
- return _el$99;
2849
+ return _el$106;
2706
2850
  }
2707
2851
  }), null);
2708
- _$effect((_$p) => _$setProp(_el$96, "style", {
2852
+ _$effect((_$p) => _$setProp(_el$103, "style", {
2709
2853
  fg: pal().muted
2710
2854
  }, _$p));
2711
- return _el$92;
2855
+ return _el$99;
2712
2856
  })();
2713
2857
  })();
2714
2858
  }
@@ -2729,13 +2873,13 @@ ${t("session.toast.copy_failed")}`, {
2729
2873
  const right = props.sortOrder() === "desc" ? `\u2191 ${t("scroll.top")}` : `\u2193 ${t("scroll.bottom")}`;
2730
2874
  const pad = showTop ? Math.max(1, panelWidth() - gutter() - visualWidth(left) - visualWidth(right)) : 0;
2731
2875
  return (() => {
2732
- var _el$101 = _$createElement("box"), _el$102 = _$createElement("text"), _el$103 = _$createElement("span");
2733
- _$insertNode(_el$101, _el$102);
2734
- _$setProp(_el$101, "flexDirection", "row");
2735
- _$insertNode(_el$102, _el$103);
2736
- _$setProp(_el$102, "onMouseOver", () => showMore && setHoveredMoreBelow(true));
2737
- _$setProp(_el$102, "onMouseOut", () => setHoveredMoreBelow(false));
2738
- _$setProp(_el$102, "onMouseUp", () => {
2876
+ var _el$108 = _$createElement("box"), _el$109 = _$createElement("text"), _el$110 = _$createElement("span");
2877
+ _$insertNode(_el$108, _el$109);
2878
+ _$setProp(_el$108, "flexDirection", "row");
2879
+ _$insertNode(_el$109, _el$110);
2880
+ _$setProp(_el$109, "onMouseOver", () => showMore && setHoveredMoreBelow(true));
2881
+ _$setProp(_el$109, "onMouseOut", () => setHoveredMoreBelow(false));
2882
+ _$setProp(_el$109, "onMouseUp", () => {
2739
2883
  if (!showMore) return;
2740
2884
  const total = entryList().length;
2741
2885
  const m = max();
@@ -2747,20 +2891,20 @@ ${t("session.toast.copy_failed")}`, {
2747
2891
  }
2748
2892
  setHoveredMoreBelow(false);
2749
2893
  });
2750
- _$insert(_el$103, left);
2751
- _$insert(_el$101, showTop ? [(() => {
2752
- var _el$104 = _$createElement("text");
2753
- _$insert(_el$104, () => " ".repeat(pad));
2754
- _$effect((_$p) => _$setProp(_el$104, "style", {
2894
+ _$insert(_el$110, left);
2895
+ _$insert(_el$108, showTop ? [(() => {
2896
+ var _el$111 = _$createElement("text");
2897
+ _$insert(_el$111, () => " ".repeat(pad));
2898
+ _$effect((_$p) => _$setProp(_el$111, "style", {
2755
2899
  fg: pal().muted
2756
2900
  }, _$p));
2757
- return _el$104;
2901
+ return _el$111;
2758
2902
  })(), (() => {
2759
- var _el$105 = _$createElement("text"), _el$106 = _$createElement("span");
2760
- _$insertNode(_el$105, _el$106);
2761
- _$setProp(_el$105, "onMouseOver", () => setHoveredTop(true));
2762
- _$setProp(_el$105, "onMouseOut", () => setHoveredTop(false));
2763
- _$setProp(_el$105, "onMouseUp", () => {
2903
+ var _el$112 = _$createElement("text"), _el$113 = _$createElement("span");
2904
+ _$insertNode(_el$112, _el$113);
2905
+ _$setProp(_el$112, "onMouseOver", () => setHoveredTop(true));
2906
+ _$setProp(_el$112, "onMouseOut", () => setHoveredTop(false));
2907
+ _$setProp(_el$112, "onMouseUp", () => {
2764
2908
  const total = entryList().length;
2765
2909
  const m = max();
2766
2910
  if (props.sortOrder() === "desc") {
@@ -2770,16 +2914,16 @@ ${t("session.toast.copy_failed")}`, {
2770
2914
  }
2771
2915
  setHoveredTop(false);
2772
2916
  });
2773
- _$insert(_el$106, right);
2774
- _$effect((_$p) => _$setProp(_el$106, "style", {
2917
+ _$insert(_el$113, right);
2918
+ _$effect((_$p) => _$setProp(_el$113, "style", {
2775
2919
  fg: hoveredTop() ? pal().warning : pal().muted
2776
2920
  }, _$p));
2777
- return _el$105;
2921
+ return _el$112;
2778
2922
  })()] : null, null);
2779
- _$effect((_$p) => _$setProp(_el$103, "style", {
2923
+ _$effect((_$p) => _$setProp(_el$110, "style", {
2780
2924
  fg: showMore && hoveredMoreBelow() ? pal().warning : pal().muted
2781
2925
  }, _$p));
2782
- return _el$101;
2926
+ return _el$108;
2783
2927
  })();
2784
2928
  })();
2785
2929
  }
@@ -2845,6 +2989,9 @@ function createSidebarSlot(api, panelApi, sig) {
2845
2989
  get timeFormat() {
2846
2990
  return sig.timeFormat;
2847
2991
  },
2992
+ get showOrigin() {
2993
+ return sig.showOrigin;
2994
+ },
2848
2995
  get sessionId() {
2849
2996
  return input.session_id;
2850
2997
  }
@@ -2866,6 +3013,7 @@ var tui = async (api) => {
2866
3013
  const [showEntryTokens, setShowEntryTokens] = createSignal3(api.kv.get(`${KV_PREFIX}.show_entry_tokens`, true) !== false);
2867
3014
  const storedTimeFormat = String(api.kv.get(`${KV_PREFIX}.time_format`, "short"));
2868
3015
  const [timeFormat, setTimeFormat] = createSignal3(TIME_FORMATS.includes(storedTimeFormat) ? storedTimeFormat : "short");
3016
+ const [showOrigin, setShowOrigin] = createSignal3(api.kv.get(`${KV_PREFIX}.show_origin`, false) === true);
2869
3017
  const [dbSync, setDbSync] = createSignal3(api.kv.get(`${KV_PREFIX}.db_sync`, true) !== false);
2870
3018
  const signals = {
2871
3019
  lang,
@@ -2886,6 +3034,8 @@ var tui = async (api) => {
2886
3034
  setShowEntryTokens,
2887
3035
  timeFormat,
2888
3036
  setTimeFormat,
3037
+ showOrigin,
3038
+ setShowOrigin,
2889
3039
  dbSync,
2890
3040
  setDbSync,
2891
3041
  sessionId: ""
@@ -3467,6 +3617,23 @@ var tui = async (api) => {
3467
3617
  }
3468
3618
  }));
3469
3619
  }
3620
+ }, {
3621
+ title: "SubAgent Magazine: Origin Indicators",
3622
+ value: "subagent-origin",
3623
+ description: "Show or hide origin markers (\u21E2/\u21B3) in the sidebar list",
3624
+ slash: {
3625
+ name: "subagent-origin"
3626
+ },
3627
+ onSelect: (dialog) => {
3628
+ const t = createT(() => signals.lang());
3629
+ const cur = Boolean(api.kv.get(`${KV_PREFIX}.show_origin`, false));
3630
+ api.kv.set(`${KV_PREFIX}.show_origin`, !cur);
3631
+ signals.setShowOrigin(!cur);
3632
+ api.ui.toast({
3633
+ message: `${t("settings.showOrigin")}: ${!cur ? t("settings.on") : t("settings.off")}`
3634
+ });
3635
+ dialog?.clear();
3636
+ }
3470
3637
  }]);
3471
3638
  };
3472
3639
  var mod = {