@kky42/pievo-server 1.0.0 → 2.0.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 (100) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{LoopView-B4H9QibC.js → LoopView-d0XYkzpx.js} +3 -3
  3. package/.output/public/assets/Modal-D_od-AuP.js +1 -0
  4. package/.output/public/assets/{SignIn-SHuRRyOv.js → SignIn-CbMeIAJZ.js} +1 -1
  5. package/.output/public/assets/app-vKFxjMMk.css +2 -0
  6. package/.output/public/assets/{artifactView-DFuubXLJ.js → artifactView-DekEs5ME.js} +1 -1
  7. package/.output/public/assets/index-DSF-1ahT.js +12 -0
  8. package/.output/public/assets/{invite._token-T8oo4Qtw.js → invite._token-Cl9Oarnq.js} +1 -1
  9. package/.output/public/assets/{lifecycleUi-DKkChdnU.js → lifecycleUi-DGVOf5yS.js} +1 -1
  10. package/.output/public/assets/{loopApi-BM2nj71x.js → loopApi-5s2-kCnu.js} +1 -1
  11. package/.output/public/assets/loops._loopId-B-dYxc9i.js +4 -0
  12. package/.output/public/assets/{loops._loopId_.runs._runId-_CflHV38.js → loops._loopId_.runs._runId-DepMp3Me.js} +2 -2
  13. package/.output/public/assets/notifyFns-b_jCi5XK.js +1 -0
  14. package/.output/public/assets/{preload-helper-CKUiEq3b.js → preload-helper-ycaoAemE.js} +1 -1
  15. package/.output/public/assets/{routes-B9tgli5f.js → routes-BB4aDC1D.js} +1 -1
  16. package/.output/public/assets/{t._teamId-Bm21mngW.js → t._teamId-D552b9PT.js} +1 -1
  17. package/.output/server/_libs/@base-ui/react+[...].mjs +23 -2375
  18. package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
  19. package/.output/server/_libs/html-react-parser+[...].mjs +1 -1
  20. package/.output/server/_libs/react-redux+[...].mjs +1 -1
  21. package/.output/server/_libs/recharts+victory-vendor.mjs +1 -1
  22. package/.output/server/_libs/uiw__react-codemirror.mjs +1 -1
  23. package/.output/server/_ssr/{CodeField-tm4rr6G3.mjs → CodeField-B7oOmmwH.mjs} +4 -4
  24. package/.output/server/_ssr/{DashboardView-CC7htv28.mjs → DashboardView-D3E-zevQ.mjs} +45 -35
  25. package/.output/server/_ssr/{LoopPlaybook-BXH8mhiX.mjs → LoopPlaybook-DJlWGia5.mjs} +3 -3
  26. package/.output/server/_ssr/{LoopView-DCugEbHx.mjs → LoopView-BtMANpb_.mjs} +5 -5
  27. package/.output/server/_ssr/Modal-DpKZHLZK.mjs +1 -1
  28. package/.output/server/_ssr/{SignIn-dTndU6Hw.mjs → SignIn-CjFonm71.mjs} +3 -3
  29. package/.output/server/_ssr/actionUi-CZbEixbf.mjs +1 -1
  30. package/.output/server/_ssr/{adapters-BS8XosjF.mjs → adapters-vbuo_-wD.mjs} +10 -5
  31. package/.output/server/_ssr/{artifactFiles-Cagtj7J0.mjs → artifactFiles-BGod8IWQ.mjs} +3 -3
  32. package/.output/server/_ssr/{artifactView-DS4O22wl.mjs → artifactView-CYV1r48i.mjs} +3 -3
  33. package/.output/server/_ssr/artifacts-CduiDAM2.mjs +2 -0
  34. package/.output/server/_ssr/{auth-DY1DuYZd.mjs → auth-Ca-um-e8.mjs} +9 -9
  35. package/.output/server/_ssr/{boot-CMHTxQpJ.mjs → boot-C0f0HGCw.mjs} +1 -1
  36. package/.output/server/_ssr/{boot-BbtG0ImW.mjs → boot-CkFZynUz.mjs} +533 -294
  37. package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-CU1Spd6z.mjs → bun-sqlite-dialect-BW9W1_Ps-CG9VPNj0.mjs} +2 -2
  38. package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-DfG7tB8s.mjs → d1-sqlite-dialect-BLC8LXE6-DBf7xVin.mjs} +2 -2
  39. package/.output/server/_ssr/db-Cs0gnPZZ.mjs +2 -0
  40. package/.output/server/_ssr/{dist-BIxFFVZg.mjs → dist-CwI9FwLx.mjs} +2 -2
  41. package/.output/server/_ssr/{factory-Blq0DYfT.mjs → factory-L3gsmDL7.mjs} +2 -2
  42. package/.output/server/_ssr/{invite._token-NewFt27g.mjs → invite._token-CN2p7Gt3.mjs} +6 -6
  43. package/.output/server/_ssr/invite._token-DJxGLILJ.mjs +1 -1
  44. package/.output/server/_ssr/{invite._token-BRCo9LGB.mjs → invite._token-KLCPnHk-.mjs} +4 -4
  45. package/.output/server/_ssr/{kysely-adapter-D3XTe64J.mjs → kysely-adapter-Czkfz-W-.mjs} +1 -1
  46. package/.output/server/_ssr/{lifecycleUi-C9lg1r3r.mjs → lifecycleUi-BhRsBvJ7.mjs} +4 -4
  47. package/.output/server/_ssr/logger-Cj1GFV_8.mjs +2 -0
  48. package/.output/server/_ssr/{loopApi-Cxe8WyOB.mjs → loopApi-BfMnXaKT.mjs} +7 -7
  49. package/.output/server/_ssr/{loopApi-BtfkZQYK.mjs → loopApi-CVf9RC6s.mjs} +32 -16
  50. package/.output/server/_ssr/{loops._loopId-DhnArGdL.mjs → loops._loopId-CbuhuTAp.mjs} +239 -397
  51. package/.output/server/_ssr/{loops._loopId-7NQJPB9W.mjs → loops._loopId-gNSxIQBe.mjs} +4 -4
  52. package/.output/server/_ssr/{loops._loopId_.runs._runId-Dip5Xk-q.mjs → loops._loopId_.runs._runId-0MahUyHy.mjs} +48 -6
  53. package/.output/server/_ssr/{loops._loopId_.runs._runId-Bvuo2nki.mjs → loops._loopId_.runs._runId-BptlCXat.mjs} +4 -4
  54. package/.output/server/_ssr/{machineFns-Dvr5ICUy.mjs → machineFns-D5rQWyLl.mjs} +3 -3
  55. package/.output/server/_ssr/{node-sqlite-dialect-DhyOpJTX.mjs → node-sqlite-dialect-Dr9_QokR.mjs} +2 -2
  56. package/.output/server/_ssr/{notifyFns-BcMRY5kP.mjs → notifyFns-BobPaLWi.mjs} +3 -3
  57. package/.output/server/_ssr/{notifyFns-Q458pZmE.mjs → notifyFns-c7ZY2TWF.mjs} +5 -5
  58. package/.output/server/_ssr/{router-J8KZ30xw.mjs → router-B8JTBtGd.mjs} +30 -30
  59. package/.output/server/_ssr/{routes-D4am3Zff.mjs → routes-B-MWifFy.mjs} +6 -6
  60. package/.output/server/_ssr/{routes-BoGrcf-b.mjs → routes-BJCWMIzb.mjs} +5 -5
  61. package/.output/server/_ssr/routes-Bcs4T1ox.mjs +1 -1
  62. package/.output/server/_ssr/{runDiff-CpEFqo7G.mjs → runDiff-C0w1D4a3.mjs} +2 -2
  63. package/.output/server/_ssr/ssr.mjs +49 -49
  64. package/.output/server/_ssr/store-LYphMSJ-.mjs +2 -0
  65. package/.output/server/_ssr/t._teamId-Dy_McbRt.mjs +1 -1
  66. package/.output/server/_ssr/{t._teamId-CeUhzgzT.mjs → t._teamId-FYVEIAGw.mjs} +6 -6
  67. package/.output/server/_ssr/{t._teamId-DR-hQK7o.mjs → t._teamId-fw8RfHyI.mjs} +5 -5
  68. package/.output/server/_ssr/{teamFns-DA4ovI5g.mjs → teamFns-D4I-0dEB.mjs} +2 -2
  69. package/.output/server/_ssr/{teamFns-BIDnsg2A.mjs → teamFns-Dz41U7gA.mjs} +3 -3
  70. package/.output/server/_ssr/tokens-3ZFpqsuf.mjs +2 -0
  71. package/.output/server/_ssr/ui-Dej2qjuS.mjs +1 -1
  72. package/.output/server/{_tanstack-start-manifest_v-CVS6c7re.mjs → _tanstack-start-manifest_v-C9p30TZH.mjs} +20 -20
  73. package/.output/server/drizzle/0009_ordinary_electro.sql +1 -0
  74. package/.output/server/drizzle/0010_workable_rage.sql +14 -0
  75. package/.output/server/drizzle/0011_steep_marvel_zombies.sql +3 -0
  76. package/.output/server/drizzle/meta/0009_snapshot.json +1793 -0
  77. package/.output/server/drizzle/meta/0010_snapshot.json +1891 -0
  78. package/.output/server/drizzle/meta/0011_snapshot.json +1872 -0
  79. package/.output/server/drizzle/meta/_journal.json +21 -0
  80. package/.output/server/index.mjs +101 -101
  81. package/drizzle/0009_ordinary_electro.sql +1 -0
  82. package/drizzle/0010_workable_rage.sql +14 -0
  83. package/drizzle/0011_steep_marvel_zombies.sql +3 -0
  84. package/drizzle/meta/0009_snapshot.json +1793 -0
  85. package/drizzle/meta/0010_snapshot.json +1891 -0
  86. package/drizzle/meta/0011_snapshot.json +1872 -0
  87. package/drizzle/meta/_journal.json +21 -0
  88. package/package.json +1 -1
  89. package/scripts/pievo-server.mjs +5 -0
  90. package/scripts/server-cli-lib.mjs +2 -0
  91. package/.output/public/assets/Modal-D33gNSgx.js +0 -1
  92. package/.output/public/assets/app-DElSo_jy.css +0 -2
  93. package/.output/public/assets/index-DfpTWRSz.js +0 -12
  94. package/.output/public/assets/loops._loopId-B19Jw7jC.js +0 -5
  95. package/.output/public/assets/notifyFns-DCubjpRy.js +0 -1
  96. package/.output/server/_ssr/artifacts-DngKyW2u.mjs +0 -2
  97. package/.output/server/_ssr/db-DWAuZq1o.mjs +0 -2
  98. package/.output/server/_ssr/logger-Dw82jNjH.mjs +0 -2
  99. package/.output/server/_ssr/store-b3JcQ08F.mjs +0 -2
  100. package/.output/server/_ssr/tokens-ytd60FUt.mjs +0 -2
