@kky42/pievo-server 2.0.2 → 2.0.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.
Files changed (90) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{LoopView-XXW59HAV.js → LoopView-Pbp2YtUu.js} +3 -3
  3. package/.output/public/assets/{Modal-BnCPgN_k.js → Modal-B3xpEtcf.js} +1 -1
  4. package/.output/public/assets/{SignIn-BAoOONQ9.js → SignIn-9vsaKv_p.js} +1 -1
  5. package/.output/public/assets/{actionUi-Dxe9cHAc.js → actionUi-DDDfD0WX.js} +1 -1
  6. package/.output/public/assets/app-CStTBRt2.css +2 -0
  7. package/.output/public/assets/{artifactView-DekEs5ME.js → artifactView-BV-yQVrj.js} +1 -1
  8. package/.output/public/assets/index-49hAH0gP.js +12 -0
  9. package/.output/public/assets/{invite._token-BAqaXvte.js → invite._token-C3t4JfAY.js} +1 -1
  10. package/.output/public/assets/{invite._token-q54LLZ6A.js → invite._token-C891oGkK.js} +1 -1
  11. package/.output/public/assets/lifecycleUi-C3k2MlX8.js +1 -0
  12. package/.output/public/assets/{loopApi-5s2-kCnu.js → loopApi-C_Dtw-nL.js} +1 -1
  13. package/.output/public/assets/loops._loopId-DD4fKGMu.js +4 -0
  14. package/.output/public/assets/{loops._loopId_.runs._runId-lGYlHXTN.js → loops._loopId_.runs._runId-DoPcCQy7.js} +2 -2
  15. package/.output/public/assets/notifyFns-BaukhLAg.js +1 -0
  16. package/.output/public/assets/{preload-helper-ycaoAemE.js → preload-helper--VCqDT5m.js} +2 -2
  17. package/.output/public/assets/{routes-D0zKR7gK.js → routes-BS4N7Lnf.js} +1 -1
  18. package/.output/public/assets/{routes-C7Pw5lGn.js → routes-DsdcURfk.js} +1 -1
  19. package/.output/public/assets/{t._teamId-CCgajlMS.js → t._teamId-C9uEyAh_.js} +1 -1
  20. package/.output/public/assets/{t._teamId-Cn7cRGAh.js → t._teamId-DSYlMX_v.js} +1 -1
  21. package/.output/public/assets/ui-Gb1413-F.js +1 -0
  22. package/.output/server/_ssr/{DashboardView-BhJBW7IL.mjs → DashboardView-CQdjYy03.mjs} +36 -111
  23. package/.output/server/_ssr/{LoopPlaybook-BC9Dvnw2.mjs → LoopPlaybook-C86vJIjZ.mjs} +9 -9
  24. package/.output/server/_ssr/{LoopView-Dom6Ad5G.mjs → LoopView-cDyjmf1B.mjs} +16 -16
  25. package/.output/server/_ssr/{Modal-CfWC9R49.mjs → Modal-Bc_5TYGr.mjs} +2 -2
  26. package/.output/server/_ssr/{SignIn-D70NUJsN.mjs → SignIn-BQQiD3Ss.mjs} +3 -3
  27. package/.output/server/_ssr/{actionUi-mDYOvJdB.mjs → actionUi-BKF6xI3d.mjs} +2 -2
  28. package/.output/server/_ssr/{adapters-D0d1fBKK.mjs → adapters-N4-yQ1vK.mjs} +4 -8
  29. package/.output/server/_ssr/{artifactFiles-BfE1070_.mjs → artifactFiles-Dl1EaUtJ.mjs} +3 -3
  30. package/.output/server/_ssr/{artifactView-CYV1r48i.mjs → artifactView-DX4P3Krh.mjs} +2 -2
  31. package/.output/server/_ssr/artifacts-DzWJrBxK.mjs +2 -0
  32. package/.output/server/_ssr/{auth-BP81awUE.mjs → auth-CbAfO4Ne.mjs} +9 -9
  33. package/.output/server/_ssr/{boot-sM4t8RJu.mjs → boot-BZ-YyUiD.mjs} +1397 -626
  34. package/.output/server/_ssr/{boot-pUGFIxSA.mjs → boot-BigKgB8p.mjs} +1 -1
  35. package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-CZJuWL5Z.mjs → bun-sqlite-dialect-BW9W1_Ps-B67XLJZt.mjs} +2 -2
  36. package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-C2PCtZfI.mjs → d1-sqlite-dialect-BLC8LXE6-nff_yHzH.mjs} +2 -2
  37. package/.output/server/_ssr/db-BF8vSovA.mjs +2 -0
  38. package/.output/server/_ssr/{dist-Z7v6ihws.mjs → dist-BGjVt6NE.mjs} +2 -2
  39. package/.output/server/_ssr/{factory-BQ_XiP23.mjs → factory-DNeo3vVt.mjs} +2 -2
  40. package/.output/server/_ssr/{invite._token-CRAl6-yK.mjs → invite._token-Bipap1cl.mjs} +6 -6
  41. package/.output/server/_ssr/{invite._token-23daBIfe.mjs → invite._token-BlbVjz-o.mjs} +2 -2
  42. package/.output/server/_ssr/{invite._token-VKmyC9-R.mjs → invite._token-z3PzCMzb.mjs} +5 -5
  43. package/.output/server/_ssr/{kysely-adapter-DjQPkqgJ.mjs → kysely-adapter-C1ww7PKr.mjs} +1 -1
  44. package/.output/server/_ssr/{lifecycleUi-l3nx9i3T.mjs → lifecycleUi-5jMhxINb.mjs} +1 -3
  45. package/.output/server/_ssr/logger-C7aewtve.mjs +2 -0
  46. package/.output/server/_ssr/{loopApi-BfMnXaKT.mjs → loopApi-7MTSs6hy.mjs} +5 -5
  47. package/.output/server/_ssr/{loopApi-i7xdpokI.mjs → loopApi-JzGGZZp2.mjs} +31 -25
  48. package/.output/server/_ssr/{loops._loopId-jXSgPWG1.mjs → loops._loopId-CJxQ0EG4.mjs} +4 -4
  49. package/.output/server/_ssr/{loops._loopId-DOPfN_Op.mjs → loops._loopId-DFkyTJR3.mjs} +106 -132
  50. package/.output/server/_ssr/{loops._loopId_.runs._runId-DiBP2rCe.mjs → loops._loopId_.runs._runId-DkG-ZCD1.mjs} +10 -17
  51. package/.output/server/_ssr/{loops._loopId_.runs._runId-BhoM6DWj.mjs → loops._loopId_.runs._runId-lTigSOmT.mjs} +4 -4
  52. package/.output/server/_ssr/{machineFns-ChO1NM3C.mjs → machineFns-Dda8-rBY.mjs} +3 -3
  53. package/.output/server/_ssr/{node-sqlite-dialect-BGlhyZkk.mjs → node-sqlite-dialect-BS2OAFJh.mjs} +2 -2
  54. package/.output/server/_ssr/{notifyFns-DWotltSJ.mjs → notifyFns-C6eyIFZE.mjs} +7 -8
  55. package/.output/server/_ssr/{notifyFns-B1MSIzrT.mjs → notifyFns-C9N0QLe3.mjs} +3 -3
  56. package/.output/server/_ssr/{router-BOHN4CWd.mjs → router-DIfoLu1r.mjs} +30 -30
  57. package/.output/server/_ssr/{routes-DjaTMZqZ.mjs → routes-Bx0bRxt9.mjs} +2 -2
  58. package/.output/server/_ssr/{routes-BQjhKV-m.mjs → routes-DYJB0rKC.mjs} +5 -5
  59. package/.output/server/_ssr/{routes-C2VJzARp.mjs → routes-bWgX0tRE.mjs} +6 -6
  60. package/.output/server/_ssr/runDiff-B9t7ouYj.mjs +2 -0
  61. package/.output/server/_ssr/ssr.mjs +51 -51
  62. package/.output/server/_ssr/store-Dw4LiFjE.mjs +2 -0
  63. package/.output/server/_ssr/{t._teamId-o86wLJrg.mjs → t._teamId-B_ieXBNF.mjs} +6 -6
  64. package/.output/server/_ssr/{t._teamId-CRgNlDGk.mjs → t._teamId-C_KZZ4Xh.mjs} +5 -5
  65. package/.output/server/_ssr/{t._teamId-D_vi_OuG.mjs → t._teamId-D9nCEa2h.mjs} +2 -2
  66. package/.output/server/_ssr/{teamFns-D4I-0dEB.mjs → teamFns-BBIbatdZ.mjs} +2 -2
  67. package/.output/server/_ssr/{teamFns-C3vnwAqv.mjs → teamFns-O3ZmtZL2.mjs} +3 -3
  68. package/.output/server/_ssr/tokens-DI_pklQB.mjs +2 -0
  69. package/.output/server/_ssr/{ui-WGITbP6Z.mjs → ui-B6mE5-5v.mjs} +7 -23
  70. package/.output/server/{_tanstack-start-manifest_v-DYC0z7st.mjs → _tanstack-start-manifest_v-DKnfwHZr.mjs} +28 -28
  71. package/.output/server/drizzle/0014_luxuriant_scrambler.sql +5 -0
  72. package/.output/server/drizzle/0015_run_history_foundation.sql +43 -0
  73. package/.output/server/drizzle/meta/_journal.json +14 -0
  74. package/.output/server/index.mjs +106 -106
  75. package/drizzle/0014_luxuriant_scrambler.sql +5 -0
  76. package/drizzle/0015_run_history_foundation.sql +43 -0
  77. package/drizzle/meta/_journal.json +14 -0
  78. package/package.json +1 -1
  79. package/.output/public/assets/app-DzFILlbu.css +0 -2
  80. package/.output/public/assets/index-BtvLZjhl.js +0 -12
  81. package/.output/public/assets/lifecycleUi-B8Je9exd.js +0 -1
  82. package/.output/public/assets/loops._loopId-BCK4oIRv.js +0 -4
  83. package/.output/public/assets/notifyFns-BneSItOi.js +0 -1
  84. package/.output/public/assets/ui-RFP3R3lU.js +0 -1
  85. package/.output/server/_ssr/artifacts-CSGRJdSy.mjs +0 -2
  86. package/.output/server/_ssr/db-Cc6I8bWL.mjs +0 -2
  87. package/.output/server/_ssr/logger-CHoC5_kz.mjs +0 -2
  88. package/.output/server/_ssr/runDiff-SlGPjjNq.mjs +0 -113
  89. package/.output/server/_ssr/store-BjXC623Z.mjs +0 -2
  90. package/.output/server/_ssr/tokens-BCOvumer.mjs +0 -2
