@kky42/pievo-server 2.0.3 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{LoopView-CCYqXrKq.js → LoopView-Pbp2YtUu.js} +1 -1
  3. package/.output/public/assets/{Modal-BhRzAXQg.js → Modal-B3xpEtcf.js} +1 -1
  4. package/.output/public/assets/{SignIn-CV3jqX_8.js → SignIn-9vsaKv_p.js} +1 -1
  5. package/.output/public/assets/{actionUi-BRtdWVvO.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-BATGA0jG.js → index-DT_reRxT.js} +4 -4
  9. package/.output/public/assets/{invite._token-Dp2HL9X5.js → invite._token-5zhVSA26.js} +1 -1
  10. package/.output/public/assets/{invite._token-CQgv8lTC.js → invite._token-C3t4JfAY.js} +1 -1
  11. package/.output/public/assets/{lifecycleUi-C3k2MlX8.js → lifecycleUi-CMFw5Nlj.js} +1 -1
  12. package/.output/public/assets/{loopApi-5s2-kCnu.js → loopApi-C_Dtw-nL.js} +1 -1
  13. package/.output/public/assets/loops._loopId-6JlPOCsY.js +4 -0
  14. package/.output/public/assets/{loops._loopId_.runs._runId-BNN-dLrW.js → loops._loopId_.runs._runId-wFUMHN9w.js} +2 -2
  15. package/.output/public/assets/{notifyFns-DuBElaqG.js → notifyFns-CF12Yboc.js} +1 -1
  16. package/.output/public/assets/{preload-helper-3xcHsDtt.js → preload-helper--VCqDT5m.js} +2 -2
  17. package/.output/public/assets/{routes-CmuCVIIS.js → routes-DsdcURfk.js} +1 -1
  18. package/.output/public/assets/{routes-YnrsFY5X.js → routes-WVPuW976.js} +1 -1
  19. package/.output/public/assets/{t._teamId-BlE4mCSj.js → t._teamId-BdVLnwih.js} +1 -1
  20. package/.output/public/assets/{t._teamId-Bi-C9s5j.js → t._teamId-C9uEyAh_.js} +1 -1
  21. package/.output/public/assets/ui-Gb1413-F.js +1 -0
  22. package/.output/server/_ssr/{DashboardView-2eNPqWcy.mjs → DashboardView-DJMpoucm.mjs} +8 -8
  23. package/.output/server/_ssr/{LoopPlaybook-CnQ8Qgyf.mjs → LoopPlaybook-WFNer22Y.mjs} +3 -3
  24. package/.output/server/_ssr/{LoopView-DM30OPCN.mjs → LoopView-Dsc6oik9.mjs} +7 -7
  25. package/.output/server/_ssr/{Modal-B7gBr5Pm.mjs → Modal-Bc_5TYGr.mjs} +2 -2
  26. package/.output/server/_ssr/{SignIn-CaAi4_mk.mjs → SignIn-2qr-vtR5.mjs} +3 -3
  27. package/.output/server/_ssr/{actionUi-Be7dmMxb.mjs → actionUi-BKF6xI3d.mjs} +2 -2
  28. package/.output/server/_ssr/{adapters-CHURWoZx.mjs → adapters-Bwuh6uek.mjs} +2 -2
  29. package/.output/server/_ssr/{artifactFiles-D6b_RP78.mjs → artifactFiles-Cp1IBHne.mjs} +3 -3
  30. package/.output/server/_ssr/{artifactView-CYV1r48i.mjs → artifactView-DX4P3Krh.mjs} +2 -2
  31. package/.output/server/_ssr/artifacts-9G_Ai7vO.mjs +2 -0
  32. package/.output/server/_ssr/{auth-B_OxPpFr.mjs → auth-uQ19WsD1.mjs} +9 -9
  33. package/.output/server/_ssr/{boot-BNoivm21.mjs → boot-DPoPmSLh.mjs} +1236 -314
  34. package/.output/server/_ssr/boot-Zz5AJgfy.mjs +2 -0
  35. package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-B3RHdVjo.mjs → bun-sqlite-dialect-BW9W1_Ps-CqcLCApi.mjs} +2 -2
  36. package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-DpVe1foU.mjs → d1-sqlite-dialect-BLC8LXE6-AuWb61y8.mjs} +2 -2
  37. package/.output/server/_ssr/db-BMANvbZu.mjs +2 -0
  38. package/.output/server/_ssr/{dist-BTx1ljg7.mjs → dist-CtYTvPCD.mjs} +2 -2
  39. package/.output/server/_ssr/{factory-TSnFcS96.mjs → factory-BtqxMS8a.mjs} +2 -2
  40. package/.output/server/_ssr/{invite._token-CvqaKH2R.mjs → invite._token-BlbVjz-o.mjs} +2 -2
  41. package/.output/server/_ssr/{invite._token-CDpO3cfB.mjs → invite._token-DBttmaDb.mjs} +6 -6
  42. package/.output/server/_ssr/{invite._token-DWOPXXLS.mjs → invite._token-DtAfQyfP.mjs} +5 -5
  43. package/.output/server/_ssr/{kysely-adapter-BWjzeCGK.mjs → kysely-adapter-bSpTlW7Z.mjs} +1 -1
  44. package/.output/server/_ssr/{lifecycleUi-5jMhxINb.mjs → lifecycleUi-Djb44Aj3.mjs} +4 -4
  45. package/.output/server/_ssr/logger-CR1a0flR.mjs +2 -0
  46. package/.output/server/_ssr/{loopApi-BfMnXaKT.mjs → loopApi-7MTSs6hy.mjs} +5 -5
  47. package/.output/server/_ssr/{loopApi-Cpm8YV3U.mjs → loopApi-BXRBFGWh.mjs} +23 -23
  48. package/.output/server/_ssr/{loops._loopId-C-y4Pux_.mjs → loops._loopId-6Q0DMXU0.mjs} +4 -4
  49. package/.output/server/_ssr/{loops._loopId-DfrHw2mZ.mjs → loops._loopId-C0x0SE8F.mjs} +85 -85
  50. package/.output/server/_ssr/{loops._loopId_.runs._runId-BXyyqXwX.mjs → loops._loopId_.runs._runId-BOJBJu_a.mjs} +4 -4
  51. package/.output/server/_ssr/{loops._loopId_.runs._runId-C9d0EC2Q.mjs → loops._loopId_.runs._runId-CkM0-ckn.mjs} +9 -9
  52. package/.output/server/_ssr/{machineFns-CRbwYxD3.mjs → machineFns-CQuvvdXx.mjs} +3 -3
  53. package/.output/server/_ssr/{node-sqlite-dialect-B10G6C4W.mjs → node-sqlite-dialect-ZOyD6D7F.mjs} +2 -2
  54. package/.output/server/_ssr/{notifyFns-DvH4C-GH.mjs → notifyFns-BOeYZDRp.mjs} +3 -3
  55. package/.output/server/_ssr/{notifyFns-CtmSVNmE.mjs → notifyFns-UFZ2j7Fv.mjs} +7 -7
  56. package/.output/server/_ssr/{router-B4ipreZ4.mjs → router-jnPelPNh.mjs} +32 -32
  57. package/.output/server/_ssr/{routes-DKox93l0.mjs → routes-Bx0bRxt9.mjs} +2 -2
  58. package/.output/server/_ssr/{routes-iHT61OkI.mjs → routes-CMAUcUsZ.mjs} +5 -5
  59. package/.output/server/_ssr/{routes-l7tUe3lr.mjs → routes-CXnbFjB_.mjs} +6 -6
  60. package/.output/server/_ssr/runDiff-CDPvl_cY.mjs +2 -0
  61. package/.output/server/_ssr/ssr.mjs +51 -51
  62. package/.output/server/_ssr/store-DDOk2Ty_.mjs +2 -0
  63. package/.output/server/_ssr/{t._teamId-jO8dUmSQ.mjs → t._teamId-36z-mmyw.mjs} +5 -5
  64. package/.output/server/_ssr/{t._teamId-BPK2mrN3.mjs → t._teamId-Bsm4WrJl.mjs} +6 -6
  65. package/.output/server/_ssr/{t._teamId-B3g0Cs8B.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-6zjFV7lM.mjs → teamFns-DAx4a1z4.mjs} +3 -3
  68. package/.output/server/_ssr/tokens-7KEKpLnu.mjs +2 -0
  69. package/.output/server/_ssr/{ui-CI-OeTr7.mjs → ui-B6mE5-5v.mjs} +6 -6
  70. package/.output/server/{_tanstack-start-manifest_v-CxHUYCv8.mjs → _tanstack-start-manifest_v-5iQOchGB.mjs} +28 -28
  71. package/.output/server/drizzle/0015_run_history_foundation.sql +43 -0
  72. package/.output/server/drizzle/0016_plural_machine_runs.sql +4 -0
  73. package/.output/server/drizzle/meta/_journal.json +14 -0
  74. package/.output/server/index.mjs +118 -118
  75. package/drizzle/0015_run_history_foundation.sql +43 -0
  76. package/drizzle/0016_plural_machine_runs.sql +4 -0
  77. package/drizzle/meta/_journal.json +14 -0
  78. package/package.json +1 -1
  79. package/.output/public/assets/app-B03JVnFn.css +0 -2
  80. package/.output/public/assets/loops._loopId-C9vRjZ8W.js +0 -4
  81. package/.output/public/assets/ui-By58RJgB.js +0 -1
  82. package/.output/server/_ssr/artifacts-CXMpBzMY.mjs +0 -2
  83. package/.output/server/_ssr/boot-C9VAWt9Z.mjs +0 -2
  84. package/.output/server/_ssr/db-C11vQNxP.mjs +0 -2
  85. package/.output/server/_ssr/logger-DE_PU5bE.mjs +0 -2
  86. package/.output/server/_ssr/runDiff-Bohd5W5R.mjs +0 -113
  87. package/.output/server/_ssr/store-Ck7kCAGf.mjs +0 -2
  88. package/.output/server/_ssr/tokens-oJm6yFyt.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, mt as isTaskEntry } from "./boot-BNoivm21.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-CI-OeTr7.mjs";