@@ -1,6 +1,6 @@
1
- import { n as DefaultQueryCompiler, o as CompiledQuery, s as sql$1 } from "./auth-DY1DuYZd.mjs";
1
+ import { n as DefaultQueryCompiler, o as CompiledQuery, s as sql$1 } from "./auth-Ca-um-e8.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/bun-sqlite-dialect-BW9W1_Ps-CU1Spd6z.js
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/bun-sqlite-dialect-BW9W1_Ps-CG9VPNj0.js
4
4
  var BunSqliteAdapter = class {
5
5
  get supportsCreateIfNotExists() {
6
6
  return true;
@@ -1,6 +1,6 @@
1
- import { a as SqliteQueryCompiler, i as SqliteAdapter } from "./auth-DY1DuYZd.mjs";
1
+ import { a as SqliteQueryCompiler, i as SqliteAdapter } from "./auth-Ca-um-e8.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/d1-sqlite-dialect-BLC8LXE6-DfG7tB8s.js
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/d1-sqlite-dialect-BLC8LXE6-DBf7xVin.js
4
4
  var D1SqliteAdapter = class extends SqliteAdapter {};
5
5
  var D1SqliteDriver = class {
6
6
  #config;
@@ -0,0 +1,2 @@
1
+ import { k as db } from "./boot-CkFZynUz.mjs";
2
+ export { db };
@@ -1,5 +1,5 @@
1
- import { _ as logger, o as createAdapterFactory } from "./factory-Blq0DYfT.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/dist-BIxFFVZg.js
1
+ import { _ as logger, o as createAdapterFactory } from "./factory-L3gsmDL7.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/dist-CwI9FwLx.js
3
3
  /**
4
4
  * Case-insensitive in-memory comparison helpers.
5
5
  * Used when evaluating where clauses in the memory adapter.
@@ -1,5 +1,5 @@
1
- import { K as getEnvVar, L as env, a as BetterAuthError } from "./boot-BbtG0ImW.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/factory-Blq0DYfT.js
1
+ import { K as getEnvVar, L as env, a as BetterAuthError } from "./boot-CkFZynUz.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/factory-L3gsmDL7.js
3
3
  var __defProp = Object.defineProperty;
4
4
  var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
5
5
  var __exportAll = (all, no_symbols) => {
@@ -1,13 +1,13 @@
1
1
  import { o as __toESM } from "../_runtime.mjs";
2
- import { C as require_jsx_runtime, S as require_react } from "../_libs/@base-ui/react+[...].mjs";
2
+ import { g as require_jsx_runtime, h as require_react } from "../_libs/@base-ui/react+[...].mjs";
3
3
  import { l as btnPrimary } from "./ui-Dej2qjuS.mjs";
4
4
  import { d as useNavigate } from "../_libs/@tanstack/react-router+[...].mjs";
5
- import { i as PievoLogo, s as useSession } from "./LoopPlaybook-BXH8mhiX.mjs";
5
+ import { i as PievoLogo, s as useSession } from "./LoopPlaybook-DJlWGia5.mjs";
6
6
  import { t as setActiveTeamCookie } from "./teamCookie-B7hLOIie.mjs";
7
- import { c as redeemTeamInvite } from "./teamFns-DA4ovI5g.mjs";
8
- import { t as Route } from "./invite._token-BRCo9LGB.mjs";
9
- import { t as SignIn } from "./SignIn-dTndU6Hw.mjs";
10
- //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-NewFt27g.js
7
+ import { c as redeemTeamInvite } from "./teamFns-D4I-0dEB.mjs";
8
+ import { t as Route } from "./invite._token-KLCPnHk-.mjs";
9
+ import { t as SignIn } from "./SignIn-CjFonm71.mjs";
10
+ //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-CN2p7Gt3.js
11
11
  var import_react = /* @__PURE__ */ __toESM(require_react());
12
12
  var import_jsx_runtime = require_jsx_runtime();
13
13
  /**
@@ -1,4 +1,4 @@
1
- import { C as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
1
+ import { g as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
2
  import { f as useRouter } from "../_libs/@tanstack/react-router+[...].mjs";
3
3
  import { r as LoadErrorCard } from "./actionUi-CZbEixbf.mjs";
4
4
  //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-DJxGLILJ.js
@@ -1,9 +1,9 @@
1
1
  import { c as createFileRoute, s as lazyRouteComponent } from "../_libs/@tanstack/react-router+[...].mjs";
2
- import { l as getAuthState } from "./loopApi-Cxe8WyOB.mjs";
3
- import { a as authClient } from "./LoopPlaybook-BXH8mhiX.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-BRCo9LGB.js
2
+ import { c as getAuthState } from "./loopApi-BfMnXaKT.mjs";
3
+ import { a as authClient } from "./LoopPlaybook-DJlWGia5.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-KLCPnHk-.js
5
5
  var $$splitErrorComponentImporter = () => import("./invite._token-DJxGLILJ.mjs");
6
- var $$splitComponentImporter = () => import("./invite._token-NewFt27g.mjs");
6
+ var $$splitComponentImporter = () => import("./invite._token-CN2p7Gt3.mjs");
7
7
  /**
8
8
  * Invite-link redeem (`/invite/<token>`, design §4 option B). The recipient opens
9
9
  * the link the owner shared; if signed out (under the gate) they hit the normal
@@ -1,2 +1,2 @@
1
- import { r as kyselyAdapter, t as createKyselyAdapter } from "./auth-DY1DuYZd.mjs";
1
+ import { r as kyselyAdapter, t as createKyselyAdapter } from "./auth-Ca-um-e8.mjs";
2
2
  export { createKyselyAdapter, kyselyAdapter };
@@ -1,9 +1,9 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/lifecycleUi-C9lg1r3r.js
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/lifecycleUi-BhRsBvJ7.js
2
2
  var DAEMON_UPGRADE_REQUIRED = "Daemon upgrade required to stop a running process. Run `npm install -g @kky42/pievo@latest`, then `pievo daemon restart`.";
3
3
  /** Derive product lifecycle state only from durable server facts. */
4
4
  function deriveLoopLifecycle(job) {
5
- if (job.completedAt != null) return "completed";
6
5
  if (job.deleteRequestedAt != null) return "deleting";
6
+ if (job.completedAt != null) return "completed";
7
7
  const running = job.runs.find((run) => run.running);
8
8
  if (!job.enabled && running?.cancelRequested) return "stopping";
9
9
  if (!job.enabled && (job.running || running)) return "paused-finishing";
@@ -29,8 +29,8 @@ function lifecycleDisplay(detail) {
29
29
  case "completed": return "Completed";
30
30
  case "deleting": return "Deleting";
31
31
  case "stopping": return "Stopping";
32
- case "paused-finishing": return "Paused · current run finishing";
33
- case "paused": return "Paused";
32
+ case "paused-finishing": return detail.summary.pauseCause?.kind === "owner" ? "Paused by owner · current run finishing" : "Paused · current run finishing";
33
+ case "paused": return detail.summary.pauseCause?.kind === "failure-streak" ? "Paused automatically" : detail.summary.pauseCause?.kind === "owner" ? "Paused by owner" : "Paused";
34
34
  case "active": return "Active";
35
35
  }
36
36
  }
@@ -0,0 +1,2 @@
1
+ import { Dt as logger } from "./boot-CkFZynUz.mjs";
2
+ export { logger };
@@ -1,5 +1,5 @@
1
1
  import { n as createServerFn, r as getServerFnById, t as TSS_SERVER_FUNCTION } from "./ssr.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/loopApi-Cxe8WyOB.js
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/loopApi-BfMnXaKT.js
3
3
  var createSsrRpc = (functionId) => {
4
4
  const url = "/_serverFn/" + functionId;
5
5
  const serverFnMeta = { id: functionId };
@@ -78,12 +78,12 @@ var patchJob = createServerFn({ method: "POST" }).validator((d) => d).handler(cr
78
78
  var pauseJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("4c664fb177d6aae868b6baeab69348cff67d74d905cc6cf779c43cb37139b0aa"));
79
79
  var startJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("7732cf412e02d47d9ac3933f09510503ea08428df967d44267ba47bea10d4cc4"));
80
80
  var stopJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("934749369c5760593935c24bfa6f2041d3e82ea02fb7a13dfa7fd32940ac395d"));
81
- /** Delete is Stop + wait. A successful request may remove an idle loop
82
- * immediately; otherwise the report/sweep path calls tryDeleteLoop later. */
81
+ /** Delete is one confirmed operation. Reachable machines get the graceful
82
+ * Stop-and-wait path; a machine already offline at click time cannot acknowledge
83
+ * Stop, so retire its execution authority and remove server data immediately.
84
+ * Local files are never touched by either path. */
83
85
  var deleteJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("c3ccf6ce71809a0cdaf481b15b5fdc5db3a453a508e5841a62034cb1915a7f92"));
84
- /** Destructive uncertainty escape hatch. Team owners only; the explicit marker
85
- * is the server-side half of the Dashboard's second confirmation. */
86
- var forceDeleteJob = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("0cb2218861830aae4338b814b3819e15100942beab970bc4c188f88b8cb6bc7e"));
86
+ createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("0cb2218861830aae4338b814b3819e15100942beab970bc4c188f88b8cb6bc7e"));
87
87
  var runJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("0c9031f2f6a9ac0b1c60075833169755ef1815324918d1426c966ac8db563798"));
