@kky42/pievo-server 1.0.0 → 1.0.1

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 (96) 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-BKySt9Ta.css +2 -0
  6. package/.output/public/assets/{artifactView-DFuubXLJ.js → artifactView-DekEs5ME.js} +1 -1
  7. package/.output/public/assets/index-C4UaIr-9.js +12 -0
  8. package/.output/public/assets/{invite._token-T8oo4Qtw.js → invite._token-CnyCmLfD.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-DdWM2f1F.js +5 -0
  12. package/.output/public/assets/{loops._loopId_.runs._runId-_CflHV38.js → loops._loopId_.runs._runId-DTwSFHkl.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-G3WYRyPN.js} +1 -1
  16. package/.output/public/assets/{t._teamId-Bm21mngW.js → t._teamId-CGv7Oq6A.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 +1 -1
  24. package/.output/server/_ssr/{DashboardView-CC7htv28.mjs → DashboardView-CmDqjCiq.mjs} +45 -35
  25. package/.output/server/_ssr/{LoopPlaybook-BXH8mhiX.mjs → LoopPlaybook-BBn-xXpG.mjs} +3 -3
  26. package/.output/server/_ssr/{LoopView-DCugEbHx.mjs → LoopView-DdyJYOCY.mjs} +5 -5
  27. package/.output/server/_ssr/Modal-DpKZHLZK.mjs +1 -1
  28. package/.output/server/_ssr/{SignIn-dTndU6Hw.mjs → SignIn-RJN_0GFZ.mjs} +3 -3
  29. package/.output/server/_ssr/actionUi-CZbEixbf.mjs +1 -1
  30. package/.output/server/_ssr/{adapters-BS8XosjF.mjs → adapters-CJUhP66K.mjs} +9 -3
  31. package/.output/server/_ssr/{artifactFiles-Cagtj7J0.mjs → artifactFiles-zP43a-_v.mjs} +3 -3
  32. package/.output/server/_ssr/{artifactView-DS4O22wl.mjs → artifactView-CYV1r48i.mjs} +3 -3
  33. package/.output/server/_ssr/artifacts-CwCDal_d.mjs +2 -0
  34. package/.output/server/_ssr/{auth-DY1DuYZd.mjs → auth-D2SlCxwE.mjs} +9 -9
  35. package/.output/server/_ssr/{boot-CMHTxQpJ.mjs → boot-BHTcCXzm.mjs} +1 -1
  36. package/.output/server/_ssr/{boot-BbtG0ImW.mjs → boot-aI3l2EYT.mjs} +494 -107
  37. package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-CU1Spd6z.mjs → bun-sqlite-dialect-BW9W1_Ps-B-3PhI3u.mjs} +2 -2
  38. package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-DfG7tB8s.mjs → d1-sqlite-dialect-BLC8LXE6-Dm_NrETM.mjs} +2 -2
  39. package/.output/server/_ssr/db-7gZ8_zkc.mjs +2 -0
  40. package/.output/server/_ssr/{dist-BIxFFVZg.mjs → dist-DW3TO9NM.mjs} +2 -2
  41. package/.output/server/_ssr/{factory-Blq0DYfT.mjs → factory-Voe90MEY.mjs} +2 -2
  42. package/.output/server/_ssr/{invite._token-NewFt27g.mjs → invite._token-CeD9PCvh.mjs} +6 -6
  43. package/.output/server/_ssr/{invite._token-BRCo9LGB.mjs → invite._token-D80GP0-u.mjs} +4 -4
  44. package/.output/server/_ssr/invite._token-DJxGLILJ.mjs +1 -1
  45. package/.output/server/_ssr/{kysely-adapter-D3XTe64J.mjs → kysely-adapter-DSLWmYjO.mjs} +1 -1
  46. package/.output/server/_ssr/{lifecycleUi-C9lg1r3r.mjs → lifecycleUi-BhRsBvJ7.mjs} +4 -4
  47. package/.output/server/_ssr/logger-Dbz2vUU-.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-ByX_X17-.mjs} +31 -14
  50. package/.output/server/_ssr/{loops._loopId-DhnArGdL.mjs → loops._loopId-BODmoHPu.mjs} +236 -370
  51. package/.output/server/_ssr/{loops._loopId-7NQJPB9W.mjs → loops._loopId-u8Dr2J5f.mjs} +4 -4
  52. package/.output/server/_ssr/{loops._loopId_.runs._runId-Dip5Xk-q.mjs → loops._loopId_.runs._runId-DaKJdso2.mjs} +48 -6
  53. package/.output/server/_ssr/{loops._loopId_.runs._runId-Bvuo2nki.mjs → loops._loopId_.runs._runId-kGL-CMG6.mjs} +4 -4
  54. package/.output/server/_ssr/{machineFns-Dvr5ICUy.mjs → machineFns-MMSoHs7N.mjs} +3 -3
  55. package/.output/server/_ssr/{node-sqlite-dialect-DhyOpJTX.mjs → node-sqlite-dialect-Y22MTyEv.mjs} +2 -2
  56. package/.output/server/_ssr/{notifyFns-BcMRY5kP.mjs → notifyFns-Bmqhlrkc.mjs} +3 -3
  57. package/.output/server/_ssr/{notifyFns-Q458pZmE.mjs → notifyFns-CdrijMGW.mjs} +5 -5
  58. package/.output/server/_ssr/{router-J8KZ30xw.mjs → router-CdxedJtm.mjs} +30 -30
  59. package/.output/server/_ssr/routes-Bcs4T1ox.mjs +1 -1
  60. package/.output/server/_ssr/{routes-D4am3Zff.mjs → routes-Bhay1OjL.mjs} +6 -6
  61. package/.output/server/_ssr/{routes-BoGrcf-b.mjs → routes-ROFun1nJ.mjs} +5 -5
  62. package/.output/server/_ssr/{runDiff-CpEFqo7G.mjs → runDiff-DWwt7qXb.mjs} +2 -2
  63. package/.output/server/_ssr/ssr.mjs +49 -49
  64. package/.output/server/_ssr/store-D75hcTob.mjs +2 -0
  65. package/.output/server/_ssr/{t._teamId-DR-hQK7o.mjs → t._teamId-CGba9PRq.mjs} +5 -5
  66. package/.output/server/_ssr/{t._teamId-CeUhzgzT.mjs → t._teamId-DTKU7GOp.mjs} +6 -6
  67. package/.output/server/_ssr/t._teamId-Dy_McbRt.mjs +1 -1
  68. package/.output/server/_ssr/{teamFns-BIDnsg2A.mjs → teamFns-BMDqynoT.mjs} +3 -3
  69. package/.output/server/_ssr/{teamFns-DA4ovI5g.mjs → teamFns-D4I-0dEB.mjs} +2 -2
  70. package/.output/server/_ssr/tokens-BHjz7Lvx.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-BwejIUux.mjs} +21 -21
  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/meta/0009_snapshot.json +1793 -0
  76. package/.output/server/drizzle/meta/0010_snapshot.json +1891 -0
  77. package/.output/server/drizzle/meta/_journal.json +14 -0
  78. package/.output/server/index.mjs +102 -102
  79. package/drizzle/0009_ordinary_electro.sql +1 -0
  80. package/drizzle/0010_workable_rage.sql +14 -0
  81. package/drizzle/meta/0009_snapshot.json +1793 -0
  82. package/drizzle/meta/0010_snapshot.json +1891 -0
  83. package/drizzle/meta/_journal.json +14 -0
  84. package/package.json +1 -1
  85. package/scripts/pievo-server.mjs +5 -0
  86. package/scripts/server-cli-lib.mjs +2 -0
  87. package/.output/public/assets/Modal-D33gNSgx.js +0 -1
  88. package/.output/public/assets/app-DElSo_jy.css +0 -2
  89. package/.output/public/assets/index-DfpTWRSz.js +0 -12
  90. package/.output/public/assets/loops._loopId-B19Jw7jC.js +0 -5
  91. package/.output/public/assets/notifyFns-DCubjpRy.js +0 -1
  92. package/.output/server/_ssr/artifacts-DngKyW2u.mjs +0 -2
  93. package/.output/server/_ssr/db-DWAuZq1o.mjs +0 -2
  94. package/.output/server/_ssr/logger-Dw82jNjH.mjs +0 -2
  95. package/.output/server/_ssr/store-b3JcQ08F.mjs +0 -2
  96. 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-D2SlCxwE.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-B-3PhI3u.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-D2SlCxwE.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-Dm_NrETM.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-aI3l2EYT.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-Voe90MEY.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/dist-DW3TO9NM.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-aI3l2EYT.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/factory-Voe90MEY.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-BBn-xXpG.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-D80GP0-u.mjs";