3
+ import { c as CODING_AGENTS, g as buildFileEntries, mt as isTaskEntry } from "./boot-DPoPmSLh.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 { s as useSession } from "./LoopPlaybook-CnQ8Qgyf.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 { i as useFlash, n as FlashLine, r as LoadErrorCard, t as ConfirmBar } from "./actionUi-BKF6xI3d.mjs";
9
+ import { s as useSession } from "./LoopPlaybook-WFNer22Y.mjs";
9
10
  import { t as setActiveTeamCookie } from "./teamCookie-B7hLOIie.mjs";
10
- import { t as SignIn } from "./SignIn-CaAi4_mk.mjs";
11
- import { i as useFlash, n as FlashLine, r as LoadErrorCard, t as ConfirmBar } from "./actionUi-Be7dmMxb.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-CtmSVNmE.mjs";
14
- import { t as Route } from "./loops._loopId-C-y4Pux_.mjs";
15
- //#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId-DfrHw2mZ.js
11
+ import { t as SignIn } from "./SignIn-2qr-vtR5.mjs";
12
+ import { i as lifecycleDisplay, n as daemonStopSupport, r as deriveLoopLifecycle, t as DAEMON_UPGRADE_REQUIRED } from "./lifecycleUi-Djb44Aj3.mjs";
13
+ import { a as listChannels, n as Timeline, s as mergeRuns, t as MachinesModal } from "./notifyFns-UFZ2j7Fv.mjs";
14
+ import { t as Route } from "./loops._loopId-6Q0DMXU0.mjs";
15
+ //#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId-C0x0SE8F.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}).`,
@@ -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: "
@@ -556,7 +556,7 @@ var EDIT_SEEDS = [
556
556
  seed: "Give this loop a standing objective to optimize toward: "
557
557
  }