88
88
  var evolveJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("8a11b8d76ad42203a4bf128db0b8e0f2d6c947300dbee7a51498418404f211cd"));
89
89
  /** Agent-First edit: durably queue an owner instruction. A pending edit is
@@ -102,4 +102,4 @@ var mintClaim = createServerFn({ method: "POST" }).validator((teamId) => teamId)
102
102
  /** Poll a claim while the New-loop dialog waits for Claude Code to create the loop. */
103
103
  var claimStatus = createServerFn({ method: "GET" }).validator((token) => token).handler(createSsrRpc("4b0db7d6c8f25383a3526598cb0c1881db6cf413e451e9478687c05666461347"));
104
104
  //#endregion
105
- export { startJob as C, runJob as S, stopRun as T, loadOlderRuns as _, evolveJob as a, pauseJob as b, getArtifacts as c, getDefaultTeam as d, getJobDetail as f, listTemplates as g, listMyTeams as h, deleteJob as i, getAuthState as l, listJobs as m, claimStatus as n, forceDeleteJob as o, getRunDiff as p, createSsrRpc as r, getArtifact as s, canViewTeam as t, getConfig as u, mintClaim as v, stopJob as w, requestEdit as x, patchJob as y };
105
+ export { stopJob as C, startJob as S, mintClaim as _, evolveJob as a, requestEdit as b, getAuthState as c, getJobDetail as d, getRunDiff as f, loadOlderRuns as g, listTemplates as h, deleteJob as i, getConfig as l, listMyTeams as m, claimStatus as n, getArtifact as o, listJobs as p, createSsrRpc as r, getArtifacts as s, canViewTeam as t, getDefaultTeam as u, patchJob as v, stopRun as w, runJob as x, pauseJob as y };
@@ -1,9 +1,9 @@
1
- import { Et as listTeamsForUser, F as ensureServer, Ht as requestRunCancel, Jt as stopLoop, Pt as pauseLoop, Qt as updateLoop, Vt as requestDeleteLoop, W as getChannel, X as getLoop, Z as getMachine, Zt as tryDeleteLoop, at as hasRunningRun, b as coerceUi, et as getRun, g as canEvolve, nt as getTeam, qt as startLoop, rt as getTeamMember, v as coerceCodingAgent, wt as listRunsBefore, y as coerceStateSchema, yt as listLoops, z as forceDeleteLoop } from "./boot-BbtG0ImW.mjs";
1
+ import { $t as updateLoop, Et as listTeamsForUser, F as ensureServer, Ft as pauseLoop, Ht as requestDeleteLoop, Jt as startLoop, Pt as normalizeProviderSetting, Qt as tryDeleteLoop, Ut as requestRunCancel, W as getChannel, X as getLoop, Yt as stopLoop, Z as getMachine, at as hasRunningRun, b as coerceUi, et as getRun, g as canEvolve, jt as machinePresence, nt as getTeam, rt as getTeamMember, v as coerceCodingAgent, wt as listRunsBefore, y as coerceStateSchema, yt as listLoops, z as forceDeleteLoop } from "./boot-CkFZynUz.mjs";
2
2
  import { n as createServerFn } from "./ssr.mjs";