@@ -1,24 +1,24 @@
1
1
  import { o as __toESM } from "../_runtime.mjs";
2
2
  import { g as require_jsx_runtime, h as require_react } from "../_libs/@base-ui/react+[...].mjs";
3
- import { c as CODING_AGENTS, g as buildFileEntries, ht as isTaskEntry } from "./boot-sM4t8RJu.mjs";
4
- import { A as sectionHeadCls, C as isCompleted, D as rel, M as tsShort, N as until, S as isClosed, _ as dur, b as humanBytes, c as btnDanger, d as btnQuiet, h as dotLabel, i as Pre, j as selectCls, k as runPulseStyle, l as btnPrimary, m as dotColor, n as Loading, o as btn, p as cronText, r as Pill, s as btnCost, t as ErrorBanner, v as fmt, w as labelCls, x as inputCls } from "./ui-WGITbP6Z.mjs";
3
+ import { c as CODING_AGENTS, g as buildFileEntries, mt as isTaskEntry } from "./boot-BZ-YyUiD.mjs";
4
+ import { A as tsShort, D as runPulseStyle, O as sectionHeadCls, S as labelCls, T as rel, _ as dur, b as humanBytes, c as btnDanger, d as btnQuiet, h as dotLabel, i as Pre, j as until, k as selectCls, l as btnPrimary, m as dotColor, n as Loading, o as btn, p as cronText, r as Pill, s as btnCost, t as ErrorBanner, v as fmt, x as inputCls } from "./ui-B6mE5-5v.mjs";
5
5
  import { d as useNavigate, u as Link } from "../_libs/@tanstack/react-router+[...].mjs";
