@bojackduy/opencode-loopd 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/tui.js +324 -301
  2. package/package.json +1 -1
package/dist/tui.js CHANGED
@@ -8,6 +8,8 @@ import { createComponent as _$createComponent2 } from "@opentui/solid";
8
8
  import { use as _$use } from "@opentui/solid";
9
9
  import { effect as _$effect } from "@opentui/solid";
10
10
  import { createComponent as _$createComponent } from "@opentui/solid";
11
+ import { spread as _$spread } from "@opentui/solid";
12
+ import { mergeProps as _$mergeProps } from "@opentui/solid";
11
13
  import { memo as _$memo } from "@opentui/solid";
12
14
  import { insert as _$insert } from "@opentui/solid";
13
15
  import { createTextNode as _$createTextNode } from "@opentui/solid";
@@ -625,14 +627,7 @@ function LoopDashboard(props) {
625
627
  }
626
628
  if (key === "B") {
627
629
  prevent(evt);
628
- const goal = selectedGoal();
629
- const extra = goal ? `Goal: ${goal.name} (${goal.id.slice(0, 8)}) status=${goal.status} objective=${goal.objective.slice(0, 120)}` : "No goal selected";
630
- const url = bugReportUrl({
631
- runtimeLabel: `opencode-loopd dashboard`,
632
- extra
633
- });
634
- const res = openBrowserUrl(url);
635
- setStatusText(res.status === "opened" ? "Opening bug report in browser\u2026" : `Could not open browser: ${res.reason} \u2014 ${url}`);
630
+ handleBugReport();
636
631
  return;
637
632
  }
