@bojackduy/opencode-loopd 1.10.3 → 1.10.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/tui.js CHANGED
@@ -5613,7 +5613,7 @@ import { randomUUID } from "crypto";
5613
5613
  // src/infrastructure/state-repository.ts
5614
5614
  import { promises as fs } from "fs";
5615
5615
  import path from "path";
5616
- var CURRENT_VERSION = 8;
5616
+ var CURRENT_VERSION = 9;
5617
5617
  function emptyState() {
5618
5618
  return { version: CURRENT_VERSION, revision: 0, goals: [], runtimes: [], commandLedger: [], commands: [] };
5619
5619
  }
@@ -5750,6 +5750,14 @@ function migrate(state) {
5750
5750
  if (!Array.isArray(result.commandAwaits))
5751
5751
  result.commandAwaits = [];
5752
5752
  }
5753
+ if (result.version < 9) {
5754
+ result.version = 9;
5755
+ result.goals = result.goals.map((goal) => ({
5756
+ ...goal,
5757
+ workerTopology: goal.workerTopology ?? undefined,
5758
+ nativeParentID: goal.nativeParentID ?? undefined
5759
+ }));
5760
+ }
5753
5761
  return result;
5754
5762
  }
5755
5763
  async function writeAtomic(target, contents) {
@@ -5999,6 +6007,21 @@ function commandHelp() {
5999
6007
  ].join(`
6000
6008
  `);
6001
6009
  }
6010
+ function commandTabHelp() {
6011
+ return [
6012
+ "Nav: j/k select | o fullscreen | q close",
6013
+ "Commands tab (selected command only):",
6014
+ " Ctrl+C / :interrupt Send SIGINT",
6015
+ " :terminate Graceful stop (SIGTERM\u2192SIGKILL)",
6016
+ " X / :kill Force kill now (SIGKILL)",
6017
+ " R / :restart Restart; old log retained",
6018
+ " x / :remove Remove finished command + log",
6019
+ " :new <cmd> [args] Start (quoted args supported)",
6020
+ " bare text + Enter Write stdin line",
6021
+ " ? toggle help | : insert | Ctrl+N normal"
6022
+ ].join(`
6023
+ `);
6024
+ }
6002
6025
 
6003
6026
  // src/tui/command-controller.ts