6
- import { C as stopJob, S as startJob, a as evolveJob, b as requestEdit, d as getJobDetail, g as loadOlderRuns, i as deleteJob, s as getArtifacts, v as patchJob, x as runJob, y as pauseJob } from "./loopApi-BfMnXaKT.mjs";
7
- import { n as TaskFileView, r as ViewerHead, t as ArtifactBody } from "./artifactView-CYV1r48i.mjs";
8
- import { i as useFlash, n as FlashLine, r as LoadErrorCard, t as ConfirmBar } from "./actionUi-mDYOvJdB.mjs";
9
- import { s as useSession } from "./LoopPlaybook-BC9Dvnw2.mjs";
6
+ import { C as stopJob, S as startJob, a as evolveJob, b as requestSteer, d as getJobDetail, g as loadOlderRuns, i as deleteJob, s as getArtifacts, v as patchJob, x as runJob, y as pauseJob } from "./loopApi-7MTSs6hy.mjs";
7
+ import { n as TaskFileView, r as ViewerHead, t as ArtifactBody } from "./artifactView-DX4P3Krh.mjs";
8
+ import { s as useSession } from "./LoopPlaybook-C86vJIjZ.mjs";
10
9
  import { t as setActiveTeamCookie } from "./teamCookie-B7hLOIie.mjs";
11
- import { t as SignIn } from "./SignIn-D70NUJsN.mjs";
12
- import { i as lifecycleDisplay, n as daemonStopSupport, r as deriveLoopLifecycle, t as DAEMON_UPGRADE_REQUIRED } from "./lifecycleUi-l3nx9i3T.mjs";
13
- import { a as listChannels, n as Timeline, s as mergeRuns, t as MachinesModal } from "./notifyFns-DWotltSJ.mjs";
14
- import { t as Route } from "./loops._loopId-jXSgPWG1.mjs";
15
- //#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId-DOPfN_Op.js
10
+ import { t as SignIn } from "./SignIn-BQQiD3Ss.mjs";
11
+ import { i as useFlash, n as FlashLine, r as LoadErrorCard, t as ConfirmBar } from "./actionUi-BKF6xI3d.mjs";
12
+ import { i as lifecycleDisplay, n as daemonStopSupport, r as deriveLoopLifecycle, t as DAEMON_UPGRADE_REQUIRED } from "./lifecycleUi-5jMhxINb.mjs";
13
+ import { a as listChannels, n as Timeline, s as mergeRuns, t as MachinesModal } from "./notifyFns-C6eyIFZE.mjs";
14
+ import { t as Route } from "./loops._loopId-CJxQ0EG4.mjs";
15
+ //#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId-DFkyTJR3.js
16
16
  var import_react = /* @__PURE__ */ __toESM(require_react());
17
17
  var import_jsx_runtime = require_jsx_runtime();
18
18
  /**
19
19
  * Copy-prompt path for the loop-detail Edit composer.
20
20
  *
21
- * The dispatch path (`requestEdit`) runs ONE agent pass on the owner's machine -
21
+ * The dispatch path (`requestSteer`) runs ONE agent pass on the owner's machine -
22
22
  * spends credits, no conversation. This is the non-dispatch alternative: a
23
23
  * self-contained prompt the owner pastes into their OWN local coding-agent
24
24
  * session (in the loop's directory) so they can iterate/converse and adjust the
@@ -40,7 +40,7 @@ function loopDir(taskFile) {
40
40
  * instruction, or a clear placeholder asking them to describe it), and that the
41
41
  * agent should drive the installed pievo CLI/skill (`pievo loops`,
42
42
  * `pievo edit <id> ...`) to apply and confirm the change. Concise, agent-neutral. */