558
558
  ];
559
- var LoopView = (0, import_react.lazy)(() => import("./LoopView-DM30OPCN.mjs").then((m) => ({ default: m.LoopView })));
559
+ var LoopView = (0, import_react.lazy)(() => import("./LoopView-Dsc6oik9.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-DM30OPCN.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();
@@ -697,21 +697,21 @@ function LoopDetailView({ id }) {
697
697
  setPending(null);
698
698
  }
699
699
  }
700
- async function onRequestEdit() {
701
- const instruction = editInstruction.trim();
700
+ async function onRequestSteer() {
701
+ const instruction = steerInstruction.trim();
702
702
  if (!instruction) return;
703
703
  setActionErr(null);
704
- setPending("edit");
704
+ setPending("steer");
705
705
  try {
706
- const r = await requestEdit({ data: {
706
+ const r = await requestSteer({ data: {
707
707
  id,
708
708
  instruction
709
709
  } });
710
- if (r.error) return setActionErr(`Couldn't queue the edit: ${r.error}`);
711
- setEditRunId(r.runId ?? null);
712
- setEditDispatched(true);
713
- setEditVia(false);
714
- 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("");
715
715
  await refreshAll();
716
716
  } finally {
717
717
  setPending(null);
@@ -747,19 +747,19 @@ function LoopDetailView({ id }) {
747
747
  const lifecycleText = lifecycleDisplay(detail);
748
748
  const protocolSupport = daemonStopSupport(detail.machine.daemonProtocol);
749
749
  const onMachine = detail.machine.name ? `“${detail.machine.name}”` : "the bound machine";
750
- const editRun = editDispatched && editRunId ? runs.find((r) => r.id === editRunId) : void 0;
751
- const editSettled = !!editRun && !editRun.queued && !editRun.running;
752
- const dismissEdit = () => {
753
- setEditDispatched(false);
754
- 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);
755
755
  };
756
- const editDir = loopDir(job.taskFile);
757
- const copyEditPrompt = async () => {
756
+ const steerDir = loopDir(job.taskFile);
757
+ const copySteerPrompt = async () => {
758
758
  try {
759
- await navigator.clipboard.writeText(buildEditPrompt({
759
+ await navigator.clipboard.writeText(buildSteerPrompt({
760
760
  loopId: id,
761
761
  loopName: s.name,
762
- instruction: editInstruction
762
+ instruction: steerInstruction
763
763
  }));
764
764
  setPromptCopied(true);
765
765
  setTimeout(() => setPromptCopied(false), 4e3);
@@ -799,9 +799,9 @@ function LoopDetailView({ id }) {
799
799
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
800
800
  className: btn,
801
801
  disabled: actionDisabled || !canRunWork,
802
- title: "Dispatch or copy a prompt for an owner-requested edit",
803
- onClick: () => setEditVia(true),
804
- children: "Agent edit"
802
+ title: "Dispatch or copy a prompt for an owner-requested steer",
803
+ onClick: () => setSteerVia(true),
804
+ children: "Steer"
805
805
  }),
806
806
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
807
807
  className: btn,
@@ -859,12 +859,12 @@ function LoopDetailView({ id }) {
859
859
  className: "mt-3 rounded-md border border-wire bg-raised px-4 py-3 text-meta text-secondary",
860
860
  children: "Deleting… graceful stop is waiting for execution authority to end."
861
861
  }),
862
- editVia && !deleting && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
862
+ steerVia && !deleting && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
863
863
  className: "mt-4 border-t border-hairline pt-4",
864
864
  onKeyDown: (e) => {
865
- if (e.key === "Escape" && pending !== "edit") {
865
+ if (e.key === "Escape" && pending !== "steer") {
866
866
  e.stopPropagation();
867
- setEditVia(false);
867
+ setSteerVia(false);
868
868
  }
869
869
  },
870
870
  children: [
@@ -872,7 +872,7 @@ function LoopDetailView({ id }) {
872
872
  className: "flex flex-wrap items-baseline justify-between gap-x-4 gap-y-1",
873
873
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
874
874
  className: "text-body font-medium text-display",
875
- children: "Edit with your coding agent"
875
+ children: "Steer with your coding agent"
876
876
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
877
877
  className: "text-meta text-secondary",
878
878
  children: [
@@ -883,24 +883,24 @@ function LoopDetailView({ id }) {
883
883
  })]
884
884
  }),
885
885
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("textarea", {
886
- ref: editBoxRef,
886
+ ref: steerBoxRef,
887
887
  autoFocus: true,
888
- value: editInstruction,
889
- onChange: (e) => setEditInstruction(e.target.value),
888
+ value: steerInstruction,
889
+ onChange: (e) => setSteerInstruction(e.target.value),
890
890
  onKeyDown: (e) => {
891
- 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();
892
892
  },
893
893
  rows: 3,
894
894
  placeholder: "e.g. run at 9am on weekdays instead, and also check coffee stock",
895
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"
896
896
  }),
897
- !editInstruction.trim() && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
897
+ !steerInstruction.trim() && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
898
898
  className: "mt-2 flex flex-wrap gap-1.5",
899
- 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", {
900
900
  type: "button",
901
901
  onClick: () => {
902
- setEditInstruction(sd.seed);
903
- editBoxRef.current?.focus();
902
+ setSteerInstruction(sd.seed);
903
+ steerBoxRef.current?.focus();
904
904
  },
905
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",
906
906
  children: sd.label
@@ -911,22 +911,22 @@ function LoopDetailView({ id }) {
911
911
  children: [
912
912
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
913
913
  className: btnCost,
914
- disabled: pending === "edit" || !editInstruction.trim(),
914
+ disabled: pending === "steer" || !steerInstruction.trim(),
915
915
  title: offlineHint,
916
- onClick: () => void onRequestEdit(),
917
- children: pending === "edit" ? "Dispatching…" : "Dispatch to your coding agent"
916
+ onClick: () => void onRequestSteer(),
917
+ children: pending === "steer" ? "Dispatching…" : "Dispatch to your coding agent"
918
918
  }),
919
919
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
920
920
  type: "button",
921
921
  className: btn,
922
- disabled: pending === "edit",
923
- onClick: () => void copyEditPrompt(),
922
+ disabled: pending === "steer",
923
+ onClick: () => void copySteerPrompt(),
924
924
  children: promptCopied ? "✓ Prompt copied" : "Copy prompt"
925
925
  }),
926
926
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
927
927
  className: btn,
928
- disabled: pending === "edit",
929
- onClick: () => setEditVia(false),
928
+ disabled: pending === "steer",
929
+ onClick: () => setSteerVia(false),
930
930
  children: "Cancel"
931
931
  }),
932
932
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
@@ -942,9 +942,9 @@ function LoopDetailView({ id }) {
942
942
  children: [
943
943
  "✓ Copied · run your coding agent",
944
944
  " ",
945
- 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", {
946
946
  className: "break-all font-mono text-primary",
947
- children: editDir
947
+ children: steerDir
948
948
  })] }) : "in the loop’s local directory on this machine",
949
949
  " ",
950
950
  "and paste the prompt to adjust the loop yourself."
@@ -1041,7 +1041,7 @@ function LoopDetailView({ id }) {
1041
1041
  }),
1042
1042
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1043
1043
  className: "text-meta text-secondary",
1044
- 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)}.` : ""]
1045
1045
  }),
1046
1046
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
1047
1047
  type: "button",
@@ -1210,13 +1210,13 @@ function LoopDetailView({ id }) {
1210
1210
  ]
1211
1211
  })]
1212
1212
  }),
1213
- editDispatched && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
1213
+ steerDispatched && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
1214
1214
  className: "mt-6 rounded-card border border-hairline bg-surface px-6 py-5 shadow-card",
1215
1215
  style: { animation: "fadeIn 0.2s ease-out" },
1216
1216
  "aria-live": "polite",
1217
1217
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1218
1218
  className: "flex flex-wrap items-center gap-x-4 gap-y-2",
1219
- children: [!editRun || editRun.queued ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1219
+ children: [!steerRun || steerRun.queued ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1220
1220
  className: "inline-flex items-center gap-2.5 text-body text-secondary",
1221
1221
  children: [
1222
1222
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
@@ -1225,7 +1225,7 @@ function LoopDetailView({ id }) {
1225
1225
  }),
1226
1226
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1227
1227
  className: "font-medium text-primary",
1228
- children: "Edit queued"
1228
+ children: "Steer queued"
1229
1229
  }),
1230
1230
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
1231
1231
  "waiting for ",
@@ -1233,7 +1233,7 @@ function LoopDetailView({ id }) {
1233
1233
  " and higher-priority work…"
1234
1234
  ] })
1235
1235
  ]
1236
- }) : editRun.running ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1236
+ }) : steerRun.running ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1237
1237
  className: "inline-flex min-w-0 items-center gap-2.5 text-body text-secondary",
1238
1238
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1239
1239
  "aria-hidden": true,
@@ -1241,7 +1241,7 @@ function LoopDetailView({ id }) {
1241
1241
  style: runPulseStyle
1242
1242
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1243
1243
  className: "shrink-0 font-medium text-primary",
1244
- children: "Applying your edit"
1244
+ children: "Applying your steer"
1245
1245
  })]
1246
1246
  }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1247
1247
  className: "inline-flex min-w-0 items-center gap-2 text-body",
@@ -1249,38 +1249,38 @@ function LoopDetailView({ id }) {
1249
1249
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1250
1250
  "aria-hidden": true,
1251
1251
  className: "size-2.5 shrink-0 rounded-[2px]",
1252
- style: { background: dotColor(editRun) }
1252
+ style: { background: dotColor(steerRun) }
1253
1253
  }),
1254
1254
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1255
1255
  className: "font-medium",
1256
- style: { color: dotColor(editRun) },
1257
- 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"
1258
1258
  }),
1259
- editRun.error && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1259
+ steerRun.error && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1260
1260
  className: "truncate text-secondary",
1261
- children: ["· ", editRun.error]
1261
+ children: ["· ", steerRun.error]
1262
1262
  })
1263
1263
  ]
1264
1264
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1265
1265
  className: "ml-auto flex items-center gap-3.5",
1266
- children: [editRun && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
1266
+ children: [steerRun && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, {
1267
1267
  to: "/loops/$loopId/runs/$runId",
1268
1268
  params: {
1269
1269
  loopId: id,
1270
- runId: editRun.id
1270
+ runId: steerRun.id
1271
1271
  },
1272
1272
  className: "text-label font-medium text-interactive underline underline-offset-2 transition-colors hover:text-display",
1273
1273
  children: "View run →"
1274
1274
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
1275
1275
  type: "button",
1276
- onClick: dismissEdit,
1276
+ onClick: dismissSteer,
1277
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",
1278
- children: editSettled ? "Done" : "Hide"
1278
+ children: steerSettled ? "Done" : "Hide"
1279
1279
  })]
1280
1280
  })]
1281
- }), editSettled && editRun.message && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
1281
+ }), steerSettled && steerRun.message && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
1282
1282
  className: "mt-3.5",
1283
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pre, { children: editRun.message })
1283
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pre, { children: steerRun.message })
1284
1284
  })]
1285
1285
  }),
1286
1286
  hasUi && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
@@ -1365,7 +1365,7 @@ function EditHead({ name, onBack }) {
1365
1365
  }),
1366
1366
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
1367
1367
  className: "mt-1.5 max-w-[640px] text-meta leading-snug text-secondary",
1368
- 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."
1369
1369
  })
1370
1370
  ] });
1371
1371
  }
@@ -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-CnQ8Qgyf.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-BXyyqXwX.js
5
- var $$splitComponentImporter = () => import("./loops._loopId_.runs._runId-C9d0EC2Q.mjs");
2
+ import { c as getAuthState } from "./loopApi-7MTSs6hy.mjs";
3
+ import { a as authClient } from "./LoopPlaybook-WFNer22Y.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-BOJBJu_a.js
5
+ var $$splitComponentImporter = () => import("./loops._loopId_.runs._runId-CkM0-ckn.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
@@ -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 { 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-CI-OeTr7.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 { s as useSession } from "./LoopPlaybook-CnQ8Qgyf.mjs";
7
- import { t as SignIn } from "./SignIn-CaAi4_mk.mjs";
8
- import { r as LoadErrorCard } from "./actionUi-Be7dmMxb.mjs";
9
- import { t as Route } from "./loops._loopId_.runs._runId-BXyyqXwX.mjs";
10
- //#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-C9d0EC2Q.js
5
+ import { d as getJobDetail, f as getRunDiff, g as loadOlderRuns, w as stopRun } from "./loopApi-7MTSs6hy.mjs";
6
+ import { r as LoadErrorCard } from "./actionUi-BKF6xI3d.mjs";
7
+ import { s as useSession } from "./LoopPlaybook-WFNer22Y.mjs";
8
+ import { t as SignIn } from "./SignIn-2qr-vtR5.mjs";
9
+ import { t as Route } from "./loops._loopId_.runs._runId-BOJBJu_a.mjs";
10
+ //#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-CkM0-ckn.js
11
11
  var import_react = /* @__PURE__ */ __toESM(require_react());
12
12
  var import_jsx_runtime = require_jsx_runtime();
13
13
  /**
@@ -504,8 +504,8 @@ function RunDetailView({ loopId, runId }) {
504
504
  type: "button",
505
505
  onClick: onStop,
506
506
  className: btnDanger,
507
- disabled: !!run.running && detail.machine.daemonProtocol !== 2,
508
- title: run.running && detail.machine.daemonProtocol !== 2 ? "Daemon upgrade required to stop a running process. Run `npm install -g @kky42/pievo@latest`, then `pievo daemon restart`." : void 0,
507
+ disabled: !!run.running && detail.machine.daemonProtocol !== 3,
508
+ title: run.running && detail.machine.daemonProtocol !== 3 ? "Daemon upgrade required to stop a running process. Run `npm install -g @kky42/pievo@latest`, then `pievo daemon restart`." : void 0,
509
509
  children: "Stop run"
510
510
  })]
511
511
  })]
@@ -1,6 +1,6 @@
1
- import { Ct as listMachinesForTeam, D as createMachine$1, I as ensureServer, Mt as machineIdFromToken, P as deleteMachine$1, Pt as mintDeviceToken, Q as getMachine, St as listMachines$1, Vt as rememberConnectKey, Yt as sha256, d as MIN_DAEMON_VERSION, jt as loopsForMachine, k as daemonNeedsUpdate, nn as updateMachine } from "./boot-BNoivm21.mjs";
1
+ import { $ as getMachine, A as daemonNeedsUpdate, Bt as rememberConnectKey, Ct as listMachinesForTeam, F as deleteMachine$1, Jt as sha256, L as ensureServer, Mt as machineIdFromToken, O as createMachine$1, Pt as mintDeviceToken, St as listMachines$1, d as MIN_DAEMON_VERSION, jt as loopsForMachine, tn as updateMachine } from "./boot-DPoPmSLh.mjs";
2
2
  import { n as createServerFn } from "./ssr.mjs";
3
- import { requestScope } from "./auth-B_OxPpFr.mjs";
3
+ import { requestScope } from "./auth-uQ19WsD1.mjs";
4
4
  import { t as createServerRpc } from "./createServerRpc-BD8Xn_0_.mjs";
5
5
  //#region node_modules/.nitro/vite/services/ssr/assets/machineScope-2h-fcKmG.js
6
6
  /**
@@ -28,7 +28,7 @@ function tokenVisibleTo(m, scope) {
28
28
  return !scope.enforce || m.userId === scope.userId;
29
29
  }
30
30
  //#endregion
31
- //#region node_modules/.nitro/vite/services/ssr/assets/machineFns-CRbwYxD3.js
31
+ //#region node_modules/.nitro/vite/services/ssr/assets/machineFns-CQuvvdXx.js
32
32
  /**
33
33
  * Latest published @kky42/pievo version — a cached, fail-silent lookup of the
34
34
  * npm dist-tag `latest`, so the web can tell a user their daemon is outdated and
@@ -1,6 +1,6 @@
1
- import { n as DefaultQueryCompiler, o as CompiledQuery, s as sql$1 } from "./auth-B_OxPpFr.mjs";
1
+ import { n as DefaultQueryCompiler, o as CompiledQuery, s as sql$1 } from "./auth-uQ19WsD1.mjs";
2
2
  import { n as DEFAULT_MIGRATION_TABLE, t as DEFAULT_MIGRATION_LOCK_TABLE } from "./kysely-migration-tables-JkVUjPF_-bPAX9LR_.mjs";
3
- //#region node_modules/.nitro/vite/services/ssr/assets/node-sqlite-dialect-B10G6C4W.js
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/node-sqlite-dialect-ZOyD6D7F.js
4
4
  var NodeSqliteAdapter = class {
5
5
  get supportsCreateIfNotExists() {
6
6
  return true;
@@ -1,8 +1,8 @@
1
- import { C as createChannel$1, G as getChannel, I as ensureServer, M as deleteChannel$1, bt as listChannels$1, s as CHANNELS } from "./boot-BNoivm21.mjs";
1
+ import { K as getChannel, L as ensureServer, N as deleteChannel$1, bt as listChannels$1, s as CHANNELS, w as createChannel$1 } from "./boot-DPoPmSLh.mjs";
2
2
  import { n as createServerFn } from "./ssr.mjs";
3
- import { requestScope } from "./auth-B_OxPpFr.mjs";
3
+ import { requestScope } from "./auth-uQ19WsD1.mjs";
4
4
  import { t as createServerRpc } from "./createServerRpc-BD8Xn_0_.mjs";
5
- //#region node_modules/.nitro/vite/services/ssr/assets/notifyFns-DvH4C-GH.js
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/notifyFns-BOeYZDRp.js
6
6
  /**
7
7
  * Notification-channel server functions. Channels are per-team push targets a
8
8
  * loop can route its run messages to. Secrets (bot token / chat id) live in the
@@ -1,12 +1,12 @@
1
1
  import { o as __toESM } from "../_runtime.mjs";
2
2
  import { a as TooltipTrigger, g as require_jsx_runtime, h as require_react, i as TooltipPortal, n as TooltipPopup, o as TooltipRoot, r as TooltipPositioner } from "../_libs/@base-ui/react+[...].mjs";
3
- import { Nt as machinePresence, lt as isOutdated } from "./boot-BNoivm21.mjs";
4
- import { E as runPulseAnim, M as useHydrated, S as labelCls, T as rel, _ as dur, c as btnDanger, g as dotOpacity, h as dotLabel, j as until, l as btnPrimary, m as dotColor, o as btn, t as ErrorBanner, v as fmt, x as inputCls } from "./ui-CI-OeTr7.mjs";
3
+ import { Nt as machinePresence, lt as isOutdated } from "./boot-DPoPmSLh.mjs";
4
+ import { E as runPulseAnim, M as useHydrated, S as labelCls, T as rel, _ as dur, c as btnDanger, g as dotOpacity, h as dotLabel, j as until, l as btnPrimary, m as dotColor, o as btn, t as ErrorBanner, v as fmt, x as inputCls } from "./ui-B6mE5-5v.mjs";
5
5
  import { n as createServerFn } from "./ssr.mjs";
6
- import { l as getConfig, r as createSsrRpc } from "./loopApi-BfMnXaKT.mjs";
7
- import { n as ModalHead, r as ModalSection, t as Modal } from "./Modal-B7gBr5Pm.mjs";
8
- import { n as daemonStopSupport } from "./lifecycleUi-5jMhxINb.mjs";
9
- //#region node_modules/.nitro/vite/services/ssr/assets/notifyFns-CtmSVNmE.js
6
+ import { l as getConfig, r as createSsrRpc } from "./loopApi-7MTSs6hy.mjs";
7
+ import { n as ModalHead, r as ModalSection, t as Modal } from "./Modal-Bc_5TYGr.mjs";
8
+ import { n as daemonStopSupport } from "./lifecycleUi-Djb44Aj3.mjs";
9
+ //#region node_modules/.nitro/vite/services/ssr/assets/notifyFns-UFZ2j7Fv.js
10
10
  var import_react = /* @__PURE__ */ __toESM(require_react());
11
11
  var import_jsx_runtime = require_jsx_runtime();
12
12
  /**
@@ -457,7 +457,7 @@ function MachinesModal({ open, onClose, teamId }) {
457
457
  className: "text-label text-secondary",
458
458
  children: daemonStopSupport(m.daemonProtocol).label
459
459
  }),
460
- m.daemonProtocol !== 2 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
460
+ !daemonStopSupport(m.daemonProtocol).supported && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
461
461
  className: "text-label text-accent",
462
462
  children: "Daemon upgrade required to stop a running process"
463
463
  }),