9
+ import { t as SignIn } from "./SignIn-RJN_0GFZ.mjs";
10
+ //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-CeD9PCvh.js
11
11
  var import_react = /* @__PURE__ */ __toESM(require_react());
12
12
  var import_jsx_runtime = require_jsx_runtime();
13
13
  /**
@@ -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-BBn-xXpG.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-D80GP0-u.js
5
5
  var $$splitErrorComponentImporter = () => import("./invite._token-DJxGLILJ.mjs");
6
- var $$splitComponentImporter = () => import("./invite._token-NewFt27g.mjs");
6
+ var $$splitComponentImporter = () => import("./invite._token-CeD9PCvh.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,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,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-D2SlCxwE.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-aI3l2EYT.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-aI3l2EYT.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-CJUhP66K.mjs";
4
+ import { canAccessLoop, requestScope } from "./auth-D2SlCxwE.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-ByX_X17-.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-D2SlCxwE.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-zP43a-_v.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-zP43a-_v.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-DWwt7qXb.mjs");
278
278
  return computeRunDiff(data.runId);
279
279
  });
280
280
  var listTemplates_createServerFn_handler = createServerRpc({
@@ -315,7 +315,8 @@ var patchJob = createServerFn({ method: "POST" }).validator((d) => d).handler(pa
315
315
  ...p.stateSchema !== void 0 ? { stateSchema: coerceStateSchema(p.stateSchema) ?? null } : {},
316
316
  ...p.ui !== void 0 ? { ui: coerceUi(p.ui) ?? null } : {},
317
317
  ...p.exec?.workdir !== void 0 ? { workdir: p.exec.workdir.trim() || null } : {},
318
- ...p.exec?.model !== void 0 ? { model: p.exec.model.trim() || null } : {},
318
+ ...p.exec?.model !== void 0 ? { model: normalizeProviderSetting(p.exec.model) } : {},
319
+ ...p.exec?.reasoningEffort !== void 0 ? { reasoningEffort: normalizeProviderSetting(p.exec.reasoningEffort) } : {},
319
320
  ...p.exec?.allowControl !== void 0 ? { allowControl: !!p.exec.allowControl } : {}
320
321
  });
321
322
  if (!loop) return { error: "not found" };
@@ -380,11 +381,27 @@ var deleteJob = createServerFn({ method: "POST" }).validator((id) => id).handler
380
381
  const { scheduler } = await backend();
381
382
  const owned = await ownedLoop(id);
382
383
  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
- }
384
+ const machine = await getMachine(owned.loop.machineId);
385
+ const unreachable = machinePresence(machine?.online, machine?.lastSeen) !== "online";
386
+ const actor = await requestScope();
387
+ const mayRetireAuthority = !owned.enforce || !!(actor.userId && owned.loop.teamId && (await getTeamMember(owned.loop.teamId, actor.userId))?.role === "owner");
388
+ if (!unreachable && await hasRunningRun(id) && machine?.daemonProtocol !== 2) return { error: "Daemon upgrade required to stop a running process" };
386
389
  scheduler.removeLoop(id);
387
390
  if (!await requestDeleteLoop(id)) return { error: "not found" };
391
+ if (unreachable && mayRetireAuthority) {
392
+ if (!await forceDeleteLoop(id)) return { error: "delete failed; server data was not deleted" };
393
+ const { logger } = await import("./logger-Dbz2vUU-.mjs");
394
+ logger.child({ mod: "loop-lifecycle" }).warn({
395
+ action: "unreachable-delete",
396
+ loopId: id,
397
+ actorUserId: actor.userId,
398
+ machineId: owned.loop.machineId
399
+ }, "unreachable-machine delete: retired execution authority and removed server data");
400
+ return {
401
+ ok: true,
402
+ deleted: true
403
+ };
404
+ }
388
405
  const deleted = await tryDeleteLoop(id);
389
406
  return {
390
407
  ok: true,
@@ -413,7 +430,7 @@ var forceDeleteJob = createServerFn({ method: "POST" }).validator((d) => d).hand
413
430
  }
414
431
  scheduler.removeLoop(data.id);
415
432
  if (!await forceDeleteLoop(data.id)) return { error: "force delete failed; server data was not deleted" };
416
- const { logger } = await import("./logger-Dw82jNjH.mjs");
433
+ const { logger } = await import("./logger-Dbz2vUU-.mjs");
417
434
  logger.child({ mod: "loop-lifecycle" }).warn({
418
435
  action: "force-delete",
419
436
  loopId: data.id,
@@ -504,7 +521,7 @@ var mintClaim_createServerFn_handler = createServerRpc({
504
521
  }, (opts) => mintClaim.__executeServer(opts));
505
522
  var mintClaim = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(mintClaim_createServerFn_handler, async ({ data: teamId }) => {
506
523
  await backend();
507
- const { mintDeviceToken, rememberConnectKey } = await import("./tokens-ytd60FUt.mjs");
524
+ const { mintDeviceToken, rememberConnectKey } = await import("./tokens-BHjz7Lvx.mjs");
508
525
  const { userId, teamId: active } = await requestScope(teamId);
509
526
  const owner = userId ?? "shared";
510
527
  const token = mintDeviceToken();