@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.
- package/dist/server.js +312 -16
- package/dist/tui.js +422 -253
- 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
|
|
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
|
-
|
|
694
|
+
appendFileSync
|
|
669
695
|
} = __require("fs");
|
|
670
|
-
|
|
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
|
|
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$
|
|
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, "
|
|
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
|
|
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
|
-
}),
|
|
1266
|
-
_$
|
|
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
|
-
|
|
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$
|
|
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, "
|
|
1525
|
-
_v$33 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
1526
|
-
_v$34 !== _p$.a && (_p$.a = _$setProp(_el$
|
|
1527
|
-
_v$35 !== _p$.o && (_p$.o = _$setProp(_el$
|
|
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$
|
|
1571
|
-
_$insertNode(_el$
|
|
1572
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1674
|
+
return _el$131;
|
|
1576
1675
|
})(), (() => {
|
|
1577
|
-
var _el$
|
|
1578
|
-
_$insertNode(_el$
|
|
1579
|
-
_$insert(_el$
|
|
1580
|
-
_$insert(_el$
|
|
1581
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1684
|
+
return _el$133;
|
|
1586
1685
|
})(), (() => {
|
|
1587
|
-
var _el$
|
|
1588
|
-
_$insertNode(_el$
|
|
1589
|
-
_$insertNode(_el$
|
|
1590
|
-
_$insertNode(_el$
|
|
1591
|
-
_$insert(_el$
|
|
1592
|
-
_$insert(_el$
|
|
1593
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
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$
|
|
1607
|
-
_$insertNode(_el$
|
|
1608
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
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$
|
|
1614
|
-
_$insert(_el$
|
|
1615
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1746
|
+
return _el$161;
|
|
1620
1747
|
})(), _$memo(() => _$memo(() => !!meta?.mode)() && (() => {
|
|
1621
|
-
var _el$
|
|
1622
|
-
_$insertNode(_el$
|
|
1623
|
-
_$insertNode(_el$
|
|
1624
|
-
_$insert(_el$
|
|
1625
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1755
|
+
return _el$162;
|
|
1629
1756
|
})())] : (() => {
|
|
1630
|
-
var _el$
|
|
1631
|
-
_$insertNode(_el$
|
|
1632
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1762
|
+
return _el$165;
|
|
1636
1763
|
})(), (() => {
|
|
1637
|
-
var _el$
|
|
1638
|
-
_$insertNode(_el$
|
|
1639
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
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$
|
|
1645
|
-
_$insertNode(_el$
|
|
1646
|
-
_$insert(_el$
|
|
1647
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1785
|
+
return _el$167;
|
|
1651
1786
|
})(), (() => {
|
|
1652
|
-
var _el$
|
|
1653
|
-
_$insert(_el$
|
|
1654
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1793
|
+
return _el$169;
|
|
1659
1794
|
})()] : (() => {
|
|
1660
|
-
var _el$
|
|
1661
|
-
_$insertNode(_el$
|
|
1662
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1800
|
+
return _el$170;
|
|
1666
1801
|
})(), (() => {
|
|
1667
|
-
var _el$
|
|
1668
|
-
_$insertNode(_el$
|
|
1669
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1807
|
+
return _el$151;
|
|
1673
1808
|
})(), (() => {
|
|
1674
|
-
var _el$
|
|
1675
|
-
_$
|
|
1676
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1823
|
+
return _el$155;
|
|
1681
1824
|
})(), (() => {
|
|
1682
|
-
var _el$
|
|
1683
|
-
_$insertNode(_el$
|
|
1684
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1830
|
+
return _el$156;
|
|
1688
1831
|
})(), (() => {
|
|
1689
|
-
var _el$
|
|
1690
|
-
_$insert(_el$
|
|
1691
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1838
|
+
return _el$158;
|
|
1696
1839
|
})(), (() => {
|
|
1697
|
-
var _el$
|
|
1698
|
-
_$insertNode(_el$
|
|
1699
|
-
_$insert(_el$
|
|
1700
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1846
|
+
return _el$159;
|
|
1704
1847
|
})()];
|
|
1705
1848
|
}, _el$127);
|
|
1706
|
-
_$
|
|
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$
|
|
1709
|
-
return () => _c$
|
|
1710
|
-
var _el$
|
|
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$
|
|
1713
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1856
|
+
_$insertNode(_el$172, _el$173);
|
|
1857
|
+
_$effect((_$p) => _$setProp(_el$172, "style", {
|
|
1714
1858
|
fg: theme().success
|
|
1715
1859
|
}, _$p));
|
|
1716
|
-
return _el$
|
|
1860
|
+
return _el$172;
|
|
1717
1861
|
})(), (() => {
|
|
1718
|
-
var _el$
|
|
1719
|
-
_$
|
|
1720
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1875
|
+
return _el$177;
|
|
1724
1876
|
})(), (() => {
|
|
1725
|
-
var _el$
|
|
1726
|
-
_$insertNode(_el$
|
|
1727
|
-
_$insert(_el$
|
|
1728
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1883
|
+
return _el$178;
|
|
1732
1884
|
})()];
|
|
1733
1885
|
})(), null);
|
|
1734
1886
|
_$insert(_el$122, (() => {
|
|
1735
|
-
var _c$
|
|
1736
|
-
return () => _c$
|
|
1737
|
-
var _el$
|
|
1738
|
-
\u2716
|
|
1739
|
-
_$insertNode(_el$
|
|
1740
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1896
|
+
return _el$180;
|
|
1745
1897
|
})(), (() => {
|
|
1746
|
-
var _el$
|
|
1747
|
-
_$insert(_el$
|
|
1748
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1903
|
+
return _el$183;
|
|
1752
1904
|
})(), (() => {
|
|
1753
|
-
var _el$
|
|
1754
|
-
_$insertNode(_el$
|
|
1755
|
-
_$insert(_el$
|
|
1756
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1911
|
+
return _el$184;
|
|
1760
1912
|
})()];
|
|
1761
1913
|
})(), null);
|
|
1762
1914
|
_$insert(_el$122, (() => {
|
|
1763
|
-
var _c$
|
|
1764
|
-
return () => _c$
|
|
1765
|
-
var _el$
|
|
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$
|
|
1768
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1919
|
+
_$insertNode(_el$186, _el$187);
|
|
1920
|
+
_$effect((_$p) => _$setProp(_el$186, "style", {
|
|
1769
1921
|
fg: theme().accent
|
|
1770
1922
|
}, _$p));
|
|
1771
|
-
return _el$
|
|
1923
|
+
return _el$186;
|
|
1772
1924
|
})(), (() => {
|
|
1773
|
-
var _el$
|
|
1774
|
-
_$
|
|
1775
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1938
|
+
return _el$191;
|
|
1779
1939
|
})()];
|
|
1780
1940
|
})(), null);
|
|
1781
1941
|
_$insert(_el$122, (() => {
|
|
1782
|
-
var _c$
|
|
1783
|
-
return () => _c$
|
|
1784
|
-
var _el$
|
|
1785
|
-
\u25A3
|
|
1786
|
-
_$insertNode(_el$
|
|
1787
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1950
|
+
return _el$192;
|
|
1791
1951
|
})(), (() => {
|
|
1792
|
-
var _el$
|
|
1793
|
-
_$
|
|
1794
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1965
|
+
return _el$197;
|
|
1798
1966
|
})()] : null;
|
|
1799
1967
|
})(), null);
|
|
1800
1968
|
_$insert(_el$122, (() => {
|
|
1801
|
-
var _c$
|
|
1802
|
-
return () => _c$
|
|
1803
|
-
var _el$
|
|
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$
|
|
1806
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1973
|
+
_$insertNode(_el$198, _el$199);
|
|
1974
|
+
_$effect((_$p) => _$setProp(_el$198, "style", {
|
|
1807
1975
|
fg: theme().warning
|
|
1808
1976
|
}, _$p));
|
|
1809
|
-
return _el$
|
|
1977
|
+
return _el$198;
|
|
1810
1978
|
})(), (() => {
|
|
1811
|
-
var _el$
|
|
1812
|
-
_$insertNode(_el$
|
|
1813
|
-
_$insert(_el$
|
|
1814
|
-
_$insert(_el$
|
|
1815
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
1986
|
+
return _el$201;
|
|
1819
1987
|
})()];
|
|
1820
1988
|
})(), null);
|
|
1821
1989
|
_$insert(_el$122, (() => {
|
|
1822
|
-
var _c$
|
|
1823
|
-
return () => _c$
|
|
1824
|
-
var _el$
|
|
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$
|
|
1827
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1994
|
+
_$insertNode(_el$203, _el$204);
|
|
1995
|
+
_$effect((_$p) => _$setProp(_el$203, "style", {
|
|
1828
1996
|
fg: theme().error
|
|
1829
1997
|
}, _$p));
|
|
1830
|
-
return _el$
|
|
1998
|
+
return _el$203;
|
|
1831
1999
|
})(), (() => {
|
|
1832
|
-
var _el$
|
|
1833
|
-
_$insertNode(_el$
|
|
1834
|
-
_$insert(_el$
|
|
1835
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
2006
|
+
return _el$206;
|
|
1839
2007
|
})(), (() => {
|
|
1840
|
-
var _el$
|
|
1841
|
-
_$insertNode(_el$
|
|
1842
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
2013
|
+
return _el$208;
|
|
1846
2014
|
})()];
|
|
1847
2015
|
})(), null);
|
|
1848
2016
|
_$insert(_el$122, (() => {
|
|
1849
|
-
var _c$
|
|
1850
|
-
return () => _c$
|
|
1851
|
-
var _el$
|
|
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$
|
|
1854
|
-
_$effect((_$p) => _$setProp(_el$
|
|
2021
|
+
_$insertNode(_el$210, _el$211);
|
|
2022
|
+
_$effect((_$p) => _$setProp(_el$210, "style", {
|
|
1855
2023
|
fg: theme().accent
|
|
1856
2024
|
}, _$p));
|
|
1857
|
-
return _el$
|
|
2025
|
+
return _el$210;
|
|
1858
2026
|
})(), (() => {
|
|
1859
|
-
var _el$
|
|
1860
|
-
_$insert(_el$
|
|
1861
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
2032
|
+
return _el$213;
|
|
1865
2033
|
})()];
|
|
1866
2034
|
})(), null);
|
|
1867
2035
|
_$insert(_el$122, (() => {
|
|
1868
|
-
var _c$
|
|
1869
|
-
return () => _c$
|
|
1870
|
-
var _el$
|
|
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$
|
|
1873
|
-
_$effect((_$p) => _$setProp(_el$
|
|
2040
|
+
_$insertNode(_el$214, _el$215);
|
|
2041
|
+
_$effect((_$p) => _$setProp(_el$214, "style", {
|
|
1874
2042
|
fg: theme().accent
|
|
1875
2043
|
}, _$p));
|
|
1876
|
-
return _el$
|
|
2044
|
+
return _el$214;
|
|
1877
2045
|
})(), (() => {
|
|
1878
|
-
var _el$
|
|
1879
|
-
_$insert(_el$
|
|
1880
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
2051
|
+
return _el$217;
|
|
1884
2052
|
})(), (() => {
|
|
1885
|
-
var _el$
|
|
1886
|
-
_$insertNode(_el$
|
|
1887
|
-
_$insertNode(_el$
|
|
1888
|
-
_$insert(_el$
|
|
1889
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
2060
|
+
return _el$218;
|
|
1893
2061
|
})()];
|
|
1894
2062
|
})(), null);
|
|
1895
2063
|
_$insert(_el$122, (() => {
|
|
1896
|
-
var _c$
|
|
1897
|
-
return () => _c$
|
|
1898
|
-
var _el$
|
|
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$
|
|
1901
|
-
_$effect((_$p) => _$setProp(_el$
|
|
2068
|
+
_$insertNode(_el$221, _el$222);
|
|
2069
|
+
_$effect((_$p) => _$setProp(_el$221, "style", {
|
|
1902
2070
|
fg: theme().error
|
|
1903
2071
|
}, _$p));
|
|
1904
|
-
return _el$
|
|
2072
|
+
return _el$221;
|
|
1905
2073
|
})(), (() => {
|
|
1906
|
-
var _el$
|
|
1907
|
-
_$
|
|
1908
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
2087
|
+
return _el$226;
|
|
1912
2088
|
})()];
|
|
1913
2089
|
})(), null);
|
|
1914
2090
|
_$effect((_p$) => {
|
|
1915
|
-
var _v$
|
|
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$
|
|
1924
|
-
_v$
|
|
1925
|
-
_v$
|
|
1926
|
-
_v$
|
|
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$
|
|
1962
|
-
_$insert(_el$
|
|
1963
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
2148
|
+
return _el$227;
|
|
1968
2149
|
})(), (() => {
|
|
1969
|
-
var _el$
|
|
1970
|
-
_$insertNode(_el$
|
|
1971
|
-
_$insert(_el$
|
|
1972
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
2156
|
+
return _el$228;
|
|
1976
2157
|
})(), _$memo(() => _$memo(() => !!ev.summary)() && (() => {
|
|
1977
|
-
var _el$
|
|
1978
|
-
_$insertNode(_el$
|
|
1979
|
-
_$insert(_el$
|
|
1980
|
-
_$effect((_$p) => _$setProp(_el$
|
|
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$
|
|
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 = {
|