43
- function buildEditPrompt({ loopId, loopName, instruction }) {
43
+ function buildSteerPrompt({ loopId, loopName, instruction }) {
44
44
  const want = instruction?.trim() || "Describe the change you want to make to this loop.";
45
45
  return [
46
46
  `I want to adjust my Pievo loop "${loopName}" (loop id: ${loopId}).`,
@@ -212,7 +212,7 @@ function initState(initial) {
212
212
  taskFile: initial?.taskFile ?? "",
213
213
  notify: initial?.notify ?? "auto",
214
214
  channelId: initial?.channelId ?? "",
215
- stateSchema: initial?.stateSchema ? JSON.stringify(initial.stateSchema) : "",
215
+ metricSchema: initial?.metricSchema ? JSON.stringify(initial.metricSchema) : "",
216
216
  ui: initial?.ui ?? "",
217
217
  agent: initial?.agent ?? "claude-code",
218
218
  workdir: e?.workdir ?? "",
@@ -288,10 +288,10 @@ var LoopForm = (0, import_react.forwardRef)(function LoopForm({ initial, channel
288
288
  listChannels().then(setFetched).catch(() => {});
289
289
  }, [channelsProp]);
290
290
  (0, import_react.useImperativeHandle)(ref, () => ({ read() {
291
- let stateSchema;
292
- const ss = f.stateSchema.trim();
291
+ let metricSchema;
292
+ const ss = f.metricSchema.trim();
293
293
  if (ss) try {
294
- stateSchema = JSON.parse(ss);
294
+ metricSchema = JSON.parse(ss);
295
295
  } catch {
296
296
  setSchemaErr("Not valid JSON - expected an array like [{\"key\":\"mrr\",\"label\":\"MRR\",\"unit\":\"$\"}]");
297
297
  return null;
@@ -307,7 +307,7 @@ var LoopForm = (0, import_react.forwardRef)(function LoopForm({ initial, channel
307
307
  ui: f.ui.trim() || void 0,
308
308
  agent: f.agent,
309
309
  exec: buildFormExec(f),
310
- stateSchema
310
+ metricSchema
311
311
  };
312
312
  } }));
313
313
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -489,9 +489,9 @@ var LoopForm = (0, import_react.forwardRef)(function LoopForm({ initial, channel
489
489
  fallback: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EditorFallback, { minHeight: "90px" }),
490
490
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CodeField, {
491
491
  lang: "json",
492
- value: f.stateSchema,
492
+ value: f.metricSchema,
493
493
  onChange: (v) => {
494
- set("stateSchema", v);
494
+ set("metricSchema", v);
495
495
  setSchemaErr(null);
496
496
  },
497
497
  minHeight: "90px",
@@ -538,7 +538,7 @@ var AGENT_LABEL = {
538
538
  };
539
539
  /** Composer starters - one per editable dimension, so a blank box never stalls
540
540
  * the owner. Clicking seeds the instruction; the agent handles the rest. */
541
- var EDIT_SEEDS = [
541
+ var STEER_SEEDS = [
542
542
  {
543
543
  label: "Change the schedule",
544
544
  seed: "Change the schedule: "
@@ -552,11 +552,11 @@ var EDIT_SEEDS = [
552
552
  seed: "Improve the dashboard: "
553
553
  },
554
554
  {
555
- label: "Set a finish line",
556
- seed: "Give this loop a goal, and finish it once the goal is met: "
555
+ label: "Set an objective",
556
+ seed: "Give this loop a standing objective to optimize toward: "
557
557
  }
558
558
  ];
559
- var LoopView = (0, import_react.lazy)(() => import("./LoopView-Dom6Ad5G.mjs").then((m) => ({ default: m.LoopView })));
559
+ var LoopView = (0, import_react.lazy)(() => import("./LoopView-cDyjmf1B.mjs").then((m) => ({ default: m.LoopView })));
560
560
  /**
561
561
  * Loop detail PAGE body (`/loops/$loopId`) — the redesign of the former modal.
562
562
  * One scrolling page: a loop header (name / status / schedule / agent / machine +
@@ -570,7 +570,7 @@ var LoopView = (0, import_react.lazy)(() => import("./LoopView-Dom6Ad5G.mjs").th
570
570
  * the owner describes the change while looking at the spec/dashboard it applies
571
571
  * to. Dispatch swaps the composer for a live status card under the header
572
572
  * (queued → applying → settled with report + files + a link to
573
- * the edit run); the page keeps polling, so the applied change surfaces around
573
+ * the steer run); the page keeps polling, so the applied change surfaces around
574
574
  * the card. Settings remains a full-page field-form takeover.
575
575
  */
576
576
  function LoopDetailView({ id }) {
@@ -580,12 +580,12 @@ function LoopDetailView({ id }) {
580
580
  const [err, setErr] = (0, import_react.useState)(null);
581
581
  const [actionErr, setActionErr] = (0, import_react.useState)(null);
582
582
  const [editing, setEditing] = (0, import_react.useState)(false);
583
- const [editVia, setEditVia] = (0, import_react.useState)(false);
584
- const [editInstruction, setEditInstruction] = (0, import_react.useState)("");
583
+ const [steerVia, setSteerVia] = (0, import_react.useState)(false);
584
+ const [steerInstruction, setSteerInstruction] = (0, import_react.useState)("");
585
585
  const [promptCopied, setPromptCopied] = (0, import_react.useState)(false);
586
- const [editDispatched, setEditDispatched] = (0, import_react.useState)(false);
587
- const [editRunId, setEditRunId] = (0, import_react.useState)(null);
588
- const editBoxRef = (0, import_react.useRef)(null);
586
+ const [steerDispatched, setSteerDispatched] = (0, import_react.useState)(false);
587
+ const [steerRunId, setSteerRunId] = (0, import_react.useState)(null);
588
+ const steerBoxRef = (0, import_react.useRef)(null);
589
589
  const [machinesOpen, setMachinesOpen] = (0, import_react.useState)(false);
590
590
  const [pending, setPending] = (0, import_react.useState)(null);
591
591
  const [confirmingDelete, setConfirmingDelete] = (0, import_react.useState)(false);
@@ -607,11 +607,11 @@ function LoopDetailView({ id }) {
607
607
  (0, import_react.useEffect)(() => {
608
608
  setDetail(null);
609
609
  setEditing(false);
610
- setEditVia(false);
611
- setEditInstruction("");
610
+ setSteerVia(false);
611
+ setSteerInstruction("");
612
612
  setPromptCopied(false);
613
- setEditDispatched(false);
614
- setEditRunId(null);
613
+ setSteerDispatched(false);
614
+ setSteerRunId(null);
615
615
  setConfirmingDelete(false);
616
616
  setOlder([]);
617
617
  load();
@@ -664,10 +664,7 @@ function LoopDetailView({ id }) {
664
664
  setActionErr(null);
665
665
  setPending("lifecycle");
666
666
  try {
667
- const r = action === "pause" ? await pauseJob({ data: id }) : action === "start" ? await startJob({ data: id }) : action === "stop" ? await stopJob({ data: id }) : action === "reopen" ? await patchJob({ data: {
668
- id,
669
- patch: { enabled: true }
670
- } }) : await deleteJob({ data: id });
667
+ const r = action === "pause" ? await pauseJob({ data: id }) : action === "start" ? await startJob({ data: id }) : action === "stop" ? await stopJob({ data: id }) : await deleteJob({ data: id });
671
668
  if (r.error) return setActionErr(`${action[0].toUpperCase() + action.slice(1)} failed: ${r.error}`);
672
669
  setConfirmingDelete(false);
673
670
  if (r.deleted) {
@@ -677,7 +674,7 @@ function LoopDetailView({ id }) {
677
674
  }
678
675
  if (action === "delete") deletingRef.current = true;
679
676
  await refreshAll();
680
- setFlash({ label: action === "start" ? "Started" : action === "reopen" ? "Reopened" : action === "pause" ? "Paused" : action === "stop" ? "Stop requested" : "Deleting" });
677
+ setFlash({ label: action === "start" ? "Started" : action === "pause" ? "Paused" : action === "stop" ? "Stop requested" : "Deleting" });
681
678
  } finally {
682
679
  setPending(null);
683
680
  }
@@ -700,21 +697,21 @@ function LoopDetailView({ id }) {
700
697
  setPending(null);
701
698
  }
702
699
  }
703
- async function onRequestEdit() {
704
- const instruction = editInstruction.trim();
700
+ async function onRequestSteer() {
701
+ const instruction = steerInstruction.trim();
705
702
  if (!instruction) return;
706
703
  setActionErr(null);
707
- setPending("edit");
704
+ setPending("steer");
708
705
  try {
709
- const r = await requestEdit({ data: {
706
+ const r = await requestSteer({ data: {
710
707
  id,
711
708
  instruction
712
709
  } });
713
- if (r.error) return setActionErr(`Couldn't queue the edit: ${r.error}`);
714
- setEditRunId(r.runId ?? null);
715
- setEditDispatched(true);
716
- setEditVia(false);
717
- setEditInstruction("");
710
+ if (r.error) return setActionErr(`Couldn't queue the steer pass: ${r.error}`);
711
+ setSteerRunId(r.runId ?? null);
712
+ setSteerDispatched(true);
713
+ setSteerVia(false);
714
+ setSteerInstruction("");
718
715
  await refreshAll();
719
716
  } finally {
720
717
  setPending(null);
@@ -746,25 +743,23 @@ function LoopDetailView({ id }) {
746
743
  const online = detail.machine.online;
747
744
  const asleep = detail.machine.presence === "asleep";
748
745
  const offlineHint = !online ? asleep ? "Machine asleep - requests will stay queued until it wakes" : "Machine offline - requests will stay queued until it reconnects" : void 0;
749
- const completed = isCompleted(s);
750
746
  const lifecycle = deriveLoopLifecycle(s);
751
747
  const lifecycleText = lifecycleDisplay(detail);
752
748
  const protocolSupport = daemonStopSupport(detail.machine.daemonProtocol);
753
- const closedActive = isClosed(s) && !completed;
754
749
  const onMachine = detail.machine.name ? `“${detail.machine.name}”` : "the bound machine";
755
- const editRun = editDispatched && editRunId ? runs.find((r) => r.id === editRunId) : void 0;
756
- const editSettled = !!editRun && !editRun.queued && !editRun.running;
757
- const dismissEdit = () => {
758
- setEditDispatched(false);
759
- setEditRunId(null);
750
+ const steerRun = steerDispatched && steerRunId ? runs.find((r) => r.id === steerRunId) : void 0;
751
+ const steerSettled = !!steerRun && !steerRun.queued && !steerRun.running;
752
+ const dismissSteer = () => {
753
+ setSteerDispatched(false);
754
+ setSteerRunId(null);
760
755
  };
761
- const editDir = loopDir(job.taskFile);
762
- const copyEditPrompt = async () => {
756
+ const steerDir = loopDir(job.taskFile);
757
+ const copySteerPrompt = async () => {
763
758
  try {
764
- await navigator.clipboard.writeText(buildEditPrompt({
759
+ await navigator.clipboard.writeText(buildSteerPrompt({
765
760
  loopId: id,
766
761
  loopName: s.name,
767
- instruction: editInstruction
762
+ instruction: steerInstruction
768
763
  }));
769
764
  setPromptCopied(true);
770
765
  setTimeout(() => setPromptCopied(false), 4e3);
@@ -781,8 +776,8 @@ function LoopDetailView({ id }) {
781
776
  })
782
777
  });
783
778
  const deleting = lifecycle === "deleting";
784
- const paused = !s.enabled && !completed && !deleting;
785
- const active = s.enabled && !completed && !deleting;
779
+ const paused = !s.enabled && !deleting;
780
+ const active = s.enabled && !deleting;
786
781
  const actionDisabled = busy || deleting;
787
782
  const canRunWork = active || paused;
788
783
  const canStop = canRunWork && !!s.running && protocolSupport.supported;
@@ -797,21 +792,21 @@ function LoopDetailView({ id }) {
797
792
  className: btnPrimary,
798
793
  disabled: actionDisabled || !canRunWork,
799
794
  onClick: () => void doRun(),
800
- title: !canRunWork ? "Unavailable for a completed or deleting loop" : offlineHint ?? (job.exec ? "Spends credits" : void 0),
795
+ title: !canRunWork ? "Unavailable for a deleting loop" : offlineHint ?? (job.exec ? "Spends credits" : void 0),
801
796
  "aria-label": job.exec ? "Run once - spends credits" : "Run once",
802
797
  children: pending === "run" ? "Queuing…" : "Run once"
803
798
  }),
804
799
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
805
800
  className: btn,
806
- disabled: actionDisabled || !(canRunWork || completed),
807
- title: "Dispatch or copy a prompt for an owner-requested edit",
808
- onClick: () => setEditVia(true),
809
- children: "Agent edit"
801
+ disabled: actionDisabled || !canRunWork,
802
+ title: "Dispatch or copy a prompt for an owner-requested steer",
803
+ onClick: () => setSteerVia(true),
804
+ children: "Steer"
810
805
  }),
811
806
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
812
807
  className: btn,
813
808
  disabled: actionDisabled || !canRunWork,
814
- title: !canRunWork ? "Unavailable for a completed or deleting loop" : offlineHint ?? "Spends credits",
809
+ title: !canRunWork ? "Unavailable for a deleting loop" : offlineHint ?? "Spends credits",
815
810
  onClick: () => void doEvolve(),
816
811
  children: pending === "evolve" ? "Evolving…" : "Evolve once"
817
812
  }),
@@ -840,12 +835,6 @@ function LoopDetailView({ id }) {
840
835
  onClick: () => void doLifecycle("stop"),
841
836
  children: "Stop"
842
837
  }),
843
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
844
- className: btn,
845
- disabled: actionDisabled || !completed,
846
- onClick: () => void doLifecycle("reopen"),
847
- children: "Reopen"
848
- }),
849
838
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
850
839
  className: btnDanger,
851
840
  disabled: actionDisabled,
@@ -870,12 +859,12 @@ function LoopDetailView({ id }) {
870
859
  className: "mt-3 rounded-md border border-wire bg-raised px-4 py-3 text-meta text-secondary",
871
860
  children: "Deleting… graceful stop is waiting for execution authority to end."
872
861
  }),
873
- editVia && !deleting && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
862
+ steerVia && !deleting && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
874
863
  className: "mt-4 border-t border-hairline pt-4",
875
864
  onKeyDown: (e) => {
876
- if (e.key === "Escape" && pending !== "edit") {
865
+ if (e.key === "Escape" && pending !== "steer") {
877
866
  e.stopPropagation();
878
- setEditVia(false);
867
+ setSteerVia(false);
879
868
  }
880
869
  },
881
870
  children: [
@@ -883,7 +872,7 @@ function LoopDetailView({ id }) {
883
872
  className: "flex flex-wrap items-baseline justify-between gap-x-4 gap-y-1",
884
873
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
885
874
  className: "text-body font-medium text-display",
886
- children: "Edit with your coding agent"
875
+ children: "Steer with your coding agent"
887
876
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
888
877
  className: "text-meta text-secondary",
889
878
  children: [
@@ -894,24 +883,24 @@ function LoopDetailView({ id }) {
894
883
  })]
895
884
  }),
896
885
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("textarea", {
897
- ref: editBoxRef,
886
+ ref: steerBoxRef,
898
887
  autoFocus: true,
899
- value: editInstruction,
900
- onChange: (e) => setEditInstruction(e.target.value),
888
+ value: steerInstruction,
889
+ onChange: (e) => setSteerInstruction(e.target.value),
901
890
  onKeyDown: (e) => {
902
- if ((e.metaKey || e.ctrlKey) && e.key === "Enter" && editInstruction.trim() && pending !== "edit") onRequestEdit();
891
+ if ((e.metaKey || e.ctrlKey) && e.key === "Enter" && steerInstruction.trim() && pending !== "steer") onRequestSteer();
903
892
  },
904
893
  rows: 3,
905
894
  placeholder: "e.g. run at 9am on weekdays instead, and also check coffee stock",
906
895
  className: "mt-3 w-full resize-y rounded-control border border-wire bg-raised p-3 font-mono text-label leading-relaxed text-primary outline-none transition-shadow placeholder:text-disabled focus:border-transparent focus:shadow-focus"
907
896
  }),
908
- !editInstruction.trim() && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
897
+ !steerInstruction.trim() && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
909
898
  className: "mt-2 flex flex-wrap gap-1.5",
910
- children: EDIT_SEEDS.map((sd) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
899
+ children: STEER_SEEDS.map((sd) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
911
900
  type: "button",
912
901
  onClick: () => {
913
- setEditInstruction(sd.seed);
914
- editBoxRef.current?.focus();
902
+ setSteerInstruction(sd.seed);
903
+ steerBoxRef.current?.focus();
915
904
  },
916
905
  className: "cursor-pointer rounded-full border border-wire bg-surface px-3 py-1 text-label font-medium text-secondary transition-colors hover:bg-raised hover:text-display",
917
906
  children: sd.label
@@ -922,22 +911,22 @@ function LoopDetailView({ id }) {
922
911
  children: [
923
912
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
924
913
  className: btnCost,
925
- disabled: pending === "edit" || !editInstruction.trim(),
914
+ disabled: pending === "steer" || !steerInstruction.trim(),
926
915
  title: offlineHint,
927
- onClick: () => void onRequestEdit(),
928
- children: pending === "edit" ? "Dispatching…" : "Dispatch to your coding agent"
916
+ onClick: () => void onRequestSteer(),
917
+ children: pending === "steer" ? "Dispatching…" : "Dispatch to your coding agent"
929
918
  }),
930
919
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
931
920
  type: "button",
932
921
  className: btn,
933
- disabled: pending === "edit",
934
- onClick: () => void copyEditPrompt(),
922
+ disabled: pending === "steer",
923
+ onClick: () => void copySteerPrompt(),
935
924
  children: promptCopied ? "✓ Prompt copied" : "Copy prompt"
936
925
  }),
937
926
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
938
927
  className: btn,
939
- disabled: pending === "edit",
940
- onClick: () => setEditVia(false),
928
+ disabled: pending === "steer",
929
+ onClick: () => setSteerVia(false),
941
930
  children: "Cancel"
942
931
  }),
943
932
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
@@ -953,9 +942,9 @@ function LoopDetailView({ id }) {
953
942
  children: [
954
943
  "✓ Copied · run your coding agent",
955
944
  " ",
956
- editDir ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: ["in ", /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", {
945
+ steerDir ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: ["in ", /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", {
957
946
  className: "break-all font-mono text-primary",
958
- children: editDir
947
+ children: steerDir
959
948
  })] }) : "in the loop’s local directory on this machine",
960
949
  " ",
961
950
  "and paste the prompt to adjust the loop yourself."
@@ -1052,7 +1041,7 @@ function LoopDetailView({ id }) {
1052
1041
  }),
1053
1042
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1054
1043
  className: "text-meta text-secondary",
1055
- children: [asleep ? "- queued work starts automatically when it reconnects." : "- manual run, evolve, and edit requests remain safely queued.", detail.machine.lastSeen ? ` Last seen ${rel(detail.machine.lastSeen)}.` : ""]
1044
+ children: [asleep ? "- queued work starts automatically when it reconnects." : "- manual run, evolve, and steer requests remain safely queued.", detail.machine.lastSeen ? ` Last seen ${rel(detail.machine.lastSeen)}.` : ""]
1056
1045
  }),
1057
1046
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
1058
1047
  type: "button",
@@ -1118,11 +1107,7 @@ function LoopDetailView({ id }) {
1118
1107
  className: "text-[28px] font-semibold leading-tight tracking-[-0.015em] text-display",
1119
1108
  children: s.name
1120
1109
  }),
1121
- lifecycle === "completed" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pill, {
1122
- tone: "success",
1123
- dot: "green",
1124
- children: "Completed"
1125
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pill, {
1110
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pill, {
1126
1111
  tone: lifecycle === "stopping" ? "running" : void 0,
1127
1112
  dot: lifecycle === "stopping" ? "pulse" : void 0,
1128
1113
  children: lifecycleText
@@ -1131,10 +1116,10 @@ function LoopDetailView({ id }) {
1131
1116
  tone: "outline",
1132
1117
  children: "Queued"
1133
1118
  }) : null,
1134
- closedActive && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pill, {
1119
+ s.goal && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pill, {
1135
1120
  tone: "success",
1136
1121
  title: s.goal ?? void 0,
1137
- children: "Goal"
1122
+ children: "Objective"
1138
1123
  }),
1139
1124
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pill, {
1140
1125
  tone: "outline",
@@ -1174,7 +1159,7 @@ function LoopDetailView({ id }) {
1174
1159
  }),
1175
1160
  metaDot,
1176
1161
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: ["next ", fmt(s.nextRun)] }),
1177
- s.nextRun && s.enabled && !completed && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1162
+ s.nextRun && s.enabled && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1178
1163
  className: "text-disabled",
1179
1164
  children: [
1180
1165
  "(",
@@ -1200,24 +1185,13 @@ function LoopDetailView({ id }) {
1200
1185
  })
1201
1186
  ]
1202
1187
  }),
1203
- closedActive && s.goal && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1188
+ s.goal && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1204
1189
  className: "mt-2 text-body leading-snug text-secondary",
1205
1190
  children: ["Working toward: ", /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1206
1191
  className: "text-primary",
1207
1192
  children: s.goal
1208
1193
  })]
1209
1194
  }),
1210
- lifecycle === "completed" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1211
- className: "mt-2 text-body leading-snug text-success",
1212
- children: [
1213
- "Completed",
1214
- s.completedAt ? ` · ${fmt(s.completedAt)}` : "",
1215
- s.completionReason && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1216
- className: "text-secondary",
1217
- children: [" - ", s.completionReason]
1218
- })
1219
- ]
1220
- }),
1221
1195
  latestIncidentRun?.reportIncident && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
1222
1196
  className: "mt-2 text-body leading-snug text-secondary",
1223
1197
  children: latestIncidentRun.phase === "error" ? "Last run failed · Terminal report rejected" : "Last run telemetry warning · Terminal report rejected"
@@ -1236,13 +1210,13 @@ function LoopDetailView({ id }) {
1236
1210
  ]
1237
1211
  })]