638
633
  if (key === "q") {
@@ -810,14 +805,7 @@ function LoopDashboard(props) {
810
805
  }
811
806
  case "bug":
812
807
  case "report": {
813
- const goal = selectedGoal();
814
- const extra = goal ? `Goal: ${goal.name} (${goal.id.slice(0, 8)}) status=${goal.status} objective=${goal.objective.slice(0, 120)}` : "No goal selected";
815
- const url = bugReportUrl({
816
- runtimeLabel: `opencode-loopd dashboard`,
817
- extra
818
- });
819
- const res = openBrowserUrl(url);
820
- setStatusText(res.status === "opened" ? "Opening bug report in browser\u2026" : `Could not open browser: ${res.reason} \u2014 ${url}`);
808
+ handleBugReport();
821
809
  break;
822
810
  }
823
811
  case "logs":
@@ -858,25 +846,39 @@ function LoopDashboard(props) {
858
846
  const activeGoals = () => state()?.goals.filter((g) => g.status !== "complete") || [];
859
847
  const runningCount = () => state()?.runtimes.filter((runtime) => runtime.phase === "running").length || 0;
860
848
  const runningFrame = () => ["|", "/", "-", "\\"][Math.floor(clock() / 500) % 4];
849
+ function handleBugReport() {
850
+ const goal = selectedGoal();
851
+ const extra = goal ? `Goal: ${goal.name} (${goal.id.slice(0, 8)}) status=${goal.status} objective=${goal.objective.slice(0, 120)}` : "No goal selected";
852
+ const url = bugReportUrl({
853
+ runtimeLabel: `opencode-loopd dashboard`,
854
+ extra
855
+ });
856
+ const res = openBrowserUrl(url);
857
+ setStatusText(res.status === "opened" ? "Opening bug report in browser\u2026" : `Could not open browser: ${res.reason} \u2014 ${url}`);
858
+ }
861
859
  createEffect(() => setSelectedGoal(activeGoals()[selected()] || null));
862
860
  return (() => {
863
- 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$23 = _$createElement("span"), _el$25 = _$createElement("box"), _el$30 = _$createElement("box"), _el$37 = _$createElement("box"), _el$38 = _$createElement("text"), _el$39 = _$createElement("span"), _el$40 = _$createElement("input");
861
+ 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$23 = _$createElement("span"), _el$25 = _$createElement("box"), _el$26 = _$createElement("text"), _el$27 = _$createElement("span"), _el$29 = _$createElement("box"), _el$34 = _$createElement("box"), _el$41 = _$createElement("box"), _el$42 = _$createElement("text"), _el$43 = _$createElement("span"), _el$44 = _$createElement("input");
864
862
  _$insertNode(_el$, _el$2);
865
863
  _$setProp(_el$, "flexDirection", "column");
866
864
  _$setProp(_el$, "width", "100%");
867
865
  _$setProp(_el$, "alignItems", "center");
868
866
  _$setProp(_el$, "padding", 1);
869
867
  _$insertNode(_el$2, _el$3);
870
- _$insertNode(_el$2, _el$25);
871
- _$insertNode(_el$2, _el$37);
868
+ _$insertNode(_el$2, _el$29);
869
+ _$insertNode(_el$2, _el$41);
872
870
  _$setProp(_el$2, "flexDirection", "column");
873
871
  _$setProp(_el$2, "width", "90%");
874
872
  _$setProp(_el$2, "border", true);
875
873
  _$setProp(_el$2, "padding", 1);
876
874
  _$insertNode(_el$3, _el$4);
875
+ _$insertNode(_el$3, _el$25);
877
876
  _$setProp(_el$3, "flexDirection", "row");
877
+ _$setProp(_el$3, "justifyContent", "space-between");
878
+ _$setProp(_el$3, "alignItems", "center");
878
879
  _$setProp(_el$3, "padding", 0);
879
880
  _$setProp(_el$3, "flexShrink", 0);
881
+ _$setProp(_el$3, "gap", 1);
880
882
  _$insertNode(_el$4, _el$5);
881
883
  _$insertNode(_el$4, _el$7);
882
884
  _$insertNode(_el$4, _el$9);
@@ -907,32 +909,48 @@ function LoopDashboard(props) {
907
909
  _$insertNode(_el$20, _$createTextNode(` \u2502 `));
908
910
  _$insert(_el$22, () => state()?.goals.filter((g) => g.status === "complete").length || 0);
909
911
  _$insertNode(_el$23, _$createTextNode(` done`));
910
- _$insertNode(_el$25, _el$30);
911
- _$setProp(_el$25, "flexDirection", "column");
912
- _$setProp(_el$25, "flexGrow", 1);
913
- _$setProp(_el$25, "minHeight", 0);
914
- _$setProp(_el$25, "overflow", "hidden");
915
- _$insert(_el$25, _$createComponent(Show, {
912
+ _$insertNode(_el$25, _el$26);
913
+ _$setProp(_el$25, "flexDirection", "row");
914
+ _$setProp(_el$25, "alignItems", "center");
915
+ _$setProp(_el$25, "border", true);
916
+ _$setProp(_el$25, "paddingLeft", 1);
917
+ _$setProp(_el$25, "paddingRight", 1);
918
+ _$setProp(_el$25, "flexShrink", 0);
919
+ _$spread(_el$25, _$mergeProps({
920
+ get borderColor() {
921
+ return theme().error;
922
+ }
923
+ }, {
924
+ onClick: handleBugReport
925
+ }), true);
926
+ _$insertNode(_el$26, _el$27);
927
+ _$insertNode(_el$27, _$createTextNode(`Bug`));
928
+ _$insertNode(_el$29, _el$34);
929
+ _$setProp(_el$29, "flexDirection", "column");
930
+ _$setProp(_el$29, "flexGrow", 1);
931
+ _$setProp(_el$29, "minHeight", 0);
932
+ _$setProp(_el$29, "overflow", "hidden");
933
+ _$insert(_el$29, _$createComponent(Show, {
916
934
  get when() {
917
935
  return showHelp();
918
936
  },
919
937
  get children() {
920
- var _el$26 = _$createElement("box"), _el$27 = _$createElement("text"), _el$28 = _$createElement("span");
921
- _$insertNode(_el$26, _el$27);
922
- _$setProp(_el$26, "flexDirection", "column");
923
- _$setProp(_el$26, "padding", 1);
924
- _$setProp(_el$26, "border", true);
925
- _$setProp(_el$26, "borderColor", "yellow");
926
- _$setProp(_el$26, "flexShrink", 0);
927
- _$setProp(_el$26, "maxHeight", 14);
928
- _$setProp(_el$26, "overflow", "hidden");
929
- _$insertNode(_el$27, _el$28);
930
- _$insertNode(_el$28, _$createTextNode(`\u2501\u2501\u2501 Keys: ? toggle : insert Ctrl+N normal o open B bug q close \u2501\u2501\u2501`));
931
- _$setProp(_el$28, "style", {
938
+ var _el$30 = _$createElement("box"), _el$31 = _$createElement("text"), _el$32 = _$createElement("span");
939
+ _$insertNode(_el$30, _el$31);
940
+ _$setProp(_el$30, "flexDirection", "column");
941
+ _$setProp(_el$30, "padding", 1);
942
+ _$setProp(_el$30, "border", true);
943
+ _$setProp(_el$30, "borderColor", "yellow");
944
+ _$setProp(_el$30, "flexShrink", 0);
945
+ _$setProp(_el$30, "maxHeight", 14);
946
+ _$setProp(_el$30, "overflow", "hidden");
947
+ _$insertNode(_el$31, _el$32);
948
+ _$insertNode(_el$32, _$createTextNode(`\u2501\u2501\u2501 Keys: ? toggle : insert Ctrl+N normal o open B bug q close \u2501\u2501\u2501`));
949
+ _$setProp(_el$32, "style", {
932
950
  fg: "yellow",
933
951
  bold: true
934
952
  });
935
- _$insert(_el$27, _$createComponent(For, {
953
+ _$insert(_el$31, _$createComponent(For, {
936
954
  get each() {
937
955
  return commandHelp().split(`
938
956
  `);
@@ -942,88 +960,88 @@ function LoopDashboard(props) {
942
960
  const isCmd = line.trim().startsWith(":");
943
961
  return [`
944
962
  `, (() => {
945
- var _el$41 = _$createElement("span");
946
- _$insert(_el$41, line);
947
- _$effect((_$p) => _$setProp(_el$41, "style", {
963
+ var _el$45 = _$createElement("span");
964
+ _$insert(_el$45, line);
965
+ _$effect((_$p) => _$setProp(_el$45, "style", {
948
966
  fg: isHeader ? theme().primary : isCmd ? theme().warning : theme().text,
949
967
  bold: isHeader
950
968
  }, _$p));
951
- return _el$41;
969
+ return _el$45;
952
970
  })()];
953
971
  }
954
972
  }), null);
955
- _$effect((_$p) => _$setProp(_el$26, "backgroundColor", theme().background, _$p));
956
- return _el$26;
973
+ _$effect((_$p) => _$setProp(_el$30, "backgroundColor", theme().background, _$p));
974
+ return _el$30;
957
975
  }
958
- }), _el$30);
959
- _$setProp(_el$30, "flexDirection", "column");
960
- _$setProp(_el$30, "flexGrow", 1);
961
- _$setProp(_el$30, "padding", 1);
962
- _$setProp(_el$30, "minHeight", 0);
963
- _$setProp(_el$30, "overflow", "hidden");
964
- _$insert(_el$30, _$createComponent(Show, {
976
+ }), _el$34);
977
+ _$setProp(_el$34, "flexDirection", "column");
978
+ _$setProp(_el$34, "flexGrow", 1);
979
+ _$setProp(_el$34, "padding", 1);
980
+ _$setProp(_el$34, "minHeight", 0);
981
+ _$setProp(_el$34, "overflow", "hidden");
982
+ _$insert(_el$34, _$createComponent(Show, {
965
983
  get when() {
966
984
  return activeGoals().length > 0;
967
985
  },
968
986
  get fallback() {
969
987
  return (() => {
970
- var _el$42 = _$createElement("box"), _el$43 = _$createElement("text"), _el$44 = _$createElement("span"), _el$46 = _$createElement("span"), _el$48 = _$createElement("span"), _el$50 = _$createElement("text"), _el$51 = _$createElement("span"), _el$53 = _$createElement("span"), _el$55 = _$createElement("span"), _el$57 = _$createElement("span"), _el$59 = _$createElement("span"), _el$61 = _$createElement("span"), _el$63 = _$createElement("span");
971
- _$insertNode(_el$42, _el$43);
972
- _$insertNode(_el$42, _el$50);
973
- _$setProp(_el$42, "flexDirection", "column");
974
- _$setProp(_el$42, "gap", 1);
975
- _$insertNode(_el$43, _el$44);
976
- _$insertNode(_el$43, _el$46);
977
- _$insertNode(_el$43, _el$48);
978
- _$insertNode(_el$44, _$createTextNode(`No active goals.`));
979
- _$insertNode(_el$46, _$createTextNode(` /goal`));
980
- _$insertNode(_el$48, _$createTextNode(` in parent chat to create one.`));
981
- _$insertNode(_el$50, _el$51);
982
- _$insertNode(_el$50, _el$53);
983
- _$insertNode(_el$50, _el$55);
984
- _$insertNode(_el$50, _el$57);
985
- _$insertNode(_el$50, _el$59);
986
- _$insertNode(_el$50, _el$61);
987
- _$insertNode(_el$50, _el$63);
988
- _$insertNode(_el$51, _$createTextNode(`Tip: `));
989
- _$insertNode(_el$53, _$createTextNode(`:send`));
990
- _$insertNode(_el$55, _$createTextNode(` to steer the worker \xB7 `));
991
- _$insertNode(_el$57, _$createTextNode(`o`));
992
- _$insertNode(_el$59, _$createTextNode(` to open child \xB7 `));
993
- _$insertNode(_el$61, _$createTextNode(`:force`));
994
- _$insertNode(_el$63, _$createTextNode(` to complete manually.`));
988
+ var _el$46 = _$createElement("box"), _el$47 = _$createElement("text"), _el$48 = _$createElement("span"), _el$50 = _$createElement("span"), _el$52 = _$createElement("span"), _el$54 = _$createElement("text"), _el$55 = _$createElement("span"), _el$57 = _$createElement("span"), _el$59 = _$createElement("span"), _el$61 = _$createElement("span"), _el$63 = _$createElement("span"), _el$65 = _$createElement("span"), _el$67 = _$createElement("span");
989
+ _$insertNode(_el$46, _el$47);
990
+ _$insertNode(_el$46, _el$54);
991
+ _$setProp(_el$46, "flexDirection", "column");
992
+ _$setProp(_el$46, "gap", 1);
993
+ _$insertNode(_el$47, _el$48);
994
+ _$insertNode(_el$47, _el$50);
995
+ _$insertNode(_el$47, _el$52);
996
+ _$insertNode(_el$48, _$createTextNode(`No active goals.`));
997
+ _$insertNode(_el$50, _$createTextNode(` /goal`));
998
+ _$insertNode(_el$52, _$createTextNode(` in parent chat to create one.`));
999
+ _$insertNode(_el$54, _el$55);
1000
+ _$insertNode(_el$54, _el$57);
1001
+ _$insertNode(_el$54, _el$59);
1002
+ _$insertNode(_el$54, _el$61);
1003
+ _$insertNode(_el$54, _el$63);
1004
+ _$insertNode(_el$54, _el$65);
1005
+ _$insertNode(_el$54, _el$67);
1006
+ _$insertNode(_el$55, _$createTextNode(`Tip: `));
1007
+ _$insertNode(_el$57, _$createTextNode(`:send`));
1008
+ _$insertNode(_el$59, _$createTextNode(` to steer the worker \xB7 `));
1009
+ _$insertNode(_el$61, _$createTextNode(`o`));
1010
+ _$insertNode(_el$63, _$createTextNode(` to open child \xB7 `));
1011
+ _$insertNode(_el$65, _$createTextNode(`:force`));
1012
+ _$insertNode(_el$67, _$createTextNode(` to complete manually.`));
995
1013
  _$effect((_p$) => {
996
- var _v$21 = {
1014
+ var _v$22 = {
997
1015
  fg: theme().textMuted
998
- }, _v$22 = {
999
- fg: theme().accent
1000
1016
  }, _v$23 = {
1001
- fg: theme().textMuted
1017
+ fg: theme().accent
1002
1018
  }, _v$24 = {
1003
1019
  fg: theme().textMuted
1004
1020
  }, _v$25 = {
1005
- fg: theme().warning
1006
- }, _v$26 = {
1007
1021
  fg: theme().textMuted
1008
- }, _v$27 = {
1022
+ }, _v$26 = {
1009
1023
  fg: theme().warning
1010
- }, _v$28 = {
1024
+ }, _v$27 = {
1011
1025
  fg: theme().textMuted
1012
- }, _v$29 = {
1026
+ }, _v$28 = {
1013
1027
  fg: theme().warning
1028
+ }, _v$29 = {
1029
+ fg: theme().textMuted
1014
1030
  }, _v$30 = {
1031
+ fg: theme().warning
1032
+ }, _v$31 = {
1015
1033
  fg: theme().textMuted
1016
1034
  };
1017
- _v$21 !== _p$.e && (_p$.e = _$setProp(_el$44, "style", _v$21, _p$.e));
1018
- _v$22 !== _p$.t && (_p$.t = _$setProp(_el$46, "style", _v$22, _p$.t));
1019
- _v$23 !== _p$.a && (_p$.a = _$setProp(_el$48, "style", _v$23, _p$.a));
1020
- _v$24 !== _p$.o && (_p$.o = _$setProp(_el$51, "style", _v$24, _p$.o));
1021
- _v$25 !== _p$.i && (_p$.i = _$setProp(_el$53, "style", _v$25, _p$.i));
1022
- _v$26 !== _p$.n && (_p$.n = _$setProp(_el$55, "style", _v$26, _p$.n));
1023
- _v$27 !== _p$.s && (_p$.s = _$setProp(_el$57, "style", _v$27, _p$.s));
1024
- _v$28 !== _p$.h && (_p$.h = _$setProp(_el$59, "style", _v$28, _p$.h));
1025
- _v$29 !== _p$.r && (_p$.r = _$setProp(_el$61, "style", _v$29, _p$.r));
1026
- _v$30 !== _p$.d && (_p$.d = _$setProp(_el$63, "style", _v$30, _p$.d));
1035
+ _v$22 !== _p$.e && (_p$.e = _$setProp(_el$48, "style", _v$22, _p$.e));
1036
+ _v$23 !== _p$.t && (_p$.t = _$setProp(_el$50, "style", _v$23, _p$.t));
1037
+ _v$24 !== _p$.a && (_p$.a = _$setProp(_el$52, "style", _v$24, _p$.a));
1038
+ _v$25 !== _p$.o && (_p$.o = _$setProp(_el$55, "style", _v$25, _p$.o));
1039
+ _v$26 !== _p$.i && (_p$.i = _$setProp(_el$57, "style", _v$26, _p$.i));
1040
+ _v$27 !== _p$.n && (_p$.n = _$setProp(_el$59, "style", _v$27, _p$.n));
1041
+ _v$28 !== _p$.s && (_p$.s = _$setProp(_el$61, "style", _v$28, _p$.s));
1042
+ _v$29 !== _p$.h && (_p$.h = _$setProp(_el$63, "style", _v$29, _p$.h));
1043
+ _v$30 !== _p$.r && (_p$.r = _$setProp(_el$65, "style", _v$30, _p$.r));
1044
+ _v$31 !== _p$.d && (_p$.d = _$setProp(_el$67, "style", _v$31, _p$.d));
1027
1045
  return _p$;
1028
1046
  }, {
1029
1047
  e: undefined,
@@ -1037,7 +1055,7 @@ function LoopDashboard(props) {
1037
1055
  r: undefined,
1038
1056
  d: undefined
1039
1057
  });
1040
- return _el$42;
1058
+ return _el$46;
1041
1059
  })();
1042
1060
  },
1043
1061
  get children() {
@@ -1060,102 +1078,102 @@ function LoopDashboard(props) {
1060
1078
  return phaseColor(runtime().phase || "idle", theme());
1061
1079
  };
1062
1080
  return (() => {
1063
- var _el$65 = _$createElement("box"), _el$66 = _$createElement("text"), _el$67 = _$createElement("span"), _el$68 = _$createElement("span"), _el$70 = _$createElement("span");
1064
- _$insertNode(_el$65, _el$66);
1065
- _$setProp(_el$65, "flexDirection", "row");
1066
- _$setProp(_el$65, "paddingLeft", 1);
1067
- _$setProp(_el$65, "paddingRight", 1);
1068
- _$insertNode(_el$66, _el$67);
1069
- _$insertNode(_el$66, _el$68);
1070
- _$insertNode(_el$66, _el$70);
1071
- _$insert(_el$67, (() => {
1081
+ var _el$69 = _$createElement("box"), _el$70 = _$createElement("text"), _el$71 = _$createElement("span"), _el$72 = _$createElement("span"), _el$74 = _$createElement("span");
1082
+ _$insertNode(_el$69, _el$70);
1083
+ _$setProp(_el$69, "flexDirection", "row");
1084
+ _$setProp(_el$69, "paddingLeft", 1);
1085
+ _$setProp(_el$69, "paddingRight", 1);
1086
+ _$insertNode(_el$70, _el$71);
1087
+ _$insertNode(_el$70, _el$72);
1088
+ _$insertNode(_el$70, _el$74);
1089
+ _$insert(_el$71, (() => {
1072
1090
  var _c$2 = _$memo(() => !!isActive());
1073
1091
  return () => _c$2() ? `\u25B6 ${statusIcon(goal.status)} ${goal.name}` : ` ${statusIcon(goal.status)} ${goal.name}`;
1074
1092
  })());
1075
- _$insertNode(_el$68, _$createTextNode(` \u2502 `));
1076
- _$insert(_el$70, () => goal.status.toUpperCase());
1077
- _$insert(_el$66, (() => {
1093
+ _$insertNode(_el$72, _$createTextNode(` \u2502 `));
1094
+ _$insert(_el$74, () => goal.status.toUpperCase());
1095
+ _$insert(_el$70, (() => {
1078
1096
  var _c$3 = _$memo(() => !!runtime());
1079
1097
  return () => _c$3() && [(() => {
1080
- var _el$71 = _$createElement("span");
1081
- _$insertNode(_el$71, _$createTextNode(` \u2502 `));
1082
- _$effect((_$p) => _$setProp(_el$71, "style", {
1098
+ var _el$75 = _$createElement("span");
1099
+ _$insertNode(_el$75, _$createTextNode(` \u2502 `));
1100
+ _$effect((_$p) => _$setProp(_el$75, "style", {
1083
1101
  fg: theme().textMuted
1084
1102
  }, _$p));
1085
- return _el$71;
1103
+ return _el$75;
1086
1104
  })(), (() => {
1087
- var _el$73 = _$createElement("span"), _el$74 = _$createTextNode(` `);
1088
- _$insertNode(_el$73, _el$74);
1089
- _$insert(_el$73, (() => {
1105
+ var _el$77 = _$createElement("span"), _el$78 = _$createTextNode(` `);
1106
+ _$insertNode(_el$77, _el$78);
1107
+ _$insert(_el$77, (() => {
1090
1108
  var _c$6 = _$memo(() => runtime().phase === "running");
1091
1109
  return () => _c$6() ? runningFrame() : phaseIcon(runtime().phase);
1092
- })(), _el$74);
1093
- _$insert(_el$73, () => runtime().phase.toUpperCase(), null);
1094
- _$effect((_$p) => _$setProp(_el$73, "style", {
1110
+ })(), _el$78);
1111
+ _$insert(_el$77, () => runtime().phase.toUpperCase(), null);
1112
+ _$effect((_$p) => _$setProp(_el$77, "style", {
1095
1113
  fg: turnColor(),
1096
1114
  bold: runtime().phase === "running"
1097
1115
  }, _$p));
1098
- return _el$73;
1116
+ return _el$77;
1099
1117
  })(), (() => {
1100
- var _el$75 = _$createElement("span"), _el$76 = _$createTextNode(` `);
1101
- _$insertNode(_el$75, _el$76);
1102
- _$insert(_el$75, () => runtime().turnCount, null);
1103
- _$insert(_el$75, maxTurns ? `/${maxTurns}` : "", null);
1104
- _$effect((_$p) => _$setProp(_el$75, "style", {
1118
+ var _el$79 = _$createElement("span"), _el$80 = _$createTextNode(` `);
1119
+ _$insertNode(_el$79, _el$80);
1120
+ _$insert(_el$79, () => runtime().turnCount, null);
1121
+ _$insert(_el$79, maxTurns ? `/${maxTurns}` : "", null);
1122
+ _$effect((_$p) => _$setProp(_el$79, "style", {
1105
1123
  fg: turnColor()
1106
1124
  }, _$p));
1107
- return _el$75;
1125
+ return _el$79;
1108
1126
  })(), (() => {
1109
- var _el$77 = _$createElement("span"), _el$78 = _$createTextNode(` `);
1110
- _$insertNode(_el$77, _el$78);
1111
- _$insert(_el$77, () => ageLabel(runtime().lastProgressAt || runtime().lastRunAt, clock()), null);
1112
- _$effect((_$p) => _$setProp(_el$77, "style", {
1127
+ var _el$81 = _$createElement("span"), _el$82 = _$createTextNode(` `);
1128
+ _$insertNode(_el$81, _el$82);
1129
+ _$insert(_el$81, () => ageLabel(runtime().lastProgressAt || runtime().lastRunAt, clock()), null);
1130
+ _$effect((_$p) => _$setProp(_el$81, "style", {
1113
1131
  fg: theme().textMuted
1114
1132
  }, _$p));
1115
- return _el$77;
1133
+ return _el$81;
1116
1134
  })()];
1117
1135
  })(), null);
1118
- _$insert(_el$66, (() => {
1136
+ _$insert(_el$70, (() => {
1119
1137
  var _c$4 = _$memo(() => !!(runtime() && runtime().consecutiveFailures > 0));
1120
1138
  return () => _c$4() && (() => {
1121
- var _el$79 = _$createElement("span"), _el$80 = _$createTextNode(` \u2502 \u26A0 `), _el$81 = _$createTextNode(` fail`);
1122
- _$insertNode(_el$79, _el$80);
1123
- _$insertNode(_el$79, _el$81);
1124
- _$insert(_el$79, () => runtime().consecutiveFailures, _el$81);
1125
- _$effect((_$p) => _$setProp(_el$79, "style", {
1139
+ var _el$83 = _$createElement("span"), _el$84 = _$createTextNode(` \u2502 \u26A0 `), _el$85 = _$createTextNode(` fail`);
1140
+ _$insertNode(_el$83, _el$84);
1141
+ _$insertNode(_el$83, _el$85);
1142
+ _$insert(_el$83, () => runtime().consecutiveFailures, _el$85);
1143
+ _$effect((_$p) => _$setProp(_el$83, "style", {
1126
1144
  fg: theme().error,
1127
1145
  bold: true
1128
1146
  }, _$p));
1129
- return _el$79;
1147
+ return _el$83;
1130
1148
  })();
1131
1149
  })(), null);
1132
- _$insert(_el$66, (() => {
1150
+ _$insert(_el$70, (() => {
1133
1151
  var _c$5 = _$memo(() => !!(runtime() && (runtime().noProgressCount || 0) > 0));
1134
1152
  return () => _c$5() && (() => {
1135
- var _el$82 = _$createElement("span"), _el$83 = _$createTextNode(` \u2502 `), _el$84 = _$createTextNode(` no-progress`);
1136
- _$insertNode(_el$82, _el$83);
1137
- _$insertNode(_el$82, _el$84);
1138
- _$insert(_el$82, () => runtime().noProgressCount, _el$84);
1139
- _$effect((_$p) => _$setProp(_el$82, "style", {
1153
+ var _el$86 = _$createElement("span"), _el$87 = _$createTextNode(` \u2502 `), _el$88 = _$createTextNode(` no-progress`);
1154
+ _$insertNode(_el$86, _el$87);
1155
+ _$insertNode(_el$86, _el$88);
1156
+ _$insert(_el$86, () => runtime().noProgressCount, _el$88);
1157
+ _$effect((_$p) => _$setProp(_el$86, "style", {
1140
1158
  fg: theme().warning
1141
1159
  }, _$p));
1142
- return _el$82;
1160
+ return _el$86;
1143
1161
  })();
1144
1162
  })(), null);
1145
1163
  _$effect((_p$) => {
1146
- var _v$31 = isActive() ? theme().backgroundElement : undefined, _v$32 = {
1164
+ var _v$32 = isActive() ? theme().backgroundElement : undefined, _v$33 = {
1147
1165
  fg: statusColor(goal.status, theme()),
1148
1166
  bold: isActive()
1149
- }, _v$33 = {
1150
- fg: theme().textMuted
1151
1167
  }, _v$34 = {
1168
+ fg: theme().textMuted
1169
+ }, _v$35 = {
1152
1170
  fg: statusColor(goal.status, theme()),
1153
1171
  bold: true
1154
1172
  };
1155
- _v$31 !== _p$.e && (_p$.e = _$setProp(_el$65, "backgroundColor", _v$31, _p$.e));
1156
- _v$32 !== _p$.t && (_p$.t = _$setProp(_el$67, "style", _v$32, _p$.t));
1157
- _v$33 !== _p$.a && (_p$.a = _$setProp(_el$68, "style", _v$33, _p$.a));
1158
- _v$34 !== _p$.o && (_p$.o = _$setProp(_el$70, "style", _v$34, _p$.o));
1173
+ _v$32 !== _p$.e && (_p$.e = _$setProp(_el$69, "backgroundColor", _v$32, _p$.e));
1174
+ _v$33 !== _p$.t && (_p$.t = _$setProp(_el$71, "style", _v$33, _p$.t));
1175
+ _v$34 !== _p$.a && (_p$.a = _$setProp(_el$72, "style", _v$34, _p$.a));
1176
+ _v$35 !== _p$.o && (_p$.o = _$setProp(_el$74, "style", _v$35, _p$.o));
1159
1177
  return _p$;
1160
1178
  }, {
1161
1179
  e: undefined,
@@ -1163,172 +1181,172 @@ function LoopDashboard(props) {
1163
1181
  a: undefined,
1164
1182
  o: undefined
1165
1183
  });
1166
- return _el$65;
1184
+ return _el$69;
1167
1185
  })();
1168
1186
  }
1169
1187
  });
1170
1188
  }
1171
1189
  }));
1172
- _$insert(_el$25, _$createComponent(Show, {
1190
+ _$insert(_el$29, _$createComponent(Show, {
1173
1191
  get when() {
1174
1192
  return selectedGoal();
1175
1193
  },
1176
1194
  children: (goal) => {
1177
1195
  const rt = () => state()?.runtimes.find((r) => r.goalID === goal().id);
1178
1196
  return (() => {
1179
- var _el$85 = _$createElement("box"), _el$86 = _$createElement("text"), _el$87 = _$createElement("span"), _el$88 = _$createTextNode(` `), _el$89 = _$createElement("span"), _el$90 = _$createTextNode(` `), _el$91 = _$createTextNode(`
1180
- `), _el$92 = _$createElement("span");
1181
- _$insertNode(_el$85, _el$86);
1182
- _$setProp(_el$85, "flexDirection", "column");
1183
- _$setProp(_el$85, "border", true);
1184
- _$setProp(_el$85, "padding", 1);
1185
- _$setProp(_el$85, "flexShrink", 0);
1186
- _$setProp(_el$85, "maxHeight", 10);
1187
- _$insertNode(_el$86, _el$87);
1188
- _$insertNode(_el$86, _el$89);
1189
- _$insertNode(_el$86, _el$91);
1190
- _$insertNode(_el$86, _el$92);
1191
- _$insertNode(_el$87, _el$88);
1192
- _$insert(_el$87, () => statusIcon(goal().status), _el$88);
1193
- _$insert(_el$87, () => goal().name, null);
1197
+ var _el$89 = _$createElement("box"), _el$90 = _$createElement("text"), _el$91 = _$createElement("span"), _el$92 = _$createTextNode(` `), _el$93 = _$createElement("span"), _el$94 = _$createTextNode(` `), _el$95 = _$createTextNode(`
1198
+ `), _el$96 = _$createElement("span");
1194
1199
  _$insertNode(_el$89, _el$90);
1195
- _$insert(_el$89, () => goal().status.toUpperCase(), null);
1196
- _$insert(_el$86, (() => {
1200
+ _$setProp(_el$89, "flexDirection", "column");
1201
+ _$setProp(_el$89, "border", true);
1202
+ _$setProp(_el$89, "padding", 1);
1203
+ _$setProp(_el$89, "flexShrink", 0);
1204
+ _$setProp(_el$89, "maxHeight", 10);
1205
+ _$insertNode(_el$90, _el$91);
1206
+ _$insertNode(_el$90, _el$93);
1207
+ _$insertNode(_el$90, _el$95);
1208
+ _$insertNode(_el$90, _el$96);
1209
+ _$insertNode(_el$91, _el$92);
1210
+ _$insert(_el$91, () => statusIcon(goal().status), _el$92);
1211
+ _$insert(_el$91, () => goal().name, null);
1212
+ _$insertNode(_el$93, _el$94);
1213
+ _$insert(_el$93, () => goal().status.toUpperCase(), null);
1214
+ _$insert(_el$90, (() => {
1197
1215
  var _c$7 = _$memo(() => !!rt());
1198
1216
  return () => _c$7() && [(() => {
1199
- var _el$93 = _$createElement("span");
1200
- _$insertNode(_el$93, _$createTextNode(` \u2502 `));
1201
- _$effect((_$p) => _$setProp(_el$93, "style", {
1217
+ var _el$97 = _$createElement("span");
1218
+ _$insertNode(_el$97, _$createTextNode(` \u2502 `));
1219
+ _$effect((_$p) => _$setProp(_el$97, "style", {
1202
1220
  fg: theme().textMuted
1203
1221
  }, _$p));
1204
- return _el$93;
1222
+ return _el$97;
1205
1223
  })(), (() => {
1206
- var _el$95 = _$createElement("span"), _el$96 = _$createTextNode(` `);
1207
- _$insertNode(_el$95, _el$96);
1208
- _$insert(_el$95, () => phaseIcon(rt().phase), _el$96);
1209
- _$insert(_el$95, () => rt().phase, null);
1210
- _$effect((_$p) => _$setProp(_el$95, "style", {
1224
+ var _el$99 = _$createElement("span"), _el$100 = _$createTextNode(` `);
1225
+ _$insertNode(_el$99, _el$100);
1226
+ _$insert(_el$99, () => phaseIcon(rt().phase), _el$100);
1227
+ _$insert(_el$99, () => rt().phase, null);
1228
+ _$effect((_$p) => _$setProp(_el$99, "style", {
1211
1229
  fg: phaseColor(rt().phase, theme()),
1212
1230
  bold: true
1213
1231
  }, _$p));
1214
- return _el$95;
1232
+ return _el$99;
1215
1233
  })(), (() => {
1216
- var _el$97 = _$createElement("span"), _el$98 = _$createTextNode(` turn `);
1217
- _$insertNode(_el$97, _el$98);
1218
- _$insert(_el$97, () => rt().turnCount, null);
1219
- _$effect((_$p) => _$setProp(_el$97, "style", {
1234
+ var _el$101 = _$createElement("span"), _el$102 = _$createTextNode(` turn `);
1235
+ _$insertNode(_el$101, _el$102);
1236
+ _$insert(_el$101, () => rt().turnCount, null);
1237
+ _$effect((_$p) => _$setProp(_el$101, "style", {
1220
1238
  fg: theme().textMuted
1221
1239
  }, _$p));
1222
- return _el$97;
1240
+ return _el$101;
1223
1241
  })()];
1224
- })(), _el$91);
1225
- _$insert(_el$92, () => goal().objective.slice(0, 160));
1226
- _$insert(_el$86, (() => {
1242
+ })(), _el$95);
1243
+ _$insert(_el$96, () => goal().objective.slice(0, 160));
1244
+ _$insert(_el$90, (() => {
1227
1245
  var _c$8 = _$memo(() => !!goal().lastProgress);
1228
1246
  return () => _c$8() && [(() => {
1229
- var _el$99 = _$createElement("span"), _el$100 = _$createTextNode(`
1247
+ var _el$103 = _$createElement("span"), _el$104 = _$createTextNode(`
1230
1248
  \u2714 `);
1231
- _$insertNode(_el$99, _el$100);
1232
- _$effect((_$p) => _$setProp(_el$99, "style", {
1249
+ _$insertNode(_el$103, _el$104);
1250
+ _$effect((_$p) => _$setProp(_el$103, "style", {
1233
1251
  fg: theme().success
1234
1252
  }, _$p));
1235
- return _el$99;
1253
+ return _el$103;
1236
1254
  })(), (() => {
1237
- var _el$102 = _$createElement("span");
1238
- _$insert(_el$102, () => goal().lastProgress.summary.slice(0, 100));
1239
- _$effect((_$p) => _$setProp(_el$102, "style", {
1255
+ var _el$106 = _$createElement("span");
1256
+ _$insert(_el$106, () => goal().lastProgress.summary.slice(0, 100));
1257
+ _$effect((_$p) => _$setProp(_el$106, "style", {
1240
1258
  fg: theme().text
1241
1259
  }, _$p));
1242
- return _el$102;
1260
+ return _el$106;
1243
1261
  })(), (() => {
1244
- var _el$103 = _$createElement("span"), _el$104 = _$createTextNode(` \u2192 `);
1245
- _$insertNode(_el$103, _el$104);
1246
- _$insert(_el$103, () => goal().lastProgress.next?.slice(0, 60) || "", null);
1247
- _$effect((_$p) => _$setProp(_el$103, "style", {
1262
+ var _el$107 = _$createElement("span"), _el$108 = _$createTextNode(` \u2192 `);
1263
+ _$insertNode(_el$107, _el$108);
1264
+ _$insert(_el$107, () => goal().lastProgress.next?.slice(0, 60) || "", null);
1265
+ _$effect((_$p) => _$setProp(_el$107, "style", {
1248
1266
  fg: theme().textMuted
1249
1267
  }, _$p));
1250
- return _el$103;
1268
+ return _el$107;
1251
1269
  })()];
1252
1270
  })(), null);
1253
- _$insert(_el$86, (() => {
1271
+ _$insert(_el$90, (() => {
1254
1272
  var _c$9 = _$memo(() => !!goal().blocker);
1255
1273
  return () => _c$9() && [(() => {
1256
- var _el$105 = _$createElement("span"), _el$106 = _$createTextNode(`
1274
+ var _el$109 = _$createElement("span"), _el$110 = _$createTextNode(`
1257
1275
  \u2716 blocked: `);
1258
- _$insertNode(_el$105, _el$106);
1259
- _$effect((_$p) => _$setProp(_el$105, "style", {
1276
+ _$insertNode(_el$109, _el$110);
1277
+ _$effect((_$p) => _$setProp(_el$109, "style", {
1260
1278
  fg: theme().error,
1261
1279
  bold: true
1262
1280
  }, _$p));
1263
- return _el$105;
1281
+ return _el$109;
1264
1282
  })(), (() => {
1265
- var _el$108 = _$createElement("span");
1266
- _$insert(_el$108, () => goal().blocker.reason.slice(0, 140));
1267
- _$effect((_$p) => _$setProp(_el$108, "style", {
1283
+ var _el$112 = _$createElement("span");
1284
+ _$insert(_el$112, () => goal().blocker.reason.slice(0, 140));
1285
+ _$effect((_$p) => _$setProp(_el$112, "style", {
1268
1286
  fg: theme().error
1269
1287
  }, _$p));
1270
- return _el$108;
1288
+ return _el$112;
1271
1289
  })(), (() => {
1272
- var _el$109 = _$createElement("span"), _el$110 = _$createTextNode(` \u2014 `);
1273
- _$insertNode(_el$109, _el$110);
1274
- _$insert(_el$109, () => goal().blocker.needed.slice(0, 60), null);
1275
- _$effect((_$p) => _$setProp(_el$109, "style", {
1290
+ var _el$113 = _$createElement("span"), _el$114 = _$createTextNode(` \u2014 `);
1291
+ _$insertNode(_el$113, _el$114);
1292
+ _$insert(_el$113, () => goal().blocker.needed.slice(0, 60), null);
1293
+ _$effect((_$p) => _$setProp(_el$113, "style", {
1276
1294
  fg: theme().textMuted
1277
1295
  }, _$p));
1278
- return _el$109;
1296
+ return _el$113;
1279
1297
  })()];
1280
1298
  })(), null);
1281
- _$insert(_el$86, (() => {
1299
+ _$insert(_el$90, (() => {
1282
1300
  var _c$0 = _$memo(() => !!goal().config.artifactDir);
1283
1301
  return () => _c$0() && [(() => {
1284
- var _el$111 = _$createElement("span"), _el$112 = _$createTextNode(`
1302
+ var _el$115 = _$createElement("span"), _el$116 = _$createTextNode(`
1285
1303
  \uD83D\uDCC1 `);
1286
- _$insertNode(_el$111, _el$112);
1287
- _$effect((_$p) => _$setProp(_el$111, "style", {
1304
+ _$insertNode(_el$115, _el$116);
1305
+ _$effect((_$p) => _$setProp(_el$115, "style", {
1288
1306
  fg: theme().accent
1289
1307
  }, _$p));
1290
- return _el$111;
1308
+ return _el$115;
1291
1309
  })(), (() => {
1292
- var _el$114 = _$createElement("span");
1293
- _$insert(_el$114, () => String(goal().config.artifactDir).replace(String(props.directory), "."));
1294
- _$effect((_$p) => _$setProp(_el$114, "style", {
1310
+ var _el$118 = _$createElement("span");
1311
+ _$insert(_el$118, () => String(goal().config.artifactDir).replace(String(props.directory), "."));
1312
+ _$effect((_$p) => _$setProp(_el$118, "style", {
1295
1313
  fg: theme().textMuted
1296
1314
  }, _$p));
1297
- return _el$114;
1315
+ return _el$118;
1298
1316
  })()];
1299
1317
  })(), null);
1300
- _$insert(_el$86, (() => {
1318
+ _$insert(_el$90, (() => {
1301
1319
  var _c$1 = _$memo(() => !!rt()?.lastError);
1302
1320
  return () => _c$1() && [(() => {
1303
- var _el$115 = _$createElement("span"), _el$116 = _$createTextNode(`
1321
+ var _el$119 = _$createElement("span"), _el$120 = _$createTextNode(`
1304
1322
  \u26A0 `);
1305
- _$insertNode(_el$115, _el$116);
1306
- _$effect((_$p) => _$setProp(_el$115, "style", {
1323
+ _$insertNode(_el$119, _el$120);
1324
+ _$effect((_$p) => _$setProp(_el$119, "style", {
1307
1325
  fg: theme().error
1308
1326
  }, _$p));
1309
- return _el$115;
1327
+ return _el$119;
1310
1328
  })(), (() => {
1311
- var _el$118 = _$createElement("span");
1312
- _$insert(_el$118, () => rt().lastError.slice(0, 120));
1313
- _$effect((_$p) => _$setProp(_el$118, "style", {
1329
+ var _el$122 = _$createElement("span");
1330
+ _$insert(_el$122, () => rt().lastError.slice(0, 120));
1331
+ _$effect((_$p) => _$setProp(_el$122, "style", {
1314
1332
  fg: theme().error
1315
1333
  }, _$p));
1316
- return _el$118;
1334
+ return _el$122;
1317
1335
  })()];
1318
1336
  })(), null);
1319
1337
  _$effect((_p$) => {
1320
- var _v$35 = borderColorForStatus(goal().status, theme()), _v$36 = {
1338
+ var _v$36 = borderColorForStatus(goal().status, theme()), _v$37 = {
1321
1339
  fg: statusColor(goal().status, theme()),
1322
1340
  bold: true
1323
- }, _v$37 = {
1324
- fg: statusColor(goal().status, theme())
1325
1341
  }, _v$38 = {
1342
+ fg: statusColor(goal().status, theme())
1343
+ }, _v$39 = {
1326
1344
  fg: theme().text
1327
1345
  };
1328
- _v$35 !== _p$.e && (_p$.e = _$setProp(_el$85, "borderColor", _v$35, _p$.e));
1329
- _v$36 !== _p$.t && (_p$.t = _$setProp(_el$87, "style", _v$36, _p$.t));
1330
- _v$37 !== _p$.a && (_p$.a = _$setProp(_el$89, "style", _v$37, _p$.a));
1331
- _v$38 !== _p$.o && (_p$.o = _$setProp(_el$92, "style", _v$38, _p$.o));
1346
+ _v$36 !== _p$.e && (_p$.e = _$setProp(_el$89, "borderColor", _v$36, _p$.e));
1347
+ _v$37 !== _p$.t && (_p$.t = _$setProp(_el$91, "style", _v$37, _p$.t));
1348
+ _v$38 !== _p$.a && (_p$.a = _$setProp(_el$93, "style", _v$38, _p$.a));
1349
+ _v$39 !== _p$.o && (_p$.o = _$setProp(_el$96, "style", _v$39, _p$.o));
1332
1350
  return _p$;
1333
1351
  }, {
1334
1352
  e: undefined,
@@ -1336,65 +1354,65 @@ function LoopDashboard(props) {
1336
1354
  a: undefined,
1337
1355
  o: undefined
1338
1356
  });
1339
- return _el$85;
1357
+ return _el$89;
1340
1358
  })();
1341
1359
  }
1342
1360
  }), null);
1343
- _$insert(_el$25, _$createComponent(Show, {
1361
+ _$insert(_el$29, _$createComponent(Show, {
1344
1362
  get when() {
1345
1363
  return _$memo(() => !!showLogs())() && events().length > 0;
1346
1364
  },
1347
1365
  get children() {
1348
- var _el$31 = _$createElement("box"), _el$32 = _$createElement("text"), _el$33 = _$createElement("span"), _el$35 = _$createElement("span");
1349
- _$insertNode(_el$31, _el$32);
1350
- _$setProp(_el$31, "flexDirection", "column");
1351
- _$setProp(_el$31, "border", true);
1352
- _$setProp(_el$31, "padding", 1);
1353
- _$setProp(_el$31, "maxHeight", 7);
1354
- _$setProp(_el$31, "flexShrink", 0);
1355
- _$setProp(_el$31, "overflow", "hidden");
1356
- _$insertNode(_el$32, _el$33);
1357
- _$insertNode(_el$32, _el$35);
1358
- _$insertNode(_el$33, _$createTextNode(`\u25C8 Recent Events`));
1359
- _$insertNode(_el$35, _$createTextNode(` \u2014 :logs to hide`));
1360
- _$insert(_el$31, _$createComponent(For, {
1366
+ var _el$35 = _$createElement("box"), _el$36 = _$createElement("text"), _el$37 = _$createElement("span"), _el$39 = _$createElement("span");
1367
+ _$insertNode(_el$35, _el$36);
1368
+ _$setProp(_el$35, "flexDirection", "column");
1369
+ _$setProp(_el$35, "border", true);
1370
+ _$setProp(_el$35, "padding", 1);
1371
+ _$setProp(_el$35, "maxHeight", 7);
1372
+ _$setProp(_el$35, "flexShrink", 0);
1373
+ _$setProp(_el$35, "overflow", "hidden");
1374
+ _$insertNode(_el$36, _el$37);
1375
+ _$insertNode(_el$36, _el$39);
1376
+ _$insertNode(_el$37, _$createTextNode(`\u25C8 Recent Events`));
1377
+ _$insertNode(_el$39, _$createTextNode(` \u2014 :logs to hide`));
1378
+ _$insert(_el$35, _$createComponent(For, {
1361
1379
  get each() {
1362
1380
  return events().slice(-10);
1363
1381
  },
1364
1382
  children: (ev) => (() => {
1365
- var _el$119 = _$createElement("text"), _el$120 = _$createElement("span"), _el$121 = _$createElement("span"), _el$122 = _$createTextNode(` `);
1366
- _$insertNode(_el$119, _el$120);
1367
- _$insertNode(_el$119, _el$121);
1368
- _$insert(_el$120, () => String(ev.type));
1369
- _$insertNode(_el$121, _el$122);
1370
- _$insert(_el$121, () => ev.goalID?.slice(0, 8), null);
1371
- _$insert(_el$119, (() => {
1383
+ var _el$123 = _$createElement("text"), _el$124 = _$createElement("span"), _el$125 = _$createElement("span"), _el$126 = _$createTextNode(` `);
1384
+ _$insertNode(_el$123, _el$124);
1385
+ _$insertNode(_el$123, _el$125);
1386
+ _$insert(_el$124, () => String(ev.type));
1387
+ _$insertNode(_el$125, _el$126);
1388
+ _$insert(_el$125, () => ev.goalID?.slice(0, 8), null);
1389
+ _$insert(_el$123, (() => {
1372
1390
  var _c$10 = _$memo(() => !!ev.summary);
1373
1391
  return () => _c$10() && (() => {
1374
- var _el$123 = _$createElement("span"), _el$124 = _$createTextNode(` \u2014 `);
1375
- _$insertNode(_el$123, _el$124);
1376
- _$insert(_el$123, () => String(ev.summary).slice(0, 60), null);
1377
- _$effect((_$p) => _$setProp(_el$123, "style", {
1392
+ var _el$127 = _$createElement("span"), _el$128 = _$createTextNode(` \u2014 `);
1393
+ _$insertNode(_el$127, _el$128);
1394
+ _$insert(_el$127, () => String(ev.summary).slice(0, 60), null);
1395
+ _$effect((_$p) => _$setProp(_el$127, "style", {
1378
1396
  fg: theme().text
1379
1397
  }, _$p));
1380
- return _el$123;
1398
+ return _el$127;
1381
1399
  })();
1382
1400
  })(), null);
1383
1401
  _$effect((_p$) => {
1384
- var _v$39 = {
1402
+ var _v$40 = {
1385
1403
  fg: eventColor(String(ev.type), theme()),
1386
1404
  bold: true
1387
- }, _v$40 = {
1405
+ }, _v$41 = {
1388
1406
  fg: theme().textMuted
1389
1407
  };
1390
- _v$39 !== _p$.e && (_p$.e = _$setProp(_el$120, "style", _v$39, _p$.e));
1391
- _v$40 !== _p$.t && (_p$.t = _$setProp(_el$121, "style", _v$40, _p$.t));
1408
+ _v$40 !== _p$.e && (_p$.e = _$setProp(_el$124, "style", _v$40, _p$.e));
1409
+ _v$41 !== _p$.t && (_p$.t = _$setProp(_el$125, "style", _v$41, _p$.t));
1392
1410
  return _p$;
1393
1411
  }, {
1394
1412
  e: undefined,
1395
1413
  t: undefined
1396
1414
  });
1397
- return _el$119;
1415
+ return _el$123;
1398
1416
  })()
1399
1417
  }), null);
1400
1418
  _$effect((_p$) => {
@@ -1404,42 +1422,42 @@ function LoopDashboard(props) {
1404
1422
  }, _v$3 = {
1405
1423
  fg: theme().textMuted
1406
1424
  };
1407
- _v$ !== _p$.e && (_p$.e = _$setProp(_el$31, "borderColor", _v$, _p$.e));
1408
- _v$2 !== _p$.t && (_p$.t = _$setProp(_el$33, "style", _v$2, _p$.t));
1409
- _v$3 !== _p$.a && (_p$.a = _$setProp(_el$35, "style", _v$3, _p$.a));
1425
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$35, "borderColor", _v$, _p$.e));
1426
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$37, "style", _v$2, _p$.t));
1427
+ _v$3 !== _p$.a && (_p$.a = _$setProp(_el$39, "style", _v$3, _p$.a));
1410
1428
  return _p$;
1411
1429
  }, {
1412
1430
  e: undefined,
1413
1431
  t: undefined,
1414
1432
  a: undefined
1415
1433
  });
1416
- return _el$31;
1434
+ return _el$35;
1417
1435
  }
1418
1436
  }), null);
1419
- _$insertNode(_el$37, _el$38);
1420
- _$insertNode(_el$37, _el$40);
1421
- _$setProp(_el$37, "flexDirection", "row");
1422
- _$setProp(_el$37, "border", true);
1423
- _$setProp(_el$37, "paddingLeft", 1);
1424
- _$setProp(_el$37, "paddingRight", 1);
1425
- _$setProp(_el$37, "flexShrink", 0);
1426
- _$setProp(_el$37, "height", 3);
1427
- _$setProp(_el$37, "gap", 1);
1428
- _$insertNode(_el$38, _el$39);
1429
- _$insert(_el$39, () => mode() === "insert" ? " INSERT \uE0B1" : " NORMAL ");
1437
+ _$insertNode(_el$41, _el$42);
1438
+ _$insertNode(_el$41, _el$44);
1439
+ _$setProp(_el$41, "flexDirection", "row");
1440
+ _$setProp(_el$41, "border", true);
1441
+ _$setProp(_el$41, "paddingLeft", 1);
1442
+ _$setProp(_el$41, "paddingRight", 1);
1443
+ _$setProp(_el$41, "flexShrink", 0);
1444
+ _$setProp(_el$41, "height", 3);
1445
+ _$setProp(_el$41, "gap", 1);
1446
+ _$insertNode(_el$42, _el$43);
1447
+ _$insert(_el$43, () => mode() === "insert" ? " INSERT \uE0B1" : " NORMAL ");
1430
1448
  _$use((el) => {
1431
1449
  inputEl = el;
1432
1450
  focusInput();
1433
- }, _el$40);
1434
- _$setProp(_el$40, "flexGrow", 1);
1435
- _$setProp(_el$40, "onInput", (v) => {
1451
+ }, _el$44);
1452
+ _$setProp(_el$44, "flexGrow", 1);
1453
+ _$setProp(_el$44, "onInput", (v) => {
1436
1454
  debugLog("onInput", JSON.stringify(v), "mode", mode());
1437
1455
  if (mode() === "insert")
1438
1456
  setCommandInput(v);
1439
1457
  else if (inputEl?.value)
1440
1458
  inputEl.value = "";
1441
1459
  });
1442
- _$setProp(_el$40, "onKeyDown", (evt) => {
1460
+ _$setProp(_el$44, "onKeyDown", (evt) => {
1443
1461
  const name = evt.name || "";
1444
1462
  const seq = evt.sequence || "";
1445
1463
  debugLog("input onKeyDown", `name=${name} seq=${JSON.stringify(seq)} mode=${mode()} value=${JSON.stringify(commandInput())}`);
@@ -1490,11 +1508,14 @@ function LoopDashboard(props) {
1490
1508
  bold: true
1491
1509
  }, _v$13 = {
1492
1510
  fg: theme().textMuted
1493
- }, _v$14 = mode() === "insert" ? theme().warning : theme().border, _v$15 = {
1511
+ }, _v$14 = {
1512
+ fg: theme().error,
1513
+ bold: true
1514
+ }, _v$15 = mode() === "insert" ? theme().warning : theme().border, _v$16 = {
1494
1515
  fg: mode() === "insert" ? theme().warning : theme().success,
1495
1516
  bold: true,
1496
1517
  bg: mode() === "insert" ? theme().backgroundElement : undefined
1497
- }, _v$16 = mode() === "insert" ? ":send hello or :force done --evidence proof or :open (Ctrl+N: normal)" : statusText() || "Press : to send/command \xB7 ? help \xB7 o open child \xB7 q close", _v$17 = theme().textMuted, _v$18 = theme().primary, _v$19 = theme().text, _v$20 = theme().background;
1518
+ }, _v$17 = mode() === "insert" ? ":send hello or :force done --evidence proof or :open (Ctrl+N: normal)" : statusText() || "Press : to send/command \xB7 ? help \xB7 o open child \xB7 q close", _v$18 = theme().textMuted, _v$19 = theme().primary, _v$20 = theme().text, _v$21 = theme().background;
1498
1519
  _v$4 !== _p$.e && (_p$.e = _$setProp(_el$2, "borderColor", _v$4, _p$.e));
1499
1520
  _v$5 !== _p$.t && (_p$.t = _$setProp(_el$5, "style", _v$5, _p$.t));
1500
1521
  _v$6 !== _p$.a && (_p$.a = _$setProp(_el$7, "style", _v$6, _p$.a));
@@ -1507,13 +1528,14 @@ function LoopDashboard(props) {
1507
1528
  _v$11 !== _p$.d && (_p$.d = _$setProp(_el$20, "style", _v$11, _p$.d));
1508
1529
  _v$12 !== _p$.l && (_p$.l = _$setProp(_el$22, "style", _v$12, _p$.l));
1509
1530
  _v$13 !== _p$.u && (_p$.u = _$setProp(_el$23, "style", _v$13, _p$.u));
1510
- _v$14 !== _p$.c && (_p$.c = _$setProp(_el$37, "borderColor", _v$14, _p$.c));
1511
- _v$15 !== _p$.w && (_p$.w = _$setProp(_el$39, "style", _v$15, _p$.w));
1512
- _v$16 !== _p$.m && (_p$.m = _$setProp(_el$40, "placeholder", _v$16, _p$.m));
1513
- _v$17 !== _p$.f && (_p$.f = _$setProp(_el$40, "placeholderColor", _v$17, _p$.f));
1514
- _v$18 !== _p$.y && (_p$.y = _$setProp(_el$40, "cursorColor", _v$18, _p$.y));
1515
- _v$19 !== _p$.g && (_p$.g = _$setProp(_el$40, "focusedTextColor", _v$19, _p$.g));
1516
- _v$20 !== _p$.p && (_p$.p = _$setProp(_el$40, "focusedBackgroundColor", _v$20, _p$.p));
1531
+ _v$14 !== _p$.c && (_p$.c = _$setProp(_el$27, "style", _v$14, _p$.c));
1532
+ _v$15 !== _p$.w && (_p$.w = _$setProp(_el$41, "borderColor", _v$15, _p$.w));
1533
+ _v$16 !== _p$.m && (_p$.m = _$setProp(_el$43, "style", _v$16, _p$.m));
1534
+ _v$17 !== _p$.f && (_p$.f = _$setProp(_el$44, "placeholder", _v$17, _p$.f));
1535
+ _v$18 !== _p$.y && (_p$.y = _$setProp(_el$44, "placeholderColor", _v$18, _p$.y));
1536
+ _v$19 !== _p$.g && (_p$.g = _$setProp(_el$44, "cursorColor", _v$19, _p$.g));
1537
+ _v$20 !== _p$.p && (_p$.p = _$setProp(_el$44, "focusedTextColor", _v$20, _p$.p));
1538
+ _v$21 !== _p$.b && (_p$.b = _$setProp(_el$44, "focusedBackgroundColor", _v$21, _p$.b));
1517
1539
  return _p$;
1518
1540
  }, {
1519
1541
  e: undefined,
@@ -1534,7 +1556,8 @@ function LoopDashboard(props) {
1534
1556
  f: undefined,
1535
1557
  y: undefined,
1536
1558
  g: undefined,
1537
- p: undefined
1559
+ p: undefined,
1560
+ b: undefined
1538
1561
  });
1539
1562
  return _el$;
1540
1563
  })();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@bojackduy/opencode-loopd",
4
- "version": "1.2.0",
4
+ "version": "1.3.0",
5
5
  "description": "Codex-inspired background goal engine for OpenCode — autonomous subagents, engine-driven loop, child worker sessions and modal TUI dashboard. Like Claude Code loop for OpenCode.",
6
6
  "type": "module",
7
7
  "license": "AGPL-3.0-only",