6004
6027
  function emptyCommandPanelState() {
@@ -6081,6 +6104,33 @@ function parseCommandLine(input) {
6081
6104
  args.push(current);
6082
6105
  return args;
6083
6106
  }
6107
+ function watchBadge(c) {
6108
+ const st = c.watchState?.state;
6109
+ if (st === "until-matched")
6110
+ return "until-matched";
6111
+ if (st === "flood-suspended")
6112
+ return "flood-suspended";
6113
+ if (st === "budget-exhausted")
6114
+ return "budget-exhausted";
6115
+ if (c.watchUntil !== undefined)
6116
+ return `until:${c.watchUntilAction ?? "stop"}-armed`;
6117
+ if (c.watchFilter !== undefined)
6118
+ return "watch:filter";
6119
+ return;
6120
+ }
6121
+ function formatWatchDetail(c) {
6122
+ if (c.watchFilter === undefined && c.watchUntil === undefined && c.watchState === undefined)
6123
+ return;
6124
+ const spec = [
6125
+ c.watchFilter !== undefined ? `filter="${c.watchFilter}"` : null,
6126
+ c.watchUntil !== undefined ? `until="${c.watchUntil}"` : null,
6127
+ `action=${c.watchUntilAction ?? "stop"}`,
6128
+ c.watchIgnoreCase === true ? "ignore-case" : null
6129
+ ].filter((x) => x !== null).join(" ");
6130
+ const st = c.watchState;
6131
+ const counters = st ? `state=${st.state} matches=${st.matches} pushes=${st.pushes} dropped=${st.droppedLines}` : "state=\u2014";
6132
+ return `watch ${spec} \xB7 ${counters}`;
6133
+ }
6084
6134
  function parseNewCommandTail(raw) {
6085
6135
  const match = /^(?::?\s*new)(?:\s+(.*))?\s*$/s.exec(raw.trim());
6086
6136
  if (!match)
@@ -6751,6 +6801,18 @@ function LoopDashboard(props) {
6751
6801
  return;
6752
6802
  }
6753
6803
  const key = raw || seq || name;
6804
+ if (tab() === "commands" && Boolean(evt.ctrl) && name === "c") {
6805
+ prevent(evt);
6806
+ const sel = selectedCommand();
6807
+ if (!sel) {
6808
+ setStatusText("No command selected.");
6809
+ return;
6810
+ }
6811
+ executeCommandRaw("cmd_interrupt", {
6812
+ commandID: sel.id
6813
+ }, sel.id);
6814
+ return;
6815
+ }
6754
6816
  if (key === "c") {
6755
6817
  prevent(evt);
6756
6818
  setShowCompleted((v) => !v);
@@ -6804,7 +6866,22 @@ function LoopDashboard(props) {
6804
6866
  applyMove("last");
6805
6867
  return;
6806
6868
  }
6807
- const needsGoalsTab = ["p", "r", "R", "x", "A", "N"].includes(key);
6869
+ if (tab() === "commands" && key === "X") {
6870
+ prevent(evt);
6871
+ killSelectedCommand();
6872
+ return;
6873
+ }
6874
+ if (tab() === "commands" && key === "R") {
6875
+ prevent(evt);
6876
+ restartSelectedCommand();
6877
+ return;
6878
+ }
6879
+ if (tab() === "commands" && key === "x") {
6880
+ prevent(evt);
6881
+ removeFinishedSelected();
6882
+ return;
6883
+ }
6884
+ const needsGoalsTab = ["p", "r", "A", "N"].includes(key);
6808
6885
  if (needsGoalsTab && tab() !== "goals") {
6809
6886
  prevent(evt);
6810
6887
  setStatusText("Goal controls need the Goals tab (Tab to switch).");
@@ -6910,6 +6987,40 @@ function LoopDashboard(props) {
6910
6987
  function selectedCommand() {
6911
6988
  return ownerCommands()[cmdSelected()] ?? null;
6912
6989
  }
6990
+ async function killSelectedCommand() {
6991
+ const sel = selectedCommand();
6992
+ if (!sel) {
6993
+ setStatusText("No command selected.");
6994
+ return;
6995
+ }
6996
+ await executeCommandRaw("cmd_kill", {
6997
+ commandID: sel.id
6998
+ }, sel.id);
6999
+ }
7000
+ async function restartSelectedCommand() {
7001
+ const sel = selectedCommand();
7002
+ if (!sel) {
7003
+ setStatusText("No command selected.");
7004
+ return;
7005
+ }
7006
+ await executeCommandRaw("cmd_restart", {
7007
+ commandID: sel.id
7008
+ }, sel.id);
7009
+ }
7010
+ function removeFinishedSelected() {
7011
+ const sel = selectedCommand();
7012
+ if (!sel) {
7013
+ setStatusText("No command selected.");
7014
+ return;
7015
+ }
7016
+ if (sel.status === "running") {
7017
+ setStatusText(`"${sel.title}" is still running \u2014 X force kill \xB7 :terminate graceful \xB7 q detach (keeps running).`);
7018
+ return;
7019
+ }
7020
+ executeCommandRaw("cmd_remove", {
7021
+ commandID: sel.id
7022
+ }, sel.id);
7023
+ }
6913
7024
  async function executeCommandTabCommand(verb, positional, raw) {
6914
7025
  debugLog("commands-tab command", verb);
6915
7026
  switch (verb) {
@@ -6948,6 +7059,12 @@ function LoopDashboard(props) {
6948
7059
  commandID: selectedCommand().id
6949
7060
  }, selectedCommand().id);
6950
7061
  return;
7062
+ case "kill":
7063
+ await killSelectedCommand();
7064
+ return;
7065
+ case "restart":
7066
+ await restartSelectedCommand();
7067
+ return;
6951
7068
  case "remove":
6952
7069
  if (!selectedCommand()) {
6953
7070
  setStatusText("No command selected.");
@@ -7253,7 +7370,7 @@ function LoopDashboard(props) {
7253
7370
  } catch {}
7254
7371
  });
7255
7372
  return (() => {
7256
- 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(` acting now`), _el$20 = _$createElement("span"), _el$22 = _$createElement("span"), _el$23 = _$createElement("span"), _el$25 = _$createElement("span"), _el$27 = _$createElement("span"), _el$29 = _$createElement("span"), _el$31 = _$createElement("span"), _el$33 = _$createElement("span"), _el$35 = _$createElement("box"), _el$36 = _$createElement("text"), _el$37 = _$createElement("span"), _el$39 = _$createElement("box"), _el$52 = _$createElement("box"), _el$53 = _$createElement("text"), _el$54 = _$createElement("span"), _el$55 = _$createElement("input");
7373
+ 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(` acting now`), _el$20 = _$createElement("span"), _el$22 = _$createElement("span"), _el$23 = _$createElement("span"), _el$25 = _$createElement("span"), _el$27 = _$createElement("span"), _el$29 = _$createElement("span"), _el$31 = _$createElement("span"), _el$33 = _$createElement("span"), _el$35 = _$createElement("box"), _el$36 = _$createElement("text"), _el$37 = _$createElement("span"), _el$39 = _$createElement("box"), _el$51 = _$createElement("box"), _el$52 = _$createElement("text"), _el$53 = _$createElement("span"), _el$54 = _$createElement("input");
7257
7374
  _$insertNode(_el$, _el$2);
7258
7375
  _$setProp(_el$, "flexDirection", "column");
7259
7376
  _$setProp(_el$, "width", "100%");
@@ -7261,7 +7378,7 @@ function LoopDashboard(props) {
7261
7378
  _$setProp(_el$, "padding", 1);
7262
7379
  _$insertNode(_el$2, _el$3);
7263
7380
  _$insertNode(_el$2, _el$39);
7264
- _$insertNode(_el$2, _el$52);
7381
+ _$insertNode(_el$2, _el$51);
7265
7382
  _$setProp(_el$2, "flexDirection", "column");
7266
7383
  _$setProp(_el$2, "width", "90%");
7267
7384
  _$setProp(_el$2, "border", true);
@@ -7352,14 +7469,14 @@ function LoopDashboard(props) {
7352
7469
  _$setProp(_el$40, "maxHeight", 14);
7353
7470
  _$setProp(_el$40, "overflow", "hidden");
7354
7471
  _$insertNode(_el$41, _el$42);
7355
- _$insertNode(_el$42, _$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`));
7356
7472
  _$setProp(_el$42, "style", {
7357
7473
  fg: "yellow",
7358
7474
  bold: true
7359
7475
  });
7476
+ _$insert(_el$42, () => tab() === "commands" ? "\u2501\u2501\u2501 Commands: ? help : insert X kill R restart x remove-done o fullscreen q close \u2501\u2501\u2501" : "\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");
7360
7477
  _$insert(_el$41, _$createComponent(For, {
7361
7478
  get each() {
7362
- return commandHelp().split(`
7479
+ return (tab() === "commands" ? commandTabHelp() : commandHelp()).split(`
7363
7480
  `);
7364
7481
  },
7365
7482
  children: (line) => {
@@ -7369,20 +7486,20 @@ function LoopDashboard(props) {
7369
7486
  const segments = rest.split(" | ");
7370
7487
  return [`
7371
7488
  `, (() => {
7372
- var _el$56 = _$createElement("span");
7373
- _$insert(_el$56, label);
7374
- _$effect((_$p) => _$setProp(_el$56, "style", {
7489
+ var _el$55 = _$createElement("span");
7490
+ _$insert(_el$55, label);
7491
+ _$effect((_$p) => _$setProp(_el$55, "style", {
7375
7492
  fg: theme().primary,
7376
7493
  bold: true
7377
7494
  }, _$p));
7378
- return _el$56;
7495
+ return _el$55;
7379
7496
  })(), (() => {
7380
- var _el$57 = _$createElement("span");
7381
- _$insertNode(_el$57, _$createTextNode(` `));
7382
- _$effect((_$p) => _$setProp(_el$57, "style", {
7497
+ var _el$56 = _$createElement("span");
7498
+ _$insertNode(_el$56, _$createTextNode(` `));
7499
+ _$effect((_$p) => _$setProp(_el$56, "style", {
7383
7500
  fg: theme().textMuted
7384
7501
  }, _$p));
7385
- return _el$57;
7502
+ return _el$56;
7386
7503
  })(), _$createComponent(For, {
7387
7504
  each: segments,
7388
7505
  children: (seg, idx) => {
@@ -7390,62 +7507,62 @@ function LoopDashboard(props) {
7390
7507
  if (hasArrow) {
7391
7508
  const [k, d] = seg.split("\u2192").map((s) => s.trim());
7392
7509
  return [_$memo(() => _$memo(() => idx() > 0)() && (() => {
7393
- var _el$63 = _$createElement("span");
7394
- _$insertNode(_el$63, _$createTextNode(` | `));
7395
- _$effect((_$p) => _$setProp(_el$63, "style", {
7510
+ var _el$62 = _$createElement("span");
7511
+ _$insertNode(_el$62, _$createTextNode(` | `));
7512
+ _$effect((_$p) => _$setProp(_el$62, "style", {
7396
7513
  fg: theme().textMuted
7397
7514
  }, _$p));
7398
- return _el$63;
7515
+ return _el$62;
7399
7516
  })()), (() => {
7400
- var _el$59 = _$createElement("span");
7401
- _$insert(_el$59, k);
7402
- _$effect((_$p) => _$setProp(_el$59, "style", {
7517
+ var _el$58 = _$createElement("span");
7518
+ _$insert(_el$58, k);
7519
+ _$effect((_$p) => _$setProp(_el$58, "style", {
7403
7520
  fg: theme().warning,
7404
7521
  bold: true
7405
7522
  }, _$p));
7406
- return _el$59;
7523
+ return _el$58;
7407
7524
  })(), (() => {
7408
- var _el$60 = _$createElement("span");
7409
- _$insertNode(_el$60, _$createTextNode(` \u2192 `));
7410
- _$effect((_$p) => _$setProp(_el$60, "style", {
7525
+ var _el$59 = _$createElement("span");
7526
+ _$insertNode(_el$59, _$createTextNode(` \u2192 `));
7527
+ _$effect((_$p) => _$setProp(_el$59, "style", {
7411
7528
  fg: theme().textMuted
7412
7529
  }, _$p));
7413
- return _el$60;
7530
+ return _el$59;
7414
7531
  })(), (() => {
7415
- var _el$62 = _$createElement("span");
7416
- _$insert(_el$62, d);
7417
- _$effect((_$p) => _$setProp(_el$62, "style", {
7532
+ var _el$61 = _$createElement("span");
7533
+ _$insert(_el$61, d);
7534
+ _$effect((_$p) => _$setProp(_el$61, "style", {
7418
7535
  fg: theme().text
7419
7536
  }, _$p));
7420
- return _el$62;
7537
+ return _el$61;
7421
7538
  })()];
7422
7539
  }
7423
7540
  const sp = seg.indexOf(" ");
7424
7541
  const k = sp > 0 ? seg.slice(0, sp) : seg;
7425
7542
  const d = sp > 0 ? seg.slice(sp + 1) : "";
7426
7543
  return [_$memo(() => _$memo(() => idx() > 0)() && (() => {
7427
- var _el$66 = _$createElement("span");
7428
- _$insertNode(_el$66, _$createTextNode(` | `));
7429
- _$effect((_$p) => _$setProp(_el$66, "style", {
7544
+ var _el$65 = _$createElement("span");
7545
+ _$insertNode(_el$65, _$createTextNode(` | `));
7546
+ _$effect((_$p) => _$setProp(_el$65, "style", {
7430
7547
  fg: theme().textMuted
7431
7548
  }, _$p));
7432
- return _el$66;
7549
+ return _el$65;
7433
7550
  })()), (() => {
7434
- var _el$65 = _$createElement("span");
7435
- _$insert(_el$65, k);
7436
- _$effect((_$p) => _$setProp(_el$65, "style", {
7551
+ var _el$64 = _$createElement("span");
7552
+ _$insert(_el$64, k);
7553
+ _$effect((_$p) => _$setProp(_el$64, "style", {
7437
7554
  fg: theme().warning,
7438
7555
  bold: true
7439
7556
  }, _$p));
7440
- return _el$65;
7557
+ return _el$64;
7441
7558
  })(), d && (() => {
7442
- var _el$68 = _$createElement("span"), _el$69 = _$createTextNode(` `);
7443
- _$insertNode(_el$68, _el$69);
7444
- _$insert(_el$68, d, null);
7445
- _$effect((_$p) => _$setProp(_el$68, "style", {
7559
+ var _el$67 = _$createElement("span"), _el$68 = _$createTextNode(` `);
7560
+ _$insertNode(_el$67, _el$68);
7561
+ _$insert(_el$67, d, null);
7562
+ _$effect((_$p) => _$setProp(_el$67, "style", {
7446
7563
  fg: theme().text
7447
7564
  }, _$p));
7448
- return _el$68;
7565
+ return _el$67;
7449
7566
  })()];
7450
7567
  }
7451
7568
  })];
@@ -7457,46 +7574,46 @@ function LoopDashboard(props) {
7457
7574
  const desc = m?.[3] ?? line.split(/\s{2,}/)[1] ?? "";
7458
7575
  return [`
7459
7576
  `, (() => {
7460
- var _el$70 = _$createElement("span");
7461
- _$insert(_el$70, indent);
7462
- _$effect((_$p) => _$setProp(_el$70, "style", {
7577
+ var _el$69 = _$createElement("span");
7578
+ _$insert(_el$69, indent);
7579
+ _$effect((_$p) => _$setProp(_el$69, "style", {
7463
7580
  fg: theme().textMuted
7464
7581
  }, _$p));
7465
- return _el$70;
7582
+ return _el$69;
7466
7583
  })(), (() => {
7467
- var _el$71 = _$createElement("span");
7468
- _$insert(_el$71, key);
7469
- _$effect((_$p) => _$setProp(_el$71, "style", {
7584
+ var _el$70 = _$createElement("span");
7585
+ _$insert(_el$70, key);
7586
+ _$effect((_$p) => _$setProp(_el$70, "style", {
7470
7587
  fg: theme().warning,
7471
7588
  bold: true
7472
7589
  }, _$p));
7473
- return _el$71;
7590
+ return _el$70;
7474
7591
  })(), desc && [(() => {
7475
- var _el$72 = _$createElement("span");
7476
- _$insertNode(_el$72, _$createTextNode(` `));
7477
- _$effect((_$p) => _$setProp(_el$72, "style", {
7592
+ var _el$71 = _$createElement("span");
7593
+ _$insertNode(_el$71, _$createTextNode(` `));
7594
+ _$effect((_$p) => _$setProp(_el$71, "style", {
7478
7595
  fg: theme().textMuted
7479
7596
  }, _$p));
7480
- return _el$72;
7597
+ return _el$71;
7481
7598
  })(), (() => {
7482
- var _el$74 = _$createElement("span");
7483
- _$insert(_el$74, desc);
7484
- _$effect((_$p) => _$setProp(_el$74, "style", {
7599
+ var _el$73 = _$createElement("span");
7600
+ _$insert(_el$73, desc);
7601
+ _$effect((_$p) => _$setProp(_el$73, "style", {
7485
7602
  fg: theme().textMuted
7486
7603
  }, _$p));
7487
- return _el$74;
7604
+ return _el$73;
7488
7605
  })()]];
7489
7606
  }
7490
7607
  const isHeader = line.startsWith("Commands");
7491
7608
  return [`
7492
7609
  `, (() => {
7493
- var _el$75 = _$createElement("span");
7494
- _$insert(_el$75, line);
7495
- _$effect((_$p) => _$setProp(_el$75, "style", {
7610
+ var _el$74 = _$createElement("span");
7611
+ _$insert(_el$74, line);
7612
+ _$effect((_$p) => _$setProp(_el$74, "style", {
7496
7613
  fg: isHeader ? theme().primary : theme().textMuted,
7497
7614
  bold: isHeader
7498
7615
  }, _$p));
7499
- return _el$75;
7616
+ return _el$74;
7500
7617
  })()];
7501
7618
  }
7502
7619
  }), null);
@@ -7515,32 +7632,32 @@ function LoopDashboard(props) {
7515
7632
  },
7516
7633
  get fallback() {
7517
7634
  return (() => {
7518
- var _el$76 = _$createElement("box"), _el$77 = _$createElement("text"), _el$78 = _$createElement("span"), _el$80 = _$createElement("span"), _el$82 = _$createElement("span"), _el$84 = _$createElement("text"), _el$85 = _$createElement("span"), _el$87 = _$createElement("span"), _el$89 = _$createElement("span"), _el$91 = _$createElement("span"), _el$93 = _$createElement("span"), _el$95 = _$createElement("span"), _el$97 = _$createElement("span");
7635
+ var _el$75 = _$createElement("box"), _el$76 = _$createElement("text"), _el$77 = _$createElement("span"), _el$79 = _$createElement("span"), _el$81 = _$createElement("span"), _el$83 = _$createElement("text"), _el$84 = _$createElement("span"), _el$86 = _$createElement("span"), _el$88 = _$createElement("span"), _el$90 = _$createElement("span"), _el$92 = _$createElement("span"), _el$94 = _$createElement("span"), _el$96 = _$createElement("span");
7636
+ _$insertNode(_el$75, _el$76);
7637
+ _$insertNode(_el$75, _el$83);
7638
+ _$setProp(_el$75, "flexDirection", "column");
7639
+ _$setProp(_el$75, "gap", 1);
7640
+ _$setProp(_el$75, "padding", 1);
7519
7641
  _$insertNode(_el$76, _el$77);
7520
- _$insertNode(_el$76, _el$84);
7521
- _$setProp(_el$76, "flexDirection", "column");
7522
- _$setProp(_el$76, "gap", 1);
7523
- _$setProp(_el$76, "padding", 1);
7524
- _$insertNode(_el$77, _el$78);
7525
- _$insertNode(_el$77, _el$80);
7526
- _$insertNode(_el$77, _el$82);
7527
- _$insertNode(_el$78, _$createTextNode(`No active goals.`));
7528
- _$insertNode(_el$80, _$createTextNode(` /goal`));
7529
- _$insertNode(_el$82, _$createTextNode(` in parent chat to create one.`));
7530
- _$insertNode(_el$84, _el$85);
7531
- _$insertNode(_el$84, _el$87);
7532
- _$insertNode(_el$84, _el$89);
7533
- _$insertNode(_el$84, _el$91);
7534
- _$insertNode(_el$84, _el$93);
7535
- _$insertNode(_el$84, _el$95);
7536
- _$insertNode(_el$84, _el$97);
7537
- _$insertNode(_el$85, _$createTextNode(`Tip: `));
7538
- _$insertNode(_el$87, _$createTextNode(`:send`));
7539
- _$insertNode(_el$89, _$createTextNode(` to steer the worker \xB7 `));
7540
- _$insertNode(_el$91, _$createTextNode(`o`));
7541
- _$insertNode(_el$93, _$createTextNode(` to open child \xB7 `));
7542
- _$insertNode(_el$95, _$createTextNode(`:force`));
7543
- _$insertNode(_el$97, _$createTextNode(` to complete manually.`));
7642
+ _$insertNode(_el$76, _el$79);
7643
+ _$insertNode(_el$76, _el$81);
7644
+ _$insertNode(_el$77, _$createTextNode(`No active goals.`));
7645
+ _$insertNode(_el$79, _$createTextNode(` /goal`));
7646
+ _$insertNode(_el$81, _$createTextNode(` in parent chat to create one.`));
7647
+ _$insertNode(_el$83, _el$84);
7648
+ _$insertNode(_el$83, _el$86);
7649
+ _$insertNode(_el$83, _el$88);
7650
+ _$insertNode(_el$83, _el$90);
7651
+ _$insertNode(_el$83, _el$92);
7652
+ _$insertNode(_el$83, _el$94);
7653
+ _$insertNode(_el$83, _el$96);
7654
+ _$insertNode(_el$84, _$createTextNode(`Tip: `));
7655
+ _$insertNode(_el$86, _$createTextNode(`:send`));
7656
+ _$insertNode(_el$88, _$createTextNode(` to steer the worker \xB7 `));
7657
+ _$insertNode(_el$90, _$createTextNode(`o`));
7658
+ _$insertNode(_el$92, _$createTextNode(` to open child \xB7 `));
7659
+ _$insertNode(_el$94, _$createTextNode(`:force`));
7660
+ _$insertNode(_el$96, _$createTextNode(` to complete manually.`));
7544
7661
  _$effect((_p$) => {
7545
7662
  var _v$26 = {
7546
7663
  fg: theme().textMuted
@@ -7563,16 +7680,16 @@ function LoopDashboard(props) {
7563
7680
  }, _v$35 = {
7564
7681
  fg: theme().textMuted
7565
7682
  };
7566
- _v$26 !== _p$.e && (_p$.e = _$setProp(_el$78, "style", _v$26, _p$.e));
7567
- _v$27 !== _p$.t && (_p$.t = _$setProp(_el$80, "style", _v$27, _p$.t));
7568
- _v$28 !== _p$.a && (_p$.a = _$setProp(_el$82, "style", _v$28, _p$.a));
7569
- _v$29 !== _p$.o && (_p$.o = _$setProp(_el$85, "style", _v$29, _p$.o));
7570
- _v$30 !== _p$.i && (_p$.i = _$setProp(_el$87, "style", _v$30, _p$.i));
7571
- _v$31 !== _p$.n && (_p$.n = _$setProp(_el$89, "style", _v$31, _p$.n));
7572
- _v$32 !== _p$.s && (_p$.s = _$setProp(_el$91, "style", _v$32, _p$.s));
7573
- _v$33 !== _p$.h && (_p$.h = _$setProp(_el$93, "style", _v$33, _p$.h));
7574
- _v$34 !== _p$.r && (_p$.r = _$setProp(_el$95, "style", _v$34, _p$.r));
7575
- _v$35 !== _p$.d && (_p$.d = _$setProp(_el$97, "style", _v$35, _p$.d));
7683
+ _v$26 !== _p$.e && (_p$.e = _$setProp(_el$77, "style", _v$26, _p$.e));
7684
+ _v$27 !== _p$.t && (_p$.t = _$setProp(_el$79, "style", _v$27, _p$.t));
7685
+ _v$28 !== _p$.a && (_p$.a = _$setProp(_el$81, "style", _v$28, _p$.a));
7686
+ _v$29 !== _p$.o && (_p$.o = _$setProp(_el$84, "style", _v$29, _p$.o));
7687
+ _v$30 !== _p$.i && (_p$.i = _$setProp(_el$86, "style", _v$30, _p$.i));
7688
+ _v$31 !== _p$.n && (_p$.n = _$setProp(_el$88, "style", _v$31, _p$.n));
7689
+ _v$32 !== _p$.s && (_p$.s = _$setProp(_el$90, "style", _v$32, _p$.s));
7690
+ _v$33 !== _p$.h && (_p$.h = _$setProp(_el$92, "style", _v$33, _p$.h));
7691
+ _v$34 !== _p$.r && (_p$.r = _$setProp(_el$94, "style", _v$34, _p$.r));
7692
+ _v$35 !== _p$.d && (_p$.d = _$setProp(_el$96, "style", _v$35, _p$.d));
7576
7693
  return _p$;
7577
7694
  }, {
7578
7695
  e: undefined,
@@ -7586,15 +7703,15 @@ function LoopDashboard(props) {
7586
7703
  r: undefined,
7587
7704
  d: undefined
7588
7705
  });
7589
- return _el$76;
7706
+ return _el$75;
7590
7707
  })();
7591
7708
  },
7592
7709
  get children() {
7593
- var _el$44 = _$createElement("scrollbox");
7710
+ var _el$43 = _$createElement("scrollbox");
7594
7711
  _$use((el) => {
7595
7712
  listScrollRef = el;
7596
- }, _el$44);
7597
- _$insert(_el$44, _$createComponent(For, {
7713
+ }, _el$43);
7714
+ _$insert(_el$43, _$createComponent(For, {
7598
7715
  get each() {
7599
7716
  return activeGoals();
7600
7717
  },
@@ -7613,152 +7730,152 @@ function LoopDashboard(props) {
7613
7730
  return phaseColor(runtime().phase || "idle", theme());
7614
7731
  };
7615
7732
  return (() => {
7616
- var _el$99 = _$createElement("box"), _el$100 = _$createElement("text"), _el$101 = _$createElement("span"), _el$102 = _$createElement("span"), _el$104 = _$createElement("span"), _el$106 = _$createElement("span");
7733
+ var _el$98 = _$createElement("box"), _el$99 = _$createElement("text"), _el$100 = _$createElement("span"), _el$101 = _$createElement("span"), _el$103 = _$createElement("span"), _el$105 = _$createElement("span");
7734
+ _$insertNode(_el$98, _el$99);
7735
+ _$setProp(_el$98, "flexDirection", "row");
7736
+ _$setProp(_el$98, "paddingLeft", 1);
7737
+ _$setProp(_el$98, "paddingRight", 1);
7617
7738
  _$insertNode(_el$99, _el$100);
7618
- _$setProp(_el$99, "flexDirection", "row");
7619
- _$setProp(_el$99, "paddingLeft", 1);
7620
- _$setProp(_el$99, "paddingRight", 1);
7621
- _$insertNode(_el$100, _el$101);
7622
- _$insertNode(_el$100, _el$102);
7623
- _$insertNode(_el$100, _el$104);
7624
- _$insertNode(_el$100, _el$106);
7625
- _$setProp(_el$100, "wrapMode", "none");
7626
- _$setProp(_el$100, "truncate", true);
7627
- _$insert(_el$101, (() => {
7739
+ _$insertNode(_el$99, _el$101);
7740
+ _$insertNode(_el$99, _el$103);
7741
+ _$insertNode(_el$99, _el$105);
7742
+ _$setProp(_el$99, "wrapMode", "none");
7743
+ _$setProp(_el$99, "truncate", true);
7744
+ _$insert(_el$100, (() => {
7628
7745
  var _c$2 = _$memo(() => !!isActive());
7629
7746
  return () => _c$2() ? `\u25B6 ${statusIcon(goal.status)} ${goal.name}` : ` ${statusIcon(goal.status)} ${goal.name}`;
7630
7747
  })());
7631
- _$insertNode(_el$102, _$createTextNode(` \u2502 `));
7632
- _$insertNode(_el$104, _$createTextNode(`Goal `));
7633
- _$insert(_el$106, () => goalStatusLabel(goal.status).short.toUpperCase());
7634
- _$insert(_el$100, (() => {
7748
+ _$insertNode(_el$101, _$createTextNode(` \u2502 `));
7749
+ _$insertNode(_el$103, _$createTextNode(`Goal `));
7750
+ _$insert(_el$105, () => goalStatusLabel(goal.status).short.toUpperCase());
7751
+ _$insert(_el$99, (() => {
7635
7752
  var _c$3 = _$memo(() => !!runtime());
7636
7753
  return () => _c$3() && [(() => {
7637
- var _el$107 = _$createElement("span");
7638
- _$insertNode(_el$107, _$createTextNode(` \u2502 Worker `));
7639
- _$effect((_$p) => _$setProp(_el$107, "style", {
7754
+ var _el$106 = _$createElement("span");
7755
+ _$insertNode(_el$106, _$createTextNode(` \u2502 Worker `));
7756
+ _$effect((_$p) => _$setProp(_el$106, "style", {
7640
7757
  fg: theme().textMuted
7641
7758
  }, _$p));
7642
- return _el$107;
7759
+ return _el$106;
7643
7760
  })(), (() => {
7644
- var _el$109 = _$createElement("span"), _el$110 = _$createTextNode(` `);
7645
- _$insertNode(_el$109, _el$110);
7646
- _$insert(_el$109, (() => {
7761
+ var _el$108 = _$createElement("span"), _el$109 = _$createTextNode(` `);
7762
+ _$insertNode(_el$108, _el$109);
7763
+ _$insert(_el$108, (() => {
7647
7764
  var _c$1 = _$memo(() => runtime().phase === "running");
7648
7765
  return () => _c$1() ? runningFrame() : phaseIcon(runtime().phase);
7649
- })(), _el$110);
7650
- _$insert(_el$109, () => phaseLabel(runtime().phase).short.toUpperCase(), null);
7651
- _$effect((_$p) => _$setProp(_el$109, "style", {
7766
+ })(), _el$109);
7767
+ _$insert(_el$108, () => phaseLabel(runtime().phase).short.toUpperCase(), null);
7768
+ _$effect((_$p) => _$setProp(_el$108, "style", {
7652
7769
  fg: turnColor(),
7653
7770
  bold: runtime().phase === "running"
7654
7771
  }, _$p));
7655
- return _el$109;
7772
+ return _el$108;
7656
7773
  })(), (() => {
7657
- var _el$111 = _$createElement("span"), _el$112 = _$createTextNode(` `);
7658
- _$insertNode(_el$111, _el$112);
7659
- _$insert(_el$111, () => runtime().budgetTurnCount, null);
7660
- _$insert(_el$111, maxTurns ? `/${maxTurns}` : "", null);
7661
- _$effect((_$p) => _$setProp(_el$111, "style", {
7774
+ var _el$110 = _$createElement("span"), _el$111 = _$createTextNode(` `);
7775
+ _$insertNode(_el$110, _el$111);
7776
+ _$insert(_el$110, () => runtime().budgetTurnCount, null);
7777
+ _$insert(_el$110, maxTurns ? `/${maxTurns}` : "", null);
7778
+ _$effect((_$p) => _$setProp(_el$110, "style", {
7662
7779
  fg: turnColor()
7663
7780
  }, _$p));
7664
- return _el$111;
7781
+ return _el$110;
7665
7782
  })(), (() => {
7666
- var _el$113 = _$createElement("span"), _el$114 = _$createTextNode(` `);
7667
- _$insertNode(_el$113, _el$114);
7668
- _$insert(_el$113, () => ageLabel(runtime().lastProgressAt || runtime().lastRunAt, clock()), null);
7669
- _$effect((_$p) => _$setProp(_el$113, "style", {
7783
+ var _el$112 = _$createElement("span"), _el$113 = _$createTextNode(` `);
7784
+ _$insertNode(_el$112, _el$113);
7785
+ _$insert(_el$112, () => ageLabel(runtime().lastProgressAt || runtime().lastRunAt, clock()), null);
7786
+ _$effect((_$p) => _$setProp(_el$112, "style", {
7670
7787
  fg: theme().textMuted
7671
7788
  }, _$p));
7672
- return _el$113;
7789
+ return _el$112;
7673
7790
  })()];
7674
7791
  })(), null);
7675
- _$insert(_el$100, (() => {
7792
+ _$insert(_el$99, (() => {
7676
7793
  var _c$4 = _$memo(() => !!(runtime() && runtime().consecutiveFailures > 0));
7677
7794
  return () => _c$4() && (() => {
7678
- var _el$115 = _$createElement("span"), _el$116 = _$createTextNode(` \u2502 \u26A0 `), _el$117 = _$createTextNode(` fail`);
7679
- _$insertNode(_el$115, _el$116);
7680
- _$insertNode(_el$115, _el$117);
7681
- _$insert(_el$115, () => runtime().consecutiveFailures, _el$117);
7682
- _$effect((_$p) => _$setProp(_el$115, "style", {
7795
+ var _el$114 = _$createElement("span"), _el$115 = _$createTextNode(` \u2502 \u26A0 `), _el$116 = _$createTextNode(` fail`);
7796
+ _$insertNode(_el$114, _el$115);
7797
+ _$insertNode(_el$114, _el$116);
7798
+ _$insert(_el$114, () => runtime().consecutiveFailures, _el$116);
7799
+ _$effect((_$p) => _$setProp(_el$114, "style", {
7683
7800
  fg: theme().error,
7684
7801
  bold: true
7685
7802
  }, _$p));
7686
- return _el$115;
7803
+ return _el$114;
7687
7804
  })();
7688
7805
  })(), null);
7689
- _$insert(_el$100, (() => {
7806
+ _$insert(_el$99, (() => {
7690
7807
  var _c$5 = _$memo(() => !!(runtime() && (runtime().noProgressCount || 0) > 0));
7691
7808
  return () => _c$5() && (() => {
7692
- var _el$118 = _$createElement("span"), _el$119 = _$createTextNode(` \u2502 `), _el$120 = _$createTextNode(` no-progress`);
7693
- _$insertNode(_el$118, _el$119);
7694
- _$insertNode(_el$118, _el$120);
7695
- _$insert(_el$118, () => runtime().noProgressCount, _el$120);
7696
- _$effect((_$p) => _$setProp(_el$118, "style", {
7809
+ var _el$117 = _$createElement("span"), _el$118 = _$createTextNode(` \u2502 `), _el$119 = _$createTextNode(` no-progress`);
7810
+ _$insertNode(_el$117, _el$118);
7811
+ _$insertNode(_el$117, _el$119);
7812
+ _$insert(_el$117, () => runtime().noProgressCount, _el$119);
7813
+ _$effect((_$p) => _$setProp(_el$117, "style", {
7697
7814
  fg: theme().warning
7698
7815
  }, _$p));
7699
- return _el$118;
7816
+ return _el$117;
7700
7817
  })();
7701
7818
  })(), null);
7702
- _$insert(_el$100, (() => {
7819
+ _$insert(_el$99, (() => {
7703
7820
  var _c$6 = _$memo(() => !!(runtime() && runtime().evaluatorRejectionCount > 0));
7704
7821
  return () => _c$6() && (() => {
7705
- var _el$121 = _$createElement("span"), _el$122 = _$createTextNode(` \u2502 \u26A0 `), _el$123 = _$createTextNode(` rejected`);
7706
- _$insertNode(_el$121, _el$122);
7707
- _$insertNode(_el$121, _el$123);
7708
- _$insert(_el$121, () => String(runtime().evaluatorRejectionCount), _el$123);
7709
- _$effect((_$p) => _$setProp(_el$121, "style", {
7822
+ var _el$120 = _$createElement("span"), _el$121 = _$createTextNode(` \u2502 \u26A0 `), _el$122 = _$createTextNode(` rejected`);
7823
+ _$insertNode(_el$120, _el$121);
7824
+ _$insertNode(_el$120, _el$122);
7825
+ _$insert(_el$120, () => String(runtime().evaluatorRejectionCount), _el$122);
7826
+ _$effect((_$p) => _$setProp(_el$120, "style", {
7710
7827
  fg: theme().warning,
7711
7828
  bold: true
7712
7829
  }, _$p));
7713
- return _el$121;
7830
+ return _el$120;
7714
7831
  })();
7715
7832
  })(), null);
7716
- _$insert(_el$100, (() => {
7833
+ _$insert(_el$99, (() => {
7717
7834
  var _c$7 = _$memo(() => !!(runtime() && runtime().unknownStatusCount >= 3));
7718
7835
  return () => _c$7() && (() => {
7719
- var _el$124 = _$createElement("span");
7720
- _$insertNode(_el$124, _$createTextNode(` \u2502 \u26A0\uFE0F UNREACHABLE`));
7721
- _$effect((_$p) => _$setProp(_el$124, "style", {
7836
+ var _el$123 = _$createElement("span");
7837
+ _$insertNode(_el$123, _$createTextNode(` \u2502 \u26A0\uFE0F UNREACHABLE`));
7838
+ _$effect((_$p) => _$setProp(_el$123, "style", {
7722
7839
  fg: theme().error,
7723
7840
  bold: true
7724
7841
  }, _$p));
7725
- return _el$124;
7842
+ return _el$123;
7726
7843
  })();
7727
7844
  })(), null);
7728
- _$insert(_el$100, (() => {
7845
+ _$insert(_el$99, (() => {
7729
7846
  var _c$8 = _$memo(() => !!(runtime() && runtime().phase === "idle" && runtime().activeRunID));
7730
7847
  return () => _c$8() && (() => {
7731
- var _el$126 = _$createElement("span");
7732
- _$insertNode(_el$126, _$createTextNode(` \u2502 \u26A0\uFE0F STALE LEASE`));
7733
- _$effect((_$p) => _$setProp(_el$126, "style", {
7848
+ var _el$125 = _$createElement("span");
7849
+ _$insertNode(_el$125, _$createTextNode(` \u2502 \u26A0\uFE0F STALE LEASE`));
7850
+ _$effect((_$p) => _$setProp(_el$125, "style", {
7734
7851
  fg: theme().error,
7735
7852
  bold: true
7736
7853
  }, _$p));
7737
- return _el$126;
7854
+ return _el$125;
7738
7855
  })();
7739
7856
  })(), null);
7740
- _$insert(_el$100, (() => {
7857
+ _$insert(_el$99, (() => {
7741
7858
  var _c$9 = _$memo(() => !!(runtime() && runtime().retryAfter));
7742
7859
  return () => _c$9() && (() => {
7743
- var _el$128 = _$createElement("span"), _el$129 = _$createTextNode(` \u2502 \u21BB `);
7744
- _$insertNode(_el$128, _el$129);
7745
- _$insert(_el$128, () => countdownLabel(runtime().retryAfter, clock()), null);
7746
- _$effect((_$p) => _$setProp(_el$128, "style", {
7860
+ var _el$127 = _$createElement("span"), _el$128 = _$createTextNode(` \u2502 \u21BB `);
7861
+ _$insertNode(_el$127, _el$128);
7862
+ _$insert(_el$127, () => countdownLabel(runtime().retryAfter, clock()), null);
7863
+ _$effect((_$p) => _$setProp(_el$127, "style", {
7747
7864
  fg: theme().accent
7748
7865
  }, _$p));
7749
- return _el$128;
7866
+ return _el$127;
7750
7867
  })();
7751
7868
  })(), null);
7752
- _$insert(_el$100, (() => {
7869
+ _$insert(_el$99, (() => {
7753
7870
  var _c$0 = _$memo(() => !!(runtime() && runtime().nextRunAt));
7754
7871
  return () => _c$0() && (() => {
7755
- var _el$130 = _$createElement("span"), _el$131 = _$createTextNode(` \u2502 \u23F0 `);
7756
- _$insertNode(_el$130, _el$131);
7757
- _$insert(_el$130, () => countdownLabel(runtime().nextRunAt, clock()), null);
7758
- _$effect((_$p) => _$setProp(_el$130, "style", {
7872
+ var _el$129 = _$createElement("span"), _el$130 = _$createTextNode(` \u2502 \u23F0 `);
7873
+ _$insertNode(_el$129, _el$130);
7874
+ _$insert(_el$129, () => countdownLabel(runtime().nextRunAt, clock()), null);
7875
+ _$effect((_$p) => _$setProp(_el$129, "style", {
7759
7876
  fg: theme().accent
7760
7877
  }, _$p));
7761
- return _el$130;
7878
+ return _el$129;
7762
7879
  })();
7763
7880
  })(), null);
7764
7881
  _$effect((_p$) => {
@@ -7773,12 +7890,12 @@ function LoopDashboard(props) {
7773
7890
  fg: statusColor(goal.status, theme()),
7774
7891
  bold: true
7775
7892
  };
7776
- _v$36 !== _p$.e && (_p$.e = _$setProp(_el$99, "id", _v$36, _p$.e));
7777
- _v$37 !== _p$.t && (_p$.t = _$setProp(_el$99, "backgroundColor", _v$37, _p$.t));
7778
- _v$38 !== _p$.a && (_p$.a = _$setProp(_el$101, "style", _v$38, _p$.a));
7779
- _v$39 !== _p$.o && (_p$.o = _$setProp(_el$102, "style", _v$39, _p$.o));
7780
- _v$40 !== _p$.i && (_p$.i = _$setProp(_el$104, "style", _v$40, _p$.i));
7781
- _v$41 !== _p$.n && (_p$.n = _$setProp(_el$106, "style", _v$41, _p$.n));
7893
+ _v$36 !== _p$.e && (_p$.e = _$setProp(_el$98, "id", _v$36, _p$.e));
7894
+ _v$37 !== _p$.t && (_p$.t = _$setProp(_el$98, "backgroundColor", _v$37, _p$.t));
7895
+ _v$38 !== _p$.a && (_p$.a = _$setProp(_el$100, "style", _v$38, _p$.a));
7896
+ _v$39 !== _p$.o && (_p$.o = _$setProp(_el$101, "style", _v$39, _p$.o));
7897
+ _v$40 !== _p$.i && (_p$.i = _$setProp(_el$103, "style", _v$40, _p$.i));
7898
+ _v$41 !== _p$.n && (_p$.n = _$setProp(_el$105, "style", _v$41, _p$.n));
7782
7899
  return _p$;
7783
7900
  }, {
7784
7901
  e: undefined,
@@ -7788,12 +7905,12 @@ function LoopDashboard(props) {
7788
7905
  i: undefined,
7789
7906
  n: undefined
7790
7907
  });
7791
- return _el$99;
7908
+ return _el$98;
7792
7909
  })();
7793
7910
  }
7794
7911
  }));
7795
- _$effect((_$p) => _$setProp(_el$44, "height", listHeight(), _$p));
7796
- return _el$44;
7912
+ _$effect((_$p) => _$setProp(_el$43, "height", listHeight(), _$p));
7913
+ return _el$43;
7797
7914
  }
7798
7915
  }), _$createComponent(Show, {
7799
7916
  get when() {
@@ -7804,499 +7921,530 @@ function LoopDashboard(props) {
7804
7921
  const lp = () => goal().lastProgress;
7805
7922
  const blk = () => goal().blocker;
7806
7923
  return (() => {
7807
- var _el$132 = _$createElement("box"), _el$133 = _$createElement("text"), _el$134 = _$createElement("span"), _el$135 = _$createTextNode(` `), _el$136 = _$createElement("span"), _el$138 = _$createElement("span"), _el$139 = _$createTextNode(` \u2014 `), _el$140 = _$createTextNode(`
7808
- `), _el$141 = _$createElement("span"), _el$142 = _$createTextNode(`
7809
- `), _el$143 = _$createElement("span"), _el$145 = _$createElement("span");
7924
+ var _el$131 = _$createElement("box"), _el$132 = _$createElement("text"), _el$133 = _$createElement("span"), _el$134 = _$createTextNode(` `), _el$135 = _$createElement("span"), _el$137 = _$createElement("span"), _el$138 = _$createTextNode(` \u2014 `), _el$139 = _$createTextNode(`
7925
+ `), _el$140 = _$createElement("span"), _el$141 = _$createTextNode(`
7926
+ `), _el$142 = _$createElement("span"), _el$144 = _$createElement("span");
7927
+ _$insertNode(_el$131, _el$132);
7928
+ _$setProp(_el$131, "flexDirection", "column");
7929
+ _$setProp(_el$131, "border", true);
7930
+ _$setProp(_el$131, "padding", 1);
7931
+ _$setProp(_el$131, "flexShrink", 0);
7932
+ _$setProp(_el$131, "maxHeight", 13);
7810
7933
  _$insertNode(_el$132, _el$133);
7811
- _$setProp(_el$132, "flexDirection", "column");
7812
- _$setProp(_el$132, "border", true);
7813
- _$setProp(_el$132, "padding", 1);
7814
- _$setProp(_el$132, "flexShrink", 0);
7815
- _$setProp(_el$132, "maxHeight", 13);
7934
+ _$insertNode(_el$132, _el$135);
7935
+ _$insertNode(_el$132, _el$137);
7936
+ _$insertNode(_el$132, _el$139);
7937
+ _$insertNode(_el$132, _el$140);
7938
+ _$insertNode(_el$132, _el$141);
7939
+ _$insertNode(_el$132, _el$142);
7940
+ _$insertNode(_el$132, _el$144);
7816
7941
  _$insertNode(_el$133, _el$134);
7817
- _$insertNode(_el$133, _el$136);
7818
- _$insertNode(_el$133, _el$138);
7819
- _$insertNode(_el$133, _el$140);
7820
- _$insertNode(_el$133, _el$141);
7821
- _$insertNode(_el$133, _el$142);
7822
- _$insertNode(_el$133, _el$143);
7823
- _$insertNode(_el$133, _el$145);
7824
- _$insertNode(_el$134, _el$135);
7825
- _$insert(_el$134, () => statusIcon(goal().status), _el$135);
7826
- _$insert(_el$134, () => goal().name, null);
7827
- _$insertNode(_el$136, _$createTextNode(` Goal `));
7828
- _$insertNode(_el$138, _el$139);
7829
- _$insert(_el$138, () => goalStatusLabel(goal().status).short, _el$139);
7830
- _$insert(_el$138, () => goalStatusLabel(goal().status).hint, null);
7831
- _$insert(_el$133, (() => {
7942
+ _$insert(_el$133, () => statusIcon(goal().status), _el$134);
7943
+ _$insert(_el$133, () => goal().name, null);
7944
+ _$insertNode(_el$135, _$createTextNode(` Goal `));
7945
+ _$insertNode(_el$137, _el$138);
7946
+ _$insert(_el$137, () => goalStatusLabel(goal().status).short, _el$138);
7947
+ _$insert(_el$137, () => goalStatusLabel(goal().status).hint, null);
7948
+ _$insert(_el$132, (() => {
7832
7949
  var _c$10 = _$memo(() => !!rt());
7833
7950
  return () => _c$10() && [(() => {
7834
- var _el$146 = _$createElement("span");
7835
- _$insertNode(_el$146, _$createTextNode(` \u2502 Worker `));
7836
- _$effect((_$p) => _$setProp(_el$146, "style", {
7951
+ var _el$145 = _$createElement("span");
7952
+ _$insertNode(_el$145, _$createTextNode(` \u2502 Worker `));
7953
+ _$effect((_$p) => _$setProp(_el$145, "style", {
7837
7954
  fg: theme().textMuted
7838
7955
  }, _$p));
7839
- return _el$146;
7956
+ return _el$145;
7840
7957
  })(), (() => {
7841
- var _el$148 = _$createElement("span"), _el$149 = _$createTextNode(` `), _el$150 = _$createTextNode(` \u2014 `);
7842
- _$insertNode(_el$148, _el$149);
7843
- _$insertNode(_el$148, _el$150);
7844
- _$insert(_el$148, () => phaseIcon(rt().phase), _el$149);
7845
- _$insert(_el$148, () => phaseLabel(rt().phase).short, _el$150);
7846
- _$insert(_el$148, () => phaseLabel(rt().phase).hint, null);
7847
- _$effect((_$p) => _$setProp(_el$148, "style", {
7958
+ var _el$147 = _$createElement("span"), _el$148 = _$createTextNode(` `), _el$149 = _$createTextNode(` \u2014 `);
7959
+ _$insertNode(_el$147, _el$148);
7960
+ _$insertNode(_el$147, _el$149);
7961
+ _$insert(_el$147, () => phaseIcon(rt().phase), _el$148);
7962
+ _$insert(_el$147, () => phaseLabel(rt().phase).short, _el$149);
7963
+ _$insert(_el$147, () => phaseLabel(rt().phase).hint, null);
7964
+ _$effect((_$p) => _$setProp(_el$147, "style", {
7848
7965
  fg: phaseColor(rt().phase, theme()),
7849
7966
  bold: true
7850
7967
  }, _$p));
7851
- return _el$148;
7968
+ return _el$147;
7852
7969
  })(), (() => {
7853
- var _el$151 = _$createElement("span"), _el$152 = _$createTextNode(` run `), _el$153 = _$createTextNode(` (budget `), _el$154 = _$createTextNode(`)`);
7854
- _$insertNode(_el$151, _el$152);
7855
- _$insertNode(_el$151, _el$153);
7856
- _$insertNode(_el$151, _el$154);
7857
- _$insert(_el$151, () => rt().runCount, _el$153);
7858
- _$insert(_el$151, () => rt().budgetTurnCount, _el$154);
7859
- _$effect((_$p) => _$setProp(_el$151, "style", {
7970
+ var _el$150 = _$createElement("span"), _el$151 = _$createTextNode(` run `), _el$152 = _$createTextNode(` (budget `), _el$153 = _$createTextNode(`)`);
7971
+ _$insertNode(_el$150, _el$151);
7972
+ _$insertNode(_el$150, _el$152);
7973
+ _$insertNode(_el$150, _el$153);
7974
+ _$insert(_el$150, () => rt().runCount, _el$152);
7975
+ _$insert(_el$150, () => rt().budgetTurnCount, _el$153);
7976
+ _$effect((_$p) => _$setProp(_el$150, "style", {
7860
7977
  fg: theme().textMuted
7861
7978
  }, _$p));
7862
- return _el$151;
7979
+ return _el$150;
7863
7980
  })()];
7864
- })(), _el$140);
7865
- _$insert(_el$141, () => describeGoalState(goal().status, rt()?.phase));
7866
- _$insert(_el$133, (() => {
7981
+ })(), _el$139);
7982
+ _$insert(_el$140, () => describeGoalState(goal().status, rt()?.phase));
7983
+ _$insert(_el$132, (() => {
7867
7984
  var _c$11 = _$memo(() => !!rt()?.workerAbortedAt);
7868
7985
  return () => _c$11() && [(() => {
7869
- var _el$155 = _$createElement("span");
7870
- _$insertNode(_el$155, _$createTextNode(` \u2502 \u26A0 worker aborted `));
7871
- _$effect((_$p) => _$setProp(_el$155, "style", {
7986
+ var _el$154 = _$createElement("span");
7987
+ _$insertNode(_el$154, _$createTextNode(` \u2502 \u26A0 worker aborted `));
7988
+ _$effect((_$p) => _$setProp(_el$154, "style", {
7872
7989
  fg: theme().warning,
7873
7990
  bold: true
7874
7991
  }, _$p));
7875
- return _el$155;
7992
+ return _el$154;
7876
7993
  })(), (() => {
7877
- var _el$157 = _$createElement("span"), _el$158 = _$createTextNode(` \u2014 session kept, next turn reuses it`);
7878
- _$insertNode(_el$157, _el$158);
7879
- _$insert(_el$157, () => ageLabel(rt().workerAbortedAt, clock()), _el$158);
7880
- _$effect((_$p) => _$setProp(_el$157, "style", {
7994
+ var _el$156 = _$createElement("span"), _el$157 = _$createTextNode(` \u2014 session kept, next turn reuses it`);
7995
+ _$insertNode(_el$156, _el$157);
7996
+ _$insert(_el$156, () => ageLabel(rt().workerAbortedAt, clock()), _el$157);
7997
+ _$effect((_$p) => _$setProp(_el$156, "style", {
7881
7998
  fg: theme().textMuted
7882
7999
  }, _$p));
7883
- return _el$157;
8000
+ return _el$156;
7884
8001
  })()];
7885
- })(), _el$142);
7886
- _$insert(_el$133, () => {
8002
+ })(), _el$141);
8003
+ _$insert(_el$132, () => {
7887
8004
  const agentName = goal().config.agent;
7888
8005
  const meta = agentName ? agentIndex()[agentName] ?? agentIndex()[agentName.toLowerCase()] : undefined;
7889
8006
  const model = goal().config.model;
7890
8007
  const slash = model?.indexOf("/") ?? -1;
7891
8008
  return [`
7892
8009
  `, (() => {
7893
- var _el$159 = _$createElement("span");
7894
- _$insertNode(_el$159, _$createTextNode(`\uD83E\uDD16 `));
7895
- _$effect((_$p) => _$setProp(_el$159, "style", {
8010
+ var _el$158 = _$createElement("span");
8011
+ _$insertNode(_el$158, _$createTextNode(`\uD83E\uDD16 `));
8012
+ _$effect((_$p) => _$setProp(_el$158, "style", {
7896
8013
  fg: theme().textMuted
7897
8014
  }, _$p));
7898
- return _el$159;
8015
+ return _el$158;
7899
8016
  })(), (() => {
7900
- var _el$161 = _$createElement("span");
7901
- _$insertNode(_el$161, _$createTextNode(`Agent: `));
7902
- _$effect((_$p) => _$setProp(_el$161, "style", {
8017
+ var _el$160 = _$createElement("span");
8018
+ _$insertNode(_el$160, _$createTextNode(`Agent: `));
8019
+ _$effect((_$p) => _$setProp(_el$160, "style", {
7903
8020
  fg: theme().primary,
7904
8021
  bold: true
7905
8022
  }, _$p));
7906
- return _el$161;
8023
+ return _el$160;
7907
8024
  })(), _$memo(() => agentName ? [(() => {
7908
- var _el$177 = _$createElement("span");
7909
- _$insert(_el$177, agentName);
7910
- _$effect((_$p) => _$setProp(_el$177, "style", {
8025
+ var _el$176 = _$createElement("span");
8026
+ _$insert(_el$176, agentName);
8027
+ _$effect((_$p) => _$setProp(_el$176, "style", {
7911
8028
  fg: agentColor(meta?.color, theme()),
7912
8029
  bold: true
7913
8030
  }, _$p));
7914
- return _el$177;
8031
+ return _el$176;
7915
8032
  })(), _$memo(() => _$memo(() => !!meta?.mode)() && (() => {
7916
- var _el$178 = _$createElement("span"), _el$179 = _$createTextNode(` (`), _el$180 = _$createTextNode(`)`);
7917
- _$insertNode(_el$178, _el$179);
7918
- _$insertNode(_el$178, _el$180);
7919
- _$insert(_el$178, () => meta.mode, _el$180);
7920
- _$effect((_$p) => _$setProp(_el$178, "style", {
8033
+ var _el$177 = _$createElement("span"), _el$178 = _$createTextNode(` (`), _el$179 = _$createTextNode(`)`);
8034
+ _$insertNode(_el$177, _el$178);
8035
+ _$insertNode(_el$177, _el$179);
8036
+ _$insert(_el$177, () => meta.mode, _el$179);
8037
+ _$effect((_$p) => _$setProp(_el$177, "style", {
7921
8038
  fg: theme().textMuted
7922
8039
  }, _$p));
7923
- return _el$178;
8040
+ return _el$177;
7924
8041
  })())] : goal().parentAgent ? [(() => {
7925
- var _el$181 = _$createElement("span");
7926
- _$insertNode(_el$181, _$createTextNode(`\u21A9 `));
7927
- _$effect((_$p) => _$setProp(_el$181, "style", {
8042
+ var _el$180 = _$createElement("span");
8043
+ _$insertNode(_el$180, _$createTextNode(`\u21A9 `));
8044
+ _$effect((_$p) => _$setProp(_el$180, "style", {
7928
8045
  fg: theme().textMuted
7929
8046
  }, _$p));
7930
- return _el$181;
8047
+ return _el$180;
7931
8048
  })(), (() => {
7932
- var _el$183 = _$createElement("span");
7933
- _$insert(_el$183, () => goal().parentAgent);
7934
- _$effect((_$p) => _$setProp(_el$183, "style", {
8049
+ var _el$182 = _$createElement("span");
8050
+ _$insert(_el$182, () => goal().parentAgent);
8051
+ _$effect((_$p) => _$setProp(_el$182, "style", {
7935
8052
  fg: theme().text,
7936
8053
  bold: true
7937
8054
  }, _$p));
7938
- return _el$183;
8055
+ return _el$182;
7939
8056
  })(), (() => {
7940
- var _el$184 = _$createElement("span");
7941
- _$insertNode(_el$184, _$createTextNode(` (parent)`));
7942
- _$effect((_$p) => _$setProp(_el$184, "style", {
8057
+ var _el$183 = _$createElement("span");
8058
+ _$insertNode(_el$183, _$createTextNode(` (parent)`));
8059
+ _$effect((_$p) => _$setProp(_el$183, "style", {
7943
8060
  fg: theme().textMuted
7944
8061
  }, _$p));
7945
- return _el$184;
8062
+ return _el$183;
7946
8063
  })()] : (() => {
7947
- var _el$186 = _$createElement("span");
7948
- _$insertNode(_el$186, _$createTextNode(`parent`));
7949
- _$effect((_$p) => _$setProp(_el$186, "style", {
8064
+ var _el$185 = _$createElement("span");
8065
+ _$insertNode(_el$185, _$createTextNode(`parent`));
8066
+ _$effect((_$p) => _$setProp(_el$185, "style", {
7950
8067
  fg: theme().textMuted
7951
8068
  }, _$p));
7952
- return _el$186;
8069
+ return _el$185;
7953
8070
  })()), (() => {
7954
- var _el$163 = _$createElement("span");
7955
- _$insertNode(_el$163, _$createTextNode(` \u2502 \uD83E\uDDE0 `));
7956
- _$effect((_$p) => _$setProp(_el$163, "style", {
8071
+ var _el$162 = _$createElement("span");
8072
+ _$insertNode(_el$162, _$createTextNode(` \u2502 \uD83E\uDDE0 `));
8073
+ _$effect((_$p) => _$setProp(_el$162, "style", {
7957
8074
  fg: theme().textMuted
7958
8075
  }, _$p));
7959
- return _el$163;
8076
+ return _el$162;
7960
8077
  })(), (() => {
7961
- var _el$165 = _$createElement("span");
7962
- _$insertNode(_el$165, _$createTextNode(`Model: `));
7963
- _$effect((_$p) => _$setProp(_el$165, "style", {
8078
+ var _el$164 = _$createElement("span");
8079
+ _$insertNode(_el$164, _$createTextNode(`Model: `));
8080
+ _$effect((_$p) => _$setProp(_el$164, "style", {
7964
8081
  fg: theme().primary,
7965
8082
  bold: true
7966
8083
  }, _$p));
7967
- return _el$165;
8084
+ return _el$164;
7968
8085
  })(), _$memo(() => model && slash > 0 ? [(() => {
7969
- var _el$188 = _$createElement("span"), _el$189 = _$createTextNode(`/`);
7970
- _$insertNode(_el$188, _el$189);
7971
- _$insert(_el$188, () => model.slice(0, slash), _el$189);
7972
- _$effect((_$p) => _$setProp(_el$188, "style", {
8086
+ var _el$187 = _$createElement("span"), _el$188 = _$createTextNode(`/`);
8087
+ _$insertNode(_el$187, _el$188);
8088
+ _$insert(_el$187, () => model.slice(0, slash), _el$188);
8089
+ _$effect((_$p) => _$setProp(_el$187, "style", {
7973
8090
  fg: theme().textMuted
7974
8091
  }, _$p));
7975
- return _el$188;
8092
+ return _el$187;
7976
8093
  })(), (() => {
7977
- var _el$190 = _$createElement("span");
7978
- _$insert(_el$190, () => model.slice(slash + 1));
7979
- _$effect((_$p) => _$setProp(_el$190, "style", {
8094
+ var _el$189 = _$createElement("span");
8095
+ _$insert(_el$189, () => model.slice(slash + 1));
8096
+ _$effect((_$p) => _$setProp(_el$189, "style", {
7980
8097
  fg: theme().info,
7981
8098
  bold: true
7982
8099
  }, _$p));
7983
- return _el$190;
8100
+ return _el$189;
7984
8101
  })()] : goal().parentModel ? [(() => {
7985
- var _el$191 = _$createElement("span");
7986
- _$insertNode(_el$191, _$createTextNode(`\u21A9 `));
7987
- _$effect((_$p) => _$setProp(_el$191, "style", {
8102
+ var _el$190 = _$createElement("span");
8103
+ _$insertNode(_el$190, _$createTextNode(`\u21A9 `));
8104
+ _$effect((_$p) => _$setProp(_el$190, "style", {
7988
8105
  fg: theme().textMuted
7989
8106
  }, _$p));
7990
- return _el$191;
8107
+ return _el$190;
7991
8108
  })(), (() => {
7992
- var _el$193 = _$createElement("span");
7993
- _$insert(_el$193, () => goal().parentModel);
7994
- _$effect((_$p) => _$setProp(_el$193, "style", {
8109
+ var _el$192 = _$createElement("span");
8110
+ _$insert(_el$192, () => goal().parentModel);
8111
+ _$effect((_$p) => _$setProp(_el$192, "style", {
7995
8112
  fg: theme().info,
7996
8113
  bold: true
7997
8114
  }, _$p));
7998
- return _el$193;
8115
+ return _el$192;
7999
8116
  })(), (() => {
8000
- var _el$194 = _$createElement("span");
8001
- _$insertNode(_el$194, _$createTextNode(` (parent)`));
8002
- _$effect((_$p) => _$setProp(_el$194, "style", {
8117
+ var _el$193 = _$createElement("span");
8118
+ _$insertNode(_el$193, _$createTextNode(` (parent)`));
8119
+ _$effect((_$p) => _$setProp(_el$193, "style", {
8003
8120
  fg: theme().textMuted
8004
8121
  }, _$p));
8005
- return _el$194;
8122
+ return _el$193;
8006
8123
  })()] : (() => {
8007
- var _el$196 = _$createElement("span");
8008
- _$insertNode(_el$196, _$createTextNode(`parent`));
8009
- _$effect((_$p) => _$setProp(_el$196, "style", {
8124
+ var _el$195 = _$createElement("span");
8125
+ _$insertNode(_el$195, _$createTextNode(`parent`));
8126
+ _$effect((_$p) => _$setProp(_el$195, "style", {
8010
8127
  fg: theme().textMuted
8011
8128
  }, _$p));
8012
- return _el$196;
8129
+ return _el$195;
8013
8130
  })()), (() => {
8014
- var _el$167 = _$createElement("span");
8015
- _$insertNode(_el$167, _$createTextNode(` \u2502 \uD83D\uDCB0 `));
8016
- _$effect((_$p) => _$setProp(_el$167, "style", {
8131
+ var _el$166 = _$createElement("span");
8132
+ _$insertNode(_el$166, _$createTextNode(` \u2502 \uD83D\uDCB0 `));
8133
+ _$effect((_$p) => _$setProp(_el$166, "style", {
8017
8134
  fg: theme().textMuted
8018
8135
  }, _$p));
8019
- return _el$167;
8136
+ return _el$166;
8020
8137
  })(), (() => {
8021
- var _el$169 = _$createElement("span");
8022
- _$insertNode(_el$169, _$createTextNode(`Spent: `));
8023
- _$effect((_$p) => _$setProp(_el$169, "style", {
8138
+ var _el$168 = _$createElement("span");
8139
+ _$insertNode(_el$168, _$createTextNode(`Spent: `));
8140
+ _$effect((_$p) => _$setProp(_el$168, "style", {
8024
8141
  fg: theme().primary,
8025
8142
  bold: true
8026
8143
  }, _$p));
8027
- return _el$169;
8144
+ return _el$168;
8028
8145
  })(), (() => {
8029
- var _el$171 = _$createElement("span");
8030
- _$insert(_el$171, () => formatCost(goal().costUsed));
8031
- _$effect((_$p) => _$setProp(_el$171, "style", {
8146
+ var _el$170 = _$createElement("span");
8147
+ _$insert(_el$170, () => formatCost(goal().costUsed));
8148
+ _$effect((_$p) => _$setProp(_el$170, "style", {
8032
8149
  fg: theme().success,
8033
8150
  bold: true
8034
8151
  }, _$p));
8035
- return _el$171;
8152
+ return _el$170;
8036
8153
  })(), (() => {
8037
- var _el$172 = _$createElement("span");
8038
- _$insertNode(_el$172, _$createTextNode(` \xB7 `));
8039
- _$effect((_$p) => _$setProp(_el$172, "style", {
8154
+ var _el$171 = _$createElement("span");
8155
+ _$insertNode(_el$171, _$createTextNode(` \xB7 `));
8156
+ _$effect((_$p) => _$setProp(_el$171, "style", {
8040
8157
  fg: theme().textMuted
8041
8158
  }, _$p));
8042
- return _el$172;
8159
+ return _el$171;
8043
8160
  })(), (() => {
8044
- var _el$174 = _$createElement("span");
8045
- _$insert(_el$174, () => formatTokens(goal().tokensUsed));
8046
- _$effect((_$p) => _$setProp(_el$174, "style", {
8161
+ var _el$173 = _$createElement("span");
8162
+ _$insert(_el$173, () => formatTokens(goal().tokensUsed));
8163
+ _$effect((_$p) => _$setProp(_el$173, "style", {
8047
8164
  fg: theme().warning,
8048
8165
  bold: true
8049
8166
  }, _$p));
8050
- return _el$174;
8167
+ return _el$173;
8051
8168
  })(), (() => {
8052
- var _el$175 = _$createElement("span"), _el$176 = _$createTextNode(` tokens \xB7 `);
8053
- _$insertNode(_el$175, _el$176);
8054
- _$insert(_el$175, () => formatDuration(goal().timeUsedSeconds), null);
8055
- _$effect((_$p) => _$setProp(_el$175, "style", {
8169
+ var _el$174 = _$createElement("span"), _el$175 = _$createTextNode(` tokens \xB7 `);
8170
+ _$insertNode(_el$174, _el$175);
8171
+ _$insert(_el$174, () => formatDuration(goal().timeUsedSeconds), null);
8172
+ _$effect((_$p) => _$setProp(_el$174, "style", {
8056
8173
  fg: theme().textMuted
8057
8174
  }, _$p));
8058
- return _el$175;
8175
+ return _el$174;
8059
8176
  })()];
8060
- }, _el$142);
8061
- _$insertNode(_el$143, _$createTextNode(`\uD83C\uDFAF Target: `));
8062
- _$insert(_el$145, () => goal().objective.slice(0, 160));
8063
- _$insert(_el$133, (() => {
8177
+ }, _el$141);
8178
+ _$insertNode(_el$142, _$createTextNode(`\uD83C\uDFAF Target: `));
8179
+ _$insert(_el$144, () => goal().objective.slice(0, 160));
8180
+ _$insert(_el$132, (() => {
8064
8181
  var _c$12 = _$memo(() => !!lp());
8065
8182
  return () => _c$12() && [(() => {
8066
- var _el$198 = _$createElement("span"), _el$199 = _$createTextNode(`
8183
+ var _el$197 = _$createElement("span"), _el$198 = _$createTextNode(`
8067
8184
  \u2714 `);
8068
- _$insertNode(_el$198, _el$199);
8069
- _$effect((_$p) => _$setProp(_el$198, "style", {
8185
+ _$insertNode(_el$197, _el$198);
8186
+ _$effect((_$p) => _$setProp(_el$197, "style", {
8070
8187
  fg: theme().success
8071
8188
  }, _$p));
8072
- return _el$198;
8189
+ return _el$197;
8073
8190
  })(), (() => {
8074
- var _el$201 = _$createElement("span");
8075
- _$insertNode(_el$201, _$createTextNode(`Progress: `));
8076
- _$effect((_$p) => _$setProp(_el$201, "style", {
8191
+ var _el$200 = _$createElement("span");
8192
+ _$insertNode(_el$200, _$createTextNode(`Progress: `));
8193
+ _$effect((_$p) => _$setProp(_el$200, "style", {
8077
8194
  fg: theme().success,
8078
8195
  bold: true
8079
8196
  }, _$p));
8080
- return _el$201;
8197
+ return _el$200;
8081
8198
  })(), (() => {
8082
- var _el$203 = _$createElement("span");
8083
- _$insert(_el$203, () => lp().summary.slice(0, 100));
8084
- _$effect((_$p) => _$setProp(_el$203, "style", {
8199
+ var _el$202 = _$createElement("span");
8200
+ _$insert(_el$202, () => lp().summary.slice(0, 100));
8201
+ _$effect((_$p) => _$setProp(_el$202, "style", {
8085
8202
  fg: theme().text
8086
8203
  }, _$p));
8087
- return _el$203;
8204
+ return _el$202;
8088
8205
  })(), (() => {
8089
- var _el$204 = _$createElement("span"), _el$205 = _$createTextNode(` \u2192 `);
8090
- _$insertNode(_el$204, _el$205);
8091
- _$insert(_el$204, () => lp().next?.slice(0, 60) || "", null);
8092
- _$effect((_$p) => _$setProp(_el$204, "style", {
8206
+ var _el$203 = _$createElement("span"), _el$204 = _$createTextNode(` \u2192 `);
8207
+ _$insertNode(_el$203, _el$204);
8208
+ _$insert(_el$203, () => lp().next?.slice(0, 60) || "", null);
8209
+ _$effect((_$p) => _$setProp(_el$203, "style", {
8093
8210
  fg: theme().textMuted
8094
8211
  }, _$p));
8095
- return _el$204;
8212
+ return _el$203;
8096
8213
  })()];
8097
8214
  })(), null);
8098
- _$insert(_el$133, (() => {
8215
+ _$insert(_el$132, (() => {
8099
8216
  var _c$13 = _$memo(() => !!blk());
8100
8217
  return () => _c$13() && [(() => {
8101
- var _el$206 = _$createElement("span"), _el$207 = _$createTextNode(`
8218
+ var _el$205 = _$createElement("span"), _el$206 = _$createTextNode(`
8102
8219
  \u2716 Blocked: `);
8103
- _$insertNode(_el$206, _el$207);
8104
- _$effect((_$p) => _$setProp(_el$206, "style", {
8220
+ _$insertNode(_el$205, _el$206);
8221
+ _$effect((_$p) => _$setProp(_el$205, "style", {
8105
8222
  fg: theme().error,
8106
8223
  bold: true
8107
8224
  }, _$p));
8108
- return _el$206;
8225
+ return _el$205;
8109
8226
  })(), (() => {
8110
- var _el$209 = _$createElement("span");
8111
- _$insert(_el$209, () => blk().reason.slice(0, 140));
8112
- _$effect((_$p) => _$setProp(_el$209, "style", {
8227
+ var _el$208 = _$createElement("span");
8228
+ _$insert(_el$208, () => blk().reason.slice(0, 140));
8229
+ _$effect((_$p) => _$setProp(_el$208, "style", {
8113
8230
  fg: theme().error
8114
8231
  }, _$p));
8115
- return _el$209;
8232
+ return _el$208;
8116
8233
  })(), (() => {
8117
- var _el$210 = _$createElement("span"), _el$211 = _$createTextNode(` \u2014 `);
8118
- _$insertNode(_el$210, _el$211);
8119
- _$insert(_el$210, () => blk().needed.slice(0, 60), null);
8120
- _$effect((_$p) => _$setProp(_el$210, "style", {
8234
+ var _el$209 = _$createElement("span"), _el$210 = _$createTextNode(` \u2014 `);
8235
+ _$insertNode(_el$209, _el$210);
8236
+ _$insert(_el$209, () => blk().needed.slice(0, 60), null);
8237
+ _$effect((_$p) => _$setProp(_el$209, "style", {
8121
8238
  fg: theme().textMuted
8122
8239
  }, _$p));
8123
- return _el$210;
8240
+ return _el$209;
8124
8241
  })()];
8125
8242
  })(), null);
8126
- _$insert(_el$133, (() => {
8243
+ _$insert(_el$132, (() => {
8127
8244
  var _c$14 = _$memo(() => !!goal().config.artifactDir);
8128
8245
  return () => _c$14() && [(() => {
8129
- var _el$212 = _$createElement("span"), _el$213 = _$createTextNode(`
8246
+ var _el$211 = _$createElement("span"), _el$212 = _$createTextNode(`
8130
8247
  \uD83D\uDCC1 `);
8131
- _$insertNode(_el$212, _el$213);
8132
- _$effect((_$p) => _$setProp(_el$212, "style", {
8248
+ _$insertNode(_el$211, _el$212);
8249
+ _$effect((_$p) => _$setProp(_el$211, "style", {
8133
8250
  fg: theme().accent
8134
8251
  }, _$p));
8135
- return _el$212;
8252
+ return _el$211;
8136
8253
  })(), (() => {
8137
- var _el$215 = _$createElement("span");
8138
- _$insertNode(_el$215, _$createTextNode(`Artifacts: `));
8139
- _$effect((_$p) => _$setProp(_el$215, "style", {
8254
+ var _el$214 = _$createElement("span");
8255
+ _$insertNode(_el$214, _$createTextNode(`Artifacts: `));
8256
+ _$effect((_$p) => _$setProp(_el$214, "style", {
8140
8257
  fg: theme().accent,
8141
8258
  bold: true
8142
8259
  }, _$p));
8143
- return _el$215;
8260
+ return _el$214;
8144
8261
  })(), (() => {
8145
- var _el$217 = _$createElement("span");
8146
- _$insert(_el$217, () => String(goal().config.artifactDir).replace(String(props.directory), "."));
8262
+ var _el$216 = _$createElement("span");
8263
+ _$insert(_el$216, () => String(goal().config.artifactDir).replace(String(props.directory), "."));
8264
+ _$effect((_$p) => _$setProp(_el$216, "style", {
8265
+ fg: theme().textMuted
8266
+ }, _$p));
8267
+ return _el$216;
8268
+ })()];
8269
+ })(), null);
8270
+ _$insert(_el$132, (() => {
8271
+ var _c$15 = _$memo(() => !!goal().workerTopology);
8272
+ return () => _c$15() && [(() => {
8273
+ var _el$217 = _$createElement("span"), _el$218 = _$createTextNode(`
8274
+ \uD83C\uDF3F Worker: `);
8275
+ _$insertNode(_el$217, _el$218);
8147
8276
  _$effect((_$p) => _$setProp(_el$217, "style", {
8148
8277
  fg: theme().textMuted
8149
8278
  }, _$p));
8150
8279
  return _el$217;
8151
- })()];
8280
+ })(), (() => {
8281
+ var _el$220 = _$createElement("span");
8282
+ _$insert(_el$220, (() => {
8283
+ var _c$22 = _$memo(() => goal().workerTopology === "v2-native-child");
8284
+ return () => _c$22() ? "native child" : goal().workerTopology === "v2-root-fallback" ? "root fallback" : "v1 child";
8285
+ })());
8286
+ _$effect((_$p) => _$setProp(_el$220, "style", {
8287
+ fg: theme().text
8288
+ }, _$p));
8289
+ return _el$220;
8290
+ })(), _$memo(() => _$memo(() => !!goal().nativeParentID)() ? (() => {
8291
+ var _el$221 = _$createElement("span"), _el$222 = _$createTextNode(` of `), _el$223 = _$createTextNode(`\u2026`);
8292
+ _$insertNode(_el$221, _el$222);
8293
+ _$insertNode(_el$221, _el$223);
8294
+ _$insert(_el$221, () => goal().nativeParentID.slice(0, 12), _el$223);
8295
+ _$effect((_$p) => _$setProp(_el$221, "style", {
8296
+ fg: theme().textMuted
8297
+ }, _$p));
8298
+ return _el$221;
8299
+ })() : null)];
8152
8300
  })(), null);
8153
- _$insert(_el$133, (() => {
8154
- var _c$15 = _$memo(() => (goal().config.checks?.length ?? 0) > 0);
8155
- return () => _c$15() ? [(() => {
8156
- var _el$218 = _$createElement("span"), _el$219 = _$createTextNode(`
8301
+ _$insert(_el$132, (() => {
8302
+ var _c$16 = _$memo(() => (goal().config.checks?.length ?? 0) > 0);
8303
+ return () => _c$16() ? [(() => {
8304
+ var _el$224 = _$createElement("span"), _el$225 = _$createTextNode(`
8157
8305
  \u25A3 `);
8158
- _$insertNode(_el$218, _el$219);
8159
- _$effect((_$p) => _$setProp(_el$218, "style", {
8306
+ _$insertNode(_el$224, _el$225);
8307
+ _$effect((_$p) => _$setProp(_el$224, "style", {
8160
8308
  fg: theme().warning
8161
8309
  }, _$p));
8162
- return _el$218;
8310
+ return _el$224;
8163
8311
  })(), (() => {
8164
- var _el$221 = _$createElement("span");
8165
- _$insertNode(_el$221, _$createTextNode(`Checks: `));
8166
- _$effect((_$p) => _$setProp(_el$221, "style", {
8312
+ var _el$227 = _$createElement("span");
8313
+ _$insertNode(_el$227, _$createTextNode(`Checks: `));
8314
+ _$effect((_$p) => _$setProp(_el$227, "style", {
8167
8315
  fg: theme().warning,
8168
8316
  bold: true
8169
8317
  }, _$p));
8170
- return _el$221;
8318
+ return _el$227;
8171
8319
  })(), (() => {
8172
- var _el$223 = _$createElement("span");
8173
- _$insert(_el$223, () => goal().config.checks.join(", ").slice(0, 100));
8174
- _$effect((_$p) => _$setProp(_el$223, "style", {
8320
+ var _el$229 = _$createElement("span");
8321
+ _$insert(_el$229, () => goal().config.checks.join(", ").slice(0, 100));
8322
+ _$effect((_$p) => _$setProp(_el$229, "style", {
8175
8323
  fg: theme().textMuted
8176
8324
  }, _$p));
8177
- return _el$223;
8325
+ return _el$229;
8178
8326
  })()] : null;
8179
8327
  })(), null);
8180
- _$insert(_el$133, (() => {
8181
- var _c$16 = _$memo(() => rt()?.evaluatorRejectionCount > 0);
8182
- return () => _c$16() && [(() => {
8183
- var _el$224 = _$createElement("span"), _el$225 = _$createTextNode(`
8328
+ _$insert(_el$132, (() => {
8329
+ var _c$17 = _$memo(() => rt()?.evaluatorRejectionCount > 0);
8330
+ return () => _c$17() && [(() => {
8331
+ var _el$230 = _$createElement("span"), _el$231 = _$createTextNode(`
8184
8332
  \u26A0 rejections: `);
8185
- _$insertNode(_el$224, _el$225);
8186
- _$effect((_$p) => _$setProp(_el$224, "style", {
8333
+ _$insertNode(_el$230, _el$231);
8334
+ _$effect((_$p) => _$setProp(_el$230, "style", {
8187
8335
  fg: theme().warning
8188
8336
  }, _$p));
8189
- return _el$224;
8337
+ return _el$230;
8190
8338
  })(), (() => {
8191
- var _el$227 = _$createElement("span"), _el$228 = _$createTextNode(` \u2014 `);
8192
- _$insertNode(_el$227, _el$228);
8193
- _$insert(_el$227, () => String(rt().evaluatorRejectionCount), _el$228);
8194
- _$insert(_el$227, () => String(rt().lastRejectionDetails || "").slice(0, 80), null);
8195
- _$effect((_$p) => _$setProp(_el$227, "style", {
8339
+ var _el$233 = _$createElement("span"), _el$234 = _$createTextNode(` \u2014 `);
8340
+ _$insertNode(_el$233, _el$234);
8341
+ _$insert(_el$233, () => String(rt().evaluatorRejectionCount), _el$234);
8342
+ _$insert(_el$233, () => String(rt().lastRejectionDetails || "").slice(0, 80), null);
8343
+ _$effect((_$p) => _$setProp(_el$233, "style", {
8196
8344
  fg: theme().warning
8197
8345
  }, _$p));
8198
- return _el$227;
8346
+ return _el$233;
8199
8347
  })()];
8200
8348
  })(), null);
8201
- _$insert(_el$133, (() => {
8202
- var _c$17 = _$memo(() => rt()?.unknownStatusCount > 0);
8203
- return () => _c$17() && [(() => {
8204
- var _el$229 = _$createElement("span"), _el$230 = _$createTextNode(`
8349
+ _$insert(_el$132, (() => {
8350
+ var _c$18 = _$memo(() => rt()?.unknownStatusCount > 0);
8351
+ return () => _c$18() && [(() => {
8352
+ var _el$235 = _$createElement("span"), _el$236 = _$createTextNode(`
8205
8353
  \u26A0\uFE0F unreachable: `);
8206
- _$insertNode(_el$229, _el$230);
8207
- _$effect((_$p) => _$setProp(_el$229, "style", {
8354
+ _$insertNode(_el$235, _el$236);
8355
+ _$effect((_$p) => _$setProp(_el$235, "style", {
8208
8356
  fg: theme().error
8209
8357
  }, _$p));
8210
- return _el$229;
8358
+ return _el$235;
8211
8359
  })(), (() => {
8212
- var _el$232 = _$createElement("span"), _el$233 = _$createTextNode(`/3`);
8213
- _$insertNode(_el$232, _el$233);
8214
- _$insert(_el$232, () => String(rt().unknownStatusCount), _el$233);
8215
- _$effect((_$p) => _$setProp(_el$232, "style", {
8360
+ var _el$238 = _$createElement("span"), _el$239 = _$createTextNode(`/3`);
8361
+ _$insertNode(_el$238, _el$239);
8362
+ _$insert(_el$238, () => String(rt().unknownStatusCount), _el$239);
8363
+ _$effect((_$p) => _$setProp(_el$238, "style", {
8216
8364
  fg: theme().error
8217
8365
  }, _$p));
8218
- return _el$232;
8366
+ return _el$238;
8219
8367
  })(), (() => {
8220
- var _el$234 = _$createElement("span");
8221
- _$insertNode(_el$234, _$createTextNode(` \u2014 nudge to recover`));
8222
- _$effect((_$p) => _$setProp(_el$234, "style", {
8368
+ var _el$240 = _$createElement("span");
8369
+ _$insertNode(_el$240, _$createTextNode(` \u2014 nudge to recover`));
8370
+ _$effect((_$p) => _$setProp(_el$240, "style", {
8223
8371
  fg: theme().textMuted
8224
8372
  }, _$p));
8225
- return _el$234;
8373
+ return _el$240;
8226
8374
  })()];
8227
8375
  })(), null);
8228
- _$insert(_el$133, (() => {
8229
- var _c$18 = _$memo(() => !!rt()?.retryAfter);
8230
- return () => _c$18() && [(() => {
8231
- var _el$236 = _$createElement("span"), _el$237 = _$createTextNode(`
8376
+ _$insert(_el$132, (() => {
8377
+ var _c$19 = _$memo(() => !!rt()?.retryAfter);
8378
+ return () => _c$19() && [(() => {
8379
+ var _el$242 = _$createElement("span"), _el$243 = _$createTextNode(`
8232
8380
  \u21BB retry in: `);
8233
- _$insertNode(_el$236, _el$237);
8234
- _$effect((_$p) => _$setProp(_el$236, "style", {
8381
+ _$insertNode(_el$242, _el$243);
8382
+ _$effect((_$p) => _$setProp(_el$242, "style", {
8235
8383
  fg: theme().accent
8236
8384
  }, _$p));
8237
- return _el$236;
8385
+ return _el$242;
8238
8386
  })(), (() => {
8239
- var _el$239 = _$createElement("span");
8240
- _$insert(_el$239, () => countdownLabel(rt().retryAfter, clock()));
8241
- _$effect((_$p) => _$setProp(_el$239, "style", {
8387
+ var _el$245 = _$createElement("span");
8388
+ _$insert(_el$245, () => countdownLabel(rt().retryAfter, clock()));
8389
+ _$effect((_$p) => _$setProp(_el$245, "style", {
8242
8390
  fg: theme().accent
8243
8391
  }, _$p));
8244
- return _el$239;
8392
+ return _el$245;
8245
8393
  })()];
8246
8394
  })(), null);
8247
- _$insert(_el$133, (() => {
8248
- var _c$19 = _$memo(() => !!rt()?.nextRunAt);
8249
- return () => _c$19() && [(() => {
8250
- var _el$240 = _$createElement("span"), _el$241 = _$createTextNode(`
8395
+ _$insert(_el$132, (() => {
8396
+ var _c$20 = _$memo(() => !!rt()?.nextRunAt);
8397
+ return () => _c$20() && [(() => {
8398
+ var _el$246 = _$createElement("span"), _el$247 = _$createTextNode(`
8251
8399
  \u23F0 next run: `);
8252
- _$insertNode(_el$240, _el$241);
8253
- _$effect((_$p) => _$setProp(_el$240, "style", {
8400
+ _$insertNode(_el$246, _el$247);
8401
+ _$effect((_$p) => _$setProp(_el$246, "style", {
8254
8402
  fg: theme().accent
8255
8403
  }, _$p));
8256
- return _el$240;
8404
+ return _el$246;
8257
8405
  })(), (() => {
8258
- var _el$243 = _$createElement("span");
8259
- _$insert(_el$243, () => countdownLabel(rt().nextRunAt, clock()));
8260
- _$effect((_$p) => _$setProp(_el$243, "style", {
8406
+ var _el$249 = _$createElement("span");
8407
+ _$insert(_el$249, () => countdownLabel(rt().nextRunAt, clock()));
8408
+ _$effect((_$p) => _$setProp(_el$249, "style", {
8261
8409
  fg: theme().accent
8262
8410
  }, _$p));
8263
- return _el$243;
8411
+ return _el$249;
8264
8412
  })(), (() => {
8265
- var _el$244 = _$createElement("span"), _el$245 = _$createTextNode(` (`), _el$246 = _$createTextNode(` runs)`);
8266
- _$insertNode(_el$244, _el$245);
8267
- _$insertNode(_el$244, _el$246);
8268
- _$insert(_el$244, () => String(rt().scheduleRunCount || 0), _el$246);
8269
- _$effect((_$p) => _$setProp(_el$244, "style", {
8413
+ var _el$250 = _$createElement("span"), _el$251 = _$createTextNode(` (`), _el$252 = _$createTextNode(` runs)`);
8414
+ _$insertNode(_el$250, _el$251);
8415
+ _$insertNode(_el$250, _el$252);
8416
+ _$insert(_el$250, () => String(rt().scheduleRunCount || 0), _el$252);
8417
+ _$effect((_$p) => _$setProp(_el$250, "style", {
8270
8418
  fg: theme().textMuted
8271
8419
  }, _$p));
8272
- return _el$244;
8420
+ return _el$250;
8273
8421
  })()];
8274
8422
  })(), null);
8275
- _$insert(_el$133, (() => {
8276
- var _c$20 = _$memo(() => !!rt()?.lastError);
8277
- return () => _c$20() && [(() => {
8278
- var _el$247 = _$createElement("span"), _el$248 = _$createTextNode(`
8423
+ _$insert(_el$132, (() => {
8424
+ var _c$21 = _$memo(() => !!rt()?.lastError);
8425
+ return () => _c$21() && [(() => {
8426
+ var _el$253 = _$createElement("span"), _el$254 = _$createTextNode(`
8279
8427
  \u26A0 `);
8280
- _$insertNode(_el$247, _el$248);
8281
- _$effect((_$p) => _$setProp(_el$247, "style", {
8428
+ _$insertNode(_el$253, _el$254);
8429
+ _$effect((_$p) => _$setProp(_el$253, "style", {
8282
8430
  fg: theme().error
8283
8431
  }, _$p));
8284
- return _el$247;
8432
+ return _el$253;
8285
8433
  })(), (() => {
8286
- var _el$250 = _$createElement("span");
8287
- _$insertNode(_el$250, _$createTextNode(`Error: `));
8288
- _$effect((_$p) => _$setProp(_el$250, "style", {
8434
+ var _el$256 = _$createElement("span");
8435
+ _$insertNode(_el$256, _$createTextNode(`Error: `));
8436
+ _$effect((_$p) => _$setProp(_el$256, "style", {
8289
8437
  fg: theme().error,
8290
8438
  bold: true
8291
8439
  }, _$p));
8292
- return _el$250;
8440
+ return _el$256;
8293
8441
  })(), (() => {
8294
- var _el$252 = _$createElement("span");
8295
- _$insert(_el$252, () => rt().lastError.slice(0, 120));
8296
- _$effect((_$p) => _$setProp(_el$252, "style", {
8442
+ var _el$258 = _$createElement("span");
8443
+ _$insert(_el$258, () => rt().lastError.slice(0, 120));
8444
+ _$effect((_$p) => _$setProp(_el$258, "style", {
8297
8445
  fg: theme().error
8298
8446
  }, _$p));
8299
- return _el$252;
8447
+ return _el$258;
8300
8448
  })()];
8301
8449
  })(), null);
8302
8450
  _$effect((_p$) => {
@@ -8315,13 +8463,13 @@ function LoopDashboard(props) {
8315
8463
  }, _v$48 = {
8316
8464
  fg: theme().text
8317
8465
  };
8318
- _v$42 !== _p$.e && (_p$.e = _$setProp(_el$132, "borderColor", _v$42, _p$.e));
8319
- _v$43 !== _p$.t && (_p$.t = _$setProp(_el$134, "style", _v$43, _p$.t));
8320
- _v$44 !== _p$.a && (_p$.a = _$setProp(_el$136, "style", _v$44, _p$.a));
8321
- _v$45 !== _p$.o && (_p$.o = _$setProp(_el$138, "style", _v$45, _p$.o));
8322
- _v$46 !== _p$.i && (_p$.i = _$setProp(_el$141, "style", _v$46, _p$.i));
8323
- _v$47 !== _p$.n && (_p$.n = _$setProp(_el$143, "style", _v$47, _p$.n));
8324
- _v$48 !== _p$.s && (_p$.s = _$setProp(_el$145, "style", _v$48, _p$.s));
8466
+ _v$42 !== _p$.e && (_p$.e = _$setProp(_el$131, "borderColor", _v$42, _p$.e));
8467
+ _v$43 !== _p$.t && (_p$.t = _$setProp(_el$133, "style", _v$43, _p$.t));
8468
+ _v$44 !== _p$.a && (_p$.a = _$setProp(_el$135, "style", _v$44, _p$.a));
8469
+ _v$45 !== _p$.o && (_p$.o = _$setProp(_el$137, "style", _v$45, _p$.o));
8470
+ _v$46 !== _p$.i && (_p$.i = _$setProp(_el$140, "style", _v$46, _p$.i));
8471
+ _v$47 !== _p$.n && (_p$.n = _$setProp(_el$142, "style", _v$47, _p$.n));
8472
+ _v$48 !== _p$.s && (_p$.s = _$setProp(_el$144, "style", _v$48, _p$.s));
8325
8473
  return _p$;
8326
8474
  }, {
8327
8475
  e: undefined,
@@ -8332,7 +8480,7 @@ function LoopDashboard(props) {
8332
8480
  n: undefined,
8333
8481
  s: undefined
8334
8482
  });
8335
- return _el$132;
8483
+ return _el$131;
8336
8484
  })();
8337
8485
  }
8338
8486
  })];
@@ -8349,28 +8497,32 @@ function LoopDashboard(props) {
8349
8497
  },
8350
8498
  get fallback() {
8351
8499
  return (() => {
8352
- var _el$253 = _$createElement("box"), _el$254 = _$createElement("text"), _el$255 = _$createElement("span"), _el$257 = _$createElement("span"), _el$259 = _$createElement("span"), _el$261 = _$createElement("text"), _el$262 = _$createElement("span"), _el$264 = _$createElement("span"), _el$266 = _$createElement("span"), _el$268 = _$createElement("span"), _el$270 = _$createElement("span");
8353
- _$insertNode(_el$253, _el$254);
8354
- _$insertNode(_el$253, _el$261);
8355
- _$setProp(_el$253, "flexDirection", "column");
8356
- _$setProp(_el$253, "gap", 1);
8357
- _$setProp(_el$253, "padding", 1);
8358
- _$insertNode(_el$254, _el$255);
8359
- _$insertNode(_el$254, _el$257);
8360
- _$insertNode(_el$254, _el$259);
8361
- _$insertNode(_el$255, _$createTextNode(`No command sessions owned by this session. `));
8362
- _$insertNode(_el$257, _$createTextNode(`:new &lt;command&gt;`));
8363
- _$insertNode(_el$259, _$createTextNode(` to start one.`));
8364
- _$insertNode(_el$261, _el$262);
8365
- _$insertNode(_el$261, _el$264);
8366
- _$insertNode(_el$261, _el$266);
8367
- _$insertNode(_el$261, _el$268);
8368
- _$insertNode(_el$261, _el$270);
8369
- _$insertNode(_el$262, _$createTextNode(`Tip: `));
8370
- _$insertNode(_el$264, _$createTextNode(`o`));
8371
- _$insertNode(_el$266, _$createTextNode(` fullscreen \xB7 `));
8372
- _$insertNode(_el$268, _$createTextNode(`:interrupt :terminate :remove`));
8373
- _$insertNode(_el$270, _$createTextNode(` manage \xB7 text + Enter writes stdin.`));
8500
+ var _el$259 = _$createElement("box"), _el$260 = _$createElement("text"), _el$261 = _$createElement("span"), _el$263 = _$createElement("span"), _el$265 = _$createElement("span"), _el$267 = _$createElement("text"), _el$268 = _$createElement("span"), _el$270 = _$createElement("span"), _el$272 = _$createElement("span"), _el$274 = _$createElement("span"), _el$276 = _$createElement("span"), _el$278 = _$createElement("span"), _el$280 = _$createElement("span");
8501
+ _$insertNode(_el$259, _el$260);
8502
+ _$insertNode(_el$259, _el$267);
8503
+ _$setProp(_el$259, "flexDirection", "column");
8504
+ _$setProp(_el$259, "gap", 1);
8505
+ _$setProp(_el$259, "padding", 1);
8506
+ _$insertNode(_el$260, _el$261);
8507
+ _$insertNode(_el$260, _el$263);
8508
+ _$insertNode(_el$260, _el$265);
8509
+ _$insertNode(_el$261, _$createTextNode(`No command sessions owned by this session. `));
8510
+ _$insertNode(_el$263, _$createTextNode(`:new &lt;command&gt;`));
8511
+ _$insertNode(_el$265, _$createTextNode(` to start one.`));
8512
+ _$insertNode(_el$267, _el$268);
8513
+ _$insertNode(_el$267, _el$270);
8514
+ _$insertNode(_el$267, _el$272);
8515
+ _$insertNode(_el$267, _el$274);
8516
+ _$insertNode(_el$267, _el$276);
8517
+ _$insertNode(_el$267, _el$278);
8518
+ _$insertNode(_el$267, _el$280);
8519
+ _$insertNode(_el$268, _$createTextNode(`Tip: `));
8520
+ _$insertNode(_el$270, _$createTextNode(`o`));
8521
+ _$insertNode(_el$272, _$createTextNode(` fullscreen \xB7 `));
8522
+ _$insertNode(_el$274, _$createTextNode(`X kill \xB7 R restart \xB7 x remove-done`));
8523
+ _$insertNode(_el$276, _$createTextNode(` \xB7 `));
8524
+ _$insertNode(_el$278, _$createTextNode(`:interrupt :terminate :remove`));
8525
+ _$insertNode(_el$280, _$createTextNode(` manage \xB7 text + Enter writes stdin.`));
8374
8526
  _$effect((_p$) => {
8375
8527
  var _v$49 = {
8376
8528
  fg: theme().textMuted
@@ -8388,15 +8540,21 @@ function LoopDashboard(props) {
8388
8540
  fg: theme().warning
8389
8541
  }, _v$56 = {
8390
8542
  fg: theme().textMuted
8543
+ }, _v$57 = {
8544
+ fg: theme().warning
8545
+ }, _v$58 = {
8546
+ fg: theme().textMuted
8391
8547
  };
8392
- _v$49 !== _p$.e && (_p$.e = _$setProp(_el$255, "style", _v$49, _p$.e));
8393
- _v$50 !== _p$.t && (_p$.t = _$setProp(_el$257, "style", _v$50, _p$.t));
8394
- _v$51 !== _p$.a && (_p$.a = _$setProp(_el$259, "style", _v$51, _p$.a));
8395
- _v$52 !== _p$.o && (_p$.o = _$setProp(_el$262, "style", _v$52, _p$.o));
8396
- _v$53 !== _p$.i && (_p$.i = _$setProp(_el$264, "style", _v$53, _p$.i));
8397
- _v$54 !== _p$.n && (_p$.n = _$setProp(_el$266, "style", _v$54, _p$.n));
8398
- _v$55 !== _p$.s && (_p$.s = _$setProp(_el$268, "style", _v$55, _p$.s));
8399
- _v$56 !== _p$.h && (_p$.h = _$setProp(_el$270, "style", _v$56, _p$.h));
8548
+ _v$49 !== _p$.e && (_p$.e = _$setProp(_el$261, "style", _v$49, _p$.e));
8549
+ _v$50 !== _p$.t && (_p$.t = _$setProp(_el$263, "style", _v$50, _p$.t));
8550
+ _v$51 !== _p$.a && (_p$.a = _$setProp(_el$265, "style", _v$51, _p$.a));
8551
+ _v$52 !== _p$.o && (_p$.o = _$setProp(_el$268, "style", _v$52, _p$.o));
8552
+ _v$53 !== _p$.i && (_p$.i = _$setProp(_el$270, "style", _v$53, _p$.i));
8553
+ _v$54 !== _p$.n && (_p$.n = _$setProp(_el$272, "style", _v$54, _p$.n));
8554
+ _v$55 !== _p$.s && (_p$.s = _$setProp(_el$274, "style", _v$55, _p$.s));
8555
+ _v$56 !== _p$.h && (_p$.h = _$setProp(_el$276, "style", _v$56, _p$.h));
8556
+ _v$57 !== _p$.r && (_p$.r = _$setProp(_el$278, "style", _v$57, _p$.r));
8557
+ _v$58 !== _p$.d && (_p$.d = _$setProp(_el$280, "style", _v$58, _p$.d));
8400
8558
  return _p$;
8401
8559
  }, {
8402
8560
  e: undefined,
@@ -8406,120 +8564,122 @@ function LoopDashboard(props) {
8406
8564
  i: undefined,
8407
8565
  n: undefined,
8408
8566
  s: undefined,
8409
- h: undefined
8567
+ h: undefined,
8568
+ r: undefined,
8569
+ d: undefined
8410
8570
  });
8411
- return _el$253;
8571
+ return _el$259;
8412
8572
  })();
8413
8573
  },
8414
8574
  get children() {
8415
- var _el$45 = _$createElement("scrollbox");
8416
- _$insert(_el$45, _$createComponent(For, {
8575
+ var _el$44 = _$createElement("scrollbox");
8576
+ _$insert(_el$44, _$createComponent(For, {
8417
8577
  get each() {
8418
8578
  return ownerCommands();
8419
8579
  },
8420
8580
  children: (cmd, i) => {
8421
8581
  const isActive = () => i() === cmdSelected();
8422
8582
  return (() => {
8423
- var _el$272 = _$createElement("box"), _el$273 = _$createElement("text"), _el$274 = _$createElement("span"), _el$275 = _$createElement("span"), _el$277 = _$createElement("span"), _el$279 = _$createElement("span"), _el$280 = _$createElement("span"), _el$282 = _$createElement("span"), _el$283 = _$createElement("span"), _el$284 = _$createTextNode(` \u2502 `);
8424
- _$insertNode(_el$272, _el$273);
8425
- _$setProp(_el$272, "flexDirection", "row");
8426
- _$setProp(_el$272, "paddingLeft", 1);
8427
- _$setProp(_el$272, "paddingRight", 1);
8428
- _$insertNode(_el$273, _el$274);
8429
- _$insertNode(_el$273, _el$275);
8430
- _$insertNode(_el$273, _el$277);
8431
- _$insertNode(_el$273, _el$279);
8432
- _$insertNode(_el$273, _el$280);
8433
- _$insertNode(_el$273, _el$282);
8434
- _$insertNode(_el$273, _el$283);
8435
- _$setProp(_el$273, "wrapMode", "none");
8436
- _$setProp(_el$273, "truncate", true);
8437
- _$insert(_el$274, (() => {
8438
- var _c$21 = _$memo(() => !!isActive());
8439
- return () => _c$21() ? `\u25B6 ${commandStatusIcon(cmd.status)} ${cmd.title}` : ` ${commandStatusIcon(cmd.status)} ${cmd.title}`;
8583
+ var _el$282 = _$createElement("box"), _el$283 = _$createElement("text"), _el$284 = _$createElement("span"), _el$285 = _$createElement("span"), _el$287 = _$createElement("span"), _el$289 = _$createElement("span"), _el$290 = _$createElement("span"), _el$292 = _$createElement("span"), _el$293 = _$createElement("span"), _el$294 = _$createTextNode(` \u2502 `);
8584
+ _$insertNode(_el$282, _el$283);
8585
+ _$setProp(_el$282, "flexDirection", "row");
8586
+ _$setProp(_el$282, "paddingLeft", 1);
8587
+ _$setProp(_el$282, "paddingRight", 1);
8588
+ _$insertNode(_el$283, _el$284);
8589
+ _$insertNode(_el$283, _el$285);
8590
+ _$insertNode(_el$283, _el$287);
8591
+ _$insertNode(_el$283, _el$289);
8592
+ _$insertNode(_el$283, _el$290);
8593
+ _$insertNode(_el$283, _el$292);
8594
+ _$insertNode(_el$283, _el$293);
8595
+ _$setProp(_el$283, "wrapMode", "none");
8596
+ _$setProp(_el$283, "truncate", true);
8597
+ _$insert(_el$284, (() => {
8598
+ var _c$23 = _$memo(() => !!isActive());
8599
+ return () => _c$23() ? `\u25B6 ${commandStatusIcon(cmd.status)} ${cmd.title}` : ` ${commandStatusIcon(cmd.status)} ${cmd.title}`;
8440
8600
  })());
8441
- _$insertNode(_el$275, _$createTextNode(` \u2502 `));
8442
- _$insertNode(_el$277, _$createTextNode(`Cmd `));
8443
- _$insert(_el$279, () => commandStatusLabel(cmd.status).short);
8444
- _$insertNode(_el$280, _$createTextNode(` \u2502 `));
8445
- _$insert(_el$282, () => cmd.command);
8446
- _$insert(_el$273, (() => {
8447
- var _c$22 = _$memo(() => cmd.args.length > 0);
8448
- return () => _c$22() && (() => {
8449
- var _el$285 = _$createElement("span"), _el$286 = _$createTextNode(` `);
8450
- _$insertNode(_el$285, _el$286);
8451
- _$insert(_el$285, () => cmd.args.join(" ").slice(0, 40), null);
8452
- _$effect((_$p) => _$setProp(_el$285, "style", {
8601
+ _$insertNode(_el$285, _$createTextNode(` \u2502 `));
8602
+ _$insertNode(_el$287, _$createTextNode(`Cmd `));
8603
+ _$insert(_el$289, () => commandStatusLabel(cmd.status).short);
8604
+ _$insertNode(_el$290, _$createTextNode(` \u2502 `));
8605
+ _$insert(_el$292, () => cmd.command);
8606
+ _$insert(_el$283, (() => {
8607
+ var _c$24 = _$memo(() => cmd.args.length > 0);
8608
+ return () => _c$24() && (() => {
8609
+ var _el$295 = _$createElement("span"), _el$296 = _$createTextNode(` `);
8610
+ _$insertNode(_el$295, _el$296);
8611
+ _$insert(_el$295, () => cmd.args.join(" ").slice(0, 40), null);
8612
+ _$effect((_$p) => _$setProp(_el$295, "style", {
8453
8613
  fg: theme().textMuted
8454
8614
  }, _$p));
8455
- return _el$285;
8615
+ return _el$295;
8456
8616
  })();
8457
- })(), _el$283);
8458
- _$insert(_el$273, (() => {
8459
- var _c$23 = _$memo(() => cmd.exitCode !== undefined);
8460
- return () => _c$23() && (() => {
8461
- var _el$287 = _$createElement("span"), _el$288 = _$createTextNode(` \u2502 exit `);
8462
- _$insertNode(_el$287, _el$288);
8463
- _$insert(_el$287, () => cmd.exitCode, null);
8464
- _$effect((_$p) => _$setProp(_el$287, "style", {
8617
+ })(), _el$293);
8618
+ _$insert(_el$283, (() => {
8619
+ var _c$25 = _$memo(() => cmd.exitCode !== undefined);
8620
+ return () => _c$25() && (() => {
8621
+ var _el$297 = _$createElement("span"), _el$298 = _$createTextNode(` \u2502 exit `);
8622
+ _$insertNode(_el$297, _el$298);
8623
+ _$insert(_el$297, () => cmd.exitCode, null);
8624
+ _$effect((_$p) => _$setProp(_el$297, "style", {
8465
8625
  fg: cmd.exitCode === 0 ? theme().success : theme().error
8466
8626
  }, _$p));
8467
- return _el$287;
8627
+ return _el$297;
8468
8628
  })();
8469
- })(), _el$283);
8470
- _$insert(_el$273, (() => {
8471
- var _c$24 = _$memo(() => !!cmd.signal);
8472
- return () => _c$24() && (() => {
8473
- var _el$289 = _$createElement("span"), _el$290 = _$createTextNode(` \u2502 `);
8474
- _$insertNode(_el$289, _el$290);
8475
- _$insert(_el$289, () => cmd.signal, null);
8476
- _$effect((_$p) => _$setProp(_el$289, "style", {
8629
+ })(), _el$293);
8630
+ _$insert(_el$283, (() => {
8631
+ var _c$26 = _$memo(() => !!cmd.signal);
8632
+ return () => _c$26() && (() => {
8633
+ var _el$299 = _$createElement("span"), _el$300 = _$createTextNode(` \u2502 `);
8634
+ _$insertNode(_el$299, _el$300);
8635
+ _$insert(_el$299, () => cmd.signal, null);
8636
+ _$effect((_$p) => _$setProp(_el$299, "style", {
8477
8637
  fg: theme().warning
8478
8638
  }, _$p));
8479
- return _el$289;
8639
+ return _el$299;
8480
8640
  })();
8481
- })(), _el$283);
8482
- _$insertNode(_el$283, _el$284);
8483
- _$insert(_el$283, () => ageLabel(cmd.updatedAt, clock()), null);
8484
- _$insert(_el$273, (() => {
8485
- var _c$25 = _$memo(() => !!cmd.truncated);
8486
- return () => _c$25() && (() => {
8487
- var _el$291 = _$createElement("span");
8488
- _$insertNode(_el$291, _$createTextNode(` \u2502 \u26A0 truncated`));
8489
- _$effect((_$p) => _$setProp(_el$291, "style", {
8641
+ })(), _el$293);
8642
+ _$insertNode(_el$293, _el$294);
8643
+ _$insert(_el$293, () => ageLabel(cmd.updatedAt, clock()), null);
8644
+ _$insert(_el$283, (() => {
8645
+ var _c$27 = _$memo(() => !!cmd.truncated);
8646
+ return () => _c$27() && (() => {
8647
+ var _el$301 = _$createElement("span");
8648
+ _$insertNode(_el$301, _$createTextNode(` \u2502 \u26A0 truncated`));
8649
+ _$effect((_$p) => _$setProp(_el$301, "style", {
8490
8650
  fg: theme().warning,
8491
8651
  bold: true
8492
8652
  }, _$p));
8493
- return _el$291;
8653
+ return _el$301;
8494
8654
  })();
8495
8655
  })(), null);
8496
8656
  _$effect((_p$) => {
8497
- var _v$57 = isActive() ? theme().backgroundElement : undefined, _v$58 = {
8657
+ var _v$59 = isActive() ? theme().backgroundElement : undefined, _v$60 = {
8498
8658
  fg: commandStatusColor(cmd.status, theme()),
8499
8659
  bold: isActive()
8500
- }, _v$59 = {
8660
+ }, _v$61 = {
8501
8661
  fg: theme().textMuted
8502
- }, _v$60 = {
8662
+ }, _v$62 = {
8503
8663
  fg: theme().textMuted
8504
- }, _v$61 = {
8664
+ }, _v$63 = {
8505
8665
  fg: commandStatusColor(cmd.status, theme()),
8506
8666
  bold: true
8507
- }, _v$62 = {
8667
+ }, _v$64 = {
8508
8668
  fg: theme().textMuted
8509
- }, _v$63 = {
8669
+ }, _v$65 = {
8510
8670
  fg: theme().accent,
8511
8671
  bold: true
8512
- }, _v$64 = {
8672
+ }, _v$66 = {
8513
8673
  fg: theme().textMuted
8514
8674
  };
8515
- _v$57 !== _p$.e && (_p$.e = _$setProp(_el$272, "backgroundColor", _v$57, _p$.e));
8516
- _v$58 !== _p$.t && (_p$.t = _$setProp(_el$274, "style", _v$58, _p$.t));
8517
- _v$59 !== _p$.a && (_p$.a = _$setProp(_el$275, "style", _v$59, _p$.a));
8518
- _v$60 !== _p$.o && (_p$.o = _$setProp(_el$277, "style", _v$60, _p$.o));
8519
- _v$61 !== _p$.i && (_p$.i = _$setProp(_el$279, "style", _v$61, _p$.i));
8520
- _v$62 !== _p$.n && (_p$.n = _$setProp(_el$280, "style", _v$62, _p$.n));
8521
- _v$63 !== _p$.s && (_p$.s = _$setProp(_el$282, "style", _v$63, _p$.s));
8522
- _v$64 !== _p$.h && (_p$.h = _$setProp(_el$283, "style", _v$64, _p$.h));
8675
+ _v$59 !== _p$.e && (_p$.e = _$setProp(_el$282, "backgroundColor", _v$59, _p$.e));
8676
+ _v$60 !== _p$.t && (_p$.t = _$setProp(_el$284, "style", _v$60, _p$.t));
8677
+ _v$61 !== _p$.a && (_p$.a = _$setProp(_el$285, "style", _v$61, _p$.a));
8678
+ _v$62 !== _p$.o && (_p$.o = _$setProp(_el$287, "style", _v$62, _p$.o));
8679
+ _v$63 !== _p$.i && (_p$.i = _$setProp(_el$289, "style", _v$63, _p$.i));
8680
+ _v$64 !== _p$.n && (_p$.n = _$setProp(_el$290, "style", _v$64, _p$.n));
8681
+ _v$65 !== _p$.s && (_p$.s = _$setProp(_el$292, "style", _v$65, _p$.s));
8682
+ _v$66 !== _p$.h && (_p$.h = _$setProp(_el$293, "style", _v$66, _p$.h));
8523
8683
  return _p$;
8524
8684
  }, {
8525
8685
  e: undefined,
@@ -8531,175 +8691,175 @@ function LoopDashboard(props) {
8531
8691
  s: undefined,
8532
8692
  h: undefined
8533
8693
  });
8534
- return _el$272;
8694
+ return _el$282;
8535
8695
  })();
8536
8696
  }
8537
8697
  }));
8538
- _$effect((_$p) => _$setProp(_el$45, "height", Math.min(ownerCommands().length, 10), _$p));
8539
- return _el$45;
8698
+ _$effect((_$p) => _$setProp(_el$44, "height", Math.min(ownerCommands().length, 10), _$p));
8699
+ return _el$44;
8540
8700
  }
8541
8701
  }), _$createComponent(Show, {
8542
8702
  get when() {
8543
8703
  return selectedCommand();
8544
8704
  },
8545
8705
  children: (cmd) => (() => {
8546
- var _el$293 = _$createElement("box"), _el$294 = _$createElement("text"), _el$295 = _$createElement("span"), _el$296 = _$createTextNode(` `), _el$297 = _$createElement("span"), _el$299 = _$createElement("span"), _el$300 = _$createTextNode(` \u2014 `), _el$301 = _$createTextNode(`
8547
- `), _el$302 = _$createElement("span"), _el$304 = _$createElement("span"), _el$305 = _$createTextNode(`
8548
- `), _el$306 = _$createElement("span"), _el$308 = _$createElement("span"), _el$310 = _$createElement("span"), _el$311 = _$createTextNode(`
8549
- `), _el$312 = _$createElement("span"), _el$314 = _$createElement("span"), _el$316 = _$createElement("span"), _el$317 = _$createTextNode(` bytes`), _el$318 = _$createElement("span"), _el$319 = _$createTextNode(` \u2502 updated `), _el$320 = _$createTextNode(`
8550
- `), _el$321 = _$createElement("span");
8551
- _$insertNode(_el$293, _el$294);
8552
- _$setProp(_el$293, "flexDirection", "column");
8553
- _$setProp(_el$293, "border", true);
8554
- _$setProp(_el$293, "padding", 1);
8555
- _$setProp(_el$293, "flexShrink", 0);
8556
- _$setProp(_el$293, "maxHeight", 8);
8557
- _$insertNode(_el$294, _el$295);
8558
- _$insertNode(_el$294, _el$297);
8559
- _$insertNode(_el$294, _el$299);
8560
- _$insertNode(_el$294, _el$301);
8561
- _$insertNode(_el$294, _el$302);
8562
- _$insertNode(_el$294, _el$304);
8563
- _$insertNode(_el$294, _el$305);
8564
- _$insertNode(_el$294, _el$306);
8565
- _$insertNode(_el$294, _el$308);
8566
- _$insertNode(_el$294, _el$310);
8567
- _$insertNode(_el$294, _el$311);
8568
- _$insertNode(_el$294, _el$312);
8569
- _$insertNode(_el$294, _el$314);
8570
- _$insertNode(_el$294, _el$316);
8571
- _$insertNode(_el$294, _el$318);
8572
- _$insertNode(_el$294, _el$320);
8573
- _$insertNode(_el$294, _el$321);
8574
- _$insertNode(_el$295, _el$296);
8575
- _$insert(_el$295, () => commandStatusIcon(cmd().status), _el$296);
8576
- _$insert(_el$295, () => cmd().title, null);
8577
- _$insertNode(_el$297, _$createTextNode(` Cmd `));
8578
- _$insertNode(_el$299, _el$300);
8579
- _$insert(_el$299, () => commandStatusLabel(cmd().status).short, _el$300);
8580
- _$insert(_el$299, () => commandStatusLabel(cmd().status).hint, null);
8581
- _$insertNode(_el$302, _$createTextNode(`\u2B22 Spawn: `));
8582
- _$insert(_el$304, () => cmd().command);
8583
- _$insert(_el$294, (() => {
8584
- var _c$26 = _$memo(() => cmd().args.length > 0);
8585
- return () => _c$26() && (() => {
8586
- var _el$323 = _$createElement("span"), _el$324 = _$createTextNode(` `);
8587
- _$insertNode(_el$323, _el$324);
8588
- _$insert(_el$323, () => cmd().args.join(" "), null);
8589
- _$effect((_$p) => _$setProp(_el$323, "style", {
8706
+ var _el$303 = _$createElement("box"), _el$304 = _$createElement("text"), _el$305 = _$createElement("span"), _el$306 = _$createTextNode(` `), _el$307 = _$createElement("span"), _el$309 = _$createElement("span"), _el$310 = _$createTextNode(` \u2014 `), _el$311 = _$createTextNode(`
8707
+ `), _el$312 = _$createElement("span"), _el$314 = _$createElement("span"), _el$315 = _$createTextNode(`
8708
+ `), _el$316 = _$createElement("span"), _el$318 = _$createElement("span"), _el$320 = _$createElement("span"), _el$321 = _$createTextNode(`
8709
+ `), _el$322 = _$createElement("span"), _el$324 = _$createElement("span"), _el$326 = _$createElement("span"), _el$327 = _$createTextNode(` bytes`), _el$328 = _$createElement("span"), _el$329 = _$createTextNode(` \u2502 updated `), _el$330 = _$createTextNode(`
8710
+ `), _el$331 = _$createElement("span");
8711
+ _$insertNode(_el$303, _el$304);
8712
+ _$setProp(_el$303, "flexDirection", "column");
8713
+ _$setProp(_el$303, "border", true);
8714
+ _$setProp(_el$303, "padding", 1);
8715
+ _$setProp(_el$303, "flexShrink", 0);
8716
+ _$setProp(_el$303, "maxHeight", 8);
8717
+ _$insertNode(_el$304, _el$305);
8718
+ _$insertNode(_el$304, _el$307);
8719
+ _$insertNode(_el$304, _el$309);
8720
+ _$insertNode(_el$304, _el$311);
8721
+ _$insertNode(_el$304, _el$312);
8722
+ _$insertNode(_el$304, _el$314);
8723
+ _$insertNode(_el$304, _el$315);
8724
+ _$insertNode(_el$304, _el$316);
8725
+ _$insertNode(_el$304, _el$318);
8726
+ _$insertNode(_el$304, _el$320);
8727
+ _$insertNode(_el$304, _el$321);
8728
+ _$insertNode(_el$304, _el$322);
8729
+ _$insertNode(_el$304, _el$324);
8730
+ _$insertNode(_el$304, _el$326);
8731
+ _$insertNode(_el$304, _el$328);
8732
+ _$insertNode(_el$304, _el$330);
8733
+ _$insertNode(_el$304, _el$331);
8734
+ _$insertNode(_el$305, _el$306);
8735
+ _$insert(_el$305, () => commandStatusIcon(cmd().status), _el$306);
8736
+ _$insert(_el$305, () => cmd().title, null);
8737
+ _$insertNode(_el$307, _$createTextNode(` Cmd `));
8738
+ _$insertNode(_el$309, _el$310);
8739
+ _$insert(_el$309, () => commandStatusLabel(cmd().status).short, _el$310);
8740
+ _$insert(_el$309, () => commandStatusLabel(cmd().status).hint, null);
8741
+ _$insertNode(_el$312, _$createTextNode(`\u2B22 Spawn: `));
8742
+ _$insert(_el$314, () => cmd().command);
8743
+ _$insert(_el$304, (() => {
8744
+ var _c$28 = _$memo(() => cmd().args.length > 0);
8745
+ return () => _c$28() && (() => {
8746
+ var _el$333 = _$createElement("span"), _el$334 = _$createTextNode(` `);
8747
+ _$insertNode(_el$333, _el$334);
8748
+ _$insert(_el$333, () => cmd().args.join(" "), null);
8749
+ _$effect((_$p) => _$setProp(_el$333, "style", {
8590
8750
  fg: theme().text
8591
8751
  }, _$p));
8592
- return _el$323;
8752
+ return _el$333;
8593
8753
  })();
8594
- })(), _el$305);
8595
- _$insertNode(_el$306, _$createTextNode(`\uD83D\uDCC1 `));
8596
- _$insertNode(_el$308, _$createTextNode(`Cwd: `));
8597
- _$insert(_el$310, () => cmd().cwd.replace(String(props.directory), "."));
8598
- _$insert(_el$294, (() => {
8599
- var _c$27 = _$memo(() => !!cmd().goalID);
8600
- return () => _c$27() && [(() => {
8601
- var _el$325 = _$createElement("span");
8602
- _$insertNode(_el$325, _$createTextNode(` \u2502 \uD83D\uDD17 linked goal `));
8603
- _$effect((_$p) => _$setProp(_el$325, "style", {
8754
+ })(), _el$315);
8755
+ _$insertNode(_el$316, _$createTextNode(`\uD83D\uDCC1 `));
8756
+ _$insertNode(_el$318, _$createTextNode(`Cwd: `));
8757
+ _$insert(_el$320, () => cmd().cwd.replace(String(props.directory), "."));
8758
+ _$insert(_el$304, (() => {
8759
+ var _c$29 = _$memo(() => !!cmd().goalID);
8760
+ return () => _c$29() && [(() => {
8761
+ var _el$335 = _$createElement("span");
8762
+ _$insertNode(_el$335, _$createTextNode(` \u2502 \uD83D\uDD17 linked goal `));
8763
+ _$effect((_$p) => _$setProp(_el$335, "style", {
8604
8764
  fg: theme().textMuted
8605
8765
  }, _$p));
8606
- return _el$325;
8766
+ return _el$335;
8607
8767
  })(), (() => {
8608
- var _el$327 = _$createElement("span");
8609
- _$insert(_el$327, () => cmd().goalID.slice(0, 8));
8610
- _$effect((_$p) => _$setProp(_el$327, "style", {
8768
+ var _el$337 = _$createElement("span");
8769
+ _$insert(_el$337, () => cmd().goalID.slice(0, 8));
8770
+ _$effect((_$p) => _$setProp(_el$337, "style", {
8611
8771
  fg: theme().text
8612
8772
  }, _$p));
8613
- return _el$327;
8773
+ return _el$337;
8614
8774
  })()];
8615
- })(), _el$311);
8616
- _$insertNode(_el$312, _$createTextNode(`\uD83D\uDCBE `));
8617
- _$insertNode(_el$314, _$createTextNode(`Output: `));
8618
- _$insertNode(_el$316, _el$317);
8619
- _$insert(_el$316, () => cmd().outputBytes, _el$317);
8620
- _$insert(_el$294, (() => {
8621
- var _c$28 = _$memo(() => !!cmd().truncated);
8622
- return () => _c$28() && (() => {
8623
- var _el$328 = _$createElement("span");
8624
- _$insertNode(_el$328, _$createTextNode(` \xB7 \u26A0 truncated`));
8625
- _$effect((_$p) => _$setProp(_el$328, "style", {
8775
+ })(), _el$321);
8776
+ _$insertNode(_el$322, _$createTextNode(`\uD83D\uDCBE `));
8777
+ _$insertNode(_el$324, _$createTextNode(`Output: `));
8778
+ _$insertNode(_el$326, _el$327);
8779
+ _$insert(_el$326, () => cmd().outputBytes, _el$327);
8780
+ _$insert(_el$304, (() => {
8781
+ var _c$30 = _$memo(() => !!cmd().truncated);
8782
+ return () => _c$30() && (() => {
8783
+ var _el$338 = _$createElement("span");
8784
+ _$insertNode(_el$338, _$createTextNode(` \xB7 \u26A0 truncated`));
8785
+ _$effect((_$p) => _$setProp(_el$338, "style", {
8626
8786
  fg: theme().warning,
8627
8787
  bold: true
8628
8788
  }, _$p));
8629
- return _el$328;
8789
+ return _el$338;
8630
8790
  })();
8631
- })(), _el$318);
8632
- _$insertNode(_el$318, _el$319);
8633
- _$insert(_el$318, () => ageLabel(cmd().updatedAt, clock()), null);
8634
- _$insert(_el$294, (() => {
8635
- var _c$29 = _$memo(() => !!cmd().lastError);
8636
- return () => _c$29() && [(() => {
8637
- var _el$330 = _$createElement("span"), _el$331 = _$createTextNode(`
8791
+ })(), _el$328);
8792
+ _$insertNode(_el$328, _el$329);
8793
+ _$insert(_el$328, () => ageLabel(cmd().updatedAt, clock()), null);
8794
+ _$insert(_el$304, (() => {
8795
+ var _c$31 = _$memo(() => !!cmd().lastError);
8796
+ return () => _c$31() && [(() => {
8797
+ var _el$340 = _$createElement("span"), _el$341 = _$createTextNode(`
8638
8798
  \u26A0 Error: `);
8639
- _$insertNode(_el$330, _el$331);
8640
- _$effect((_$p) => _$setProp(_el$330, "style", {
8799
+ _$insertNode(_el$340, _el$341);
8800
+ _$effect((_$p) => _$setProp(_el$340, "style", {
8641
8801
  fg: theme().error,
8642
8802
  bold: true
8643
8803
  }, _$p));
8644
- return _el$330;
8804
+ return _el$340;
8645
8805
  })(), (() => {
8646
- var _el$333 = _$createElement("span");
8647
- _$insert(_el$333, () => cmd().lastError.slice(0, 120));
8648
- _$effect((_$p) => _$setProp(_el$333, "style", {
8806
+ var _el$343 = _$createElement("span");
8807
+ _$insert(_el$343, () => cmd().lastError.slice(0, 120));
8808
+ _$effect((_$p) => _$setProp(_el$343, "style", {
8649
8809
  fg: theme().error
8650
8810
  }, _$p));
8651
- return _el$333;
8811
+ return _el$343;
8652
8812
  })()];
8653
- })(), _el$320);
8654
- _$insertNode(_el$321, _$createTextNode(`o fullscreen \xB7 :interrupt :terminate :remove \xB7 text + Enter writes stdin`));
8813
+ })(), _el$330);
8814
+ _$insertNode(_el$331, _$createTextNode(`o fullscreen \xB7 X kill \xB7 R restart \xB7 x remove-done \xB7 :interrupt :terminate :remove \xB7 text + Enter writes stdin`));
8655
8815
  _$effect((_p$) => {
8656
- var _v$65 = commandBorderColor(cmd().status, theme()), _v$66 = {
8816
+ var _v$67 = commandBorderColor(cmd().status, theme()), _v$68 = {
8657
8817
  fg: commandStatusColor(cmd().status, theme()),
8658
8818
  bold: true
8659
- }, _v$67 = {
8819
+ }, _v$69 = {
8660
8820
  fg: theme().textMuted
8661
- }, _v$68 = {
8821
+ }, _v$70 = {
8662
8822
  fg: commandStatusColor(cmd().status, theme())
8663
- }, _v$69 = {
8823
+ }, _v$71 = {
8664
8824
  fg: theme().primary,
8665
8825
  bold: true
8666
- }, _v$70 = {
8667
- fg: theme().accent,
8668
- bold: true
8669
- }, _v$71 = {
8670
- fg: theme().textMuted
8671
8826
  }, _v$72 = {
8672
8827
  fg: theme().accent,
8673
8828
  bold: true
8674
8829
  }, _v$73 = {
8675
8830
  fg: theme().textMuted
8676
8831
  }, _v$74 = {
8677
- fg: theme().warning,
8832
+ fg: theme().accent,
8678
8833
  bold: true
8679
8834
  }, _v$75 = {
8835
+ fg: theme().textMuted
8836
+ }, _v$76 = {
8680
8837
  fg: theme().warning,
8681
8838
  bold: true
8682
- }, _v$76 = {
8683
- fg: theme().text
8684
8839
  }, _v$77 = {
8685
- fg: theme().textMuted
8840
+ fg: theme().warning,
8841
+ bold: true
8686
8842
  }, _v$78 = {
8843
+ fg: theme().text
8844
+ }, _v$79 = {
8845
+ fg: theme().textMuted
8846
+ }, _v$80 = {
8687
8847
  fg: theme().textMuted
8688
8848
  };
8689
- _v$65 !== _p$.e && (_p$.e = _$setProp(_el$293, "borderColor", _v$65, _p$.e));
8690
- _v$66 !== _p$.t && (_p$.t = _$setProp(_el$295, "style", _v$66, _p$.t));
8691
- _v$67 !== _p$.a && (_p$.a = _$setProp(_el$297, "style", _v$67, _p$.a));
8692
- _v$68 !== _p$.o && (_p$.o = _$setProp(_el$299, "style", _v$68, _p$.o));
8693
- _v$69 !== _p$.i && (_p$.i = _$setProp(_el$302, "style", _v$69, _p$.i));
8694
- _v$70 !== _p$.n && (_p$.n = _$setProp(_el$304, "style", _v$70, _p$.n));
8695
- _v$71 !== _p$.s && (_p$.s = _$setProp(_el$306, "style", _v$71, _p$.s));
8696
- _v$72 !== _p$.h && (_p$.h = _$setProp(_el$308, "style", _v$72, _p$.h));
8697
- _v$73 !== _p$.r && (_p$.r = _$setProp(_el$310, "style", _v$73, _p$.r));
8698
- _v$74 !== _p$.d && (_p$.d = _$setProp(_el$312, "style", _v$74, _p$.d));
8699
- _v$75 !== _p$.l && (_p$.l = _$setProp(_el$314, "style", _v$75, _p$.l));
8700
- _v$76 !== _p$.u && (_p$.u = _$setProp(_el$316, "style", _v$76, _p$.u));
8701
- _v$77 !== _p$.c && (_p$.c = _$setProp(_el$318, "style", _v$77, _p$.c));
8702
- _v$78 !== _p$.w && (_p$.w = _$setProp(_el$321, "style", _v$78, _p$.w));
8849
+ _v$67 !== _p$.e && (_p$.e = _$setProp(_el$303, "borderColor", _v$67, _p$.e));
8850
+ _v$68 !== _p$.t && (_p$.t = _$setProp(_el$305, "style", _v$68, _p$.t));
8851
+ _v$69 !== _p$.a && (_p$.a = _$setProp(_el$307, "style", _v$69, _p$.a));
8852
+ _v$70 !== _p$.o && (_p$.o = _$setProp(_el$309, "style", _v$70, _p$.o));
8853
+ _v$71 !== _p$.i && (_p$.i = _$setProp(_el$312, "style", _v$71, _p$.i));
8854
+ _v$72 !== _p$.n && (_p$.n = _$setProp(_el$314, "style", _v$72, _p$.n));
8855
+ _v$73 !== _p$.s && (_p$.s = _$setProp(_el$316, "style", _v$73, _p$.s));
8856
+ _v$74 !== _p$.h && (_p$.h = _$setProp(_el$318, "style", _v$74, _p$.h));
8857
+ _v$75 !== _p$.r && (_p$.r = _$setProp(_el$320, "style", _v$75, _p$.r));
8858
+ _v$76 !== _p$.d && (_p$.d = _$setProp(_el$322, "style", _v$76, _p$.d));
8859
+ _v$77 !== _p$.l && (_p$.l = _$setProp(_el$324, "style", _v$77, _p$.l));
8860
+ _v$78 !== _p$.u && (_p$.u = _$setProp(_el$326, "style", _v$78, _p$.u));
8861
+ _v$79 !== _p$.c && (_p$.c = _$setProp(_el$328, "style", _v$79, _p$.c));
8862
+ _v$80 !== _p$.w && (_p$.w = _$setProp(_el$331, "style", _v$80, _p$.w));
8703
8863
  return _p$;
8704
8864
  }, {
8705
8865
  e: undefined,
@@ -8717,7 +8877,7 @@ function LoopDashboard(props) {
8717
8877
  c: undefined,
8718
8878
  w: undefined
8719
8879
  });
8720
- return _el$293;
8880
+ return _el$303;
8721
8881
  })()
8722
8882
  })];
8723
8883
  }
@@ -8727,47 +8887,47 @@ function LoopDashboard(props) {
8727
8887
  return _$memo(() => !!showLogs())() && events().length > 0;
8728
8888
  },
8729
8889
  get children() {
8730
- var _el$46 = _$createElement("box"), _el$47 = _$createElement("text"), _el$48 = _$createElement("span"), _el$50 = _$createElement("span");
8890
+ var _el$45 = _$createElement("box"), _el$46 = _$createElement("text"), _el$47 = _$createElement("span"), _el$49 = _$createElement("span");
8891
+ _$insertNode(_el$45, _el$46);
8892
+ _$setProp(_el$45, "flexDirection", "column");
8893
+ _$setProp(_el$45, "border", true);
8894
+ _$setProp(_el$45, "padding", 1);
8895
+ _$setProp(_el$45, "maxHeight", 7);
8896
+ _$setProp(_el$45, "flexShrink", 0);
8897
+ _$setProp(_el$45, "overflow", "hidden");
8731
8898
  _$insertNode(_el$46, _el$47);
8732
- _$setProp(_el$46, "flexDirection", "column");
8733
- _$setProp(_el$46, "border", true);
8734
- _$setProp(_el$46, "padding", 1);
8735
- _$setProp(_el$46, "maxHeight", 7);
8736
- _$setProp(_el$46, "flexShrink", 0);
8737
- _$setProp(_el$46, "overflow", "hidden");
8738
- _$insertNode(_el$47, _el$48);
8739
- _$insertNode(_el$47, _el$50);
8740
- _$insertNode(_el$48, _$createTextNode(`\u25C8 Recent Events`));
8741
- _$insertNode(_el$50, _$createTextNode(` \u2014 :logs to hide`));
8742
- _$insert(_el$47, _$createComponent(For, {
8899
+ _$insertNode(_el$46, _el$49);
8900
+ _$insertNode(_el$47, _$createTextNode(`\u25C8 Recent Events`));
8901
+ _$insertNode(_el$49, _$createTextNode(` \u2014 :logs to hide`));
8902
+ _$insert(_el$46, _$createComponent(For, {
8743
8903
  get each() {
8744
8904
  return events().slice(-10);
8745
8905
  },
8746
8906
  children: (ev) => [`
8747
8907
  `, (() => {
8748
- var _el$334 = _$createElement("span");
8749
- _$insert(_el$334, () => String(ev.type));
8750
- _$effect((_$p) => _$setProp(_el$334, "style", {
8908
+ var _el$344 = _$createElement("span");
8909
+ _$insert(_el$344, () => String(ev.type));
8910
+ _$effect((_$p) => _$setProp(_el$344, "style", {
8751
8911
  fg: eventColor(String(ev.type), theme()),
8752
8912
  bold: true
8753
8913
  }, _$p));
8754
- return _el$334;
8914
+ return _el$344;
8755
8915
  })(), (() => {
8756
- var _el$335 = _$createElement("span"), _el$336 = _$createTextNode(` `);
8757
- _$insertNode(_el$335, _el$336);
8758
- _$insert(_el$335, () => ev.goalID?.slice(0, 8), null);
8759
- _$effect((_$p) => _$setProp(_el$335, "style", {
8916
+ var _el$345 = _$createElement("span"), _el$346 = _$createTextNode(` `);
8917
+ _$insertNode(_el$345, _el$346);
8918
+ _$insert(_el$345, () => ev.goalID?.slice(0, 8), null);
8919
+ _$effect((_$p) => _$setProp(_el$345, "style", {
8760
8920
  fg: theme().textMuted
8761
8921
  }, _$p));
8762
- return _el$335;
8922
+ return _el$345;
8763
8923
  })(), _$memo(() => _$memo(() => !!ev.summary)() && (() => {
8764
- var _el$337 = _$createElement("span"), _el$338 = _$createTextNode(` \u2014 `);
8765
- _$insertNode(_el$337, _el$338);
8766
- _$insert(_el$337, () => String(ev.summary).slice(0, 60), null);
8767
- _$effect((_$p) => _$setProp(_el$337, "style", {
8924
+ var _el$347 = _$createElement("span"), _el$348 = _$createTextNode(` \u2014 `);
8925
+ _$insertNode(_el$347, _el$348);
8926
+ _$insert(_el$347, () => String(ev.summary).slice(0, 60), null);
8927
+ _$effect((_$p) => _$setProp(_el$347, "style", {
8768
8928
  fg: theme().text
8769
8929
  }, _$p));
8770
- return _el$337;
8930
+ return _el$347;
8771
8931
  })())]
8772
8932
  }), null);
8773
8933
  _$effect((_p$) => {
@@ -8777,42 +8937,42 @@ function LoopDashboard(props) {
8777
8937
  }, _v$3 = {
8778
8938
  fg: theme().textMuted
8779
8939
  };
8780
- _v$ !== _p$.e && (_p$.e = _$setProp(_el$46, "borderColor", _v$, _p$.e));
8781
- _v$2 !== _p$.t && (_p$.t = _$setProp(_el$48, "style", _v$2, _p$.t));
8782
- _v$3 !== _p$.a && (_p$.a = _$setProp(_el$50, "style", _v$3, _p$.a));
8940
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$45, "borderColor", _v$, _p$.e));
8941
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$47, "style", _v$2, _p$.t));
8942
+ _v$3 !== _p$.a && (_p$.a = _$setProp(_el$49, "style", _v$3, _p$.a));
8783
8943
  return _p$;
8784
8944
  }, {
8785
8945
  e: undefined,
8786
8946
  t: undefined,
8787
8947
  a: undefined
8788
8948
  });
8789
- return _el$46;
8949
+ return _el$45;
8790
8950
  }
8791
8951
  }), null);
8952
+ _$insertNode(_el$51, _el$52);
8953
+ _$insertNode(_el$51, _el$54);
8954
+ _$setProp(_el$51, "flexDirection", "row");
8955
+ _$setProp(_el$51, "border", true);
8956
+ _$setProp(_el$51, "paddingLeft", 1);
8957
+ _$setProp(_el$51, "paddingRight", 1);
8958
+ _$setProp(_el$51, "flexShrink", 0);
8959
+ _$setProp(_el$51, "height", 3);
8960
+ _$setProp(_el$51, "gap", 1);
8792
8961
  _$insertNode(_el$52, _el$53);
8793
- _$insertNode(_el$52, _el$55);
8794
- _$setProp(_el$52, "flexDirection", "row");
8795
- _$setProp(_el$52, "border", true);
8796
- _$setProp(_el$52, "paddingLeft", 1);
8797
- _$setProp(_el$52, "paddingRight", 1);
8798
- _$setProp(_el$52, "flexShrink", 0);
8799
- _$setProp(_el$52, "height", 3);
8800
- _$setProp(_el$52, "gap", 1);
8801
- _$insertNode(_el$53, _el$54);
8802
- _$insert(_el$54, () => mode() === "insert" ? " INSERT \uE0B1" : " NORMAL ");
8962
+ _$insert(_el$53, () => mode() === "insert" ? " INSERT \uE0B1" : " NORMAL ");
8803
8963
  _$use((el) => {
8804
8964
  inputEl = el;
8805
8965
  focusInput();
8806
- }, _el$55);
8807
- _$setProp(_el$55, "flexGrow", 1);
8808
- _$setProp(_el$55, "onInput", (v) => {
8966
+ }, _el$54);
8967
+ _$setProp(_el$54, "flexGrow", 1);
8968
+ _$setProp(_el$54, "onInput", (v) => {
8809
8969
  debugLog("onInput", JSON.stringify(v), "mode", mode());
8810
8970
  if (mode() === "insert")
8811
8971
  setCommandInput(v);
8812
8972
  else if (inputEl?.value)
8813
8973
  inputEl.value = "";
8814
8974
  });
8815
- _$setProp(_el$55, "onKeyDown", (evt) => {
8975
+ _$setProp(_el$54, "onKeyDown", (evt) => {
8816
8976
  const name = evt.name || "";
8817
8977
  const seq = evt.sequence || "";
8818
8978
  debugLog("input onKeyDown", `name=${name} seq=${JSON.stringify(seq)} mode=${mode()} value=${JSON.stringify(commandInput())}`);
@@ -8885,13 +9045,13 @@ function LoopDashboard(props) {
8885
9045
  _v$16 !== _p$.m && (_p$.m = _$setProp(_el$29, "style", _v$16, _p$.m));
8886
9046
  _v$17 !== _p$.f && (_p$.f = _$setProp(_el$31, "style", _v$17, _p$.f));
8887
9047
  _v$18 !== _p$.y && (_p$.y = _$setProp(_el$33, "style", _v$18, _p$.y));
8888
- _v$19 !== _p$.g && (_p$.g = _$setProp(_el$52, "borderColor", _v$19, _p$.g));
8889
- _v$20 !== _p$.p && (_p$.p = _$setProp(_el$54, "style", _v$20, _p$.p));
8890
- _v$21 !== _p$.b && (_p$.b = _$setProp(_el$55, "placeholder", _v$21, _p$.b));
8891
- _v$22 !== _p$.T && (_p$.T = _$setProp(_el$55, "placeholderColor", _v$22, _p$.T));
8892
- _v$23 !== _p$.A && (_p$.A = _$setProp(_el$55, "cursorColor", _v$23, _p$.A));
8893
- _v$24 !== _p$.O && (_p$.O = _$setProp(_el$55, "focusedTextColor", _v$24, _p$.O));
8894
- _v$25 !== _p$.I && (_p$.I = _$setProp(_el$55, "focusedBackgroundColor", _v$25, _p$.I));
9048
+ _v$19 !== _p$.g && (_p$.g = _$setProp(_el$51, "borderColor", _v$19, _p$.g));
9049
+ _v$20 !== _p$.p && (_p$.p = _$setProp(_el$53, "style", _v$20, _p$.p));
9050
+ _v$21 !== _p$.b && (_p$.b = _$setProp(_el$54, "placeholder", _v$21, _p$.b));
9051
+ _v$22 !== _p$.T && (_p$.T = _$setProp(_el$54, "placeholderColor", _v$22, _p$.T));
9052
+ _v$23 !== _p$.A && (_p$.A = _$setProp(_el$54, "cursorColor", _v$23, _p$.A));
9053
+ _v$24 !== _p$.O && (_p$.O = _$setProp(_el$54, "focusedTextColor", _v$24, _p$.O));
9054
+ _v$25 !== _p$.I && (_p$.I = _$setProp(_el$54, "focusedBackgroundColor", _v$25, _p$.I));
8895
9055
  return _p$;
8896
9056
  }, {
8897
9057
  e: undefined,
@@ -9912,7 +10072,7 @@ function CommandPanel(props) {
9912
10072
  });
9913
10073
  const [insertMode, setInsertMode] = createSignal2(false);
9914
10074
  const [inputValue, setInputValue] = createSignal2("");
9915
- const [statusText, setStatusText] = createSignal2("commands: j/k move \xB7 o fullscreen \xB7 enter write-mode \xB7 ctrl-c interrupt \xB7 :terminate :remove :resize :await \xB7 q detach");
10075
+ const [statusText, setStatusText] = createSignal2("commands: j/k move \xB7 o fullscreen \xB7 enter write-mode \xB7 ctrl-c interrupt \xB7 X kill \xB7 R restart \xB7 x remove-done \xB7 :terminate :remove :resize :await \xB7 q detach");
9916
10076
  let inputEl;
9917
10077
  const client = createControlClient(props.directory);
9918
10078
  const ownerSessionID = props.ownerSessionID ?? routeOwnerSessionID(props.api);
@@ -10259,6 +10419,26 @@ function CommandPanel(props) {
10259
10419
  commandID: id
10260
10420
  }, id);
10261
10421
  }
10422
+ async function forceKill() {
10423
+ const id = selectedID();
10424
+ if (!id) {
10425
+ setStatusText("No command selected.");
10426
+ return;
10427
+ }
10428
+ await sendRaw("cmd_kill", {
10429
+ commandID: id
10430
+ }, id);
10431
+ }
10432
+ async function restart() {
10433
+ const id = selectedID();
10434
+ if (!id) {
10435
+ setStatusText("No command selected.");
10436
+ return;
10437
+ }
10438
+ await sendRaw("cmd_restart", {
10439
+ commandID: id
10440
+ }, id);
10441
+ }
10262
10442
  async function remove() {
10263
10443
  const id = selectedID();
10264
10444
  if (!id) {
@@ -10269,6 +10449,20 @@ function CommandPanel(props) {
10269
10449
  commandID: id
10270
10450
  }, id);
10271
10451
  }
10452
+ async function removeFinished() {
10453
+ const sel = state().selectedCommand;
10454
+ if (!sel) {
10455
+ setStatusText("No command selected.");
10456
+ return;
10457
+ }
10458
+ if (sel.status === "running") {
10459
+ setStatusText(`"${sel.title}" is still running \u2014 X force kill \xB7 :terminate graceful \xB7 q detach (keeps running).`);
10460
+ return;
10461
+ }
10462
+ await sendRaw("cmd_remove", {
10463
+ commandID: sel.id
10464
+ }, sel.id);
10465
+ }
10272
10466
  async function awaitExit(goalID) {
10273
10467
  const sel = state().selectedCommand;
10274
10468
  if (!sel) {
@@ -10340,6 +10534,12 @@ function CommandPanel(props) {
10340
10534
  case "terminate":
10341
10535
  await terminate();
10342
10536
  break;
10537
+ case "kill":
10538
+ await forceKill();
10539
+ break;
10540
+ case "restart":
10541
+ await restart();
10542
+ break;
10343
10543
  case "remove":
10344
10544
  await remove();
10345
10545
  break;
@@ -10363,7 +10563,7 @@ function CommandPanel(props) {
10363
10563
  await awaitExit(rest[0]);
10364
10564
  break;
10365
10565
  default:
10366
- setStatusText(`Unknown :${verb}. Try :new, :terminate, :remove, :interrupt, :resize, :open-cmd, :await <goalID>`);
10566
+ setStatusText(`Unknown :${verb}. Try :new, :terminate, :kill, :restart, :remove, :interrupt, :resize, :open-cmd, :await <goalID>`);
10367
10567
  }
10368
10568
  }
10369
10569
  function focusInput() {
@@ -10502,6 +10702,21 @@ function CommandPanel(props) {
10502
10702
  }
10503
10703
  return;
10504
10704
  }
10705
+ if (key === "X") {
10706
+ prevent2(evt);
10707
+ forceKill();
10708
+ return;
10709
+ }
10710
+ if (key === "R") {
10711
+ prevent2(evt);
10712
+ restart();
10713
+ return;
10714
+ }
10715
+ if (key === "x") {
10716
+ prevent2(evt);
10717
+ removeFinished();
10718
+ return;
10719
+ }
10505
10720
  if (key === "q") {
10506
10721
  prevent2(evt);
10507
10722
  if (props.onDetach)
@@ -10564,43 +10779,69 @@ function CommandPanel(props) {
10564
10779
  get each() {
10565
10780
  return state().commands;
10566
10781
  },
10567
- children: (cmd, i) => (() => {
10568
- var _el$17 = _$createElement2("box"), _el$18 = _$createElement2("text"), _el$19 = _$createElement2("span"), _el$20 = _$createElement2("span"), _el$21 = _$createTextNode2(` \u2502 `), _el$22 = _$createTextNode2(` \u2502 `);
10569
- _$insertNode2(_el$17, _el$18);
10570
- _$setProp2(_el$17, "paddingLeft", 1);
10571
- _$setProp2(_el$17, "paddingRight", 1);
10572
- _$insertNode2(_el$18, _el$19);
10573
- _$insertNode2(_el$18, _el$20);
10574
- _$setProp2(_el$18, "wrapMode", "none");
10575
- _$setProp2(_el$18, "truncate", true);
10576
- _$insert2(_el$19, () => i() === state().selected ? "\u25B6 " : " ", null);
10577
- _$insert2(_el$19, () => cmd.title, null);
10578
- _$insertNode2(_el$20, _el$21);
10579
- _$insertNode2(_el$20, _el$22);
10580
- _$insert2(_el$20, () => [cmd.command, ...cmd.args].join(" ").slice(0, 60), _el$22);
10581
- _$insert2(_el$20, () => cmd.status, null);
10582
- _$insert2(_el$20, (() => {
10583
- var _c$ = _$memo2(() => cmd.exitCode !== undefined);
10584
- return () => _c$() ? ` (${cmd.exitCode})` : "";
10585
- })(), null);
10586
- _$effect2((_p$) => {
10587
- var _v$10 = i() === state().selected ? theme().backgroundElement : undefined, _v$11 = {
10588
- fg: cmd.status === "running" ? theme().success : theme().textMuted,
10589
- bold: i() === state().selected
10590
- }, _v$12 = {
10591
- fg: theme().textMuted
10592
- };
10593
- _v$10 !== _p$.e && (_p$.e = _$setProp2(_el$17, "backgroundColor", _v$10, _p$.e));
10594
- _v$11 !== _p$.t && (_p$.t = _$setProp2(_el$19, "style", _v$11, _p$.t));
10595
- _v$12 !== _p$.a && (_p$.a = _$setProp2(_el$20, "style", _v$12, _p$.a));
10596
- return _p$;
10597
- }, {
10598
- e: undefined,
10599
- t: undefined,
10600
- a: undefined
10601
- });
10602
- return _el$17;
10603
- })()
10782
+ children: (cmd, i) => {
10783
+ const badge = watchBadge(cmd);
10784
+ const badgeWarn = badge === "flood-suspended" || badge === "budget-exhausted";
10785
+ const badgeHot = badge === "until-matched";
10786
+ const terminalReason = cmd.status !== "running" ? cmd.endReason : undefined;
10787
+ return (() => {
10788
+ var _el$17 = _$createElement2("box"), _el$18 = _$createElement2("text"), _el$19 = _$createElement2("span"), _el$20 = _$createElement2("span"), _el$21 = _$createTextNode2(` \u2502 `), _el$22 = _$createTextNode2(` \u2502 `);
10789
+ _$insertNode2(_el$17, _el$18);
10790
+ _$setProp2(_el$17, "paddingLeft", 1);
10791
+ _$setProp2(_el$17, "paddingRight", 1);
10792
+ _$insertNode2(_el$18, _el$19);
10793
+ _$insertNode2(_el$18, _el$20);
10794
+ _$setProp2(_el$18, "wrapMode", "none");
10795
+ _$setProp2(_el$18, "truncate", true);
10796
+ _$insert2(_el$19, () => i() === state().selected ? "\u25B6 " : " ", null);
10797
+ _$insert2(_el$19, () => cmd.title, null);
10798
+ _$insertNode2(_el$20, _el$21);
10799
+ _$insertNode2(_el$20, _el$22);
10800
+ _$insert2(_el$20, () => [cmd.command, ...cmd.args].join(" ").slice(0, 60), _el$22);
10801
+ _$insert2(_el$20, () => cmd.status, null);
10802
+ _$insert2(_el$20, (() => {
10803
+ var _c$ = _$memo2(() => cmd.exitCode !== undefined);
10804
+ return () => _c$() ? ` (${cmd.exitCode})` : "";
10805
+ })(), null);
10806
+ _$insert2(_el$18, terminalReason ? (() => {
10807
+ var _el$23 = _$createElement2("span"), _el$24 = _$createTextNode2(` [`), _el$25 = _$createTextNode2(`]`);
10808
+ _$insertNode2(_el$23, _el$24);
10809
+ _$insertNode2(_el$23, _el$25);
10810
+ _$insert2(_el$23, terminalReason, _el$25);
10811
+ _$effect2((_$p) => _$setProp2(_el$23, "style", {
10812
+ fg: terminalReason === "timeout" ? theme().warning : theme().textMuted
10813
+ }, _$p));
10814
+ return _el$23;
10815
+ })() : undefined, null);
10816
+ _$insert2(_el$18, badge ? (() => {
10817
+ var _el$26 = _$createElement2("span"), _el$27 = _$createTextNode2(` [`), _el$28 = _$createTextNode2(`]`);
10818
+ _$insertNode2(_el$26, _el$27);
10819
+ _$insertNode2(_el$26, _el$28);
10820
+ _$insert2(_el$26, badge, _el$28);
10821
+ _$effect2((_$p) => _$setProp2(_el$26, "style", {
10822
+ fg: badgeWarn ? theme().warning : badgeHot ? theme().primary : theme().textMuted
10823
+ }, _$p));
10824
+ return _el$26;
10825
+ })() : undefined, null);
10826
+ _$effect2((_p$) => {
10827
+ var _v$10 = i() === state().selected ? theme().backgroundElement : undefined, _v$11 = {
10828
+ fg: cmd.status === "running" ? theme().success : theme().textMuted,
10829
+ bold: i() === state().selected
10830
+ }, _v$12 = {
10831
+ fg: theme().textMuted
10832
+ };
10833
+ _v$10 !== _p$.e && (_p$.e = _$setProp2(_el$17, "backgroundColor", _v$10, _p$.e));
10834
+ _v$11 !== _p$.t && (_p$.t = _$setProp2(_el$19, "style", _v$11, _p$.t));
10835
+ _v$12 !== _p$.a && (_p$.a = _$setProp2(_el$20, "style", _v$12, _p$.a));
10836
+ return _p$;
10837
+ }, {
10838
+ e: undefined,
10839
+ t: undefined,
10840
+ a: undefined
10841
+ });
10842
+ return _el$17;
10843
+ })();
10844
+ }
10604
10845
  }));
10605
10846
  return _el$1;
10606
10847
  }
@@ -10610,43 +10851,59 @@ function CommandPanel(props) {
10610
10851
  return sel();
10611
10852
  },
10612
10853
  children: (cmd) => (() => {
10613
- var _el$23 = _$createElement2("box"), _el$24 = _$createElement2("text"), _el$25 = _$createElement2("span"), _el$26 = _$createElement2("span"), _el$27 = _$createTextNode2(` \u2502 `), _el$28 = _$createTextNode2(` \u2502 `), _el$29 = _$createTextNode2(` \u2502 `), _el$30 = _$createTextNode2(` bytes`);
10614
- _$insertNode2(_el$23, _el$24);
10615
- _$setProp2(_el$23, "flexDirection", "column");
10616
- _$setProp2(_el$23, "border", true);
10617
- _$setProp2(_el$23, "padding", 1);
10618
- _$setProp2(_el$23, "flexShrink", 0);
10619
- _$setProp2(_el$23, "maxHeight", 16);
10620
- _$setProp2(_el$23, "overflow", "hidden");
10621
- _$insertNode2(_el$24, _el$25);
10622
- _$insertNode2(_el$24, _el$26);
10623
- _$insert2(_el$25, () => cmd().title);
10624
- _$insertNode2(_el$26, _el$27);
10625
- _$insertNode2(_el$26, _el$28);
10626
- _$insertNode2(_el$26, _el$29);
10627
- _$insertNode2(_el$26, _el$30);
10628
- _$insert2(_el$26, () => [cmd().command, ...cmd().args].join(" "), _el$28);
10629
- _$insert2(_el$26, () => cmd().status, _el$29);
10630
- _$insert2(_el$26, () => outputMeta().totalBytes, _el$30);
10631
- _$insert2(_el$26, () => outputMeta().live ? " \xB7 live" : "", null);
10632
- _$insert2(_el$26, () => cmd().truncated ? " \xB7 truncated" : "", null);
10633
- _$insert2(_el$26, (() => {
10634
- var _c$2 = _$memo2(() => !!(emulated() && screen && feedForID === cmd().id));
10635
- return () => _c$2() ? ` \xB7 ${screen.cols}x${screen.rows} screen${screen.activeBuffer === "alternate" ? " \xB7 alt-screen" : ""}` : "";
10854
+ var _el$29 = _$createElement2("box"), _el$30 = _$createElement2("text"), _el$31 = _$createElement2("span"), _el$32 = _$createElement2("span"), _el$33 = _$createTextNode2(` \u2502 `), _el$34 = _$createTextNode2(` \u2502 `), _el$35 = _$createTextNode2(` \u2502 `), _el$36 = _$createTextNode2(` bytes`);
10855
+ _$insertNode2(_el$29, _el$30);
10856
+ _$setProp2(_el$29, "flexDirection", "column");
10857
+ _$setProp2(_el$29, "border", true);
10858
+ _$setProp2(_el$29, "padding", 1);
10859
+ _$setProp2(_el$29, "flexShrink", 0);
10860
+ _$setProp2(_el$29, "maxHeight", 16);
10861
+ _$setProp2(_el$29, "overflow", "hidden");
10862
+ _$insertNode2(_el$30, _el$31);
10863
+ _$insertNode2(_el$30, _el$32);
10864
+ _$insert2(_el$31, () => cmd().title);
10865
+ _$insertNode2(_el$32, _el$33);
10866
+ _$insertNode2(_el$32, _el$34);
10867
+ _$insertNode2(_el$32, _el$35);
10868
+ _$insertNode2(_el$32, _el$36);
10869
+ _$insert2(_el$32, () => [cmd().command, ...cmd().args].join(" "), _el$34);
10870
+ _$insert2(_el$32, () => cmd().status, _el$35);
10871
+ _$insert2(_el$32, () => outputMeta().totalBytes, _el$36);
10872
+ _$insert2(_el$32, () => outputMeta().live ? " \xB7 live" : "", null);
10873
+ _$insert2(_el$32, () => cmd().truncated ? " \xB7 truncated" : "", null);
10874
+ _$insert2(_el$32, (() => {
10875
+ var _c$2 = _$memo2(() => !!(cmd().status !== "running" && cmd().endReason));
10876
+ return () => _c$2() ? ` \xB7 end:${cmd().endReason}` : "";
10877
+ })(), null);
10878
+ _$insert2(_el$32, (() => {
10879
+ var _c$3 = _$memo2(() => !!(emulated() && screen && feedForID === cmd().id));
10880
+ return () => _c$3() ? ` \xB7 ${screen.cols}x${screen.rows} screen${screen.activeBuffer === "alternate" ? " \xB7 alt-screen" : ""}` : "";
10881
+ })(), null);
10882
+ _$insert2(_el$29, (() => {
10883
+ var _c$4 = _$memo2(() => !!formatWatchDetail(cmd()));
10884
+ return () => _c$4() ? (() => {
10885
+ var _el$37 = _$createElement2("text"), _el$38 = _$createElement2("span");
10886
+ _$insertNode2(_el$37, _el$38);
10887
+ _$insert2(_el$38, () => formatWatchDetail(cmd()));
10888
+ _$effect2((_$p) => _$setProp2(_el$38, "style", {
10889
+ fg: theme().textMuted
10890
+ }, _$p));
10891
+ return _el$37;
10892
+ })() : undefined;
10636
10893
  })(), null);
10637
- _$insert2(_el$23, _$createComponent2(Show2, {
10894
+ _$insert2(_el$29, _$createComponent2(Show2, {
10638
10895
  get when() {
10639
10896
  return _$memo2(() => !!emulated())() && screenRows().length > 0;
10640
10897
  },
10641
10898
  get fallback() {
10642
10899
  return (() => {
10643
- var _el$31 = _$createElement2("text"), _el$32 = _$createElement2("span");
10644
- _$insertNode2(_el$31, _el$32);
10645
- _$insert2(_el$32, () => output().slice(-4000) || "(no output yet)");
10646
- _$effect2((_$p) => _$setProp2(_el$32, "style", {
10900
+ var _el$39 = _$createElement2("text"), _el$40 = _$createElement2("span");
10901
+ _$insertNode2(_el$39, _el$40);
10902
+ _$insert2(_el$40, () => output().slice(-4000) || "(no output yet)");
10903
+ _$effect2((_$p) => _$setProp2(_el$40, "style", {
10647
10904
  fg: theme().text
10648
10905
  }, _$p));
10649
- return _el$31;
10906
+ return _el$39;
10650
10907
  })();
10651
10908
  },
10652
10909
  get children() {
@@ -10655,26 +10912,26 @@ function CommandPanel(props) {
10655
10912
  return screenRows();
10656
10913
  },
10657
10914
  children: (row) => (() => {
10658
- var _el$33 = _$createElement2("text");
10659
- _$setProp2(_el$33, "wrapMode", "none");
10660
- _$setProp2(_el$33, "truncate", true);
10661
- _$insert2(_el$33, _$createComponent2(For2, {
10915
+ var _el$41 = _$createElement2("text");
10916
+ _$setProp2(_el$41, "wrapMode", "none");
10917
+ _$setProp2(_el$41, "truncate", true);
10918
+ _$insert2(_el$41, _$createComponent2(For2, {
10662
10919
  get each() {
10663
10920
  return row.runs;
10664
10921
  },
10665
10922
  children: (run) => (() => {
10666
- var _el$34 = _$createElement2("span");
10667
- _$insert2(_el$34, () => run.text);
10668
- _$effect2((_$p) => _$setProp2(_el$34, "style", {
10923
+ var _el$42 = _$createElement2("span");
10924
+ _$insert2(_el$42, () => run.text);
10925
+ _$effect2((_$p) => _$setProp2(_el$42, "style", {
10669
10926
  fg: run.fg ?? theme().text,
10670
10927
  bg: run.bg,
10671
10928
  bold: run.bold,
10672
10929
  underline: run.underline
10673
10930
  }, _$p));
10674
- return _el$34;
10931
+ return _el$42;
10675
10932
  })()
10676
10933
  }));
10677
- return _el$33;
10934
+ return _el$41;
10678
10935
  })()
10679
10936
  });
10680
10937
  }
@@ -10686,16 +10943,16 @@ function CommandPanel(props) {
10686
10943
  }, _v$15 = {
10687
10944
  fg: theme().textMuted
10688
10945
  };
10689
- _v$13 !== _p$.e && (_p$.e = _$setProp2(_el$23, "borderColor", _v$13, _p$.e));
10690
- _v$14 !== _p$.t && (_p$.t = _$setProp2(_el$25, "style", _v$14, _p$.t));
10691
- _v$15 !== _p$.a && (_p$.a = _$setProp2(_el$26, "style", _v$15, _p$.a));
10946
+ _v$13 !== _p$.e && (_p$.e = _$setProp2(_el$29, "borderColor", _v$13, _p$.e));
10947
+ _v$14 !== _p$.t && (_p$.t = _$setProp2(_el$31, "style", _v$14, _p$.t));
10948
+ _v$15 !== _p$.a && (_p$.a = _$setProp2(_el$32, "style", _v$15, _p$.a));
10692
10949
  return _p$;
10693
10950
  }, {
10694
10951
  e: undefined,
10695
10952
  t: undefined,
10696
10953
  a: undefined
10697
10954
  });
10698
- return _el$23;
10955
+ return _el$29;
10699
10956
  })()
10700
10957
  }), _el$10);
10701
10958
  _$insertNode2(_el$10, _el$11);
@@ -10730,7 +10987,7 @@ function CommandPanel(props) {
10730
10987
  }, _v$5 = insertMode() ? theme().warning : theme().border, _v$6 = {
10731
10988
  fg: insertMode() ? theme().warning : theme().success,
10732
10989
  bold: true
10733
- }, _v$7 = insertMode() ? "type stdin, Enter sends (:new/:terminate/:remove/:interrupt/:resize/:open-cmd/:await)" : statusText() || "Press : to type, q to detach", _v$8 = theme().textMuted, _v$9 = theme().primary, _v$0 = theme().text, _v$1 = theme().background;
10990
+ }, _v$7 = insertMode() ? "type stdin, Enter sends (:new/:terminate/:kill/:restart/:remove/:interrupt/:resize/:open-cmd/:await)" : statusText() || "Press : to type, q to detach", _v$8 = theme().textMuted, _v$9 = theme().primary, _v$0 = theme().text, _v$1 = theme().background;
10734
10991
  _v$ !== _p$.e && (_p$.e = _$setProp2(_el$2, "borderColor", _v$, _p$.e));
10735
10992
  _v$2 !== _p$.t && (_p$.t = _$setProp2(_el$5, "style", _v$2, _p$.t));
10736
10993
  _v$3 !== _p$.a && (_p$.a = _$setProp2(_el$7, "style", _v$3, _p$.a));
@@ -10979,8 +11236,8 @@ function createTerminalSession(options) {
10979
11236
  }
10980
11237
  command = snap.command;
10981
11238
  connection = "stream";
10982
- connectionDetail = "live";
10983
11239
  live = snap.command.status === "running";
11240
+ connectionDetail = live ? "live" : "saved output (process ended)";
10984
11241
  applySnapshotBytes(snap.data, snap.startOffset, snap.endOffset);
10985
11242
  },
10986
11243
  onDelta: (delta) => {
@@ -10995,6 +11252,7 @@ function createTerminalSession(options) {
10995
11252
  return;
10996
11253
  command = cmd;
10997
11254
  live = cmd.status === "running";
11255
+ connectionDetail = live ? "live" : "saved output (process ended)";
10998
11256
  emitSoon();
10999
11257
  },
11000
11258
  onError: (message) => {
@@ -11028,6 +11286,8 @@ function createTerminalSession(options) {
11028
11286
  return;
11029
11287
  if (connection === "error")
11030
11288
  return;
11289
+ if (command && command.status !== "running")
11290
+ return;
11031
11291
  if (streamLive() && stream.sendInput(data.commandID, bytes).ok)
11032
11292
  return;
11033
11293
  control.executeRaw({ command: "cmd_write", goalID: data.commandID, args: { commandID: data.commandID, input: bytes, ownerSessionID: data.ownerSessionID } }).catch(() => {});
@@ -11042,6 +11302,8 @@ function createTerminalSession(options) {
11042
11302
  return;
11043
11303
  if (connection === "error")
11044
11304
  return;
11305
+ if (command && command.status !== "running")
11306
+ return;
11045
11307
  if (streamLive() && stream.sendInterrupt(data.commandID).ok)
11046
11308
  return;
11047
11309
  control.executeRaw({ command: "cmd_interrupt", goalID: data.commandID, args: { commandID: data.commandID, ownerSessionID: data.ownerSessionID } }).catch(() => {});
@@ -11480,12 +11742,16 @@ function TerminalView(props) {
11480
11742
  }
11481
11743
  if (isInterruptChord(toKeyEvent(evt))) {
11482
11744
  prevent3(evt);
11745
+ if (view()?.command && view()?.command?.status !== "running")
11746
+ return;
11483
11747
  session.interrupt();
11484
11748
  return;
11485
11749
  }
11486
11750
  const bytes = encodeTerminalKey(toKeyEvent(evt));
11487
11751
  if (bytes !== undefined) {
11488
11752
  prevent3(evt);
11753
+ if (view()?.command && view()?.command?.status !== "running")
11754
+ return;
11489
11755
  session.writeInput(bytes);
11490
11756
  }
11491
11757
  });
@@ -11497,6 +11763,7 @@ function TerminalView(props) {
11497
11763
  } catch {}
11498
11764
  });
11499
11765
  const cmd = () => view()?.command;
11766
+ const processRunning = () => cmd()?.status === "running" && view()?.live === true;
11500
11767
  const dims = () => {
11501
11768
  const v = view();
11502
11769
  if (!v)
@@ -11504,10 +11771,10 @@ function TerminalView(props) {
11504
11771
  return `${v.cols}x${v.viewportRows}`;
11505
11772
  };
11506
11773
  return (() => {
11507
- var _el$ = _$createElement3("box"), _el$2 = _$createElement3("box"), _el$3 = _$createElement3("text"), _el$4 = _$createElement3("span"), _el$5 = _$createTextNode3(`\u2B22 `), _el$9 = _$createElement3("span"), _el$1 = _$createElement3("span"), _el$12 = _$createElement3("text"), _el$13 = _$createElement3("span"), _el$21 = _$createElement3("box"), _el$22 = _$createElement3("box"), _el$23 = _$createElement3("text"), _el$24 = _$createElement3("span"), _el$26 = _$createElement3("span"), _el$28 = _$createElement3("span"), _el$30 = _$createElement3("span"), _el$32 = _$createElement3("span"), _el$34 = _$createElement3("text"), _el$35 = _$createElement3("span"), _el$36 = _$createTextNode3(` \xB7 `), _el$37 = _$createTextNode3(` bytes`);
11774
+ var _el$ = _$createElement3("box"), _el$2 = _$createElement3("box"), _el$3 = _$createElement3("text"), _el$4 = _$createElement3("span"), _el$5 = _$createTextNode3(`\u2B22 `), _el$9 = _$createElement3("span"), _el$1 = _$createElement3("span"), _el$12 = _$createElement3("text"), _el$13 = _$createElement3("span"), _el$26 = _$createElement3("box"), _el$27 = _$createElement3("box"), _el$28 = _$createElement3("text"), _el$29 = _$createElement3("span"), _el$30 = _$createElement3("span"), _el$32 = _$createElement3("span"), _el$34 = _$createElement3("span"), _el$36 = _$createElement3("span"), _el$38 = _$createElement3("text"), _el$39 = _$createElement3("span"), _el$40 = _$createTextNode3(` \xB7 `), _el$41 = _$createTextNode3(` bytes`);
11508
11775
  _$insertNode3(_el$, _el$2);
11509
- _$insertNode3(_el$, _el$21);
11510
- _$insertNode3(_el$, _el$22);
11776
+ _$insertNode3(_el$, _el$26);
11777
+ _$insertNode3(_el$, _el$27);
11511
11778
  _$setProp3(_el$, "flexDirection", "column");
11512
11779
  _$setProp3(_el$, "width", "100%");
11513
11780
  _$setProp3(_el$, "height", "100%");
@@ -11559,7 +11826,7 @@ function TerminalView(props) {
11559
11826
  }), null);
11560
11827
  _$insertNode3(_el$12, _el$13);
11561
11828
  _$insert3(_el$13, dims, null);
11562
- _$insert3(_el$13, () => view()?.live ? " \xB7 live" : "", null);
11829
+ _$insert3(_el$13, () => processRunning() ? " \xB7 live" : "", null);
11563
11830
  _$insert3(_el$, _$createComponent3(Show3, {
11564
11831
  get when() {
11565
11832
  return view()?.invalid;
@@ -11595,96 +11862,128 @@ Press Ctrl+] to go back. Nothing was subscribed or written.`);
11595
11862
  });
11596
11863
  return _el$14;
11597
11864
  }
11598
- }), _el$21);
11865
+ }), _el$26);
11866
+ _$insert3(_el$, _$createComponent3(Show3, {
11867
+ get when() {
11868
+ return _$memo3(() => !!cmd())() && !processRunning();
11869
+ },
11870
+ get children() {
11871
+ var _el$21 = _$createElement3("box"), _el$22 = _$createElement3("text"), _el$23 = _$createElement3("span"), _el$24 = _$createTextNode3(`PROCESS `), _el$25 = _$createTextNode3(` \u2014 saved output only. Ctrl+C/input cannot affect it; Ctrl+] returns to Commands.`);
11872
+ _$insertNode3(_el$21, _el$22);
11873
+ _$setProp3(_el$21, "border", true);
11874
+ _$setProp3(_el$21, "paddingLeft", 1);
11875
+ _$setProp3(_el$21, "paddingRight", 1);
11876
+ _$setProp3(_el$21, "flexShrink", 0);
11877
+ _$insertNode3(_el$22, _el$23);
11878
+ _$insertNode3(_el$23, _el$24);
11879
+ _$insertNode3(_el$23, _el$25);
11880
+ _$insert3(_el$23, () => cmd().status.toUpperCase(), _el$25);
11881
+ _$insert3(_el$23, (() => {
11882
+ var _c$2 = _$memo3(() => cmd().exitCode !== undefined);
11883
+ return () => _c$2() ? ` (exit ${cmd().exitCode})` : "";
11884
+ })(), _el$25);
11885
+ _$effect3((_p$) => {
11886
+ var _v$4 = theme().warning, _v$5 = {
11887
+ fg: theme().warning,
11888
+ bold: true
11889
+ };
11890
+ _v$4 !== _p$.e && (_p$.e = _$setProp3(_el$21, "borderColor", _v$4, _p$.e));
11891
+ _v$5 !== _p$.t && (_p$.t = _$setProp3(_el$23, "style", _v$5, _p$.t));
11892
+ return _p$;
11893
+ }, {
11894
+ e: undefined,
11895
+ t: undefined
11896
+ });
11897
+ return _el$21;
11898
+ }
11899
+ }), _el$26);
11599
11900
  _$use3((el) => {
11600
11901
  viewportEl = el;
11601
11902
  try {
11602
11903
  el.onSizeChange = () => measureViewport();
11603
11904
  } catch {}
11604
11905
  setTimeout(measureViewport, 50);
11605
- }, _el$21);
11606
- _$setProp3(_el$21, "flexDirection", "column");
11607
- _$setProp3(_el$21, "flexGrow", 1);
11608
- _$setProp3(_el$21, "minHeight", 0);
11609
- _$setProp3(_el$21, "overflow", "hidden");
11610
- _$insert3(_el$21, _$createComponent3(Show3, {
11906
+ }, _el$26);
11907
+ _$setProp3(_el$26, "flexDirection", "column");
11908
+ _$setProp3(_el$26, "flexGrow", 1);
11909
+ _$setProp3(_el$26, "minHeight", 0);
11910
+ _$setProp3(_el$26, "overflow", "hidden");
11911
+ _$insert3(_el$26, _$createComponent3(Show3, {
11611
11912
  get when() {
11612
11913
  return _$memo3(() => !!view())() && view().rows.length > 0;
11613
11914
  },
11614
11915
  get fallback() {
11615
11916
  return (() => {
11616
- var _el$38 = _$createElement3("text"), _el$39 = _$createElement3("span");
11617
- _$insertNode3(_el$38, _el$39);
11618
- _$insert3(_el$39, () => view()?.invalid ? "" : "(no output yet)");
11619
- _$effect3((_$p) => _$setProp3(_el$39, "style", {
11917
+ var _el$42 = _$createElement3("text"), _el$43 = _$createElement3("span");
11918
+ _$insertNode3(_el$42, _el$43);
11919
+ _$insert3(_el$43, () => view()?.invalid ? "" : "(no output yet)");
11920
+ _$effect3((_$p) => _$setProp3(_el$43, "style", {
11620
11921
  fg: theme().textMuted
11621
11922
  }, _$p));
11622
- return _el$38;
11923
+ return _el$42;
11623
11924
  })();
11624
11925
  },
11625
11926
  get children() {
11626
11927
  return _$createComponent3(For3, {
11627
11928
  get each() {
11628
- return buildTerminalRows(view().rows, view().cols, view().viewportRows, view().cursor);
11929
+ return buildTerminalRows(view().rows, view().cols, view().viewportRows, {
11930
+ ...view().cursor,
11931
+ visible: processRunning() && view().cursor.visible
11932
+ });
11629
11933
  },
11630
11934
  children: (runs) => (() => {
11631
- var _el$40 = _$createElement3("text");
11632
- _$setProp3(_el$40, "wrapMode", "none");
11633
- _$setProp3(_el$40, "truncate", true);
11634
- _$insert3(_el$40, _$createComponent3(For3, {
11935
+ var _el$44 = _$createElement3("text");
11936
+ _$setProp3(_el$44, "wrapMode", "none");
11937
+ _$setProp3(_el$44, "truncate", true);
11938
+ _$insert3(_el$44, _$createComponent3(For3, {
11635
11939
  each: runs,
11636
11940
  children: (run) => (() => {
11637
- var _el$41 = _$createElement3("span");
11638
- _$insert3(_el$41, () => run.text);
11639
- _$effect3((_$p) => _$setProp3(_el$41, "style", {
11941
+ var _el$45 = _$createElement3("span");
11942
+ _$insert3(_el$45, () => run.text);
11943
+ _$effect3((_$p) => _$setProp3(_el$45, "style", {
11640
11944
  fg: run.cursor ? theme().background : run.inverse ? run.fg ?? theme().background : run.fg ?? theme().text,
11641
11945
  bg: run.cursor ? theme().primary : run.inverse ? run.bg ?? theme().text : run.bg,
11642
11946
  bold: run.bold ?? run.cursor,
11643
11947
  underline: run.underline
11644
11948
  }, _$p));
11645
- return _el$41;
11949
+ return _el$45;
11646
11950
  })()
11647
11951
  }));
11648
- return _el$40;
11952
+ return _el$44;
11649
11953
  })()
11650
11954
  });
11651
11955
  }
11652
11956
  }));
11653
- _$insertNode3(_el$22, _el$23);
11654
- _$insertNode3(_el$22, _el$34);
11655
- _$setProp3(_el$22, "flexDirection", "row");
11656
- _$setProp3(_el$22, "justifyContent", "space-between");
11657
- _$setProp3(_el$22, "flexShrink", 0);
11658
- _$insertNode3(_el$23, _el$24);
11659
- _$insertNode3(_el$23, _el$26);
11660
- _$insertNode3(_el$23, _el$28);
11661
- _$insertNode3(_el$23, _el$30);
11662
- _$insertNode3(_el$23, _el$32);
11663
- _$insertNode3(_el$24, _$createTextNode3(`type to write \xB7 `));
11664
- _$insertNode3(_el$26, _$createTextNode3(`Ctrl+C`));
11665
- _$insertNode3(_el$28, _$createTextNode3(` interrupt \xB7 `));
11666
- _$insertNode3(_el$30, _$createTextNode3(`Ctrl+]`));
11667
- _$insertNode3(_el$32, _$createTextNode3(` detach (keeps running)`));
11668
- _$insertNode3(_el$34, _el$35);
11669
- _$insertNode3(_el$35, _el$36);
11670
- _$insertNode3(_el$35, _el$37);
11671
- _$insert3(_el$35, dims, _el$36);
11672
- _$insert3(_el$35, () => view()?.totalBytes ?? 0, _el$37);
11957
+ _$insertNode3(_el$27, _el$28);
11958
+ _$insertNode3(_el$27, _el$38);
11959
+ _$setProp3(_el$27, "flexDirection", "row");
11960
+ _$setProp3(_el$27, "justifyContent", "space-between");
11961
+ _$setProp3(_el$27, "flexShrink", 0);
11962
+ _$insertNode3(_el$28, _el$29);
11963
+ _$insertNode3(_el$28, _el$30);
11964
+ _$insertNode3(_el$28, _el$32);
11965
+ _$insertNode3(_el$28, _el$34);
11966
+ _$insertNode3(_el$28, _el$36);
11967
+ _$insert3(_el$29, () => processRunning() ? "type to write \xB7 " : "saved log \xB7 ");
11968
+ _$insertNode3(_el$30, _$createTextNode3(`Ctrl+C`));
11969
+ _$insertNode3(_el$32, _$createTextNode3(` interrupt \xB7 `));
11970
+ _$insertNode3(_el$34, _$createTextNode3(`Ctrl+]`));
11971
+ _$insertNode3(_el$36, _$createTextNode3(` detach (keeps running)`));
11972
+ _$insertNode3(_el$38, _el$39);
11973
+ _$insertNode3(_el$39, _el$40);
11974
+ _$insertNode3(_el$39, _el$41);
11975
+ _$insert3(_el$39, dims, _el$40);
11976
+ _$insert3(_el$39, () => view()?.totalBytes ?? 0, _el$41);
11673
11977
  _$effect3((_p$) => {
11674
- var _v$4 = {
11978
+ var _v$6 = {
11675
11979
  fg: theme().primary,
11676
11980
  bold: true
11677
- }, _v$5 = {
11678
- fg: theme().textMuted
11679
- }, _v$6 = {
11680
- fg: view()?.connection === "stream" ? theme().success : view()?.connection === "polling" ? theme().warning : theme().error
11681
11981
  }, _v$7 = {
11682
11982
  fg: theme().textMuted
11683
11983
  }, _v$8 = {
11684
- fg: theme().textMuted
11984
+ fg: cmd() && !processRunning() ? theme().warning : view()?.connection === "stream" ? theme().success : view()?.connection === "polling" ? theme().warning : theme().error
11685
11985
  }, _v$9 = {
11686
- fg: theme().warning,
11687
- bold: true
11986
+ fg: theme().textMuted
11688
11987
  }, _v$0 = {
11689
11988
  fg: theme().textMuted
11690
11989
  }, _v$1 = {
@@ -11693,18 +11992,23 @@ Press Ctrl+] to go back. Nothing was subscribed or written.`);
11693
11992
  }, _v$10 = {
11694
11993
  fg: theme().textMuted
11695
11994
  }, _v$11 = {
11995
+ fg: theme().warning,
11996
+ bold: true
11997
+ }, _v$12 = {
11998
+ fg: theme().textMuted
11999
+ }, _v$13 = {
11696
12000
  fg: theme().textMuted
11697
12001
  };
11698
- _v$4 !== _p$.e && (_p$.e = _$setProp3(_el$4, "style", _v$4, _p$.e));
11699
- _v$5 !== _p$.t && (_p$.t = _$setProp3(_el$9, "style", _v$5, _p$.t));
11700
- _v$6 !== _p$.a && (_p$.a = _$setProp3(_el$1, "style", _v$6, _p$.a));
11701
- _v$7 !== _p$.o && (_p$.o = _$setProp3(_el$13, "style", _v$7, _p$.o));
11702
- _v$8 !== _p$.i && (_p$.i = _$setProp3(_el$24, "style", _v$8, _p$.i));
11703
- _v$9 !== _p$.n && (_p$.n = _$setProp3(_el$26, "style", _v$9, _p$.n));
11704
- _v$0 !== _p$.s && (_p$.s = _$setProp3(_el$28, "style", _v$0, _p$.s));
11705
- _v$1 !== _p$.h && (_p$.h = _$setProp3(_el$30, "style", _v$1, _p$.h));
11706
- _v$10 !== _p$.r && (_p$.r = _$setProp3(_el$32, "style", _v$10, _p$.r));
11707
- _v$11 !== _p$.d && (_p$.d = _$setProp3(_el$35, "style", _v$11, _p$.d));
12002
+ _v$6 !== _p$.e && (_p$.e = _$setProp3(_el$4, "style", _v$6, _p$.e));
12003
+ _v$7 !== _p$.t && (_p$.t = _$setProp3(_el$9, "style", _v$7, _p$.t));
12004
+ _v$8 !== _p$.a && (_p$.a = _$setProp3(_el$1, "style", _v$8, _p$.a));
12005
+ _v$9 !== _p$.o && (_p$.o = _$setProp3(_el$13, "style", _v$9, _p$.o));
12006
+ _v$0 !== _p$.i && (_p$.i = _$setProp3(_el$29, "style", _v$0, _p$.i));
12007
+ _v$1 !== _p$.n && (_p$.n = _$setProp3(_el$30, "style", _v$1, _p$.n));
12008
+ _v$10 !== _p$.s && (_p$.s = _$setProp3(_el$32, "style", _v$10, _p$.s));
12009
+ _v$11 !== _p$.h && (_p$.h = _$setProp3(_el$34, "style", _v$11, _p$.h));
12010
+ _v$12 !== _p$.r && (_p$.r = _$setProp3(_el$36, "style", _v$12, _p$.r));
12011
+ _v$13 !== _p$.d && (_p$.d = _$setProp3(_el$39, "style", _v$13, _p$.d));
11708
12012
  return _p$;
11709
12013
  }, {
11710
12014
  e: undefined,
@@ -11722,6 +12026,179 @@ Press Ctrl+] to go back. Nothing was subscribed or written.`);
11722
12026
  })();
11723
12027
  }
11724
12028
 
12029
+ // src/v2/native-rpc.ts
12030
+ var NATIVE_RPC_ID = "loopd.native";
12031
+ function resolveNativeParentID(child) {
12032
+ return child.fork?.sessionID ?? child.parentID ?? undefined;
12033
+ }
12034
+ var requestSchema = {
12035
+ type: "object",
12036
+ properties: {
12037
+ requestID: { type: "string" },
12038
+ goalID: { type: "string" },
12039
+ parentSessionID: { type: "string" },
12040
+ title: { type: "string" },
12041
+ agent: { type: "string" },
12042
+ model: {
12043
+ type: "object",
12044
+ properties: {
12045
+ id: { type: "string" },
12046
+ providerID: { type: "string" }
12047
+ },
12048
+ required: ["id", "providerID"],
12049
+ additionalProperties: false
12050
+ },
12051
+ permissions: {
12052
+ type: "array",
12053
+ items: {
12054
+ type: "object",
12055
+ properties: {
12056
+ action: { type: "string" },
12057
+ resource: { type: "string" },
12058
+ effect: { type: "string", enum: ["allow", "deny", "ask"] }
12059
+ },
12060
+ required: ["action", "resource", "effect"],
12061
+ additionalProperties: false
12062
+ }
12063
+ },
12064
+ directory: { type: "string" }
12065
+ },
12066
+ required: ["requestID", "goalID", "parentSessionID", "title"],
12067
+ additionalProperties: false
12068
+ };
12069
+ var claimResultSchema = {
12070
+ type: "object",
12071
+ properties: {
12072
+ requestID: { type: "string" },
12073
+ claimantID: { type: "string" }
12074
+ },
12075
+ required: ["requestID", "claimantID"],
12076
+ additionalProperties: false
12077
+ };
12078
+ var claimAckSchema = {
12079
+ type: "object",
12080
+ properties: {
12081
+ requestID: { type: "string" },
12082
+ claimantID: { type: "string" },
12083
+ won: { type: "boolean" }
12084
+ },
12085
+ required: ["requestID", "claimantID", "won"],
12086
+ additionalProperties: false
12087
+ };
12088
+ var createResultSchema = {
12089
+ type: "object",
12090
+ properties: {
12091
+ requestID: { type: "string" },
12092
+ childSessionID: { type: "string" },
12093
+ parentSessionID: { type: "string" },
12094
+ topology: { type: "string", const: "v2-native-child" }
12095
+ },
12096
+ required: ["requestID", "childSessionID", "parentSessionID", "topology"],
12097
+ additionalProperties: false
12098
+ };
12099
+ var failureSchema = {
12100
+ type: "object",
12101
+ properties: {
12102
+ requestID: { type: "string" },
12103
+ reason: { type: "string" },
12104
+ detail: { type: "string" },
12105
+ preCreation: { type: "boolean" }
12106
+ },
12107
+ required: ["requestID", "reason", "preCreation"],
12108
+ additionalProperties: false
12109
+ };
12110
+ var emptySchema = {
12111
+ type: "object",
12112
+ properties: {},
12113
+ additionalProperties: false
12114
+ };
12115
+ var nativeRpcDefinition = {
12116
+ id: NATIVE_RPC_ID,
12117
+ methods: {
12118
+ claimRequest: { input: claimResultSchema, output: claimAckSchema, errors: {} },
12119
+ completeWorkerCreate: { input: createResultSchema, output: emptySchema, errors: {} },
12120
+ failRequest: { input: failureSchema, output: emptySchema, errors: {} }
12121
+ },
12122
+ events: {
12123
+ workerCreateRequested: { schema: requestSchema }
12124
+ }
12125
+ };
12126
+
12127
+ // src/v2/native-tui.ts
12128
+ function subscribeNativeRequests(rpcClient, deps) {
12129
+ return rpcClient.events.on("workerCreateRequested", (event) => {
12130
+ const request = event?.data;
12131
+ if (!request || typeof request.requestID !== "string")
12132
+ return;
12133
+ const directory = event?.location?.directory;
12134
+ const options = typeof directory === "string" && directory.length > 0 ? { location: { directory } } : undefined;
12135
+ handleWorkerCreateRequest(request, {
12136
+ ...deps,
12137
+ claim: (input) => rpcClient.claimRequest(input, options).then((ack) => ({ won: ack?.won === true })),
12138
+ complete: (result) => rpcClient.completeWorkerCreate(result, options),
12139
+ fail: (failure) => rpcClient.failRequest(failure, options)
12140
+ }).then((outcome) => {
12141
+ try {
12142
+ deps.onOutcome?.(outcome, request.requestID);
12143
+ } catch {}
12144
+ }, () => {});
12145
+ });
12146
+ }
12147
+ async function handleWorkerCreateRequest(request, deps) {
12148
+ const parent = deps.data.session.get(request.parentSessionID);
12149
+ if (!parent)
12150
+ return { handled: "ignored-unknown-parent" };
12151
+ if (deps.isKnownParent && !deps.isKnownParent(request.parentSessionID)) {
12152
+ return { handled: "ignored-unknown-parent" };
12153
+ }
12154
+ const { won } = await deps.claim({ requestID: request.requestID, claimantID: deps.claimantID });
12155
+ if (!won)
12156
+ return { handled: "claim-lost" };
12157
+ const fail = (reason, preCreation, detail) => deps.fail({ requestID: request.requestID, reason, preCreation, detail }).then(() => ({
12158
+ handled: "failed",
12159
+ reason,
12160
+ preCreation
12161
+ }));
12162
+ let forkInput;
12163
+ try {
12164
+ const messages = deps.data.session.message.list(request.parentSessionID);
12165
+ const firstID = messages[0]?.id;
12166
+ forkInput = firstID ? { sessionID: request.parentSessionID, before: firstID } : { sessionID: request.parentSessionID };
12167
+ } catch (error) {
12168
+ return fail("message-list-failed", true, error instanceof Error ? error.message : String(error));
12169
+ }
12170
+ let child;
12171
+ try {
12172
+ child = await deps.client.session.fork(forkInput);
12173
+ } catch (error) {
12174
+ return fail("fork-failed", true, error instanceof Error ? error.message : String(error));
12175
+ }
12176
+ const actualParent = resolveNativeParentID(child);
12177
+ if (actualParent !== request.parentSessionID) {
12178
+ return fail("parent-mismatch", false, `resolved-parent=${JSON.stringify(actualParent)} expected=${JSON.stringify(request.parentSessionID)}`);
12179
+ }
12180
+ try {
12181
+ if (request.agent && deps.client.session.switchAgent) {
12182
+ await deps.client.session.switchAgent({ sessionID: child.id, agent: request.agent });
12183
+ }
12184
+ if (request.model && deps.client.session.switchModel) {
12185
+ await deps.client.session.switchModel({ sessionID: child.id, model: request.model });
12186
+ }
12187
+ if (deps.client.session.update) {
12188
+ await deps.client.session.update({ sessionID: child.id, title: request.title });
12189
+ }
12190
+ } catch (error) {
12191
+ return fail("configure-failed", false, error instanceof Error ? error.message : String(error));
12192
+ }
12193
+ await deps.complete({
12194
+ requestID: request.requestID,
12195
+ childSessionID: child.id,
12196
+ parentSessionID: request.parentSessionID,
12197
+ topology: "v2-native-child"
12198
+ });
12199
+ return { handled: "completed", childSessionID: child.id, forkInput };
12200
+ }
12201
+
11725
12202
  // src/tui/plugin.tsx
11726
12203
  var PLUGIN_ID = "opencode-loopd.tui";
11727
12204
  function navigateToTerminalV1(api, commandID, ownerSessionID, returnSessionID) {
@@ -11907,6 +12384,57 @@ function navigateToTerminalV2(router, commandID, ownerSessionID, returnSessionID
11907
12384
  }
11908
12385
  var v2setup = (ctx) => {
11909
12386
  const directory = ctx.location?.directory ?? ctx.data.location.default().directory;
12387
+ const claimantID = `tui-${Date.now().toString(36)}-${Math.floor(Math.random() * 1e6).toString(36)}`;
12388
+ let unsubscribeNative;
12389
+ try {
12390
+ const rpcClient = ctx.client.rpc(nativeRpcDefinition);
12391
+ unsubscribeNative = subscribeNativeRequests(rpcClient, {
12392
+ client: {
12393
+ session: {
12394
+ fork: (input) => ctx.client.session.fork(input),
12395
+ switchAgent: (input) => ctx.client.session.switchAgent(input),
12396
+ switchModel: (input) => ctx.client.session.switchModel(input),
12397
+ update: (input) => ctx.client.session.update(input)
12398
+ }
12399
+ },
12400
+ data: {
12401
+ session: {
12402
+ get: (sessionID) => {
12403
+ const session = ctx.data.session.get(sessionID);
12404
+ return session ? {
12405
+ id: session.id
12406
+ } : undefined;
12407
+ },
12408
+ message: {
12409
+ list: (sessionID) => ctx.data.session.message.list(sessionID).map((message) => ({
12410
+ id: message.id
12411
+ }))
12412
+ }
12413
+ }
12414
+ },
12415
+ claimantID,
12416
+ onOutcome: (outcome, requestID) => {
12417
+ try {
12418
+ const {
12419
+ appendFileSync
12420
+ } = __require("fs");
12421
+ appendFileSync("/tmp/loopd-tui.log", `[${new Date().toISOString()}] native-worker request=${requestID} outcome=${JSON.stringify(outcome)}
12422
+ `);
12423
+ } catch {}
12424
+ },
12425
+ isKnownParent: (parentSessionID) => {
12426
+ const parent = ctx.data.session.get(parentSessionID);
12427
+ if (!parent)
12428
+ return false;
12429
+ const parentDirectory = parent.location?.directory;
12430
+ if (!parentDirectory)
12431
+ return true;
12432
+ return parentDirectory === directory;
12433
+ }
12434
+ });
12435
+ } catch {
12436
+ unsubscribeNative = undefined;
12437
+ }
11910
12438
  let dialogOpen = false;
11911
12439
  const closeDialog = () => {
11912
12440
  dialogOpen = false;
@@ -12096,6 +12624,9 @@ var v2setup = (ctx) => {
12096
12624
  return () => {
12097
12625
  closeDialog();
12098
12626
  ctx.ui.panel.close();
12627
+ try {
12628
+ unsubscribeNative?.();
12629
+ } catch {}
12099
12630
  try {
12100
12631
  unregisterTerminalRoute?.();
12101
12632
  } catch {}