1238
1212
  }),
1239
- editDispatched && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
1213
+ steerDispatched && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
1240
1214
  className: "mt-6 rounded-card border border-hairline bg-surface px-6 py-5 shadow-card",
1241
1215
  style: { animation: "fadeIn 0.2s ease-out" },
1242
1216
  "aria-live": "polite",
1243
1217
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1244
1218
  className: "flex flex-wrap items-center gap-x-4 gap-y-2",
1245
- children: [!editRun || editRun.queued ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1219
+ children: [!steerRun || steerRun.queued ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1246
1220
  className: "inline-flex items-center gap-2.5 text-body text-secondary",
1247
1221
  children: [
1248
1222
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
@@ -1251,7 +1225,7 @@ function LoopDetailView({ id }) {
1251
1225
  }),
1252
1226
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1253
1227
  className: "font-medium text-primary",
1254
- children: "Edit queued"
1228
+ children: "Steer queued"
1255
1229
  }),
1256
1230
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
1257
1231
  "waiting for ",
@@ -1259,7 +1233,7 @@ function LoopDetailView({ id }) {
1259
1233
  " and higher-priority work…"
1260
1234
  ] })
1261
1235
  ]
1262
- }) : editRun.running ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1236
+ }) : steerRun.running ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1263
1237
  className: "inline-flex min-w-0 items-center gap-2.5 text-body text-secondary",
