@bojackduy/opencode-loopd 1.10.3 → 1.10.4

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) {
@@ -6081,6 +6089,33 @@ function parseCommandLine(input) {
6081
6089
  args.push(current);
6082
6090
  return args;
6083
6091
  }
6092
+ function watchBadge(c) {
6093
+ const st = c.watchState?.state;
6094
+ if (st === "until-matched")
6095
+ return "until-matched";
6096
+ if (st === "flood-suspended")
6097
+ return "flood-suspended";
6098
+ if (st === "budget-exhausted")
6099
+ return "budget-exhausted";
6100
+ if (c.watchUntil !== undefined)
6101
+ return `until:${c.watchUntilAction ?? "stop"}-armed`;
6102
+ if (c.watchFilter !== undefined)
6103
+ return "watch:filter";
6104
+ return;
6105
+ }
6106
+ function formatWatchDetail(c) {
6107
+ if (c.watchFilter === undefined && c.watchUntil === undefined && c.watchState === undefined)
6108
+ return;
6109
+ const spec = [
6110
+ c.watchFilter !== undefined ? `filter="${c.watchFilter}"` : null,
6111
+ c.watchUntil !== undefined ? `until="${c.watchUntil}"` : null,
6112
+ `action=${c.watchUntilAction ?? "stop"}`,
6113
+ c.watchIgnoreCase === true ? "ignore-case" : null
6114
+ ].filter((x) => x !== null).join(" ");
6115
+ const st = c.watchState;
6116
+ const counters = st ? `state=${st.state} matches=${st.matches} pushes=${st.pushes} dropped=${st.droppedLines}` : "state=\u2014";
6117
+ return `watch ${spec} \xB7 ${counters}`;
6118
+ }
6084
6119
  function parseNewCommandTail(raw) {
6085
6120
  const match = /^(?::?\s*new)(?:\s+(.*))?\s*$/s.exec(raw.trim());
6086
6121
  if (!match)
@@ -8151,152 +8186,183 @@ function LoopDashboard(props) {
8151
8186
  })()];
8152
8187
  })(), null);
