@bojackduy/opencode-loopd 1.9.1 → 1.9.3

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 (3) hide show
  1. package/dist/server.js +312 -16
  2. package/dist/tui.js +422 -253
  3. package/package.json +4 -4
package/dist/tui.js CHANGED
@@ -322,13 +322,15 @@ function tokenize(input) {
322
322
  function commandHelp() {
323
323
  return [
324
324
  "Modes: : insert \u2192 send/commands | Ctrl+N \u2192 normal | ? toggle help | Shift+B bug report",
325
- "Nav: j/k move | g/G top/bottom | o open child | c toggle done | p/r/R/x pause/resume/retry/clear | L logs | q close",
325
+ "Nav: j/k move | g/G top/bottom | o open child | c toggle done | p/r/R/x pause/resume/retry/clear | A abort worker | N nudge | L logs | q close",
326
326
  "Commands (insert mode, : prefix):",
327
- " :send <message> Send instruction to selected goal",
327
+ " :send <message> Send bare words now as their own turn (no steering)",
328
328
  " :open Open child session (same as o)",
329
329
  " :force <summary> --evidence <text> Force-complete (bypass checks)",
330
330
  " :block <reason> --needed <text> Force-block the selected goal",
331
331
  " :pause / :resume / :retry / :clear Quick controls (also p/r/R/x)",
332
+ " :abort Abort worker session now (status unchanged; A)",
333
+ " :nudge Force re-prompt now with full steering (N)",
332
334
  " :bug / :report Open prefilled GitHub bug report",
333
335
  " :logs / :help / :q Toggle logs / help / close",
334
336
  " Tip: create goals via /goal in the parent chat (agent clarifies first)."
@@ -427,6 +429,29 @@ function prevent(evt) {
427
429
  e.preventDefault?.();
428
430
  e.stopPropagation?.();
429
431
  }
432
+ function keyName(evt) {
433
+ return (evt.name || "").toLowerCase();
434
+ }
435
+ function keySeq(evt) {
436
+ const e = evt;
437
+ return e.sequence || e.raw || "";
438
+ }
439
+ function isEnterKey(evt) {
440
+ const name = keyName(evt);
441
+ if (name === "return" || name === "enter" || name === "kp_enter")
442
+ return true;
443
+ const seq = keySeq(evt);
444
+ return seq === "\r" || seq === `
445
+ `;
446
+ }
447
+ function isEscapeKey(evt) {
448
+ if (keyName(evt) === "escape" || keyName(evt) === "esc")
449
+ return true;
450
+ return keySeq(evt) === "\x1B";
451
+ }
452
+ function isCtrlN(evt) {
453
+ return Boolean(evt.ctrl) && keyName(evt) === "n";
454
+ }
430
455
  function statusColor(status, theme) {
431
456
  switch (status) {
432
457
  case "active":
@@ -618,6 +643,7 @@ function LoopDashboard(props) {
618
643
  const [clock, setClock] = createSignal(Date.now());
619
644
  const [agentIndex, setAgentIndex] = createSignal({});
620
645
  let inputEl;
646
+ let listScrollRef;
621
647
  let focusTimer;
622
648
  const client = createControlClient(props.directory);
623
649
  const popMode = props.api.mode.push("loopd.dashboard");
@@ -665,9 +691,9 @@ function LoopDashboard(props) {
665
691
  onMount(() => {
666
692
  try {
667
693
  const {
668
- writeFileSync
694
+ appendFileSync
669
695
  } = __require("fs");
670
- writeFileSync(LOG_FILE, `[${new Date().toISOString()}] dashboard mounted dir=${props.directory} mode=${mode()} dialogOpen=${props.api.ui.dialog.open}
696
+ appendFileSync(LOG_FILE, `[${new Date().toISOString()}] dashboard mounted dir=${props.directory} mode=${mode()} dialogOpen=${props.api.ui.dialog.open}
671
697
  `);
672
698
  } catch {}
673
699
  debugLog("mounted", "dialogOpen", props.api.ui.dialog.open, "directory", props.directory);
@@ -703,10 +729,17 @@ function LoopDashboard(props) {
703
729
  const isQuestion = name === "?" || seq === "?" || raw === "?" || seq.includes("?") || raw.includes("?");
704
730
  debugLog("isColon", isColon, "isQuestion", isQuestion, "modeBefore", mode());
705
731
  if (mode() === "insert") {
706
- if (evt.ctrl && name.toLowerCase() === "n") {
732
+ if (isEnterKey(evt)) {
733
+ prevent(evt);
734
+ debugLog("insert enter -> execute");
735
+ executeCommand(commandInput());
736
+ return;
737
+ }
738
+ if (isEscapeKey(evt) || isCtrlN(evt)) {
707
739
  prevent(evt);
708
740
  returnToNormalMode();
709
- debugLog("insert -> normal via ctrl+n");
741
+ debugLog("insert -> normal via esc/ctrl+n");
742
+ return;
710
743
  }
711
744
  return;
712
745
  }
@@ -770,6 +803,16 @@ function LoopDashboard(props) {
770
803
  executeCommand("clear");
771
804
  return;
772
805
  }
806
+ if (key === "A") {
807
+ prevent(evt);
808
+ executeCommand("abort");
809
+ return;
810
+ }
811
+ if (key === "N") {
812
+ prevent(evt);
813
+ executeCommand("nudge");
814
+ return;
815
+ }
773
816
  if (key === "L") {
774
817
  prevent(evt);
775
818
  setShowLogs((value) => !value);
@@ -807,6 +850,9 @@ function LoopDashboard(props) {
807
850
  debugLog("empty command");
808
851
  return;
809
852
  }
853
+ if (!["help", "logs", "q", "close"].includes(parsed.command)) {
854
+ setStatusText(`sending ${parsed.command}\u2026`);
855
+ }
810
856
  try {
811
857
  switch (parsed.command) {
812
858
  case "send": {
@@ -960,6 +1006,40 @@ function LoopDashboard(props) {
960
1006
  await refresh();
961
1007
  break;
962
1008
  }
1009
+ case "abort": {
1010
+ if (!selectedGoal()) {
1011
+ setStatusText("No goal");
1012
+ break;
1013
+ }
1014
+ const r = await client.execute({
1015
+ version: 1,
1016
+ requestID: randomUUID(),
1017
+ requestedAt: new Date().toISOString(),
1018
+ command: "abort_worker",
1019
+ goalID: selectedGoal().id
1020
+ });
1021
+ setStatusText(r.ok ? r.message : `Error: ${r.message}`);
1022
+ if (r.ok)
1023
+ await refresh();
1024
+ break;
1025
+ }
1026
+ case "nudge": {
1027
+ if (!selectedGoal()) {
1028
+ setStatusText("No goal");
1029
+ break;
1030
+ }
1031
+ const r = await client.execute({
1032
+ version: 1,
1033
+ requestID: randomUUID(),
1034
+ requestedAt: new Date().toISOString(),
1035
+ command: "nudge",
1036
+ goalID: selectedGoal().id
1037
+ });
1038
+ setStatusText(r.ok ? r.message : `Error: ${r.message}`);
1039
+ if (r.ok)
1040
+ await refresh();
1041
+ break;
1042
+ }
963
1043
  case "goal": {
964
1044
  setStatusText("Create goals via /goal in the parent chat (agent clarifies first). Dashboard: :send to steer the worker.");
965
1045
  break;
@@ -1005,6 +1085,7 @@ function LoopDashboard(props) {
1005
1085
  returnToNormalMode();
1006
1086
  }
1007
1087
  const activeGoals = () => state()?.goals.filter((g) => showCompleted() || g.status !== "complete") || [];
1088
+ const listHeight = () => Math.min(activeGoals().length, 10);
1008
1089
  const runningCount = () => state()?.runtimes.filter((runtime) => runtime.phase === "running").length || 0;
1009
1090
  const runningFrame = () => ["|", "/", "-", "\\"][Math.floor(clock() / 500) % 4];
1010
1091
  function handleBugReport() {
@@ -1018,8 +1099,20 @@ function LoopDashboard(props) {
1018
1099
  setStatusText(res.status === "opened" ? "Opening bug report in browser\u2026" : `Could not open browser: ${res.reason} \u2014 ${url}`);
1019
1100
  }
1020
1101
  createEffect(() => setSelectedGoal(activeGoals()[selected()] || null));
1102
+ function rowIdFor(goalID) {
1103
+ return `loopd-goal-${goalID}`;
1104
+ }
1105
+ createEffect(() => {
1106
+ const goals = activeGoals();
1107
+ const goal = goals[selected()];
1108
+ if (!goal || !listScrollRef)
1109
+ return;
1110
+ try {
1111
+ listScrollRef.scrollChildIntoView(rowIdFor(goal.id));
1112
+ } catch {}
1113
+ });
1021
1114
  return (() => {
1022
- var _el$ = _$createElement("box"), _el$2 = _$createElement("box"), _el$3 = _$createElement("box"), _el$4 = _$createElement("text"), _el$5 = _$createElement("span"), _el$7 = _$createElement("span"), _el$9 = _$createElement("span"), _el$0 = _$createTextNode(` `), _el$1 = _$createTextNode(` `), _el$10 = _$createElement("span"), _el$12 = _$createElement("span"), _el$13 = _$createElement("span"), _el$15 = _$createElement("span"), _el$17 = _$createElement("span"), _el$18 = _$createTextNode(` `), _el$19 = _$createTextNode(` running`), _el$20 = _$createElement("span"), _el$22 = _$createElement("span"), _el$24 = _$createElement("span"), _el$25 = _$createElement("span"), _el$27 = _$createElement("box"), _el$28 = _$createElement("text"), _el$29 = _$createElement("span"), _el$31 = _$createElement("box"), _el$36 = _$createElement("box"), _el$43 = _$createElement("box"), _el$44 = _$createElement("text"), _el$45 = _$createElement("span"), _el$46 = _$createElement("input");
1115
+ var _el$ = _$createElement("box"), _el$2 = _$createElement("box"), _el$3 = _$createElement("box"), _el$4 = _$createElement("text"), _el$5 = _$createElement("span"), _el$7 = _$createElement("span"), _el$9 = _$createElement("span"), _el$0 = _$createTextNode(` `), _el$1 = _$createTextNode(` `), _el$10 = _$createElement("span"), _el$12 = _$createElement("span"), _el$13 = _$createElement("span"), _el$15 = _$createElement("span"), _el$17 = _$createElement("span"), _el$18 = _$createTextNode(` `), _el$19 = _$createTextNode(` running`), _el$20 = _$createElement("span"), _el$22 = _$createElement("span"), _el$24 = _$createElement("span"), _el$25 = _$createElement("span"), _el$27 = _$createElement("box"), _el$28 = _$createElement("text"), _el$29 = _$createElement("span"), _el$31 = _$createElement("box"), _el$43 = _$createElement("box"), _el$44 = _$createElement("text"), _el$45 = _$createElement("span"), _el$46 = _$createElement("input");
1023
1116
  _$insertNode(_el$, _el$2);
1024
1117
  _$setProp(_el$, "flexDirection", "column");
1025
1118
  _$setProp(_el$, "width", "100%");
@@ -1091,9 +1184,8 @@ function LoopDashboard(props) {
1091
1184
  fg: "white",
1092
1185
  bold: true
1093
1186
  });
1094
- _$insertNode(_el$31, _el$36);
1095
1187
  _$setProp(_el$31, "flexDirection", "column");
1096
- _$setProp(_el$31, "flexGrow", 1);
1188
+ _$setProp(_el$31, "flexShrink", 1);
1097
1189
  _$setProp(_el$31, "minHeight", 0);
1098
1190
  _$setProp(_el$31, "overflow", "hidden");
1099
1191
  _$insert(_el$31, _$createComponent(Show, {
@@ -1111,7 +1203,7 @@ function LoopDashboard(props) {
1111
1203
  _$setProp(_el$32, "maxHeight", 14);
1112
1204
  _$setProp(_el$32, "overflow", "hidden");
1113
1205
  _$insertNode(_el$33, _el$34);
1114
- _$insertNode(_el$34, _$createTextNode(`\u2501\u2501\u2501 Keys: ? toggle help c toggle done : insert Ctrl+N normal o open Bug report q close \u2501\u2501\u2501`));
1206
+ _$insertNode(_el$34, _$createTextNode(`\u2501\u2501\u2501 Keys: ? toggle help c toggle done : insert Ctrl+N normal o open A abort worker N nudge q close \u2501\u2501\u2501`));
1115
1207
  _$setProp(_el$34, "style", {
1116
1208
  fg: "yellow",
1117
1209
  bold: true
@@ -1262,13 +1354,8 @@ function LoopDashboard(props) {
1262
1354
  _$effect((_$p) => _$setProp(_el$32, "backgroundColor", theme().background, _$p));
1263
1355
  return _el$32;
1264
1356
  }
1265
- }), _el$36);
1266
- _$setProp(_el$36, "flexDirection", "column");
1267
- _$setProp(_el$36, "flexGrow", 1);
1268
- _$setProp(_el$36, "padding", 1);
1269
- _$setProp(_el$36, "minHeight", 0);
1270
- _$setProp(_el$36, "overflow", "hidden");
1271
- _$insert(_el$36, _$createComponent(Show, {
1357
+ }), null);
1358
+ _$insert(_el$31, _$createComponent(Show, {
1272
1359
  get when() {
1273
1360
  return activeGoals().length > 0;
1274
1361
  },
@@ -1279,6 +1366,7 @@ function LoopDashboard(props) {
1279
1366
  _$insertNode(_el$67, _el$75);
1280
1367
  _$setProp(_el$67, "flexDirection", "column");
1281
1368
  _$setProp(_el$67, "gap", 1);
1369
+ _$setProp(_el$67, "padding", 1);
1282
1370
  _$insertNode(_el$68, _el$69);
1283
1371
  _$insertNode(_el$68, _el$71);
1284
1372
  _$insertNode(_el$68, _el$73);
@@ -1348,7 +1436,11 @@ function LoopDashboard(props) {
1348
1436
  })();
1349
1437
  },
1350
1438
  get children() {
1351
- return _$createComponent(For, {
1439
+ var _el$36 = _$createElement("scrollbox");
1440
+ _$use((el) => {
1441
+ listScrollRef = el;
1442
+ }, _el$36);
1443
+ _$insert(_el$36, _$createComponent(For, {
1352
1444
  get each() {
1353
1445
  return activeGoals();
1354
1446
  },
@@ -1375,6 +1467,8 @@ function LoopDashboard(props) {
1375
1467
  _$insertNode(_el$91, _el$92);
1376
1468
  _$insertNode(_el$91, _el$93);
1377
1469
  _$insertNode(_el$91, _el$95);
1470
+ _$setProp(_el$91, "wrapMode", "none");
1471
+ _$setProp(_el$91, "truncate", true);
1378
1472
  _$insert(_el$92, (() => {
1379
1473
  var _c$2 = _$memo(() => !!isActive());
1380
1474
  return () => _c$2() ? `\u25B6 ${statusIcon(goal.status)} ${goal.name}` : ` ${statusIcon(goal.status)} ${goal.name}`;
@@ -1512,32 +1606,36 @@ function LoopDashboard(props) {
1512
1606
  })();
1513
1607
  })(), null);
1514
1608
  _$effect((_p$) => {
1515
- var _v$32 = isActive() ? theme().backgroundElement : undefined, _v$33 = {
1609
+ var _v$32 = rowIdFor(goal.id), _v$33 = isActive() ? theme().backgroundElement : undefined, _v$34 = {
1516
1610
  fg: statusColor(goal.status, theme()),
1517
1611
  bold: isActive()
1518
- }, _v$34 = {
1519
- fg: theme().textMuted
1520
1612
  }, _v$35 = {
1613
+ fg: theme().textMuted
1614
+ }, _v$36 = {
1521
1615
  fg: statusColor(goal.status, theme()),
1522
1616
  bold: true
1523
1617
  };
1524
- _v$32 !== _p$.e && (_p$.e = _$setProp(_el$90, "backgroundColor", _v$32, _p$.e));
1525
- _v$33 !== _p$.t && (_p$.t = _$setProp(_el$92, "style", _v$33, _p$.t));
1526
- _v$34 !== _p$.a && (_p$.a = _$setProp(_el$93, "style", _v$34, _p$.a));
1527
- _v$35 !== _p$.o && (_p$.o = _$setProp(_el$95, "style", _v$35, _p$.o));
1618
+ _v$32 !== _p$.e && (_p$.e = _$setProp(_el$90, "id", _v$32, _p$.e));
1619
+ _v$33 !== _p$.t && (_p$.t = _$setProp(_el$90, "backgroundColor", _v$33, _p$.t));
1620
+ _v$34 !== _p$.a && (_p$.a = _$setProp(_el$92, "style", _v$34, _p$.a));
1621
+ _v$35 !== _p$.o && (_p$.o = _$setProp(_el$93, "style", _v$35, _p$.o));
1622
+ _v$36 !== _p$.i && (_p$.i = _$setProp(_el$95, "style", _v$36, _p$.i));
1528
1623
  return _p$;
1529
1624
  }, {
1530
1625
  e: undefined,
1531
1626
  t: undefined,
1532
1627
  a: undefined,
1533
- o: undefined
1628
+ o: undefined,
1629
+ i: undefined
1534
1630
  });
1535
1631
  return _el$90;
1536
1632
  })();
1537
1633
  }
1538
- });
1634
+ }));
1635
+ _$effect((_$p) => _$setProp(_el$36, "height", listHeight(), _$p));
1636
+ return _el$36;
1539
1637
  }
1540
- }));
1638
+ }), null);
1541
1639
  _$insert(_el$31, _$createComponent(Show, {
1542
1640
  get when() {
1543
1641
  return selectedGoal();
@@ -1548,7 +1646,7 @@ function LoopDashboard(props) {
1548
1646
  const blk = () => goal().blocker;
1549
1647
  return (() => {
1550
1648
  var _el$121 = _$createElement("box"), _el$122 = _$createElement("text"), _el$123 = _$createElement("span"), _el$124 = _$createTextNode(` `), _el$125 = _$createElement("span"), _el$126 = _$createTextNode(` `), _el$127 = _$createTextNode(`
1551
- `), _el$128 = _$createElement("span");
1649
+ `), _el$128 = _$createElement("span"), _el$130 = _$createElement("span");
1552
1650
  _$insertNode(_el$121, _el$122);
1553
1651
  _$setProp(_el$121, "flexDirection", "column");
1554
1652
  _$setProp(_el$121, "border", true);
@@ -1559,6 +1657,7 @@ function LoopDashboard(props) {
1559
1657
  _$insertNode(_el$122, _el$125);
1560
1658
  _$insertNode(_el$122, _el$127);
1561
1659
  _$insertNode(_el$122, _el$128);
1660
+ _$insertNode(_el$122, _el$130);
1562
1661
  _$insertNode(_el$123, _el$124);
1563
1662
  _$insert(_el$123, () => statusIcon(goal().status), _el$124);
1564
1663
  _$insert(_el$123, () => goal().name, null);
@@ -1567,33 +1666,53 @@ function LoopDashboard(props) {
1567
1666
  _$insert(_el$122, (() => {
1568
1667
  var _c$10 = _$memo(() => !!rt());
1569
1668
  return () => _c$10() && [(() => {
1570
- var _el$129 = _$createElement("span");
1571
- _$insertNode(_el$129, _$createTextNode(` \u2502 `));
1572
- _$effect((_$p) => _$setProp(_el$129, "style", {
1669
+ var _el$131 = _$createElement("span");
1670
+ _$insertNode(_el$131, _$createTextNode(` \u2502 `));
1671
+ _$effect((_$p) => _$setProp(_el$131, "style", {
1573
1672
  fg: theme().textMuted
1574
1673
  }, _$p));
1575
- return _el$129;
1674
+ return _el$131;
1576
1675
  })(), (() => {
1577
- var _el$131 = _$createElement("span"), _el$132 = _$createTextNode(` `);
1578
- _$insertNode(_el$131, _el$132);
1579
- _$insert(_el$131, () => phaseIcon(rt().phase), _el$132);
1580
- _$insert(_el$131, () => rt().phase, null);
1581
- _$effect((_$p) => _$setProp(_el$131, "style", {
1676
+ var _el$133 = _$createElement("span"), _el$134 = _$createTextNode(` `);
1677
+ _$insertNode(_el$133, _el$134);
1678
+ _$insert(_el$133, () => phaseIcon(rt().phase), _el$134);
1679
+ _$insert(_el$133, () => rt().phase, null);
1680
+ _$effect((_$p) => _$setProp(_el$133, "style", {
1582
1681
  fg: phaseColor(rt().phase, theme()),
1583
1682
  bold: true
1584
1683
  }, _$p));
1585
- return _el$131;
1684
+ return _el$133;
1586
1685
  })(), (() => {
1587
- var _el$133 = _$createElement("span"), _el$134 = _$createTextNode(` run `), _el$135 = _$createTextNode(` (budget `), _el$136 = _$createTextNode(`)`);
1588
- _$insertNode(_el$133, _el$134);
1589
- _$insertNode(_el$133, _el$135);
1590
- _$insertNode(_el$133, _el$136);
1591
- _$insert(_el$133, () => rt().runCount, _el$135);
1592
- _$insert(_el$133, () => rt().budgetTurnCount, _el$136);
1593
- _$effect((_$p) => _$setProp(_el$133, "style", {
1686
+ var _el$135 = _$createElement("span"), _el$136 = _$createTextNode(` run `), _el$137 = _$createTextNode(` (budget `), _el$138 = _$createTextNode(`)`);
1687
+ _$insertNode(_el$135, _el$136);
1688
+ _$insertNode(_el$135, _el$137);
1689
+ _$insertNode(_el$135, _el$138);
1690
+ _$insert(_el$135, () => rt().runCount, _el$137);
1691
+ _$insert(_el$135, () => rt().budgetTurnCount, _el$138);
1692
+ _$effect((_$p) => _$setProp(_el$135, "style", {
1594
1693
  fg: theme().textMuted
1595
1694
  }, _$p));
1596
- return _el$133;
1695
+ return _el$135;
1696
+ })()];
1697
+ })(), _el$127);
1698
+ _$insert(_el$122, (() => {
1699
+ var _c$11 = _$memo(() => !!rt()?.workerAbortedAt);
1700
+ return () => _c$11() && [(() => {
1701
+ var _el$139 = _$createElement("span");
1702
+ _$insertNode(_el$139, _$createTextNode(` \u2502 \u26A0 worker aborted `));
1703
+ _$effect((_$p) => _$setProp(_el$139, "style", {
1704
+ fg: theme().warning,
1705
+ bold: true
1706
+ }, _$p));
1707
+ return _el$139;
1708
+ })(), (() => {
1709
+ var _el$141 = _$createElement("span"), _el$142 = _$createTextNode(` \u2014 session kept, next turn reuses it`);
1710
+ _$insertNode(_el$141, _el$142);
1711
+ _$insert(_el$141, () => ageLabel(rt().workerAbortedAt, clock()), _el$142);
1712
+ _$effect((_$p) => _$setProp(_el$141, "style", {
1713
+ fg: theme().textMuted
1714
+ }, _$p));
1715
+ return _el$141;
1597
1716
  })()];
1598
1717
  })(), _el$127);
1599
1718
  _$insert(_el$122, () => {
@@ -1603,333 +1722,395 @@ function LoopDashboard(props) {
1603
1722
  const slash = model?.indexOf("/") ?? -1;
1604
1723
  return [`
1605
1724
  `, (() => {
1606
- var _el$137 = _$createElement("span");
1607
- _$insertNode(_el$137, _$createTextNode(`\uD83E\uDD16 `));
1608
- _$effect((_$p) => _$setProp(_el$137, "style", {
1725
+ var _el$143 = _$createElement("span");
1726
+ _$insertNode(_el$143, _$createTextNode(`\uD83E\uDD16 `));
1727
+ _$effect((_$p) => _$setProp(_el$143, "style", {
1609
1728
  fg: theme().textMuted
1610
1729
  }, _$p));
1611
- return _el$137;
1730
+ return _el$143;
1731
+ })(), (() => {
1732
+ var _el$145 = _$createElement("span");
1733
+ _$insertNode(_el$145, _$createTextNode(`Agent: `));
1734
+ _$effect((_$p) => _$setProp(_el$145, "style", {
1735
+ fg: theme().primary,
1736
+ bold: true
1737
+ }, _$p));
1738
+ return _el$145;
1612
1739
  })(), agentName ? [(() => {
1613
- var _el$149 = _$createElement("span");
1614
- _$insert(_el$149, agentName);
1615
- _$effect((_$p) => _$setProp(_el$149, "style", {
1740
+ var _el$161 = _$createElement("span");
1741
+ _$insert(_el$161, agentName);
1742
+ _$effect((_$p) => _$setProp(_el$161, "style", {
1616
1743
  fg: agentColor(meta?.color, theme()),
1617
1744
  bold: true
1618
1745
  }, _$p));
1619
- return _el$149;
1746
+ return _el$161;
1620
1747
  })(), _$memo(() => _$memo(() => !!meta?.mode)() && (() => {
1621
- var _el$150 = _$createElement("span"), _el$151 = _$createTextNode(` (`), _el$152 = _$createTextNode(`)`);
1622
- _$insertNode(_el$150, _el$151);
1623
- _$insertNode(_el$150, _el$152);
1624
- _$insert(_el$150, () => meta.mode, _el$152);
1625
- _$effect((_$p) => _$setProp(_el$150, "style", {
1748
+ var _el$162 = _$createElement("span"), _el$163 = _$createTextNode(` (`), _el$164 = _$createTextNode(`)`);
1749
+ _$insertNode(_el$162, _el$163);
1750
+ _$insertNode(_el$162, _el$164);
1751
+ _$insert(_el$162, () => meta.mode, _el$164);
1752
+ _$effect((_$p) => _$setProp(_el$162, "style", {
1626
1753
  fg: theme().textMuted
1627
1754
  }, _$p));
1628
- return _el$150;
1755
+ return _el$162;
1629
1756
  })())] : (() => {
1630
- var _el$153 = _$createElement("span");
1631
- _$insertNode(_el$153, _$createTextNode(`parent default`));
1632
- _$effect((_$p) => _$setProp(_el$153, "style", {
1757
+ var _el$165 = _$createElement("span");
1758
+ _$insertNode(_el$165, _$createTextNode(`parent default`));
1759
+ _$effect((_$p) => _$setProp(_el$165, "style", {
1633
1760
  fg: theme().textMuted
1634
1761
  }, _$p));
1635
- return _el$153;
1762
+ return _el$165;
1636
1763
  })(), (() => {
1637
- var _el$139 = _$createElement("span");
1638
- _$insertNode(_el$139, _$createTextNode(` \u2502 \uD83E\uDDE0 `));
1639
- _$effect((_$p) => _$setProp(_el$139, "style", {
1764
+ var _el$147 = _$createElement("span");
1765
+ _$insertNode(_el$147, _$createTextNode(` \u2502 \uD83E\uDDE0 `));
1766
+ _$effect((_$p) => _$setProp(_el$147, "style", {
1640
1767
  fg: theme().textMuted
1641
1768
  }, _$p));
1642
- return _el$139;
1769
+ return _el$147;
1770
+ })(), (() => {
1771
+ var _el$149 = _$createElement("span");
1772
+ _$insertNode(_el$149, _$createTextNode(`Model: `));
1773
+ _$effect((_$p) => _$setProp(_el$149, "style", {
1774
+ fg: theme().primary,
1775
+ bold: true
1776
+ }, _$p));
1777
+ return _el$149;
1643
1778
  })(), model && slash > 0 ? [(() => {
1644
- var _el$155 = _$createElement("span"), _el$156 = _$createTextNode(`/`);
1645
- _$insertNode(_el$155, _el$156);
1646
- _$insert(_el$155, () => model.slice(0, slash), _el$156);
1647
- _$effect((_$p) => _$setProp(_el$155, "style", {
1779
+ var _el$167 = _$createElement("span"), _el$168 = _$createTextNode(`/`);
1780
+ _$insertNode(_el$167, _el$168);
1781
+ _$insert(_el$167, () => model.slice(0, slash), _el$168);
1782
+ _$effect((_$p) => _$setProp(_el$167, "style", {
1648
1783
  fg: theme().textMuted
1649
1784
  }, _$p));
1650
- return _el$155;
1785
+ return _el$167;
1651
1786
  })(), (() => {
1652
- var _el$157 = _$createElement("span");
1653
- _$insert(_el$157, () => model.slice(slash + 1));
1654
- _$effect((_$p) => _$setProp(_el$157, "style", {
1787
+ var _el$169 = _$createElement("span");
1788
+ _$insert(_el$169, () => model.slice(slash + 1));
1789
+ _$effect((_$p) => _$setProp(_el$169, "style", {
1655
1790
  fg: theme().info,
1656
1791
  bold: true
1657
1792
  }, _$p));
1658
- return _el$157;
1793
+ return _el$169;
1659
1794
  })()] : (() => {
1660
- var _el$158 = _$createElement("span");
1661
- _$insertNode(_el$158, _$createTextNode(`session default`));
1662
- _$effect((_$p) => _$setProp(_el$158, "style", {
1795
+ var _el$170 = _$createElement("span");
1796
+ _$insertNode(_el$170, _$createTextNode(`session default`));
1797
+ _$effect((_$p) => _$setProp(_el$170, "style", {
1663
1798
  fg: theme().textMuted
1664
1799
  }, _$p));
1665
- return _el$158;
1800
+ return _el$170;
1666
1801
  })(), (() => {
1667
- var _el$141 = _$createElement("span");
1668
- _$insertNode(_el$141, _$createTextNode(` \u2502 \uD83D\uDCB0 `));
1669
- _$effect((_$p) => _$setProp(_el$141, "style", {
1802
+ var _el$151 = _$createElement("span");
1803
+ _$insertNode(_el$151, _$createTextNode(` \u2502 \uD83D\uDCB0 `));
1804
+ _$effect((_$p) => _$setProp(_el$151, "style", {
1670
1805
  fg: theme().textMuted
1671
1806
  }, _$p));
1672
- return _el$141;
1807
+ return _el$151;
1673
1808
  })(), (() => {
1674
- var _el$143 = _$createElement("span");
1675
- _$insert(_el$143, () => formatTokens(goal().tokensUsed));
1676
- _$effect((_$p) => _$setProp(_el$143, "style", {
1809
+ var _el$153 = _$createElement("span");
1810
+ _$insertNode(_el$153, _$createTextNode(`Spent: `));
1811
+ _$effect((_$p) => _$setProp(_el$153, "style", {
1812
+ fg: theme().primary,
1813
+ bold: true
1814
+ }, _$p));
1815
+ return _el$153;
1816
+ })(), (() => {
1817
+ var _el$155 = _$createElement("span");
1818
+ _$insert(_el$155, () => formatTokens(goal().tokensUsed));
1819
+ _$effect((_$p) => _$setProp(_el$155, "style", {
1677
1820
  fg: theme().warning,
1678
1821
  bold: true
1679
1822
  }, _$p));
1680
- return _el$143;
1823
+ return _el$155;
1681
1824
  })(), (() => {
1682
- var _el$144 = _$createElement("span");
1683
- _$insertNode(_el$144, _$createTextNode(` tokens \xB7 `));
1684
- _$effect((_$p) => _$setProp(_el$144, "style", {
1825
+ var _el$156 = _$createElement("span");
1826
+ _$insertNode(_el$156, _$createTextNode(` tokens \xB7 `));
1827
+ _$effect((_$p) => _$setProp(_el$156, "style", {
1685
1828
  fg: theme().textMuted
1686
1829
  }, _$p));
1687
- return _el$144;
1830
+ return _el$156;
1688
1831
  })(), (() => {
1689
- var _el$146 = _$createElement("span");
1690
- _$insert(_el$146, () => formatCost(goal().costUsed));
1691
- _$effect((_$p) => _$setProp(_el$146, "style", {
1832
+ var _el$158 = _$createElement("span");
1833
+ _$insert(_el$158, () => formatCost(goal().costUsed));
1834
+ _$effect((_$p) => _$setProp(_el$158, "style", {
1692
1835
  fg: theme().success,
1693
1836
  bold: true
1694
1837
  }, _$p));
1695
- return _el$146;
1838
+ return _el$158;
1696
1839
  })(), (() => {
1697
- var _el$147 = _$createElement("span"), _el$148 = _$createTextNode(` \xB7 `);
1698
- _$insertNode(_el$147, _el$148);
1699
- _$insert(_el$147, () => formatDuration(goal().timeUsedSeconds), null);
1700
- _$effect((_$p) => _$setProp(_el$147, "style", {
1840
+ var _el$159 = _$createElement("span"), _el$160 = _$createTextNode(` \xB7 `);
1841
+ _$insertNode(_el$159, _el$160);
1842
+ _$insert(_el$159, () => formatDuration(goal().timeUsedSeconds), null);
1843
+ _$effect((_$p) => _$setProp(_el$159, "style", {
1701
1844
  fg: theme().textMuted
1702
1845
  }, _$p));
1703
- return _el$147;
1846
+ return _el$159;
1704
1847
  })()];
1705
1848
  }, _el$127);
1706
- _$insert(_el$128, () => goal().objective.slice(0, 160));
1849
+ _$insertNode(_el$128, _$createTextNode(`\uD83C\uDFAF Target: `));
1850
+ _$insert(_el$130, () => goal().objective.slice(0, 160));
1707
1851
  _$insert(_el$122, (() => {
1708
- var _c$11 = _$memo(() => !!lp());
1709
- return () => _c$11() && [(() => {
1710
- var _el$160 = _$createElement("span"), _el$161 = _$createTextNode(`
1852
+ var _c$12 = _$memo(() => !!lp());
1853
+ return () => _c$12() && [(() => {
1854
+ var _el$172 = _$createElement("span"), _el$173 = _$createTextNode(`
1711
1855
  \u2714 `);
1712
- _$insertNode(_el$160, _el$161);
1713
- _$effect((_$p) => _$setProp(_el$160, "style", {
1856
+ _$insertNode(_el$172, _el$173);
1857
+ _$effect((_$p) => _$setProp(_el$172, "style", {
1714
1858
  fg: theme().success
1715
1859
  }, _$p));
1716
- return _el$160;
1860
+ return _el$172;
1717
1861
  })(), (() => {
1718
- var _el$163 = _$createElement("span");
1719
- _$insert(_el$163, () => lp().summary.slice(0, 100));
1720
- _$effect((_$p) => _$setProp(_el$163, "style", {
1862
+ var _el$175 = _$createElement("span");
1863
+ _$insertNode(_el$175, _$createTextNode(`Progress: `));
1864
+ _$effect((_$p) => _$setProp(_el$175, "style", {
1865
+ fg: theme().success,
1866
+ bold: true
1867
+ }, _$p));
1868
+ return _el$175;
1869
+ })(), (() => {
1870
+ var _el$177 = _$createElement("span");
1871
+ _$insert(_el$177, () => lp().summary.slice(0, 100));
1872
+ _$effect((_$p) => _$setProp(_el$177, "style", {
1721
1873
  fg: theme().text
1722
1874
  }, _$p));
1723
- return _el$163;
1875
+ return _el$177;
1724
1876
  })(), (() => {
1725
- var _el$164 = _$createElement("span"), _el$165 = _$createTextNode(` \u2192 `);
1726
- _$insertNode(_el$164, _el$165);
1727
- _$insert(_el$164, () => lp().next?.slice(0, 60) || "", null);
1728
- _$effect((_$p) => _$setProp(_el$164, "style", {
1877
+ var _el$178 = _$createElement("span"), _el$179 = _$createTextNode(` \u2192 `);
1878
+ _$insertNode(_el$178, _el$179);
1879
+ _$insert(_el$178, () => lp().next?.slice(0, 60) || "", null);
1880
+ _$effect((_$p) => _$setProp(_el$178, "style", {
1729
1881
  fg: theme().textMuted
1730
1882
  }, _$p));
1731
- return _el$164;
1883
+ return _el$178;
1732
1884
  })()];
1733
1885
  })(), null);
1734
1886
  _$insert(_el$122, (() => {
1735
- var _c$12 = _$memo(() => !!blk());
1736
- return () => _c$12() && [(() => {
1737
- var _el$166 = _$createElement("span"), _el$167 = _$createTextNode(`
1738
- \u2716 blocked: `);
1739
- _$insertNode(_el$166, _el$167);
1740
- _$effect((_$p) => _$setProp(_el$166, "style", {
1887
+ var _c$13 = _$memo(() => !!blk());
1888
+ return () => _c$13() && [(() => {
1889
+ var _el$180 = _$createElement("span"), _el$181 = _$createTextNode(`
1890
+ \u2716 Blocked: `);
1891
+ _$insertNode(_el$180, _el$181);
1892
+ _$effect((_$p) => _$setProp(_el$180, "style", {
1741
1893
  fg: theme().error,
1742
1894
  bold: true
1743
1895
  }, _$p));
1744
- return _el$166;
1896
+ return _el$180;
1745
1897
  })(), (() => {
1746
- var _el$169 = _$createElement("span");
1747
- _$insert(_el$169, () => blk().reason.slice(0, 140));
1748
- _$effect((_$p) => _$setProp(_el$169, "style", {
1898
+ var _el$183 = _$createElement("span");
1899
+ _$insert(_el$183, () => blk().reason.slice(0, 140));
1900
+ _$effect((_$p) => _$setProp(_el$183, "style", {
1749
1901
  fg: theme().error
1750
1902
  }, _$p));
1751
- return _el$169;
1903
+ return _el$183;
1752
1904
  })(), (() => {
1753
- var _el$170 = _$createElement("span"), _el$171 = _$createTextNode(` \u2014 `);
1754
- _$insertNode(_el$170, _el$171);
1755
- _$insert(_el$170, () => blk().needed.slice(0, 60), null);
1756
- _$effect((_$p) => _$setProp(_el$170, "style", {
1905
+ var _el$184 = _$createElement("span"), _el$185 = _$createTextNode(` \u2014 `);
1906
+ _$insertNode(_el$184, _el$185);
1907
+ _$insert(_el$184, () => blk().needed.slice(0, 60), null);
1908
+ _$effect((_$p) => _$setProp(_el$184, "style", {
1757
1909
  fg: theme().textMuted
1758
1910
  }, _$p));
1759
- return _el$170;
1911
+ return _el$184;
1760
1912
  })()];
1761
1913
  })(), null);
1762
1914
  _$insert(_el$122, (() => {
1763
- var _c$13 = _$memo(() => !!goal().config.artifactDir);
1764
- return () => _c$13() && [(() => {
1765
- var _el$172 = _$createElement("span"), _el$173 = _$createTextNode(`
1915
+ var _c$14 = _$memo(() => !!goal().config.artifactDir);
1916
+ return () => _c$14() && [(() => {
1917
+ var _el$186 = _$createElement("span"), _el$187 = _$createTextNode(`
1766
1918
  \uD83D\uDCC1 `);
1767
- _$insertNode(_el$172, _el$173);
1768
- _$effect((_$p) => _$setProp(_el$172, "style", {
1919
+ _$insertNode(_el$186, _el$187);
1920
+ _$effect((_$p) => _$setProp(_el$186, "style", {
1769
1921
  fg: theme().accent
1770
1922
  }, _$p));
1771
- return _el$172;
1923
+ return _el$186;
1772
1924
  })(), (() => {
1773
- var _el$175 = _$createElement("span");
1774
- _$insert(_el$175, () => String(goal().config.artifactDir).replace(String(props.directory), "."));
1775
- _$effect((_$p) => _$setProp(_el$175, "style", {
1925
+ var _el$189 = _$createElement("span");
1926
+ _$insertNode(_el$189, _$createTextNode(`Artifacts: `));
1927
+ _$effect((_$p) => _$setProp(_el$189, "style", {
1928
+ fg: theme().accent,
1929
+ bold: true
1930
+ }, _$p));
1931
+ return _el$189;
1932
+ })(), (() => {
1933
+ var _el$191 = _$createElement("span");
1934
+ _$insert(_el$191, () => String(goal().config.artifactDir).replace(String(props.directory), "."));
1935
+ _$effect((_$p) => _$setProp(_el$191, "style", {
1776
1936
  fg: theme().textMuted
1777
1937
  }, _$p));
1778
- return _el$175;
1938
+ return _el$191;
1779
1939
  })()];
1780
1940
  })(), null);
1781
1941
  _$insert(_el$122, (() => {
1782
- var _c$14 = _$memo(() => (goal().config.checks?.length ?? 0) > 0);
1783
- return () => _c$14() ? [(() => {
1784
- var _el$176 = _$createElement("span"), _el$177 = _$createTextNode(`
1785
- \u25A3 checks: `);
1786
- _$insertNode(_el$176, _el$177);
1787
- _$effect((_$p) => _$setProp(_el$176, "style", {
1942
+ var _c$15 = _$memo(() => (goal().config.checks?.length ?? 0) > 0);
1943
+ return () => _c$15() ? [(() => {
1944
+ var _el$192 = _$createElement("span"), _el$193 = _$createTextNode(`
1945
+ \u25A3 `);
1946
+ _$insertNode(_el$192, _el$193);
1947
+ _$effect((_$p) => _$setProp(_el$192, "style", {
1788
1948
  fg: theme().warning
1789
1949
  }, _$p));
1790
- return _el$176;
1950
+ return _el$192;
1791
1951
  })(), (() => {
1792
- var _el$179 = _$createElement("span");
1793
- _$insert(_el$179, () => goal().config.checks.join(", ").slice(0, 100));
1794
- _$effect((_$p) => _$setProp(_el$179, "style", {
1952
+ var _el$195 = _$createElement("span");
1953
+ _$insertNode(_el$195, _$createTextNode(`Checks: `));
1954
+ _$effect((_$p) => _$setProp(_el$195, "style", {
1955
+ fg: theme().warning,
1956
+ bold: true
1957
+ }, _$p));
1958
+ return _el$195;
1959
+ })(), (() => {
1960
+ var _el$197 = _$createElement("span");
1961
+ _$insert(_el$197, () => goal().config.checks.join(", ").slice(0, 100));
1962
+ _$effect((_$p) => _$setProp(_el$197, "style", {
1795
1963
  fg: theme().textMuted
1796
1964
  }, _$p));
1797
- return _el$179;
1965
+ return _el$197;
1798
1966
  })()] : null;
1799
1967
  })(), null);
1800
1968
  _$insert(_el$122, (() => {
1801
- var _c$15 = _$memo(() => rt()?.evaluatorRejectionCount > 0);
1802
- return () => _c$15() && [(() => {
1803
- var _el$180 = _$createElement("span"), _el$181 = _$createTextNode(`
1969
+ var _c$16 = _$memo(() => rt()?.evaluatorRejectionCount > 0);
1970
+ return () => _c$16() && [(() => {
1971
+ var _el$198 = _$createElement("span"), _el$199 = _$createTextNode(`
1804
1972
  \u26A0 rejections: `);
1805
- _$insertNode(_el$180, _el$181);
1806
- _$effect((_$p) => _$setProp(_el$180, "style", {
1973
+ _$insertNode(_el$198, _el$199);
1974
+ _$effect((_$p) => _$setProp(_el$198, "style", {
1807
1975
  fg: theme().warning
1808
1976
  }, _$p));
1809
- return _el$180;
1977
+ return _el$198;
1810
1978
  })(), (() => {
1811
- var _el$183 = _$createElement("span"), _el$184 = _$createTextNode(` \u2014 `);
1812
- _$insertNode(_el$183, _el$184);
1813
- _$insert(_el$183, () => String(rt().evaluatorRejectionCount), _el$184);
1814
- _$insert(_el$183, () => String(rt().lastRejectionDetails || "").slice(0, 80), null);
1815
- _$effect((_$p) => _$setProp(_el$183, "style", {
1979
+ var _el$201 = _$createElement("span"), _el$202 = _$createTextNode(` \u2014 `);
1980
+ _$insertNode(_el$201, _el$202);
1981
+ _$insert(_el$201, () => String(rt().evaluatorRejectionCount), _el$202);
1982
+ _$insert(_el$201, () => String(rt().lastRejectionDetails || "").slice(0, 80), null);
1983
+ _$effect((_$p) => _$setProp(_el$201, "style", {
1816
1984
  fg: theme().warning
1817
1985
  }, _$p));
1818
- return _el$183;
1986
+ return _el$201;
1819
1987
  })()];
1820
1988
  })(), null);
1821
1989
  _$insert(_el$122, (() => {
1822
- var _c$16 = _$memo(() => rt()?.unknownStatusCount > 0);
1823
- return () => _c$16() && [(() => {
1824
- var _el$185 = _$createElement("span"), _el$186 = _$createTextNode(`
1990
+ var _c$17 = _$memo(() => rt()?.unknownStatusCount > 0);
1991
+ return () => _c$17() && [(() => {
1992
+ var _el$203 = _$createElement("span"), _el$204 = _$createTextNode(`
1825
1993
  \u26A0\uFE0F unreachable: `);
1826
- _$insertNode(_el$185, _el$186);
1827
- _$effect((_$p) => _$setProp(_el$185, "style", {
1994
+ _$insertNode(_el$203, _el$204);
1995
+ _$effect((_$p) => _$setProp(_el$203, "style", {
1828
1996
  fg: theme().error
1829
1997
  }, _$p));
1830
- return _el$185;
1998
+ return _el$203;
1831
1999
  })(), (() => {
1832
- var _el$188 = _$createElement("span"), _el$189 = _$createTextNode(`/3`);
1833
- _$insertNode(_el$188, _el$189);
1834
- _$insert(_el$188, () => String(rt().unknownStatusCount), _el$189);
1835
- _$effect((_$p) => _$setProp(_el$188, "style", {
2000
+ var _el$206 = _$createElement("span"), _el$207 = _$createTextNode(`/3`);
2001
+ _$insertNode(_el$206, _el$207);
2002
+ _$insert(_el$206, () => String(rt().unknownStatusCount), _el$207);
2003
+ _$effect((_$p) => _$setProp(_el$206, "style", {
1836
2004
  fg: theme().error
1837
2005
  }, _$p));
1838
- return _el$188;
2006
+ return _el$206;
1839
2007
  })(), (() => {
1840
- var _el$190 = _$createElement("span");
1841
- _$insertNode(_el$190, _$createTextNode(` \u2014 nudge to recover`));
1842
- _$effect((_$p) => _$setProp(_el$190, "style", {
2008
+ var _el$208 = _$createElement("span");
2009
+ _$insertNode(_el$208, _$createTextNode(` \u2014 nudge to recover`));
2010
+ _$effect((_$p) => _$setProp(_el$208, "style", {
1843
2011
  fg: theme().textMuted
1844
2012
  }, _$p));
1845
- return _el$190;
2013
+ return _el$208;
1846
2014
  })()];
1847
2015
  })(), null);
1848
2016
  _$insert(_el$122, (() => {
1849
- var _c$17 = _$memo(() => !!rt()?.retryAfter);
1850
- return () => _c$17() && [(() => {
1851
- var _el$192 = _$createElement("span"), _el$193 = _$createTextNode(`
2017
+ var _c$18 = _$memo(() => !!rt()?.retryAfter);
2018
+ return () => _c$18() && [(() => {
2019
+ var _el$210 = _$createElement("span"), _el$211 = _$createTextNode(`
1852
2020
  \u21BB retry in: `);
1853
- _$insertNode(_el$192, _el$193);
1854
- _$effect((_$p) => _$setProp(_el$192, "style", {
2021
+ _$insertNode(_el$210, _el$211);
2022
+ _$effect((_$p) => _$setProp(_el$210, "style", {
1855
2023
  fg: theme().accent
1856
2024
  }, _$p));
1857
- return _el$192;
2025
+ return _el$210;
1858
2026
  })(), (() => {
1859
- var _el$195 = _$createElement("span");
1860
- _$insert(_el$195, () => countdownLabel(rt().retryAfter, clock()));
1861
- _$effect((_$p) => _$setProp(_el$195, "style", {
2027
+ var _el$213 = _$createElement("span");
2028
+ _$insert(_el$213, () => countdownLabel(rt().retryAfter, clock()));
2029
+ _$effect((_$p) => _$setProp(_el$213, "style", {
1862
2030
  fg: theme().accent
1863
2031
  }, _$p));
1864
- return _el$195;
2032
+ return _el$213;
1865
2033
  })()];
1866
2034
  })(), null);
1867
2035
  _$insert(_el$122, (() => {
1868
- var _c$18 = _$memo(() => !!rt()?.nextRunAt);
1869
- return () => _c$18() && [(() => {
1870
- var _el$196 = _$createElement("span"), _el$197 = _$createTextNode(`
2036
+ var _c$19 = _$memo(() => !!rt()?.nextRunAt);
2037
+ return () => _c$19() && [(() => {
2038
+ var _el$214 = _$createElement("span"), _el$215 = _$createTextNode(`
1871
2039
  \u23F0 next run: `);
1872
- _$insertNode(_el$196, _el$197);
1873
- _$effect((_$p) => _$setProp(_el$196, "style", {
2040
+ _$insertNode(_el$214, _el$215);
2041
+ _$effect((_$p) => _$setProp(_el$214, "style", {
1874
2042
  fg: theme().accent
1875
2043
  }, _$p));
1876
- return _el$196;
2044
+ return _el$214;
1877
2045
  })(), (() => {
1878
- var _el$199 = _$createElement("span");
1879
- _$insert(_el$199, () => countdownLabel(rt().nextRunAt, clock()));
1880
- _$effect((_$p) => _$setProp(_el$199, "style", {
2046
+ var _el$217 = _$createElement("span");
2047
+ _$insert(_el$217, () => countdownLabel(rt().nextRunAt, clock()));
2048
+ _$effect((_$p) => _$setProp(_el$217, "style", {
1881
2049
  fg: theme().accent
1882
2050
  }, _$p));
1883
- return _el$199;
2051
+ return _el$217;
1884
2052
  })(), (() => {
1885
- var _el$200 = _$createElement("span"), _el$201 = _$createTextNode(` (`), _el$202 = _$createTextNode(` runs)`);
1886
- _$insertNode(_el$200, _el$201);
1887
- _$insertNode(_el$200, _el$202);
1888
- _$insert(_el$200, () => String(rt().scheduleRunCount || 0), _el$202);
1889
- _$effect((_$p) => _$setProp(_el$200, "style", {
2053
+ var _el$218 = _$createElement("span"), _el$219 = _$createTextNode(` (`), _el$220 = _$createTextNode(` runs)`);
2054
+ _$insertNode(_el$218, _el$219);
2055
+ _$insertNode(_el$218, _el$220);
2056
+ _$insert(_el$218, () => String(rt().scheduleRunCount || 0), _el$220);
2057
+ _$effect((_$p) => _$setProp(_el$218, "style", {
1890
2058
  fg: theme().textMuted
1891
2059
  }, _$p));
1892
- return _el$200;
2060
+ return _el$218;
1893
2061
  })()];
1894
2062
  })(), null);
1895
2063
  _$insert(_el$122, (() => {
1896
- var _c$19 = _$memo(() => !!rt()?.lastError);
1897
- return () => _c$19() && [(() => {
1898
- var _el$203 = _$createElement("span"), _el$204 = _$createTextNode(`
2064
+ var _c$20 = _$memo(() => !!rt()?.lastError);
2065
+ return () => _c$20() && [(() => {
2066
+ var _el$221 = _$createElement("span"), _el$222 = _$createTextNode(`
1899
2067
  \u26A0 `);
1900
- _$insertNode(_el$203, _el$204);
1901
- _$effect((_$p) => _$setProp(_el$203, "style", {
2068
+ _$insertNode(_el$221, _el$222);
2069
+ _$effect((_$p) => _$setProp(_el$221, "style", {
1902
2070
  fg: theme().error
1903
2071
  }, _$p));
1904
- return _el$203;
2072
+ return _el$221;
1905
2073
  })(), (() => {
1906
- var _el$206 = _$createElement("span");
1907
- _$insert(_el$206, () => rt().lastError.slice(0, 120));
1908
- _$effect((_$p) => _$setProp(_el$206, "style", {
2074
+ var _el$224 = _$createElement("span");
2075
+ _$insertNode(_el$224, _$createTextNode(`Error: `));
2076
+ _$effect((_$p) => _$setProp(_el$224, "style", {
2077
+ fg: theme().error,
2078
+ bold: true
2079
+ }, _$p));
2080
+ return _el$224;
2081
+ })(), (() => {
2082
+ var _el$226 = _$createElement("span");
2083
+ _$insert(_el$226, () => rt().lastError.slice(0, 120));
2084
+ _$effect((_$p) => _$setProp(_el$226, "style", {
1909
2085
  fg: theme().error
1910
2086
  }, _$p));
1911
- return _el$206;
2087
+ return _el$226;
1912
2088
  })()];
1913
2089
  })(), null);
1914
2090
  _$effect((_p$) => {
1915
- var _v$36 = borderColorForStatus(goal().status, theme()), _v$37 = {
2091
+ var _v$37 = borderColorForStatus(goal().status, theme()), _v$38 = {
1916
2092
  fg: statusColor(goal().status, theme()),
1917
2093
  bold: true
1918
- }, _v$38 = {
1919
- fg: statusColor(goal().status, theme())
1920
2094
  }, _v$39 = {
2095
+ fg: statusColor(goal().status, theme())
2096
+ }, _v$40 = {
2097
+ fg: theme().primary,
2098
+ bold: true
2099
+ }, _v$41 = {
1921
2100
  fg: theme().text
1922
2101
  };
1923
- _v$36 !== _p$.e && (_p$.e = _$setProp(_el$121, "borderColor", _v$36, _p$.e));
1924
- _v$37 !== _p$.t && (_p$.t = _$setProp(_el$123, "style", _v$37, _p$.t));
1925
- _v$38 !== _p$.a && (_p$.a = _$setProp(_el$125, "style", _v$38, _p$.a));
1926
- _v$39 !== _p$.o && (_p$.o = _$setProp(_el$128, "style", _v$39, _p$.o));
2102
+ _v$37 !== _p$.e && (_p$.e = _$setProp(_el$121, "borderColor", _v$37, _p$.e));
2103
+ _v$38 !== _p$.t && (_p$.t = _$setProp(_el$123, "style", _v$38, _p$.t));
2104
+ _v$39 !== _p$.a && (_p$.a = _$setProp(_el$125, "style", _v$39, _p$.a));
2105
+ _v$40 !== _p$.o && (_p$.o = _$setProp(_el$128, "style", _v$40, _p$.o));
2106
+ _v$41 !== _p$.i && (_p$.i = _$setProp(_el$130, "style", _v$41, _p$.i));
1927
2107
  return _p$;
1928
2108
  }, {
1929
2109
  e: undefined,
1930
2110
  t: undefined,
1931
2111
  a: undefined,
1932
- o: undefined
2112
+ o: undefined,
2113
+ i: undefined
1933
2114
  });
1934
2115
  return _el$121;
1935
2116
  })();
@@ -1958,29 +2139,29 @@ function LoopDashboard(props) {
1958
2139
  },
1959
2140
  children: (ev) => [`
1960
2141
  `, (() => {
1961
- var _el$207 = _$createElement("span");
1962
- _$insert(_el$207, () => String(ev.type));
1963
- _$effect((_$p) => _$setProp(_el$207, "style", {
2142
+ var _el$227 = _$createElement("span");
2143
+ _$insert(_el$227, () => String(ev.type));
2144
+ _$effect((_$p) => _$setProp(_el$227, "style", {
1964
2145
  fg: eventColor(String(ev.type), theme()),
1965
2146
  bold: true
1966
2147
  }, _$p));
1967
- return _el$207;
2148
+ return _el$227;
1968
2149
  })(), (() => {
1969
- var _el$208 = _$createElement("span"), _el$209 = _$createTextNode(` `);
1970
- _$insertNode(_el$208, _el$209);
1971
- _$insert(_el$208, () => ev.goalID?.slice(0, 8), null);
1972
- _$effect((_$p) => _$setProp(_el$208, "style", {
2150
+ var _el$228 = _$createElement("span"), _el$229 = _$createTextNode(` `);
2151
+ _$insertNode(_el$228, _el$229);
2152
+ _$insert(_el$228, () => ev.goalID?.slice(0, 8), null);
2153
+ _$effect((_$p) => _$setProp(_el$228, "style", {
1973
2154
  fg: theme().textMuted
1974
2155
  }, _$p));
1975
- return _el$208;
2156
+ return _el$228;
1976
2157
  })(), _$memo(() => _$memo(() => !!ev.summary)() && (() => {
1977
- var _el$210 = _$createElement("span"), _el$211 = _$createTextNode(` \u2014 `);
1978
- _$insertNode(_el$210, _el$211);
1979
- _$insert(_el$210, () => String(ev.summary).slice(0, 60), null);
1980
- _$effect((_$p) => _$setProp(_el$210, "style", {
2158
+ var _el$230 = _$createElement("span"), _el$231 = _$createTextNode(` \u2014 `);
2159
+ _$insertNode(_el$230, _el$231);
2160
+ _$insert(_el$230, () => String(ev.summary).slice(0, 60), null);
2161
+ _$effect((_$p) => _$setProp(_el$230, "style", {
1981
2162
  fg: theme().text
1982
2163
  }, _$p));
1983
- return _el$210;
2164
+ return _el$230;
1984
2165
  })())]
1985
2166
  }), null);
1986
2167
  _$effect((_p$) => {
@@ -2034,18 +2215,6 @@ function LoopDashboard(props) {
2034
2215
  prevent(evt);
2035
2216
  return;
2036
2217
  }
2037
- if (name === "return" || name === "enter") {
2038
- prevent(evt);
2039
- debugLog("input enter -> execute");
2040
- executeCommand(commandInput());
2041
- return;
2042
- }
2043
- if (evt.ctrl && name.toLowerCase() === "n") {
2044
- prevent(evt);
2045
- debugLog("input ctrl+n -> normal");
2046
- returnToNormalMode();
2047
- return;
2048
- }
2049
2218
  });
2050
2219
  _$effect((_p$) => {
2051
2220
  var _v$4 = theme().border, _v$5 = {