1264
1238
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1265
1239
  "aria-hidden": true,
@@ -1267,7 +1241,7 @@ function LoopDetailView({ id }) {
1267
1241
  style: runPulseStyle
1268
1242
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1269
1243
  className: "shrink-0 font-medium text-primary",
1270
- children: "Applying your edit"
1244
+ children: "Applying your steer"
1271
1245
  })]
1272
1246
  }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1273
1247
  className: "inline-flex min-w-0 items-center gap-2 text-body",
@@ -1275,38 +1249,38 @@ function LoopDetailView({ id }) {
1275
1249
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1276
1250
  "aria-hidden": true,
1277
1251
  className: "size-2.5 shrink-0 rounded-[2px]",
1278
- style: { background: dotColor(editRun) }
1252
+ style: { background: dotColor(steerRun) }
1279
1253
  }),
1280
1254
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1281
1255
  className: "font-medium",
1282
- style: { color: dotColor(editRun) },
1283
- children: editRun.canceled ? "Edit canceled" : editRun.phase === "error" ? "Edit failed" : "Edit applied"
1256
+ style: { color: dotColor(steerRun) },
1257
+ children: steerRun.canceled ? "Steer canceled" : steerRun.phase === "error" ? "Steer failed" : "Steer applied"
1284
1258
  }),