8153
8188
  _$insert(_el$133, (() => {
8154
- var _c$15 = _$memo(() => (goal().config.checks?.length ?? 0) > 0);
8155
- return () => _c$15() ? [(() => {
8189
+ var _c$15 = _$memo(() => !!goal().workerTopology);
8190
+ return () => _c$15() && [(() => {
8156
8191
  var _el$218 = _$createElement("span"), _el$219 = _$createTextNode(`
8157
- \u25A3 `);
8192
+ \uD83C\uDF3F Worker: `);
8158
8193
  _$insertNode(_el$218, _el$219);
8159
8194
  _$effect((_$p) => _$setProp(_el$218, "style", {
8160
- fg: theme().warning
8195
+ fg: theme().textMuted
8161
8196
  }, _$p));
8162
8197
  return _el$218;
8163
8198
  })(), (() => {
8164
8199
  var _el$221 = _$createElement("span");
8165
- _$insertNode(_el$221, _$createTextNode(`Checks: `));
8200
+ _$insert(_el$221, (() => {
8201
+ var _c$22 = _$memo(() => goal().workerTopology === "v2-native-child");
8202
+ return () => _c$22() ? "native child" : goal().workerTopology === "v2-root-fallback" ? "root fallback" : "v1 child";
8203
+ })());
8166
8204
  _$effect((_$p) => _$setProp(_el$221, "style", {
8205
+ fg: theme().text
8206
+ }, _$p));
8207
+ return _el$221;
8208
+ })(), _$memo(() => _$memo(() => !!goal().nativeParentID)() ? (() => {
8209
+ var _el$222 = _$createElement("span"), _el$223 = _$createTextNode(` of `), _el$224 = _$createTextNode(`\u2026`);
8210
+ _$insertNode(_el$222, _el$223);
8211
+ _$insertNode(_el$222, _el$224);
8212
+ _$insert(_el$222, () => goal().nativeParentID.slice(0, 12), _el$224);
8213
+ _$effect((_$p) => _$setProp(_el$222, "style", {
8214
+ fg: theme().textMuted
8215
+ }, _$p));
8216
+ return _el$222;
8217
+ })() : null)];
8218
+ })(), null);
8219
+ _$insert(_el$133, (() => {
8220
+ var _c$16 = _$memo(() => (goal().config.checks?.length ?? 0) > 0);
8221
+ return () => _c$16() ? [(() => {
8222
+ var _el$225 = _$createElement("span"), _el$226 = _$createTextNode(`
8223
+ \u25A3 `);
8224
+ _$insertNode(_el$225, _el$226);
8225
+ _$effect((_$p) => _$setProp(_el$225, "style", {
8226
+ fg: theme().warning
8227
+ }, _$p));
8228
+ return _el$225;
8229
+ })(), (() => {
8230
+ var _el$228 = _$createElement("span");
8231
+ _$insertNode(_el$228, _$createTextNode(`Checks: `));
8232
+ _$effect((_$p) => _$setProp(_el$228, "style", {
8167
8233
  fg: theme().warning,
8168
8234
  bold: true
8169
8235
  }, _$p));
8170
- return _el$221;
8236
+ return _el$228;
8171
8237
  })(), (() => {
8172
- var _el$223 = _$createElement("span");
8173
- _$insert(_el$223, () => goal().config.checks.join(", ").slice(0, 100));
8174
- _$effect((_$p) => _$setProp(_el$223, "style", {
8238
+ var _el$230 = _$createElement("span");
8239
+ _$insert(_el$230, () => goal().config.checks.join(", ").slice(0, 100));
8240
+ _$effect((_$p) => _$setProp(_el$230, "style", {
8175
8241
  fg: theme().textMuted
8176
8242
  }, _$p));
8177
- return _el$223;
8243
+ return _el$230;
8178
8244
  })()] : null;
8179
8245
  })(), null);
8180
8246
  _$insert(_el$133, (() => {
8181
- var _c$16 = _$memo(() => rt()?.evaluatorRejectionCount > 0);
8182
- return () => _c$16() && [(() => {
8183
- var _el$224 = _$createElement("span"), _el$225 = _$createTextNode(`
8247
+ var _c$17 = _$memo(() => rt()?.evaluatorRejectionCount > 0);
8248
+ return () => _c$17() && [(() => {
8249
+ var _el$231 = _$createElement("span"), _el$232 = _$createTextNode(`
8184
8250
  \u26A0 rejections: `);
8185
- _$insertNode(_el$224, _el$225);
8186
- _$effect((_$p) => _$setProp(_el$224, "style", {
8251
+ _$insertNode(_el$231, _el$232);
8252
+ _$effect((_$p) => _$setProp(_el$231, "style", {
8187
8253
  fg: theme().warning
8188
8254
  }, _$p));
8189
- return _el$224;
8255
+ return _el$231;
8190
8256
  })(), (() => {
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", {
8257
+ var _el$234 = _$createElement("span"), _el$235 = _$createTextNode(` \u2014 `);
8258
+ _$insertNode(_el$234, _el$235);
8259
+ _$insert(_el$234, () => String(rt().evaluatorRejectionCount), _el$235);
8260
+ _$insert(_el$234, () => String(rt().lastRejectionDetails || "").slice(0, 80), null);
8261
+ _$effect((_$p) => _$setProp(_el$234, "style", {
8196
8262
  fg: theme().warning
8197
8263
  }, _$p));
8198
- return _el$227;
8264
+ return _el$234;
8199
8265
  })()];
8200
8266
  })(), null);
8201
8267
  _$insert(_el$133, (() => {
8202
- var _c$17 = _$memo(() => rt()?.unknownStatusCount > 0);
8203
- return () => _c$17() && [(() => {
8204
- var _el$229 = _$createElement("span"), _el$230 = _$createTextNode(`
8268
+ var _c$18 = _$memo(() => rt()?.unknownStatusCount > 0);
8269
+ return () => _c$18() && [(() => {
8270
+ var _el$236 = _$createElement("span"), _el$237 = _$createTextNode(`
8205
8271
  \u26A0\uFE0F unreachable: `);
8206
- _$insertNode(_el$229, _el$230);
8207
- _$effect((_$p) => _$setProp(_el$229, "style", {
8272
+ _$insertNode(_el$236, _el$237);
8273
+ _$effect((_$p) => _$setProp(_el$236, "style", {
8208
8274
  fg: theme().error
8209
8275
  }, _$p));
8210
- return _el$229;
8276
+ return _el$236;
8211
8277
  })(), (() => {
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", {
8278
+ var _el$239 = _$createElement("span"), _el$240 = _$createTextNode(`/3`);
8279
+ _$insertNode(_el$239, _el$240);
8280
+ _$insert(_el$239, () => String(rt().unknownStatusCount), _el$240);
8281
+ _$effect((_$p) => _$setProp(_el$239, "style", {
8216
8282
  fg: theme().error
8217
8283
  }, _$p));
8218
- return _el$232;
8284
+ return _el$239;
8219
8285
  })(), (() => {
8220
- var _el$234 = _$createElement("span");
8221
- _$insertNode(_el$234, _$createTextNode(` \u2014 nudge to recover`));
8222
- _$effect((_$p) => _$setProp(_el$234, "style", {
8286
+ var _el$241 = _$createElement("span");
8287
+ _$insertNode(_el$241, _$createTextNode(` \u2014 nudge to recover`));
8288
+ _$effect((_$p) => _$setProp(_el$241, "style", {
8223
8289
  fg: theme().textMuted
8224
8290
  }, _$p));
8225
- return _el$234;
8291
+ return _el$241;
8226
8292
  })()];
8227
8293
  })(), null);
8228
8294
  _$insert(_el$133, (() => {
8229
- var _c$18 = _$memo(() => !!rt()?.retryAfter);
8230
- return () => _c$18() && [(() => {
8231
- var _el$236 = _$createElement("span"), _el$237 = _$createTextNode(`
8295
+ var _c$19 = _$memo(() => !!rt()?.retryAfter);
8296
+ return () => _c$19() && [(() => {
8297
+ var _el$243 = _$createElement("span"), _el$244 = _$createTextNode(`
8232
8298
  \u21BB retry in: `);
8233
- _$insertNode(_el$236, _el$237);
8234
- _$effect((_$p) => _$setProp(_el$236, "style", {
8299
+ _$insertNode(_el$243, _el$244);
8300
+ _$effect((_$p) => _$setProp(_el$243, "style", {
8235
8301
  fg: theme().accent
8236
8302
  }, _$p));
8237
- return _el$236;
8303
+ return _el$243;
8238
8304
  })(), (() => {
8239
- var _el$239 = _$createElement("span");
8240
- _$insert(_el$239, () => countdownLabel(rt().retryAfter, clock()));
8241
- _$effect((_$p) => _$setProp(_el$239, "style", {
8305
+ var _el$246 = _$createElement("span");
8306
+ _$insert(_el$246, () => countdownLabel(rt().retryAfter, clock()));
8307
+ _$effect((_$p) => _$setProp(_el$246, "style", {
8242
8308
  fg: theme().accent
8243
8309
  }, _$p));
8244
- return _el$239;
8310
+ return _el$246;
8245
8311
  })()];
8246
8312
  })(), null);
8247
8313
  _$insert(_el$133, (() => {
8248
- var _c$19 = _$memo(() => !!rt()?.nextRunAt);
8249
- return () => _c$19() && [(() => {
8250
- var _el$240 = _$createElement("span"), _el$241 = _$createTextNode(`
8314
+ var _c$20 = _$memo(() => !!rt()?.nextRunAt);
8315
+ return () => _c$20() && [(() => {
8316
+ var _el$247 = _$createElement("span"), _el$248 = _$createTextNode(`
8251
8317
  \u23F0 next run: `);
8252
- _$insertNode(_el$240, _el$241);
8253
- _$effect((_$p) => _$setProp(_el$240, "style", {
8318
+ _$insertNode(_el$247, _el$248);
8319
+ _$effect((_$p) => _$setProp(_el$247, "style", {
8254
8320
  fg: theme().accent
8255
8321
  }, _$p));
8256
- return _el$240;
8322
+ return _el$247;
8257
8323
  })(), (() => {
8258
- var _el$243 = _$createElement("span");
8259
- _$insert(_el$243, () => countdownLabel(rt().nextRunAt, clock()));
8260
- _$effect((_$p) => _$setProp(_el$243, "style", {
8324
+ var _el$250 = _$createElement("span");
8325
+ _$insert(_el$250, () => countdownLabel(rt().nextRunAt, clock()));
8326
+ _$effect((_$p) => _$setProp(_el$250, "style", {
8261
8327
  fg: theme().accent
8262
8328
  }, _$p));
8263
- return _el$243;
8329
+ return _el$250;
8264
8330
  })(), (() => {
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", {
8331
+ var _el$251 = _$createElement("span"), _el$252 = _$createTextNode(` (`), _el$253 = _$createTextNode(` runs)`);
8332
+ _$insertNode(_el$251, _el$252);
8333
+ _$insertNode(_el$251, _el$253);
8334
+ _$insert(_el$251, () => String(rt().scheduleRunCount || 0), _el$253);
8335
+ _$effect((_$p) => _$setProp(_el$251, "style", {
8270
8336
  fg: theme().textMuted
8271
8337
  }, _$p));
8272
- return _el$244;
8338
+ return _el$251;
8273
8339
  })()];
8274
8340
  })(), null);
8275
8341
  _$insert(_el$133, (() => {
8276
- var _c$20 = _$memo(() => !!rt()?.lastError);
8277
- return () => _c$20() && [(() => {
8278
- var _el$247 = _$createElement("span"), _el$248 = _$createTextNode(`
8342
+ var _c$21 = _$memo(() => !!rt()?.lastError);
8343
+ return () => _c$21() && [(() => {
8344
+ var _el$254 = _$createElement("span"), _el$255 = _$createTextNode(`
8279
8345
  \u26A0 `);
8280
- _$insertNode(_el$247, _el$248);
8281
- _$effect((_$p) => _$setProp(_el$247, "style", {
8346
+ _$insertNode(_el$254, _el$255);
8347
+ _$effect((_$p) => _$setProp(_el$254, "style", {
8282
8348
  fg: theme().error
8283
8349
  }, _$p));
8284
- return _el$247;
8350
+ return _el$254;
8285
8351
  })(), (() => {
8286
- var _el$250 = _$createElement("span");
8287
- _$insertNode(_el$250, _$createTextNode(`Error: `));
8288
- _$effect((_$p) => _$setProp(_el$250, "style", {
8352
+ var _el$257 = _$createElement("span");
8353
+ _$insertNode(_el$257, _$createTextNode(`Error: `));
8354
+ _$effect((_$p) => _$setProp(_el$257, "style", {
8289
8355
  fg: theme().error,
8290
8356
  bold: true
8291
8357
  }, _$p));
8292
- return _el$250;
8358
+ return _el$257;
8293
8359
  })(), (() => {
8294
- var _el$252 = _$createElement("span");
8295
- _$insert(_el$252, () => rt().lastError.slice(0, 120));
8296
- _$effect((_$p) => _$setProp(_el$252, "style", {
8360
+ var _el$259 = _$createElement("span");
8361
+ _$insert(_el$259, () => rt().lastError.slice(0, 120));
8362
+ _$effect((_$p) => _$setProp(_el$259, "style", {
8297
8363
  fg: theme().error
8298
8364
  }, _$p));
8299
- return _el$252;
8365
+ return _el$259;
8300
8366
  })()];
8301
8367
  })(), null);
8302
8368
  _$effect((_p$) => {
@@ -8349,28 +8415,28 @@ function LoopDashboard(props) {
8349
8415
  },
8350
8416
  get fallback() {
8351
8417
  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.`));
8418
+ var _el$260 = _$createElement("box"), _el$261 = _$createElement("text"), _el$262 = _$createElement("span"), _el$264 = _$createElement("span"), _el$266 = _$createElement("span"), _el$268 = _$createElement("text"), _el$269 = _$createElement("span"), _el$271 = _$createElement("span"), _el$273 = _$createElement("span"), _el$275 = _$createElement("span"), _el$277 = _$createElement("span");
8419
+ _$insertNode(_el$260, _el$261);
8420
+ _$insertNode(_el$260, _el$268);
8421
+ _$setProp(_el$260, "flexDirection", "column");
8422
+ _$setProp(_el$260, "gap", 1);
8423
+ _$setProp(_el$260, "padding", 1);
8364
8424
  _$insertNode(_el$261, _el$262);
8365
8425
  _$insertNode(_el$261, _el$264);
8366
8426
  _$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.`));
8427
+ _$insertNode(_el$262, _$createTextNode(`No command sessions owned by this session. `));
8428
+ _$insertNode(_el$264, _$createTextNode(`:new &lt;command&gt;`));
8429
+ _$insertNode(_el$266, _$createTextNode(` to start one.`));
8430
+ _$insertNode(_el$268, _el$269);
8431
+ _$insertNode(_el$268, _el$271);
8432
+ _$insertNode(_el$268, _el$273);
8433
+ _$insertNode(_el$268, _el$275);
8434
+ _$insertNode(_el$268, _el$277);
8435
+ _$insertNode(_el$269, _$createTextNode(`Tip: `));
8436
+ _$insertNode(_el$271, _$createTextNode(`o`));
8437
+ _$insertNode(_el$273, _$createTextNode(` fullscreen \xB7 `));
8438
+ _$insertNode(_el$275, _$createTextNode(`:interrupt :terminate :remove`));
8439
+ _$insertNode(_el$277, _$createTextNode(` manage \xB7 text + Enter writes stdin.`));
8374
8440
  _$effect((_p$) => {
8375
8441
  var _v$49 = {
8376
8442
  fg: theme().textMuted
@@ -8389,14 +8455,14 @@ function LoopDashboard(props) {
8389
8455
  }, _v$56 = {
8390
8456
  fg: theme().textMuted
8391
8457
  };
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));
8458
+ _v$49 !== _p$.e && (_p$.e = _$setProp(_el$262, "style", _v$49, _p$.e));
8459
+ _v$50 !== _p$.t && (_p$.t = _$setProp(_el$264, "style", _v$50, _p$.t));
8460
+ _v$51 !== _p$.a && (_p$.a = _$setProp(_el$266, "style", _v$51, _p$.a));
8461
+ _v$52 !== _p$.o && (_p$.o = _$setProp(_el$269, "style", _v$52, _p$.o));
8462
+ _v$53 !== _p$.i && (_p$.i = _$setProp(_el$271, "style", _v$53, _p$.i));
8463
+ _v$54 !== _p$.n && (_p$.n = _$setProp(_el$273, "style", _v$54, _p$.n));
8464
+ _v$55 !== _p$.s && (_p$.s = _$setProp(_el$275, "style", _v$55, _p$.s));
8465
+ _v$56 !== _p$.h && (_p$.h = _$setProp(_el$277, "style", _v$56, _p$.h));
8400
8466
  return _p$;
8401
8467
  }, {
8402
8468
  e: undefined,
@@ -8408,7 +8474,7 @@ function LoopDashboard(props) {
8408
8474
  s: undefined,
8409
8475
  h: undefined
8410
8476
  });
8411
- return _el$253;
8477
+ return _el$260;
8412
8478
  })();
8413
8479
  },
8414
8480
  get children() {
@@ -8420,77 +8486,77 @@ function LoopDashboard(props) {
8420
8486
  children: (cmd, i) => {
8421
8487
  const isActive = () => i() === cmdSelected();
8422
8488
  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}`;
8489
+ var _el$279 = _$createElement("box"), _el$280 = _$createElement("text"), _el$281 = _$createElement("span"), _el$282 = _$createElement("span"), _el$284 = _$createElement("span"), _el$286 = _$createElement("span"), _el$287 = _$createElement("span"), _el$289 = _$createElement("span"), _el$290 = _$createElement("span"), _el$291 = _$createTextNode(` \u2502 `);
8490
+ _$insertNode(_el$279, _el$280);
8491
+ _$setProp(_el$279, "flexDirection", "row");
8492
+ _$setProp(_el$279, "paddingLeft", 1);
8493
+ _$setProp(_el$279, "paddingRight", 1);
8494
+ _$insertNode(_el$280, _el$281);
8495
+ _$insertNode(_el$280, _el$282);
8496
+ _$insertNode(_el$280, _el$284);
8497
+ _$insertNode(_el$280, _el$286);
8498
+ _$insertNode(_el$280, _el$287);
8499
+ _$insertNode(_el$280, _el$289);
8500
+ _$insertNode(_el$280, _el$290);
8501
+ _$setProp(_el$280, "wrapMode", "none");
8502
+ _$setProp(_el$280, "truncate", true);
8503
+ _$insert(_el$281, (() => {
8504
+ var _c$23 = _$memo(() => !!isActive());
8505
+ return () => _c$23() ? `\u25B6 ${commandStatusIcon(cmd.status)} ${cmd.title}` : ` ${commandStatusIcon(cmd.status)} ${cmd.title}`;
8440
8506
  })());
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", {
8507
+ _$insertNode(_el$282, _$createTextNode(` \u2502 `));
8508
+ _$insertNode(_el$284, _$createTextNode(`Cmd `));
8509
+ _$insert(_el$286, () => commandStatusLabel(cmd.status).short);
8510
+ _$insertNode(_el$287, _$createTextNode(` \u2502 `));
8511
+ _$insert(_el$289, () => cmd.command);
8512
+ _$insert(_el$280, (() => {
8513
+ var _c$24 = _$memo(() => cmd.args.length > 0);
8514
+ return () => _c$24() && (() => {
8515
+ var _el$292 = _$createElement("span"), _el$293 = _$createTextNode(` `);
8516
+ _$insertNode(_el$292, _el$293);
8517
+ _$insert(_el$292, () => cmd.args.join(" ").slice(0, 40), null);
8518
+ _$effect((_$p) => _$setProp(_el$292, "style", {
8453
8519
  fg: theme().textMuted
8454
8520
  }, _$p));
8455
- return _el$285;
8521
+ return _el$292;
8456
8522
  })();
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", {
8523
+ })(), _el$290);
8524
+ _$insert(_el$280, (() => {
8525
+ var _c$25 = _$memo(() => cmd.exitCode !== undefined);
8526
+ return () => _c$25() && (() => {
8527
+ var _el$294 = _$createElement("span"), _el$295 = _$createTextNode(` \u2502 exit `);
8528
+ _$insertNode(_el$294, _el$295);
8529
+ _$insert(_el$294, () => cmd.exitCode, null);
8530
+ _$effect((_$p) => _$setProp(_el$294, "style", {
8465
8531
  fg: cmd.exitCode === 0 ? theme().success : theme().error
8466
8532
  }, _$p));
8467
- return _el$287;
8533
+ return _el$294;
8468
8534
  })();
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", {
8535
+ })(), _el$290);
8536
+ _$insert(_el$280, (() => {
8537
+ var _c$26 = _$memo(() => !!cmd.signal);
8538
+ return () => _c$26() && (() => {
8539
+ var _el$296 = _$createElement("span"), _el$297 = _$createTextNode(` \u2502 `);
8540
+ _$insertNode(_el$296, _el$297);
8541
+ _$insert(_el$296, () => cmd.signal, null);
8542
+ _$effect((_$p) => _$setProp(_el$296, "style", {
8477
8543
  fg: theme().warning
8478
8544
  }, _$p));
8479
- return _el$289;
8545
+ return _el$296;
8480
8546
  })();
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", {
8547
+ })(), _el$290);
8548
+ _$insertNode(_el$290, _el$291);
8549
+ _$insert(_el$290, () => ageLabel(cmd.updatedAt, clock()), null);
8550
+ _$insert(_el$280, (() => {
8551
+ var _c$27 = _$memo(() => !!cmd.truncated);
8552
+ return () => _c$27() && (() => {
8553
+ var _el$298 = _$createElement("span");
8554
+ _$insertNode(_el$298, _$createTextNode(` \u2502 \u26A0 truncated`));
8555
+ _$effect((_$p) => _$setProp(_el$298, "style", {
8490
8556
  fg: theme().warning,
8491
8557
  bold: true
8492
8558
  }, _$p));
8493
- return _el$291;
8559
+ return _el$298;
8494
8560
  })();
8495
8561
  })(), null);
8496
8562
  _$effect((_p$) => {
@@ -8512,14 +8578,14 @@ function LoopDashboard(props) {
8512
8578
  }, _v$64 = {
8513
8579
  fg: theme().textMuted
8514
8580
  };
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));
8581
+ _v$57 !== _p$.e && (_p$.e = _$setProp(_el$279, "backgroundColor", _v$57, _p$.e));
8582
+ _v$58 !== _p$.t && (_p$.t = _$setProp(_el$281, "style", _v$58, _p$.t));
8583
+ _v$59 !== _p$.a && (_p$.a = _$setProp(_el$282, "style", _v$59, _p$.a));
8584
+ _v$60 !== _p$.o && (_p$.o = _$setProp(_el$284, "style", _v$60, _p$.o));
8585
+ _v$61 !== _p$.i && (_p$.i = _$setProp(_el$286, "style", _v$61, _p$.i));
8586
+ _v$62 !== _p$.n && (_p$.n = _$setProp(_el$287, "style", _v$62, _p$.n));
8587
+ _v$63 !== _p$.s && (_p$.s = _$setProp(_el$289, "style", _v$63, _p$.s));
8588
+ _v$64 !== _p$.h && (_p$.h = _$setProp(_el$290, "style", _v$64, _p$.h));
8523
8589
  return _p$;
8524
8590
  }, {
8525
8591
  e: undefined,
@@ -8531,7 +8597,7 @@ function LoopDashboard(props) {
8531
8597
  s: undefined,
8532
8598
  h: undefined
8533
8599
  });
8534
- return _el$272;
8600
+ return _el$279;
8535
8601
  })();
8536
8602
  }
8537
8603
  }));
@@ -8543,115 +8609,115 @@ function LoopDashboard(props) {
8543
8609
  return selectedCommand();
8544
8610
  },
8545
8611
  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", {
8612
+ var _el$300 = _$createElement("box"), _el$301 = _$createElement("text"), _el$302 = _$createElement("span"), _el$303 = _$createTextNode(` `), _el$304 = _$createElement("span"), _el$306 = _$createElement("span"), _el$307 = _$createTextNode(` \u2014 `), _el$308 = _$createTextNode(`
8613
+ `), _el$309 = _$createElement("span"), _el$311 = _$createElement("span"), _el$312 = _$createTextNode(`
8614
+ `), _el$313 = _$createElement("span"), _el$315 = _$createElement("span"), _el$317 = _$createElement("span"), _el$318 = _$createTextNode(`
8615
+ `), _el$319 = _$createElement("span"), _el$321 = _$createElement("span"), _el$323 = _$createElement("span"), _el$324 = _$createTextNode(` bytes`), _el$325 = _$createElement("span"), _el$326 = _$createTextNode(` \u2502 updated `), _el$327 = _$createTextNode(`
8616
+ `), _el$328 = _$createElement("span");
8617
+ _$insertNode(_el$300, _el$301);
8618
+ _$setProp(_el$300, "flexDirection", "column");
8619
+ _$setProp(_el$300, "border", true);
8620
+ _$setProp(_el$300, "padding", 1);
8621
+ _$setProp(_el$300, "flexShrink", 0);
8622
+ _$setProp(_el$300, "maxHeight", 8);
8623
+ _$insertNode(_el$301, _el$302);
8624
+ _$insertNode(_el$301, _el$304);
8625
+ _$insertNode(_el$301, _el$306);
8626
+ _$insertNode(_el$301, _el$308);
8627
+ _$insertNode(_el$301, _el$309);
8628
+ _$insertNode(_el$301, _el$311);
8629
+ _$insertNode(_el$301, _el$312);
8630
+ _$insertNode(_el$301, _el$313);
8631
+ _$insertNode(_el$301, _el$315);
8632
+ _$insertNode(_el$301, _el$317);
8633
+ _$insertNode(_el$301, _el$318);
8634
+ _$insertNode(_el$301, _el$319);
8635
+ _$insertNode(_el$301, _el$321);
8636
+ _$insertNode(_el$301, _el$323);
8637
+ _$insertNode(_el$301, _el$325);
8638
+ _$insertNode(_el$301, _el$327);
8639
+ _$insertNode(_el$301, _el$328);
8640
+ _$insertNode(_el$302, _el$303);
8641
+ _$insert(_el$302, () => commandStatusIcon(cmd().status), _el$303);
8642
+ _$insert(_el$302, () => cmd().title, null);
8643
+ _$insertNode(_el$304, _$createTextNode(` Cmd `));
8644
+ _$insertNode(_el$306, _el$307);
8645
+ _$insert(_el$306, () => commandStatusLabel(cmd().status).short, _el$307);
8646
+ _$insert(_el$306, () => commandStatusLabel(cmd().status).hint, null);
8647
+ _$insertNode(_el$309, _$createTextNode(`\u2B22 Spawn: `));
8648
+ _$insert(_el$311, () => cmd().command);
8649
+ _$insert(_el$301, (() => {
8650
+ var _c$28 = _$memo(() => cmd().args.length > 0);
8651
+ return () => _c$28() && (() => {
8652
+ var _el$330 = _$createElement("span"), _el$331 = _$createTextNode(` `);
8653
+ _$insertNode(_el$330, _el$331);
8654
+ _$insert(_el$330, () => cmd().args.join(" "), null);
8655
+ _$effect((_$p) => _$setProp(_el$330, "style", {
8590
8656
  fg: theme().text
8591
8657
  }, _$p));
8592
- return _el$323;
8658
+ return _el$330;
8593
8659
  })();
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", {
8660
+ })(), _el$312);
8661
+ _$insertNode(_el$313, _$createTextNode(`\uD83D\uDCC1 `));
8662
+ _$insertNode(_el$315, _$createTextNode(`Cwd: `));
8663
+ _$insert(_el$317, () => cmd().cwd.replace(String(props.directory), "."));
8664
+ _$insert(_el$301, (() => {
8665
+ var _c$29 = _$memo(() => !!cmd().goalID);
8666
+ return () => _c$29() && [(() => {
8667
+ var _el$332 = _$createElement("span");
8668
+ _$insertNode(_el$332, _$createTextNode(` \u2502 \uD83D\uDD17 linked goal `));
8669
+ _$effect((_$p) => _$setProp(_el$332, "style", {
8604
8670
  fg: theme().textMuted
8605
8671
  }, _$p));
8606
- return _el$325;
8672
+ return _el$332;
8607
8673
  })(), (() => {
8608
- var _el$327 = _$createElement("span");
8609
- _$insert(_el$327, () => cmd().goalID.slice(0, 8));
8610
- _$effect((_$p) => _$setProp(_el$327, "style", {
8674
+ var _el$334 = _$createElement("span");
8675
+ _$insert(_el$334, () => cmd().goalID.slice(0, 8));
8676
+ _$effect((_$p) => _$setProp(_el$334, "style", {
8611
8677
  fg: theme().text
8612
8678
  }, _$p));
8613
- return _el$327;
8679
+ return _el$334;
8614
8680
  })()];
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", {
8681
+ })(), _el$318);
8682
+ _$insertNode(_el$319, _$createTextNode(`\uD83D\uDCBE `));
8683
+ _$insertNode(_el$321, _$createTextNode(`Output: `));
8684
+ _$insertNode(_el$323, _el$324);
8685
+ _$insert(_el$323, () => cmd().outputBytes, _el$324);
8686
+ _$insert(_el$301, (() => {
8687
+ var _c$30 = _$memo(() => !!cmd().truncated);
8688
+ return () => _c$30() && (() => {
8689
+ var _el$335 = _$createElement("span");
8690
+ _$insertNode(_el$335, _$createTextNode(` \xB7 \u26A0 truncated`));
8691
+ _$effect((_$p) => _$setProp(_el$335, "style", {
8626
8692
  fg: theme().warning,
8627
8693
  bold: true
8628
8694
  }, _$p));
8629
- return _el$328;
8695
+ return _el$335;
8630
8696
  })();
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(`
8697
+ })(), _el$325);
8698
+ _$insertNode(_el$325, _el$326);
8699
+ _$insert(_el$325, () => ageLabel(cmd().updatedAt, clock()), null);
8700
+ _$insert(_el$301, (() => {
8701
+ var _c$31 = _$memo(() => !!cmd().lastError);
8702
+ return () => _c$31() && [(() => {
8703
+ var _el$337 = _$createElement("span"), _el$338 = _$createTextNode(`
8638
8704
  \u26A0 Error: `);
8639
- _$insertNode(_el$330, _el$331);
8640
- _$effect((_$p) => _$setProp(_el$330, "style", {
8705
+ _$insertNode(_el$337, _el$338);
8706
+ _$effect((_$p) => _$setProp(_el$337, "style", {
8641
8707
  fg: theme().error,
8642
8708
  bold: true
8643
8709
  }, _$p));
8644
- return _el$330;
8710
+ return _el$337;
8645
8711
  })(), (() => {
8646
- var _el$333 = _$createElement("span");
8647
- _$insert(_el$333, () => cmd().lastError.slice(0, 120));
8648
- _$effect((_$p) => _$setProp(_el$333, "style", {
8712
+ var _el$340 = _$createElement("span");
8713
+ _$insert(_el$340, () => cmd().lastError.slice(0, 120));
8714
+ _$effect((_$p) => _$setProp(_el$340, "style", {
8649
8715
  fg: theme().error
8650
8716
  }, _$p));
8651
- return _el$333;
8717
+ return _el$340;
8652
8718
  })()];
8653
- })(), _el$320);
8654
- _$insertNode(_el$321, _$createTextNode(`o fullscreen \xB7 :interrupt :terminate :remove \xB7 text + Enter writes stdin`));
8719
+ })(), _el$327);
8720
+ _$insertNode(_el$328, _$createTextNode(`o fullscreen \xB7 :interrupt :terminate :remove \xB7 text + Enter writes stdin`));
8655
8721
  _$effect((_p$) => {
8656
8722
  var _v$65 = commandBorderColor(cmd().status, theme()), _v$66 = {
8657
8723
  fg: commandStatusColor(cmd().status, theme()),
@@ -8686,20 +8752,20 @@ function LoopDashboard(props) {
8686
8752
  }, _v$78 = {
8687
8753
  fg: theme().textMuted
8688
8754
  };
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));
8755
+ _v$65 !== _p$.e && (_p$.e = _$setProp(_el$300, "borderColor", _v$65, _p$.e));
8756
+ _v$66 !== _p$.t && (_p$.t = _$setProp(_el$302, "style", _v$66, _p$.t));
8757
+ _v$67 !== _p$.a && (_p$.a = _$setProp(_el$304, "style", _v$67, _p$.a));
8758
+ _v$68 !== _p$.o && (_p$.o = _$setProp(_el$306, "style", _v$68, _p$.o));
8759
+ _v$69 !== _p$.i && (_p$.i = _$setProp(_el$309, "style", _v$69, _p$.i));
8760
+ _v$70 !== _p$.n && (_p$.n = _$setProp(_el$311, "style", _v$70, _p$.n));
8761
+ _v$71 !== _p$.s && (_p$.s = _$setProp(_el$313, "style", _v$71, _p$.s));
8762
+ _v$72 !== _p$.h && (_p$.h = _$setProp(_el$315, "style", _v$72, _p$.h));
8763
+ _v$73 !== _p$.r && (_p$.r = _$setProp(_el$317, "style", _v$73, _p$.r));
8764
+ _v$74 !== _p$.d && (_p$.d = _$setProp(_el$319, "style", _v$74, _p$.d));
8765
+ _v$75 !== _p$.l && (_p$.l = _$setProp(_el$321, "style", _v$75, _p$.l));
8766
+ _v$76 !== _p$.u && (_p$.u = _$setProp(_el$323, "style", _v$76, _p$.u));
8767
+ _v$77 !== _p$.c && (_p$.c = _$setProp(_el$325, "style", _v$77, _p$.c));
8768
+ _v$78 !== _p$.w && (_p$.w = _$setProp(_el$328, "style", _v$78, _p$.w));
8703
8769
  return _p$;
8704
8770
  }, {
8705
8771
  e: undefined,
@@ -8717,7 +8783,7 @@ function LoopDashboard(props) {
8717
8783
  c: undefined,
8718
8784
  w: undefined
8719
8785
  });
8720
- return _el$293;
8786
+ return _el$300;
8721
8787
  })()
8722
8788
  })];
8723
8789
  }
@@ -8745,29 +8811,29 @@ function LoopDashboard(props) {
8745
8811
  },
8746
8812
  children: (ev) => [`
8747
8813
  `, (() => {
8748
- var _el$334 = _$createElement("span");
8749
- _$insert(_el$334, () => String(ev.type));
8750
- _$effect((_$p) => _$setProp(_el$334, "style", {
8814
+ var _el$341 = _$createElement("span");
8815
+ _$insert(_el$341, () => String(ev.type));
8816
+ _$effect((_$p) => _$setProp(_el$341, "style", {
8751
8817
  fg: eventColor(String(ev.type), theme()),
8752
8818
  bold: true
8753
8819
  }, _$p));
8754
- return _el$334;
8820
+ return _el$341;
8755
8821
  })(), (() => {
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", {
8822
+ var _el$342 = _$createElement("span"), _el$343 = _$createTextNode(` `);
8823
+ _$insertNode(_el$342, _el$343);
8824
+ _$insert(_el$342, () => ev.goalID?.slice(0, 8), null);
8825
+ _$effect((_$p) => _$setProp(_el$342, "style", {
8760
8826
  fg: theme().textMuted
8761
8827
  }, _$p));
8762
- return _el$335;
8828
+ return _el$342;
8763
8829
  })(), _$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", {
8830
+ var _el$344 = _$createElement("span"), _el$345 = _$createTextNode(` \u2014 `);
8831
+ _$insertNode(_el$344, _el$345);
8832
+ _$insert(_el$344, () => String(ev.summary).slice(0, 60), null);
8833
+ _$effect((_$p) => _$setProp(_el$344, "style", {
8768
8834
  fg: theme().text
8769
8835
  }, _$p));
8770
- return _el$337;
8836
+ return _el$344;
8771
8837
  })())]
8772
8838
  }), null);
8773
8839
  _$effect((_p$) => {
@@ -10564,43 +10630,69 @@ function CommandPanel(props) {
10564
10630
  get each() {
10565
10631
  return state().commands;
10566
10632
  },
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
- })()
10633
+ children: (cmd, i) => {
10634
+ const badge = watchBadge(cmd);
10635
+ const badgeWarn = badge === "flood-suspended" || badge === "budget-exhausted";
10636
+ const badgeHot = badge === "until-matched";
10637
+ const terminalReason = cmd.status !== "running" ? cmd.endReason : undefined;
10638
+ return (() => {
10639
+ 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 `);
10640
+ _$insertNode2(_el$17, _el$18);
10641
+ _$setProp2(_el$17, "paddingLeft", 1);
10642
+ _$setProp2(_el$17, "paddingRight", 1);
10643
+ _$insertNode2(_el$18, _el$19);
10644
+ _$insertNode2(_el$18, _el$20);
10645
+ _$setProp2(_el$18, "wrapMode", "none");
10646
+ _$setProp2(_el$18, "truncate", true);
10647
+ _$insert2(_el$19, () => i() === state().selected ? "\u25B6 " : " ", null);
10648
+ _$insert2(_el$19, () => cmd.title, null);
10649
+ _$insertNode2(_el$20, _el$21);
10650
+ _$insertNode2(_el$20, _el$22);
10651
+ _$insert2(_el$20, () => [cmd.command, ...cmd.args].join(" ").slice(0, 60), _el$22);
10652
+ _$insert2(_el$20, () => cmd.status, null);
10653
+ _$insert2(_el$20, (() => {
10654
+ var _c$ = _$memo2(() => cmd.exitCode !== undefined);
10655
+ return () => _c$() ? ` (${cmd.exitCode})` : "";
10656
+ })(), null);
10657
+ _$insert2(_el$18, terminalReason ? (() => {
10658
+ var _el$23 = _$createElement2("span"), _el$24 = _$createTextNode2(` [`), _el$25 = _$createTextNode2(`]`);
10659
+ _$insertNode2(_el$23, _el$24);
10660
+ _$insertNode2(_el$23, _el$25);
10661
+ _$insert2(_el$23, terminalReason, _el$25);
10662
+ _$effect2((_$p) => _$setProp2(_el$23, "style", {
10663
+ fg: terminalReason === "timeout" ? theme().warning : theme().textMuted
10664
+ }, _$p));
10665
+ return _el$23;
10666
+ })() : undefined, null);
10667
+ _$insert2(_el$18, badge ? (() => {
10668
+ var _el$26 = _$createElement2("span"), _el$27 = _$createTextNode2(` [`), _el$28 = _$createTextNode2(`]`);
10669
+ _$insertNode2(_el$26, _el$27);
10670
+ _$insertNode2(_el$26, _el$28);
10671
+ _$insert2(_el$26, badge, _el$28);
10672
+ _$effect2((_$p) => _$setProp2(_el$26, "style", {
10673
+ fg: badgeWarn ? theme().warning : badgeHot ? theme().primary : theme().textMuted
10674
+ }, _$p));
10675
+ return _el$26;
10676
+ })() : undefined, null);
10677
+ _$effect2((_p$) => {
10678
+ var _v$10 = i() === state().selected ? theme().backgroundElement : undefined, _v$11 = {
10679
+ fg: cmd.status === "running" ? theme().success : theme().textMuted,
10680
+ bold: i() === state().selected
10681
+ }, _v$12 = {
10682
+ fg: theme().textMuted
10683
+ };
10684
+ _v$10 !== _p$.e && (_p$.e = _$setProp2(_el$17, "backgroundColor", _v$10, _p$.e));
10685
+ _v$11 !== _p$.t && (_p$.t = _$setProp2(_el$19, "style", _v$11, _p$.t));
10686
+ _v$12 !== _p$.a && (_p$.a = _$setProp2(_el$20, "style", _v$12, _p$.a));
10687
+ return _p$;
10688
+ }, {
10689
+ e: undefined,
10690
+ t: undefined,
10691
+ a: undefined
10692
+ });
10693
+ return _el$17;
10694
+ })();
10695
+ }
10604
10696
  }));
10605
10697
  return _el$1;
10606
10698
  }
@@ -10610,43 +10702,59 @@ function CommandPanel(props) {
10610
10702
  return sel();
10611
10703
  },
10612
10704
  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" : ""}` : "";
10705
+ 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`);
10706
+ _$insertNode2(_el$29, _el$30);
10707
+ _$setProp2(_el$29, "flexDirection", "column");
10708
+ _$setProp2(_el$29, "border", true);
10709
+ _$setProp2(_el$29, "padding", 1);
10710
+ _$setProp2(_el$29, "flexShrink", 0);
10711
+ _$setProp2(_el$29, "maxHeight", 16);
10712
+ _$setProp2(_el$29, "overflow", "hidden");
10713
+ _$insertNode2(_el$30, _el$31);
10714
+ _$insertNode2(_el$30, _el$32);
10715
+ _$insert2(_el$31, () => cmd().title);
10716
+ _$insertNode2(_el$32, _el$33);
10717
+ _$insertNode2(_el$32, _el$34);
10718
+ _$insertNode2(_el$32, _el$35);
10719
+ _$insertNode2(_el$32, _el$36);
10720
+ _$insert2(_el$32, () => [cmd().command, ...cmd().args].join(" "), _el$34);
10721
+ _$insert2(_el$32, () => cmd().status, _el$35);
10722
+ _$insert2(_el$32, () => outputMeta().totalBytes, _el$36);
10723
+ _$insert2(_el$32, () => outputMeta().live ? " \xB7 live" : "", null);
10724
+ _$insert2(_el$32, () => cmd().truncated ? " \xB7 truncated" : "", null);
10725
+ _$insert2(_el$32, (() => {
10726
+ var _c$2 = _$memo2(() => !!(cmd().status !== "running" && cmd().endReason));
10727
+ return () => _c$2() ? ` \xB7 end:${cmd().endReason}` : "";
10728
+ })(), null);
10729
+ _$insert2(_el$32, (() => {
10730
+ var _c$3 = _$memo2(() => !!(emulated() && screen && feedForID === cmd().id));
10731
+ return () => _c$3() ? ` \xB7 ${screen.cols}x${screen.rows} screen${screen.activeBuffer === "alternate" ? " \xB7 alt-screen" : ""}` : "";
10636
10732
  })(), null);
10637
- _$insert2(_el$23, _$createComponent2(Show2, {
10733
+ _$insert2(_el$29, (() => {
10734
+ var _c$4 = _$memo2(() => !!formatWatchDetail(cmd()));
10735
+ return () => _c$4() ? (() => {
10736
+ var _el$37 = _$createElement2("text"), _el$38 = _$createElement2("span");
10737
+ _$insertNode2(_el$37, _el$38);
10738
+ _$insert2(_el$38, () => formatWatchDetail(cmd()));
10739
+ _$effect2((_$p) => _$setProp2(_el$38, "style", {
10740
+ fg: theme().textMuted
10741
+ }, _$p));
10742
+ return _el$37;
10743
+ })() : undefined;
10744
+ })(), null);
10745
+ _$insert2(_el$29, _$createComponent2(Show2, {
10638
10746
  get when() {
10639
10747
  return _$memo2(() => !!emulated())() && screenRows().length > 0;
10640
10748
  },
10641
10749
  get fallback() {
10642
10750
  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", {
10751
+ var _el$39 = _$createElement2("text"), _el$40 = _$createElement2("span");
10752
+ _$insertNode2(_el$39, _el$40);
10753
+ _$insert2(_el$40, () => output().slice(-4000) || "(no output yet)");
10754
+ _$effect2((_$p) => _$setProp2(_el$40, "style", {
10647
10755
  fg: theme().text
10648
10756
  }, _$p));
10649
- return _el$31;
10757
+ return _el$39;
10650
10758
  })();
10651
10759
  },
10652
10760
  get children() {
@@ -10655,26 +10763,26 @@ function CommandPanel(props) {
10655
10763
  return screenRows();
10656
10764
  },
10657
10765
  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, {
10766
+ var _el$41 = _$createElement2("text");
10767
+ _$setProp2(_el$41, "wrapMode", "none");
10768
+ _$setProp2(_el$41, "truncate", true);
10769
+ _$insert2(_el$41, _$createComponent2(For2, {
10662
10770
  get each() {
10663
10771
  return row.runs;
10664
10772
  },
10665
10773
  children: (run) => (() => {
10666
- var _el$34 = _$createElement2("span");
10667
- _$insert2(_el$34, () => run.text);
10668
- _$effect2((_$p) => _$setProp2(_el$34, "style", {
10774
+ var _el$42 = _$createElement2("span");
10775
+ _$insert2(_el$42, () => run.text);
10776
+ _$effect2((_$p) => _$setProp2(_el$42, "style", {
10669
10777
  fg: run.fg ?? theme().text,
10670
10778
  bg: run.bg,
10671
10779
  bold: run.bold,
10672
10780
  underline: run.underline
10673
10781
  }, _$p));
10674
- return _el$34;
10782
+ return _el$42;
10675
10783
  })()
10676
10784
  }));
10677
- return _el$33;
10785
+ return _el$41;
10678
10786
  })()
10679
10787
  });
10680
10788
  }
@@ -10686,16 +10794,16 @@ function CommandPanel(props) {
10686
10794
  }, _v$15 = {
10687
10795
  fg: theme().textMuted
10688
10796
  };
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));
10797
+ _v$13 !== _p$.e && (_p$.e = _$setProp2(_el$29, "borderColor", _v$13, _p$.e));
10798
+ _v$14 !== _p$.t && (_p$.t = _$setProp2(_el$31, "style", _v$14, _p$.t));
10799
+ _v$15 !== _p$.a && (_p$.a = _$setProp2(_el$32, "style", _v$15, _p$.a));
10692
10800
  return _p$;
10693
10801
  }, {
10694
10802
  e: undefined,
10695
10803
  t: undefined,
10696
10804
  a: undefined
10697
10805
  });
10698
- return _el$23;
10806
+ return _el$29;
10699
10807
  })()
10700
10808
  }), _el$10);
10701
10809
  _$insertNode2(_el$10, _el$11);
@@ -11722,6 +11830,179 @@ Press Ctrl+] to go back. Nothing was subscribed or written.`);
11722
11830
  })();
11723
11831
  }
11724
11832
 
11833
+ // src/v2/native-rpc.ts
11834
+ var NATIVE_RPC_ID = "loopd.native";
11835
+ function resolveNativeParentID(child) {
11836
+ return child.fork?.sessionID ?? child.parentID ?? undefined;
11837
+ }
11838
+ var requestSchema = {
11839
+ type: "object",
11840
+ properties: {
11841
+ requestID: { type: "string" },
11842
+ goalID: { type: "string" },
11843
+ parentSessionID: { type: "string" },
11844
+ title: { type: "string" },
11845
+ agent: { type: "string" },
11846
+ model: {
11847
+ type: "object",
11848
+ properties: {
11849
+ id: { type: "string" },
11850
+ providerID: { type: "string" }
11851
+ },
11852
+ required: ["id", "providerID"],
11853
+ additionalProperties: false
11854
+ },
11855
+ permissions: {
11856
+ type: "array",
11857
+ items: {
11858
+ type: "object",
11859
+ properties: {
11860
+ action: { type: "string" },
11861
+ resource: { type: "string" },
11862
+ effect: { type: "string", enum: ["allow", "deny", "ask"] }
11863
+ },
11864
+ required: ["action", "resource", "effect"],
11865
+ additionalProperties: false
11866
+ }
11867
+ },
11868
+ directory: { type: "string" }
11869
+ },
11870
+ required: ["requestID", "goalID", "parentSessionID", "title"],
11871
+ additionalProperties: false
11872
+ };
11873
+ var claimResultSchema = {
11874
+ type: "object",
11875
+ properties: {
11876
+ requestID: { type: "string" },
11877
+ claimantID: { type: "string" }
11878
+ },
11879
+ required: ["requestID", "claimantID"],
11880
+ additionalProperties: false
11881
+ };
11882
+ var claimAckSchema = {
11883
+ type: "object",
11884
+ properties: {
11885
+ requestID: { type: "string" },
11886
+ claimantID: { type: "string" },
11887
+ won: { type: "boolean" }
11888
+ },
11889
+ required: ["requestID", "claimantID", "won"],
11890
+ additionalProperties: false
11891
+ };
11892
+ var createResultSchema = {
11893
+ type: "object",
11894
+ properties: {
11895
+ requestID: { type: "string" },
11896
+ childSessionID: { type: "string" },
11897
+ parentSessionID: { type: "string" },
11898
+ topology: { type: "string", const: "v2-native-child" }
11899
+ },
11900
+ required: ["requestID", "childSessionID", "parentSessionID", "topology"],
11901
+ additionalProperties: false
11902
+ };
11903
+ var failureSchema = {
11904
+ type: "object",
11905
+ properties: {
11906
+ requestID: { type: "string" },
11907
+ reason: { type: "string" },
11908
+ detail: { type: "string" },
11909
+ preCreation: { type: "boolean" }
11910
+ },
11911
+ required: ["requestID", "reason", "preCreation"],
11912
+ additionalProperties: false
11913
+ };
11914
+ var emptySchema = {
11915
+ type: "object",
11916
+ properties: {},
11917
+ additionalProperties: false
11918
+ };
11919
+ var nativeRpcDefinition = {
11920
+ id: NATIVE_RPC_ID,
11921
+ methods: {
11922
+ claimRequest: { input: claimResultSchema, output: claimAckSchema, errors: {} },
11923
+ completeWorkerCreate: { input: createResultSchema, output: emptySchema, errors: {} },
11924
+ failRequest: { input: failureSchema, output: emptySchema, errors: {} }
11925
+ },
11926
+ events: {
11927
+ workerCreateRequested: { schema: requestSchema }
11928
+ }
11929
+ };
11930
+
11931
+ // src/v2/native-tui.ts
11932
+ function subscribeNativeRequests(rpcClient, deps) {
11933
+ return rpcClient.events.on("workerCreateRequested", (event) => {
11934
+ const request = event?.data;
11935
+ if (!request || typeof request.requestID !== "string")
11936
+ return;
11937
+ const directory = event?.location?.directory;
11938
+ const options = typeof directory === "string" && directory.length > 0 ? { location: { directory } } : undefined;
11939
+ handleWorkerCreateRequest(request, {
11940
+ ...deps,
11941
+ claim: (input) => rpcClient.claimRequest(input, options).then((ack) => ({ won: ack?.won === true })),
11942
+ complete: (result) => rpcClient.completeWorkerCreate(result, options),
11943
+ fail: (failure) => rpcClient.failRequest(failure, options)
11944
+ }).then((outcome) => {
11945
+ try {
11946
+ deps.onOutcome?.(outcome, request.requestID);
11947
+ } catch {}
11948
+ }, () => {});
11949
+ });
11950
+ }
11951
+ async function handleWorkerCreateRequest(request, deps) {
11952
+ const parent = deps.data.session.get(request.parentSessionID);
11953
+ if (!parent)
11954
+ return { handled: "ignored-unknown-parent" };
11955
+ if (deps.isKnownParent && !deps.isKnownParent(request.parentSessionID)) {
11956
+ return { handled: "ignored-unknown-parent" };
11957
+ }
11958
+ const { won } = await deps.claim({ requestID: request.requestID, claimantID: deps.claimantID });
11959
+ if (!won)
11960
+ return { handled: "claim-lost" };
11961
+ const fail = (reason, preCreation, detail) => deps.fail({ requestID: request.requestID, reason, preCreation, detail }).then(() => ({
11962
+ handled: "failed",
11963
+ reason,
11964
+ preCreation
11965
+ }));
11966
+ let forkInput;
11967
+ try {
11968
+ const messages = deps.data.session.message.list(request.parentSessionID);
11969
+ const firstID = messages[0]?.id;
11970
+ forkInput = firstID ? { sessionID: request.parentSessionID, before: firstID } : { sessionID: request.parentSessionID };
11971
+ } catch (error) {
11972
+ return fail("message-list-failed", true, error instanceof Error ? error.message : String(error));
11973
+ }
11974
+ let child;
11975
+ try {
11976
+ child = await deps.client.session.fork(forkInput);
11977
+ } catch (error) {
11978
+ return fail("fork-failed", true, error instanceof Error ? error.message : String(error));
11979
+ }
11980
+ const actualParent = resolveNativeParentID(child);
11981
+ if (actualParent !== request.parentSessionID) {
11982
+ return fail("parent-mismatch", false, `resolved-parent=${JSON.stringify(actualParent)} expected=${JSON.stringify(request.parentSessionID)}`);
11983
+ }
11984
+ try {
11985
+ if (request.agent && deps.client.session.switchAgent) {
11986
+ await deps.client.session.switchAgent({ sessionID: child.id, agent: request.agent });
11987
+ }
11988
+ if (request.model && deps.client.session.switchModel) {
11989
+ await deps.client.session.switchModel({ sessionID: child.id, model: request.model });
11990
+ }
11991
+ if (deps.client.session.update) {
11992
+ await deps.client.session.update({ sessionID: child.id, title: request.title });
11993
+ }
11994
+ } catch (error) {
11995
+ return fail("configure-failed", false, error instanceof Error ? error.message : String(error));
11996
+ }
11997
+ await deps.complete({
11998
+ requestID: request.requestID,
11999
+ childSessionID: child.id,
12000
+ parentSessionID: request.parentSessionID,
12001
+ topology: "v2-native-child"
12002
+ });
12003
+ return { handled: "completed", childSessionID: child.id, forkInput };
12004
+ }
12005
+
11725
12006
  // src/tui/plugin.tsx
11726
12007
  var PLUGIN_ID = "opencode-loopd.tui";
11727
12008
  function navigateToTerminalV1(api, commandID, ownerSessionID, returnSessionID) {
@@ -11907,6 +12188,57 @@ function navigateToTerminalV2(router, commandID, ownerSessionID, returnSessionID
11907
12188
  }
11908
12189
  var v2setup = (ctx) => {
11909
12190
  const directory = ctx.location?.directory ?? ctx.data.location.default().directory;
12191
+ const claimantID = `tui-${Date.now().toString(36)}-${Math.floor(Math.random() * 1e6).toString(36)}`;
12192
+ let unsubscribeNative;
12193
+ try {
12194
+ const rpcClient = ctx.client.rpc(nativeRpcDefinition);
12195
+ unsubscribeNative = subscribeNativeRequests(rpcClient, {
12196
+ client: {
12197
+ session: {
12198
+ fork: (input) => ctx.client.session.fork(input),
12199
+ switchAgent: (input) => ctx.client.session.switchAgent(input),
12200
+ switchModel: (input) => ctx.client.session.switchModel(input),
12201
+ update: (input) => ctx.client.session.update(input)
12202
+ }
12203
+ },
12204
+ data: {
12205
+ session: {
12206
+ get: (sessionID) => {
12207
+ const session = ctx.data.session.get(sessionID);
12208
+ return session ? {
12209
+ id: session.id
12210
+ } : undefined;
12211
+ },
12212
+ message: {
12213
+ list: (sessionID) => ctx.data.session.message.list(sessionID).map((message) => ({
12214
+ id: message.id
12215
+ }))
12216
+ }
12217
+ }
12218
+ },
12219
+ claimantID,
12220
+ onOutcome: (outcome, requestID) => {
12221
+ try {
12222
+ const {
12223
+ appendFileSync
12224
+ } = __require("fs");
12225
+ appendFileSync("/tmp/loopd-tui.log", `[${new Date().toISOString()}] native-worker request=${requestID} outcome=${JSON.stringify(outcome)}
12226
+ `);
12227
+ } catch {}
12228
+ },
12229
+ isKnownParent: (parentSessionID) => {
12230
+ const parent = ctx.data.session.get(parentSessionID);
12231
+ if (!parent)
12232
+ return false;
12233
+ const parentDirectory = parent.location?.directory;
12234
+ if (!parentDirectory)
12235
+ return true;
12236
+ return parentDirectory === directory;
12237
+ }
12238
+ });
12239
+ } catch {
12240
+ unsubscribeNative = undefined;
12241
+ }
11910
12242
  let dialogOpen = false;
11911
12243
  const closeDialog = () => {
11912
12244
  dialogOpen = false;
@@ -12096,6 +12428,9 @@ var v2setup = (ctx) => {
12096
12428
  return () => {
12097
12429
  closeDialog();
12098
12430
  ctx.ui.panel.close();
12431
+ try {
12432
+ unsubscribeNative?.();
12433
+ } catch {}
12099
12434
  try {
12100
12435
  unregisterTerminalRoute?.();
12101
12436
  } catch {}