3
- import { i as toRunSummary, n as toJobDetail, r as toJobSummary } from "./adapters-BS8XosjF.mjs";
4
- import { canAccessLoop, requestScope } from "./auth-DY1DuYZd.mjs";
3
+ import { i as toRunSummary, n as toJobDetail, r as toJobSummary } from "./adapters-vbuo_-wD.mjs";
4
+ import { canAccessLoop, requestScope } from "./auth-Ca-um-e8.mjs";
5
5
  import { t as createServerRpc } from "./createServerRpc-BD8Xn_0_.mjs";
6
- //#region node_modules/.nitro/vite/services/ssr/assets/loopApi-BtfkZQYK.js
6
+ //#region node_modules/.nitro/vite/services/ssr/assets/loopApi-CVf9RC6s.js
7
7
  var meta_default$6 = {
8
8
  name: "dependency-triage",
9
9
  label: "Dependency Triage",
@@ -135,7 +135,7 @@ var getAuthState_createServerFn_handler = createServerRpc({
135
135
  filename: "src/server/loopApi.ts"
136
136
  }, (opts) => getAuthState.__executeServer(opts));
137
137
  var getAuthState = createServerFn({ method: "GET" }).handler(getAuthState_createServerFn_handler, async () => {
138
- const { authEnabled } = await import("./auth-DY1DuYZd.mjs");
138
+ const { authEnabled } = await import("./auth-Ca-um-e8.mjs");
139
139
  return { enabled: authEnabled };
140
140
  });
141
141
  var getConfig_createServerFn_handler = createServerRpc({
@@ -244,7 +244,7 @@ var getArtifacts_createServerFn_handler = createServerRpc({
244
244
  var getArtifacts = createServerFn({ method: "GET" }).validator((d) => d).handler(getArtifacts_createServerFn_handler, async ({ data }) => {
245
245
  await backend();
246
246
  if (!await ownedLoop(data.loopId)) return [];
247
- const { listLoopArtifacts } = await import("./artifactFiles-Cagtj7J0.mjs");
247
+ const { listLoopArtifacts } = await import("./artifactFiles-BGod8IWQ.mjs");
248
248
  return listLoopArtifacts(data.loopId);
249
249
  });
250
250
  var getArtifact_createServerFn_handler = createServerRpc({
@@ -255,7 +255,7 @@ var getArtifact_createServerFn_handler = createServerRpc({
255
255
  var getArtifact = createServerFn({ method: "GET" }).validator((d) => d).handler(getArtifact_createServerFn_handler, async ({ data }) => {
256
256
  await backend();
257
257
  if (!await ownedLoop(data.loopId)) return { error: "file not found" };
258
- const { readLoopArtifact } = await import("./artifactFiles-Cagtj7J0.mjs");
258
+ const { readLoopArtifact } = await import("./artifactFiles-BGod8IWQ.mjs");
259
259
  return readLoopArtifact(data.loopId, data.path);
260
260
  });
261
261
  var getRunDiff_createServerFn_handler = createServerRpc({
@@ -274,7 +274,7 @@ var getRunDiff = createServerFn({ method: "GET" }).validator((d) => d).handler(g
274
274
  hasSnapshot: false,
275
275
  files: []
276
276
  };
277
- const { computeRunDiff } = await import("./runDiff-CpEFqo7G.mjs");
277
+ const { computeRunDiff } = await import("./runDiff-C0w1D4a3.mjs");
278
278
  return computeRunDiff(data.runId);
279
279
  });
280
280
  var listTemplates_createServerFn_handler = createServerRpc({
@@ -311,11 +311,11 @@ var patchJob = createServerFn({ method: "POST" }).validator((d) => d).handler(pa
311
311
  ...agent ? { agent } : {},
312
312
  ...p.goal !== void 0 ? { goal: p.goal?.trim() || null } : {},
313
313
  ...p.taskFile !== void 0 ? { taskFile: p.taskFile.trim() || null } : {},
314
- ...p.workflow !== void 0 ? { workflow: p.workflow.trim() || null } : {},
315
314
  ...p.stateSchema !== void 0 ? { stateSchema: coerceStateSchema(p.stateSchema) ?? null } : {},
316
315
  ...p.ui !== void 0 ? { ui: coerceUi(p.ui) ?? null } : {},
317
316
  ...p.exec?.workdir !== void 0 ? { workdir: p.exec.workdir.trim() || null } : {},
318
- ...p.exec?.model !== void 0 ? { model: p.exec.model.trim() || null } : {},
317
+ ...p.exec?.model !== void 0 ? { model: normalizeProviderSetting(p.exec.model) } : {},
318
+ ...p.exec?.reasoningEffort !== void 0 ? { reasoningEffort: normalizeProviderSetting(p.exec.reasoningEffort) } : {},
319
319
  ...p.exec?.allowControl !== void 0 ? { allowControl: !!p.exec.allowControl } : {}
320
320
  });
321
321
  if (!loop) return { error: "not found" };
@@ -380,11 +380,27 @@ var deleteJob = createServerFn({ method: "POST" }).validator((id) => id).handler
380
380
  const { scheduler } = await backend();
381
381
  const owned = await ownedLoop(id);
382
382
  if (!owned) return { error: "not found" };
383
- if (await hasRunningRun(id)) {
384
- if ((await getMachine(owned.loop.machineId))?.daemonProtocol !== 2) return { error: "Daemon upgrade required to stop a running process" };
385
- }
383
+ const machine = await getMachine(owned.loop.machineId);
384
+ const unreachable = machinePresence(machine?.online, machine?.lastSeen) !== "online";
385
+ const actor = await requestScope();
386
+ const mayRetireAuthority = !owned.enforce || !!(actor.userId && owned.loop.teamId && (await getTeamMember(owned.loop.teamId, actor.userId))?.role === "owner");
387
+ if (!unreachable && await hasRunningRun(id) && machine?.daemonProtocol !== 2) return { error: "Daemon upgrade required to stop a running process" };
386
388
  scheduler.removeLoop(id);
387
389
  if (!await requestDeleteLoop(id)) return { error: "not found" };
390
+ if (unreachable && mayRetireAuthority) {
391
+ if (!await forceDeleteLoop(id)) return { error: "delete failed; server data was not deleted" };
392
+ const { logger } = await import("./logger-Cj1GFV_8.mjs");
393
+ logger.child({ mod: "loop-lifecycle" }).warn({
394
+ action: "unreachable-delete",
395
+ loopId: id,
396
+ actorUserId: actor.userId,
397
+ machineId: owned.loop.machineId
398
+ }, "unreachable-machine delete: retired execution authority and removed server data");
399
+ return {
400
+ ok: true,
401
+ deleted: true
402
+ };
403
+ }
388
404
  const deleted = await tryDeleteLoop(id);
389
405
  return {
390
406
  ok: true,
@@ -413,7 +429,7 @@ var forceDeleteJob = createServerFn({ method: "POST" }).validator((d) => d).hand
413
429
  }
414
430
  scheduler.removeLoop(data.id);
415
431
  if (!await forceDeleteLoop(data.id)) return { error: "force delete failed; server data was not deleted" };
416
- const { logger } = await import("./logger-Dw82jNjH.mjs");
432
+ const { logger } = await import("./logger-Cj1GFV_8.mjs");
417
433
  logger.child({ mod: "loop-lifecycle" }).warn({
418
434
  action: "force-delete",
419
435
  loopId: data.id,
@@ -451,7 +467,7 @@ var evolveJob = createServerFn({ method: "POST" }).validator((id) => id).handler
451
467
  const { scheduler } = await backend();
452
468
  const owned = await ownedLoop(id);
453
469
  if (!owned) return { error: "not found" };
454
- if (!canEvolve(owned.loop)) return { error: "nothing to evolve - add metrics or a workflow first" };
470
+ if (!canEvolve(owned.loop)) return { error: "nothing to evolve" };
455
471
  const queued = await scheduler.evolveNow(id);
456
472
  if (!("run" in queued)) return { error: queued.reason };
457
473
  return {
@@ -504,7 +520,7 @@ var mintClaim_createServerFn_handler = createServerRpc({
504
520
  }, (opts) => mintClaim.__executeServer(opts));
505
521
  var mintClaim = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(mintClaim_createServerFn_handler, async ({ data: teamId }) => {
506
522
  await backend();
507
- const { mintDeviceToken, rememberConnectKey } = await import("./tokens-ytd60FUt.mjs");
523
+ const { mintDeviceToken, rememberConnectKey } = await import("./tokens-3ZFpqsuf.mjs");
508
524
  const { userId, teamId: active } = await requestScope(teamId);
509
525
  const owner = userId ?? "shared";
510
526
  const token = mintDeviceToken();