1285
- editRun.error && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1259
+ steerRun.error && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1286
1260
  className: "truncate text-secondary",
1287
- children: ["· ", editRun.error]
1261
+ children: ["· ", steerRun.error]
1288
1262
  })
1289
1263
  ]
1290
1264
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1291
1265
  className: "ml-auto flex items-center gap-3.5",
1292
- children: [editRun && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
1266
+ children: [steerRun && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
1293
1267
  to: "/loops/$loopId/runs/$runId",
1294
1268
  params: {
1295
1269
  loopId: id,
1296
- runId: editRun.id
1270
+ runId: steerRun.id
1297
1271
  },
1298
1272
  className: "text-label font-medium text-interactive underline underline-offset-2 transition-colors hover:text-display",
1299
1273
  children: "View run →"
1300
1274
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
1301
1275
  type: "button",
1302
- onClick: dismissEdit,
1276
+ onClick: dismissSteer,
1303
1277
  className: "inline-flex cursor-pointer items-center gap-1.5 border-none bg-transparent p-0 text-meta font-medium text-secondary transition-colors hover:text-display",
1304
- children: editSettled ? "Done" : "Hide"
1278
+ children: steerSettled ? "Done" : "Hide"
1305
1279
  })]
1306
1280
  })]
1307
- }), editSettled && editRun.message && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
1281
+ }), steerSettled && steerRun.message && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
1308
1282
  className: "mt-3.5",
1309
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pre, { children: editRun.message })
1283
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pre, { children: steerRun.message })
1310
1284
  })]
1311
1285
  }),
1312
1286
  hasUi && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
@@ -1391,7 +1365,7 @@ function EditHead({ name, onBack }) {
1391
1365
  }),
1392
1366
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
1393
1367
  className: "mt-1.5 max-w-[640px] text-meta leading-snug text-secondary",
1394
- children: "Loop configuration, notifications, and push channel, saved directly - no agent pass or credits. For changes in plain words, use Agent edit instead."
1368
+ children: "Loop configuration, notifications, and push channel, saved directly - no agent pass or credits. For changes in plain words, use Steer instead."
1395
1369
  })
1396
1370
  ] });
1397
1371
  }
@@ -1,13 +1,13 @@
1
1
  import { o as __toESM } from "../_runtime.mjs";
2
2
  import { g as require_jsx_runtime, h as require_react } from "../_libs/@base-ui/react+[...].mjs";
3
- import { A as sectionHeadCls, _ as dur, a as StatusPill, b as humanBytes, c as btnDanger, k as runPulseStyle, n as Loading, o as btn, r as Pill, v as fmt, y as fnum } from "./ui-WGITbP6Z.mjs";
3
+ import { D as runPulseStyle, O as sectionHeadCls, _ as dur, a as StatusPill, b as humanBytes, c as btnDanger, n as Loading, o as btn, r as Pill, v as fmt, y as fnum } from "./ui-B6mE5-5v.mjs";
4
4
  import { u as Link } from "../_libs/@tanstack/react-router+[...].mjs";
5
- import { d as getJobDetail, f as getRunDiff, g as loadOlderRuns, w as stopRun } from "./loopApi-BfMnXaKT.mjs";
6
- import { r as LoadErrorCard } from "./actionUi-mDYOvJdB.mjs";
7
- import { s as useSession } from "./LoopPlaybook-BC9Dvnw2.mjs";
8
- import { t as SignIn } from "./SignIn-D70NUJsN.mjs";
9
- import { t as Route } from "./loops._loopId_.runs._runId-BhoM6DWj.mjs";
10
- //#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-DiBP2rCe.js
5
+ import { d as getJobDetail, f as getRunDiff, g as loadOlderRuns, w as stopRun } from "./loopApi-7MTSs6hy.mjs";
6
+ import { s as useSession } from "./LoopPlaybook-C86vJIjZ.mjs";
7
+ import { t as SignIn } from "./SignIn-BQQiD3Ss.mjs";
8
+ import { r as LoadErrorCard } from "./actionUi-BKF6xI3d.mjs";
9
+ import { t as Route } from "./loops._loopId_.runs._runId-lTigSOmT.mjs";
10
+ //#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-DkG-ZCD1.js
11
11
  var import_react = /* @__PURE__ */ __toESM(require_react());
12
12
  var import_jsx_runtime = require_jsx_runtime();
13
13
  /**
@@ -623,13 +623,6 @@ function RunDetailView({ loopId, runId }) {
623
623
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
624
624
  className: "space-y-3.5",
625
625
  children: [
626
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Field, {
627
- k: "State",
628
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(StatusPill, {
629
- run,
630
- colorText: true
631
- })
632
- }),
633
626
  run.status && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Field, {
634
627
  k: "Status",
635
628
  children: run.status
@@ -654,11 +647,11 @@ function RunDetailView({ loopId, runId }) {
654
647
  ]
655
648
  })
656
649
  }),
657
- run.state != null && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Field, {
658
- k: "Run state",
650
+ run.metrics != null && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Field, {
651
+ k: "Run metrics",
659
652
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", {
660
653
  className: "block break-all font-mono text-label text-secondary",
661
- children: JSON.stringify(run.state)
654
+ children: JSON.stringify(run.metrics)
662
655
  })
663
656
  }),
664
657
  run.error && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Field, {
@@ -1,8 +1,8 @@
1
1
  import { c as createFileRoute, s as lazyRouteComponent } from "../_libs/@tanstack/react-router+[...].mjs";
2
- import { c as getAuthState } from "./loopApi-BfMnXaKT.mjs";
3
- import { a as authClient } from "./LoopPlaybook-BC9Dvnw2.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-BhoM6DWj.js
5
- var $$splitComponentImporter = () => import("./loops._loopId_.runs._runId-DiBP2rCe.mjs");
2
+ import { c as getAuthState } from "./loopApi-7MTSs6hy.mjs";
3
+ import { a as authClient } from "./LoopPlaybook-C86vJIjZ.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-lTigSOmT.js
5
+ var $$splitComponentImporter = () => import("./loops._loopId_.runs._runId-DkG-ZCD1.mjs");
6
6
  /**
7
7
  * Run detail PAGE — `/loops/$loopId/runs/$runId`. A standalone page (the trailing
8
8
  * `_` on the `$loopId` segment opts it out of the loop page's component so the run