@kky42/pievo-server 2.2.0 → 2.4.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 (199) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/MachinesModal-CEddj7la.js +1 -0
  3. package/.output/public/assets/SignIn-BdkKWOSs.js +1 -0
  4. package/.output/public/assets/actionUi-BYBeYy7U.js +1 -0
  5. package/.output/public/assets/app-BAgHQVvr.css +2 -0
  6. package/.output/public/assets/index-BZLqD3JI.js +12 -0
  7. package/.output/public/assets/invite._token-BCLgmTO7.js +1 -0
  8. package/.output/public/assets/invite._token-ZnVQqqq4.js +1 -0
  9. package/.output/public/assets/lifecycleUi-C7dwHtbw.js +1 -0
  10. package/.output/public/assets/loops._loopId-X8PSlgdB.js +67 -0
  11. package/.output/public/assets/loops._loopId_.runs._runId-CA0-q1y5.js +3 -0
  12. package/.output/public/assets/preload-helper-CUIO87nJ.js +5 -0
  13. package/.output/public/assets/routes-BjKcDy6D.js +1 -0
  14. package/.output/public/assets/routes-bfMcArTT.js +1 -0
  15. package/.output/public/assets/t._teamId-B75J8h0x.js +1 -0
  16. package/.output/public/assets/t._teamId-D7WVPMDr.js +1 -0
  17. package/.output/public/assets/ui-DGOT8AoZ.js +1 -0
  18. package/.output/server/_libs/@base-ui/react+[...].mjs +4130 -4130
  19. package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
  20. package/.output/server/_libs/drizzle-orm+postgres.mjs +28 -1
  21. package/.output/server/_ssr/DashboardView-D_hKsCsv.mjs +1098 -0
  22. package/.output/server/_ssr/{notifyFns-DXMbgYu2.mjs → MachinesModal-DZ_9ErAU.mjs} +57 -35
  23. package/.output/server/_ssr/{SignIn-C4fSJl_j.mjs → SignIn-DjSrg0nO.mjs} +10 -24
  24. package/.output/server/_ssr/SocialLinks-BTjsnVOm.mjs +1051 -0
  25. package/.output/server/_ssr/{actionUi-BKF6xI3d.mjs → actionUi-D15R8L7R.mjs} +3 -3
  26. package/.output/server/_ssr/{artifactFiles-C8PQKN6V.mjs → artifactFiles-CV3OXxRD.mjs} +7 -8
  27. package/.output/server/_ssr/{artifactKind-BW0isV8L.mjs → artifactKind-ByzVa7fg.mjs} +27 -2
  28. package/.output/server/_ssr/artifacts-BhQvaGjF.mjs +2 -0
  29. package/.output/server/_ssr/{auth-Sie6sQHF.mjs → auth-CPCDf6Wr.mjs} +16 -19
  30. package/.output/server/_ssr/{boot-akwC2sQg.mjs → boot-BbWxaF-z.mjs} +1359 -3843
  31. package/.output/server/_ssr/boot-COHf8Gv3.mjs +2 -0
  32. package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-CLY8cORt.mjs → bun-sqlite-dialect-BW9W1_Ps-8MIh9jN1.mjs} +2 -2
  33. package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-CRsXQNRe.mjs → d1-sqlite-dialect-BLC8LXE6-CcMQ01_d.mjs} +2 -2
  34. package/.output/server/_ssr/db-dw61xIt1.mjs +2 -0
  35. package/.output/server/_ssr/{dist-Cc_x6bBb.mjs → dist-AxCsRawm.mjs} +2 -2
  36. package/.output/server/_ssr/{factory-CDwHL_zY.mjs → factory-S7MaMVC2.mjs} +2 -2
  37. package/.output/server/_ssr/{invite._token-BlbVjz-o.mjs → invite._token-B1UgMbNQ.mjs} +3 -3
  38. package/.output/server/_ssr/{invite._token-BE_QUAVb.mjs → invite._token-BliJIGk4.mjs} +4 -5
  39. package/.output/server/_ssr/{invite._token-C7GjrJxr.mjs → invite._token-D296YVGd.mjs} +7 -7
  40. package/.output/server/_ssr/{kysely-adapter-zflsyYBA.mjs → kysely-adapter-DUdpqcCJ.mjs} +1 -1
  41. package/.output/server/_ssr/{lifecycleUi-Djb44Aj3.mjs → lifecycleUi-Dad3hvhm.mjs} +12 -11
  42. package/.output/server/_ssr/logger-DdUWuMdh.mjs +2 -0
  43. package/.output/server/_ssr/loopApi-Dy8ztANM.mjs +389 -0
  44. package/.output/server/_ssr/loopProjection-BZ1_IYCr.mjs +110 -0
  45. package/.output/server/_ssr/loops._loopId-CKsAnxMl.mjs +1255 -0
  46. package/.output/server/_ssr/{loops._loopId_.runs._runId-rBHW41dx.mjs → loops._loopId_.runs._runId-DG405pQs.mjs} +29 -74
  47. package/.output/server/_ssr/{loops._loopId_.runs._runId-Dk1QY49p.mjs → loops._loopId_.runs._runId-a_SyY8rX.mjs} +4 -5
  48. package/.output/server/_ssr/{machineFns-CoqLRLRh.mjs → machineFns-BSaE7K88.mjs} +3 -5
  49. package/.output/server/_ssr/{node-sqlite-dialect-dmrazfbM.mjs → node-sqlite-dialect-rWwVyt2J.mjs} +2 -2
  50. package/.output/server/_ssr/router-lMkobh5r.mjs +618 -0
  51. package/.output/server/_ssr/{routes-DebVUmCS.mjs → routes-CRHc9cLG.mjs} +6 -10
  52. package/.output/server/_ssr/{routes-Bx0bRxt9.mjs → routes-DNCZrs8z.mjs} +3 -3
  53. package/.output/server/_ssr/{routes-dQCBLTxY.mjs → routes-ufPbrGHs.mjs} +6 -6
  54. package/.output/server/_ssr/runDiff-CrZzjokj.mjs +2 -0
  55. package/.output/server/_ssr/ssr.mjs +65 -97
  56. package/.output/server/_ssr/store-CirPHuib.mjs +2 -0
  57. package/.output/server/_ssr/{t._teamId-BqOUF-0J.mjs → t._teamId-BoBoYEHL.mjs} +7 -7
  58. package/.output/server/_ssr/{t._teamId-D9nCEa2h.mjs → t._teamId-DcWOYjPf.mjs} +4 -4
  59. package/.output/server/_ssr/{t._teamId-BzWy4Ft2.mjs → t._teamId-QD2nN0wn.mjs} +7 -11
  60. package/.output/server/_ssr/{teamFns-BcnGMC-g.mjs → teamFns-BsmconJ1.mjs} +4 -4
  61. package/.output/server/_ssr/{teamFns-bm82twd5.mjs → teamFns-DcoVuWyH.mjs} +2 -2
  62. package/.output/server/_ssr/tokens-XngoyCU8.mjs +2 -0
  63. package/.output/server/_ssr/{ui-B6mE5-5v.mjs → ui-DmFKW2H_.mjs} +33 -47
  64. package/.output/server/{_tanstack-start-manifest_v-COr27bxK.mjs → _tanstack-start-manifest_v-Xd5bMpJe.mjs} +25 -33
  65. package/.output/server/drizzle/{0000_round_marauders.sql → 0000_baseline.sql} +102 -44
  66. package/.output/server/drizzle/meta/_journal.json +3 -115
  67. package/.output/server/index.mjs +82 -131
  68. package/drizzle/{0000_round_marauders.sql → 0000_baseline.sql} +102 -44
  69. package/drizzle/meta/_journal.json +3 -115
  70. package/package.json +2 -10
  71. package/scripts/pievo-server.mjs +3 -1
  72. package/scripts/server-cli-lib.mjs +23 -16
  73. package/.output/public/assets/CodeField-dOzyFQNH.js +0 -34
  74. package/.output/public/assets/LoopView-BTXoqfzM.js +0 -59
  75. package/.output/public/assets/Modal-Ba36NAkv.js +0 -1
  76. package/.output/public/assets/SignIn-Cc1zxGnA.js +0 -1
  77. package/.output/public/assets/actionUi-DDDfD0WX.js +0 -1
  78. package/.output/public/assets/app-D1cij_NJ.css +0 -2
  79. package/.output/public/assets/artifactView-Cd5wWPil.js +0 -66
  80. package/.output/public/assets/index-BGM1XGY0.js +0 -12
  81. package/.output/public/assets/invite._token-C3t4JfAY.js +0 -1
  82. package/.output/public/assets/invite._token-CUCNcN89.js +0 -1
  83. package/.output/public/assets/jsx-runtime-BseJUIpC.js +0 -1
  84. package/.output/public/assets/lifecycleUi-CMFw5Nlj.js +0 -1
  85. package/.output/public/assets/loopApi-CT1mMhlb.js +0 -3
  86. package/.output/public/assets/loops._loopId-CrSSvSVl.js +0 -4
  87. package/.output/public/assets/loops._loopId_.runs._runId-B5Qacloe.js +0 -3
  88. package/.output/public/assets/notifyFns-CYiZT7CK.js +0 -1
  89. package/.output/public/assets/preload-helper-DFkkpP6W.js +0 -3
  90. package/.output/public/assets/routes-B6Kg4mFC.js +0 -1
  91. package/.output/public/assets/routes-DsdcURfk.js +0 -1
  92. package/.output/public/assets/t._teamId-C9uEyAh_.js +0 -1
  93. package/.output/public/assets/t._teamId-Cmm4xdKj.js +0 -1
  94. package/.output/public/assets/ui-Gb1413-F.js +0 -1
  95. package/.output/public/assets/useRouter-DsjH8G0p.js +0 -1
  96. package/.output/server/_libs/@codemirror/autocomplete+[...].mjs +0 -19713
  97. package/.output/server/_libs/@codemirror/lang-css+[...].mjs +0 -2636
  98. package/.output/server/_libs/@codemirror/lang-html+[...].mjs +0 -2247
  99. package/.output/server/_libs/@codemirror/lang-json+[...].mjs +0 -79
  100. package/.output/server/_libs/@reduxjs/toolkit+[...].mjs +0 -1736
  101. package/.output/server/_libs/@uiw/codemirror-extensions-basic-setup+[...].mjs +0 -76
  102. package/.output/server/_libs/babel__runtime.mjs +0 -30
  103. package/.output/server/_libs/clsx.mjs +0 -16
  104. package/.output/server/_libs/codemirror__commands.mjs +0 -1725
  105. package/.output/server/_libs/codemirror__lint.mjs +0 -565
  106. package/.output/server/_libs/codemirror__search.mjs +0 -1138
  107. package/.output/server/_libs/codemirror__theme-one-dark.mjs +0 -161
  108. package/.output/server/_libs/d3-array.mjs +0 -231
  109. package/.output/server/_libs/d3-color.mjs +0 -330
  110. package/.output/server/_libs/d3-format.mjs +0 -252
  111. package/.output/server/_libs/d3-interpolate.mjs +0 -163
  112. package/.output/server/_libs/d3-path.mjs +0 -77
  113. package/.output/server/_libs/d3-scale+[...].mjs +0 -1907
  114. package/.output/server/_libs/d3-shape.mjs +0 -818
  115. package/.output/server/_libs/decimal.js-light.mjs +0 -884
  116. package/.output/server/_libs/dom-serializer+[...].mjs +0 -708
  117. package/.output/server/_libs/domhandler.mjs +0 -461
  118. package/.output/server/_libs/domutils.mjs +0 -868
  119. package/.output/server/_libs/es-toolkit.mjs +0 -1737
  120. package/.output/server/_libs/eventemitter3.mjs +0 -236
  121. package/.output/server/_libs/html-dom-parser+htmlparser2.mjs +0 -1560
  122. package/.output/server/_libs/html-react-parser+[...].mjs +0 -1360
  123. package/.output/server/_libs/react-is.mjs +0 -48
  124. package/.output/server/_libs/react-redux+[...].mjs +0 -205
  125. package/.output/server/_libs/recharts+victory-vendor.mjs +0 -17303
  126. package/.output/server/_libs/uiw__codemirror-themes.mjs +0 -32
  127. package/.output/server/_libs/uiw__react-codemirror.mjs +0 -354
  128. package/.output/server/_ssr/CodeField-B7oOmmwH.mjs +0 -143
  129. package/.output/server/_ssr/DashboardView-0yoKh8Em.mjs +0 -2733
  130. package/.output/server/_ssr/LoopPlaybook-uq_sFfgU.mjs +0 -2105
  131. package/.output/server/_ssr/LoopView-BlOY-jfJ.mjs +0 -1300
  132. package/.output/server/_ssr/Modal-Bc_5TYGr.mjs +0 -49
  133. package/.output/server/_ssr/adapters-RReIIwAx.mjs +0 -134
  134. package/.output/server/_ssr/artifactView-iuPsp5aa.mjs +0 -304
  135. package/.output/server/_ssr/artifacts-B_F6vSih.mjs +0 -2
  136. package/.output/server/_ssr/boot-pVS0wjd0.mjs +0 -2
  137. package/.output/server/_ssr/db-Bdm9PFZF.mjs +0 -2
  138. package/.output/server/_ssr/logger-tfiliKTi.mjs +0 -2
  139. package/.output/server/_ssr/loopApi-8_KgBapr.mjs +0 -109
  140. package/.output/server/_ssr/loopApi-JzmqWENY.mjs +0 -564
  141. package/.output/server/_ssr/loops._loopId-D-aCCtrX.mjs +0 -1477
  142. package/.output/server/_ssr/loops._loopId-DZ-FjscA.mjs +0 -30
  143. package/.output/server/_ssr/notifyFns-CH7-bcmd.mjs +0 -118
  144. package/.output/server/_ssr/router-BFPzSTFx.mjs +0 -679
  145. package/.output/server/_ssr/runDiff-qA1C8R_L.mjs +0 -2
  146. package/.output/server/_ssr/store-DWUdkIq2.mjs +0 -2
  147. package/.output/server/_ssr/tokens-DG8z1GIg.mjs +0 -2
  148. package/.output/server/drizzle/0001_naive_silver_fox.sql +0 -25
  149. package/.output/server/drizzle/0002_funny_sage.sql +0 -12
  150. package/.output/server/drizzle/0003_optimal_slapstick.sql +0 -102
  151. package/.output/server/drizzle/0004_remove_grok_agent.sql +0 -5
  152. package/.output/server/drizzle/0005_heavy_gauntlet.sql +0 -8
  153. package/.output/server/drizzle/0006_tranquil_sharon_carter.sql +0 -1
  154. package/.output/server/drizzle/0007_faulty_starbolt.sql +0 -30
  155. package/.output/server/drizzle/0008_durable_lifecycle_evidence.sql +0 -15
  156. package/.output/server/drizzle/0009_ordinary_electro.sql +0 -1
  157. package/.output/server/drizzle/0010_workable_rage.sql +0 -14
  158. package/.output/server/drizzle/0011_steep_marvel_zombies.sql +0 -3
  159. package/.output/server/drizzle/0012_blocked_run_status.sql +0 -12
  160. package/.output/server/drizzle/0013_drop_run_outcome.sql +0 -2
  161. package/.output/server/drizzle/0014_luxuriant_scrambler.sql +0 -5
  162. package/.output/server/drizzle/0015_run_history_foundation.sql +0 -43
  163. package/.output/server/drizzle/0016_plural_machine_runs.sql +0 -4
  164. package/.output/server/drizzle/meta/0000_snapshot.json +0 -1333
  165. package/.output/server/drizzle/meta/0001_snapshot.json +0 -1498
  166. package/.output/server/drizzle/meta/0002_snapshot.json +0 -1576
  167. package/.output/server/drizzle/meta/0003_snapshot.json +0 -1666
  168. package/.output/server/drizzle/meta/0005_snapshot.json +0 -1666
  169. package/.output/server/drizzle/meta/0006_snapshot.json +0 -1672
  170. package/.output/server/drizzle/meta/0007_snapshot.json +0 -1787
  171. package/.output/server/drizzle/meta/0009_snapshot.json +0 -1793
  172. package/.output/server/drizzle/meta/0010_snapshot.json +0 -1891
  173. package/.output/server/drizzle/meta/0011_snapshot.json +0 -1872
  174. package/drizzle/0001_naive_silver_fox.sql +0 -25
  175. package/drizzle/0002_funny_sage.sql +0 -12
  176. package/drizzle/0003_optimal_slapstick.sql +0 -102
  177. package/drizzle/0004_remove_grok_agent.sql +0 -5
  178. package/drizzle/0005_heavy_gauntlet.sql +0 -8
  179. package/drizzle/0006_tranquil_sharon_carter.sql +0 -1
  180. package/drizzle/0007_faulty_starbolt.sql +0 -30
  181. package/drizzle/0008_durable_lifecycle_evidence.sql +0 -15
  182. package/drizzle/0009_ordinary_electro.sql +0 -1
  183. package/drizzle/0010_workable_rage.sql +0 -14
  184. package/drizzle/0011_steep_marvel_zombies.sql +0 -3
  185. package/drizzle/0012_blocked_run_status.sql +0 -12
  186. package/drizzle/0013_drop_run_outcome.sql +0 -2
  187. package/drizzle/0014_luxuriant_scrambler.sql +0 -5
  188. package/drizzle/0015_run_history_foundation.sql +0 -43
  189. package/drizzle/0016_plural_machine_runs.sql +0 -4
  190. package/drizzle/meta/0000_snapshot.json +0 -1333
  191. package/drizzle/meta/0001_snapshot.json +0 -1498
  192. package/drizzle/meta/0002_snapshot.json +0 -1576
  193. package/drizzle/meta/0003_snapshot.json +0 -1666
  194. package/drizzle/meta/0005_snapshot.json +0 -1666
  195. package/drizzle/meta/0006_snapshot.json +0 -1672
  196. package/drizzle/meta/0007_snapshot.json +0 -1787
  197. package/drizzle/meta/0009_snapshot.json +0 -1793
  198. package/drizzle/meta/0010_snapshot.json +0 -1891
  199. package/drizzle/meta/0011_snapshot.json +0 -1872
@@ -0,0 +1,2 @@
1
+ import { B as getGateway, F as getArtifactSync, R as getCliGateway } from "./boot-BbWxaF-z.mjs";
2
+ export { getArtifactSync, getCliGateway, getGateway };
@@ -1,6 +1,6 @@
1
- import { n as DefaultQueryCompiler, o as CompiledQuery, s as sql$1 } from "./auth-Sie6sQHF.mjs";
1
+ import { n as DefaultQueryCompiler, o as CompiledQuery, s as sql$1 } from "./auth-CPCDf6Wr.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-CLY8cORt.js
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/bun-sqlite-dialect-BW9W1_Ps-8MIh9jN1.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-Sie6sQHF.mjs";
1
+ import { a as SqliteQueryCompiler, i as SqliteAdapter } from "./auth-CPCDf6Wr.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-CRsXQNRe.js
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/d1-sqlite-dialect-BLC8LXE6-CcMQ01_d.js
4
4
  var D1SqliteAdapter = class extends SqliteAdapter {};
5
5
  var D1SqliteDriver = class {
6
6
  #config;
@@ -0,0 +1,2 @@
1
+ import { T as db } from "./boot-BbWxaF-z.mjs";
2
+ export { db };
@@ -1,5 +1,5 @@
1
- import { _ as logger, o as createAdapterFactory } from "./factory-CDwHL_zY.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/dist-Cc_x6bBb.js
1
+ import { _ as logger, o as createAdapterFactory } from "./factory-S7MaMVC2.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/dist-AxCsRawm.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 { V as env, X as getEnvVar, a as BetterAuthError } from "./boot-akwC2sQg.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/factory-CDwHL_zY.js
1
+ import { M as env, a as BetterAuthError, z as getEnvVar } from "./boot-BbWxaF-z.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/factory-S7MaMVC2.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,7 +1,7 @@
1
- import { g as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
1
+ import { h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
+ import { r as LoadErrorCard } from "./actionUi-D15R8L7R.mjs";
2
3
  import { f as useRouter } from "../_libs/@tanstack/react-router+[...].mjs";
3
- import { r as LoadErrorCard } from "./actionUi-BKF6xI3d.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-BlbVjz-o.js
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-B1UgMbNQ.js
5
5
  var import_jsx_runtime = require_jsx_runtime();
6
6
  /**
7
7
  * Invite-link redeem (`/invite/<token>`, design §4 option B). The recipient opens
@@ -1,9 +1,8 @@
1
1
  import { c as createFileRoute, s as lazyRouteComponent } from "../_libs/@tanstack/react-router+[...].mjs";
2
- import { c as getAuthState } from "./loopApi-8_KgBapr.mjs";
3
- import { a as authClient } from "./LoopPlaybook-uq_sFfgU.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-BE_QUAVb.js
5
- var $$splitErrorComponentImporter = () => import("./invite._token-BlbVjz-o.mjs");
6
- var $$splitComponentImporter = () => import("./invite._token-C7GjrJxr.mjs");
2
+ import { d as getAuthState, i as authClient } from "./SocialLinks-BTjsnVOm.mjs";
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-BliJIGk4.js
4
+ var $$splitErrorComponentImporter = () => import("./invite._token-B1UgMbNQ.mjs");
5
+ var $$splitComponentImporter = () => import("./invite._token-D296YVGd.mjs");
7
6
  /**
8
7
  * Invite-link redeem (`/invite/<token>`, design §4 option B). The recipient opens
9
8
  * the link the owner shared; if signed out (under the gate) they hit the normal
@@ -1,13 +1,13 @@
1
1
  import { o as __toESM } from "../_runtime.mjs";
2
- import { g as require_jsx_runtime, h as require_react } from "../_libs/@base-ui/react+[...].mjs";
3
- import { l as btnPrimary } from "./ui-B6mE5-5v.mjs";
2
+ import { g as require_react, h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
+ import { s as btnPrimary } from "./ui-DmFKW2H_.mjs";
4
4
  import { d as useNavigate } from "../_libs/@tanstack/react-router+[...].mjs";
5
- import { i as PievoLogo, s as useSession } from "./LoopPlaybook-uq_sFfgU.mjs";
5
+ import { D as useSession, r as PievoLogo } from "./SocialLinks-BTjsnVOm.mjs";
6
6
  import { t as setActiveTeamCookie } from "./teamCookie-B7hLOIie.mjs";
7
- import { c as redeemTeamInvite } from "./teamFns-bm82twd5.mjs";
8
- import { t as Route } from "./invite._token-BE_QUAVb.mjs";
9
- import { t as SignIn } from "./SignIn-C4fSJl_j.mjs";
10
- //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-C7GjrJxr.js
7
+ import { c as redeemTeamInvite } from "./teamFns-DcoVuWyH.mjs";
8
+ import { t as Route } from "./invite._token-BliJIGk4.mjs";
9
+ import { t as SignIn } from "./SignIn-DjSrg0nO.mjs";
10
+ //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-D296YVGd.js
11
11
  var import_react = /* @__PURE__ */ __toESM(require_react());
12
12
  var import_jsx_runtime = require_jsx_runtime();
13
13
  /**
@@ -1,2 +1,2 @@
1
- import { r as kyselyAdapter, t as createKyselyAdapter } from "./auth-Sie6sQHF.mjs";
1
+ import { r as kyselyAdapter, t as createKyselyAdapter } from "./auth-CPCDf6Wr.mjs";
2
2
  export { createKyselyAdapter, kyselyAdapter };
@@ -1,18 +1,18 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/lifecycleUi-Djb44Aj3.js
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/lifecycleUi-Dad3hvhm.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
- function deriveLoopLifecycle(job) {
5
- if (job.deleteRequestedAt != null) return "deleting";
6
- const running = job.runs.find((run) => run.running);
7
- if (!job.enabled && running?.cancelRequested) return "stopping";
8
- if (!job.enabled && (job.running || running)) return "paused-finishing";
9
- if (!job.enabled) return "paused";
4
+ function deriveLoopLifecycle(loop) {
5
+ if (loop.deleteRequestedAt != null) return "deleting";
6
+ const running = loop.runs.find((run) => run.phase === "running");
7
+ if (!loop.enabled && running?.cancelRequested) return "stopping";
8
+ if (!loop.enabled && (loop.running || running)) return "paused-finishing";
9
+ if (!loop.enabled) return "paused";
10
10
  return "active";
11
11
  }
12
12
  function daemonStopSupport(protocol) {
13
- return protocol === 3 ? {
13
+ return protocol === 4 ? {
14
14
  supported: true,
15
- label: `Daemon protocol 3 · Stop supported`
15
+ label: `Daemon protocol 4 · Stop supported`
16
16
  } : {
17
17
  supported: false,
18
18
  label: `Daemon protocol ${protocol ?? "unknown"} · upgrade required`
@@ -21,8 +21,9 @@ function daemonStopSupport(protocol) {
21
21
  /** Exact user-facing lifecycle wording, including uncertainty boundaries. */
22
22
  function lifecycleDisplay(detail) {
23
23
  const state = deriveLoopLifecycle(detail.summary);
24
- const running = detail.summary.runs.find((run) => run.running);
25
- if (running && detail.machine.daemonProtocol !== 3) return DAEMON_UPGRADE_REQUIRED;
24
+ if (detail.summary.queued && detail.summary.reconciliationBlocking) return detail.machine.presence === "online" ? "Queued · machine is checking an interrupted run" : "Queued · waiting for machine recovery";
25
+ const running = detail.summary.runs.find((run) => run.phase === "running");
26
+ if (running && detail.machine.daemonProtocol !== 4) return DAEMON_UPGRADE_REQUIRED;
26
27
  if (state === "stopping" && running && !detail.machine.online) return `Stopping · waiting for ${detail.machine.name || "machine"}`;
27
28
  switch (state) {
28
29
  case "deleting": return "Deleting";
@@ -0,0 +1,2 @@
1
+ import { _t as logger } from "./boot-BbWxaF-z.mjs";
2
+ export { logger };
@@ -0,0 +1,389 @@
1
+ import { A as ensureServer, Bt as startLoop$1, Gt as tryDeleteLoop, Ht as stopLoop$1, J as getTeam, Kt as updateLoop, N as forceDeleteLoop$1, Nt as requestDeleteLoop, Pt as requestRunCancel, Tt as pauseLoop$1, U as getLoop, W as getMachine, Xt as validateLoopEdit, Y as getTeamMember, Z as hasRunningRun, gt as listTeamsForUser, lt as listLoops$1, mt as listRunsBefore, q as getRun, xt as machinePresence } from "./boot-BbWxaF-z.mjs";
2
+ import { i as toRunSummaries, n as toLoopDetail, r as toLoopSummary } from "./loopProjection-BZ1_IYCr.mjs";
3
+ import { canAccessLoop, requestScope } from "./auth-CPCDf6Wr.mjs";
4
+ import { n as createServerFn } from "./ssr.mjs";
5
+ import { t as createServerRpc } from "./createServerRpc-BD8Xn_0_.mjs";
6
+ //#region node_modules/.nitro/vite/services/ssr/assets/loopApi-Dy8ztANM.js
7
+ /**
8
+ * Server functions backing the dashboard. They run server-side (createServerFn
9
+ * → RPC) and call the IN-PROCESS scheduler + store directly — the scheduler
10
+ * lives in this same TanStack process (booted on first call via ensureServer).
11
+ * The machine-facing poll, CLI, report, and artifact-sync endpoints are sibling
12
+ * server routes in this same process, so one process owns the single scheduler.
13
+ *
14
+ * Reads and writes are scoped through requestScope/ownedLoop so users only see
15
+ * teams and loops their current session is authorized to access.
16
+ */
17
+ function backend() {
18
+ return ensureServer();
19
+ }
20
+ /**
21
+ * Resolve a loop and authorize the request against its owner. Returns the loop,
22
+ * or undefined when it's missing OR (gate on) owned by a different user — callers
23
+ * treat both as "not found" so existence never leaks across users.
24
+ */
25
+ async function ownedLoop(id) {
26
+ const loop = await getLoop(id);
27
+ if (!loop) return void 0;
28
+ const scope = await requestScope();
29
+ if (!await canAccessLoop(loop.teamId, scope)) return void 0;
30
+ return {
31
+ loop,
32
+ enforce: scope.enforce,
33
+ teamId: scope.teamId
34
+ };
35
+ }
36
+ /** Whether the auth gate is active (a GitHub OAuth app is configured). */
37
+ var getAuthState_createServerFn_handler = createServerRpc({
38
+ id: "b8119d5fe6ca1ed9f609702aa2133b5ac5337030c0bdcf92dc7eba889d6bd2e6",
39
+ name: "getAuthState",
40
+ filename: "src/server/loopApi.ts"
41
+ }, (opts) => getAuthState.__executeServer(opts));
42
+ var getAuthState = createServerFn({ method: "GET" }).handler(getAuthState_createServerFn_handler, async () => {
43
+ const { authEnabled } = await import("./auth-CPCDf6Wr.mjs");
44
+ return { enabled: authEnabled };
45
+ });
46
+ var getConfig_createServerFn_handler = createServerRpc({
47
+ id: "cbb6a1b09b309459bbba3dc3851ae85fc468658b3cda77e22b6c6f3e28b65af4",
48
+ name: "getConfig",
49
+ filename: "src/server/loopApi.ts"
50
+ }, (opts) => getConfig.__executeServer(opts));
51
+ var getConfig = createServerFn({ method: "GET" }).handler(getConfig_createServerFn_handler, () => {
52
+ const custom = process.env.PIEVO_CLI?.trim();
53
+ return {
54
+ pievoCli: custom || "pievo",
55
+ /** True when a non-default (dev) CLI is configured — the New-loop paste then
56
+ * carries an explicit `pievo-cli:` line so Claude Code uses it verbatim. */
57
+ customCli: !!custom
58
+ };
59
+ });
60
+ var listMyTeams_createServerFn_handler = createServerRpc({
61
+ id: "0fe12e769203c42f432a927b9cbf13a967a0f9db567b61843598f734afb4f5c6",
62
+ name: "listMyTeams",
63
+ filename: "src/server/loopApi.ts"
64
+ }, (opts) => listMyTeams.__executeServer(opts));
65
+ var listMyTeams = createServerFn({ method: "GET" }).validator((teamId) => teamId).handler(listMyTeams_createServerFn_handler, async ({ data: teamId }) => {
66
+ await backend();
67
+ const { enforce, userId, teamId: active } = await requestScope(teamId);
68
+ if (!enforce || !userId) return {
69
+ teams: [],
70
+ activeTeamId: active
71
+ };
72
+ return {
73
+ teams: (await listTeamsForUser(userId)).map((t) => ({
74
+ id: t.id,
75
+ name: t.name
76
+ })),
77
+ activeTeamId: active
78
+ };
79
+ });
80
+ var canViewTeam_createServerFn_handler = createServerRpc({
81
+ id: "7cc22b3a0f6b1c4c73463c3401e981ad42caf6487b479b738ee5aeacb11710da",
82
+ name: "canViewTeam",
83
+ filename: "src/server/loopApi.ts"
84
+ }, (opts) => canViewTeam.__executeServer(opts));
85
+ var canViewTeam = createServerFn({ method: "GET" }).validator((teamId) => teamId).handler(canViewTeam_createServerFn_handler, async ({ data: teamId }) => {
86
+ await backend();
87
+ const scope = await requestScope(teamId);
88
+ if (!scope.enforce) return true;
89
+ if (!scope.userId) return false;
90
+ return scope.teamId === teamId;
91
+ });
92
+ var getDefaultTeam_createServerFn_handler = createServerRpc({
93
+ id: "dc0ec955d0d53a150a3e9a4673f98f3509cfb4bd411c512079ae4e94c561b70c",
94
+ name: "getDefaultTeam",
95
+ filename: "src/server/loopApi.ts"
96
+ }, (opts) => getDefaultTeam.__executeServer(opts));
97
+ var getDefaultTeam = createServerFn({ method: "GET" }).handler(getDefaultTeam_createServerFn_handler, async () => {
98
+ await backend();
99
+ return (await requestScope()).teamId;
100
+ });
101
+ var listLoops_createServerFn_handler = createServerRpc({
102
+ id: "23e290b2b7483ceea6fe669024c35b12c2c4ddd76649f6fab21c958ceda02940",
103
+ name: "listLoops",
104
+ filename: "src/server/loopApi.ts"
105
+ }, (opts) => listLoops.__executeServer(opts));
106
+ var listLoops = createServerFn({ method: "GET" }).validator((teamId) => teamId).handler(listLoops_createServerFn_handler, async ({ data: teamId }) => {
107
+ await backend();
108
+ const { enforce, userId, teamId: active } = await requestScope(teamId);
109
+ if (enforce && !userId) return [];
110
+ const loops = (await listLoops$1(enforce ? active : void 0)).sort((a, b) => a.createdAt < b.createdAt ? 1 : -1);
111
+ return await Promise.all(loops.map(toLoopSummary));
112
+ });
113
+ var getLoopDetail_createServerFn_handler = createServerRpc({
114
+ id: "b050455aacc84dd2a2c9a45517826ad10f91d8f1545e87cc7015784cc7116a97",
115
+ name: "getLoopDetail",
116
+ filename: "src/server/loopApi.ts"
117
+ }, (opts) => getLoopDetail.__executeServer(opts));
118
+ var getLoopDetail = createServerFn({ method: "GET" }).validator((id) => id).handler(getLoopDetail_createServerFn_handler, async ({ data: id }) => {
119
+ await backend();
120
+ const owned = await ownedLoop(id);
121
+ if (!owned) throw new Error("This loop does not exist, or you do not have access to it.");
122
+ const detail = await toLoopDetail(owned.loop);
123
+ if (owned.enforce) {
124
+ const team = await getTeam(owned.loop.teamId);
125
+ if (!team) throw new Error(`invariant: loop ${owned.loop.id} references missing team ${owned.loop.teamId}`);
126
+ detail.team = {
127
+ id: owned.loop.teamId,
128
+ name: team.name,
129
+ isActive: owned.loop.teamId === owned.teamId
130
+ };
131
+ }
132
+ return detail;
133
+ });
134
+ var loadOlderRuns_createServerFn_handler = createServerRpc({
135
+ id: "85fdf73d4fee43aed762f93c5d47d33200fbff39e2d082647dc921f610d32698",
136
+ name: "loadOlderRuns",
137
+ filename: "src/server/loopApi.ts"
138
+ }, (opts) => loadOlderRuns.__executeServer(opts));
139
+ var loadOlderRuns = createServerFn({ method: "GET" }).validator((d) => d).handler(loadOlderRuns_createServerFn_handler, async ({ data }) => {
140
+ await backend();
141
+ if (!await ownedLoop(data.loopId)) return [];
142
+ const limit = Math.min(Math.max(data.limit ?? 16, 1), 100);
143
+ return toRunSummaries(data.loopId, await listRunsBefore(data.loopId, data.beforeTs, limit));
144
+ });
145
+ var getArtifacts_createServerFn_handler = createServerRpc({
146
+ id: "b18bbec3d06dfc77714e1e527dfb9172fd7575a64a6c0d6e73ba6dc658dccf0d",
147
+ name: "getArtifacts",
148
+ filename: "src/server/loopApi.ts"
149
+ }, (opts) => getArtifacts.__executeServer(opts));
150
+ var getArtifacts = createServerFn({ method: "GET" }).validator((d) => d).handler(getArtifacts_createServerFn_handler, async ({ data }) => {
151
+ await backend();
152
+ if (!await ownedLoop(data.loopId)) return [];
153
+ const { listLoopArtifacts } = await import("./artifactFiles-CV3OXxRD.mjs");
154
+ return listLoopArtifacts(data.loopId);
155
+ });
156
+ var getArtifact_createServerFn_handler = createServerRpc({
157
+ id: "ed10d5fe79208e5e0e4e18e4a17b18d7f7db4dd16204c00c3ac90c4644668841",
158
+ name: "getArtifact",
159
+ filename: "src/server/loopApi.ts"
160
+ }, (opts) => getArtifact.__executeServer(opts));
161
+ var getArtifact = createServerFn({ method: "GET" }).validator((d) => d).handler(getArtifact_createServerFn_handler, async ({ data }) => {
162
+ await backend();
163
+ if (!await ownedLoop(data.loopId)) return { error: "file not found" };
164
+ const { readLoopArtifact } = await import("./artifactFiles-CV3OXxRD.mjs");
165
+ return readLoopArtifact(data.loopId, data.path);
166
+ });
167
+ var getRunDiff_createServerFn_handler = createServerRpc({
168
+ id: "08c28b892712a1b491b120b74c7dcb81761988d31ccea60216d1807b73c1182c",
169
+ name: "getRunDiff",
170
+ filename: "src/server/loopApi.ts"
171
+ }, (opts) => getRunDiff.__executeServer(opts));
172
+ var getRunDiff = createServerFn({ method: "GET" }).validator((d) => d).handler(getRunDiff_createServerFn_handler, async ({ data }) => {
173
+ await backend();
174
+ const run = await getRun(data.runId);
175
+ if (!run) return {
176
+ hasSnapshot: false,
177
+ files: []
178
+ };
179
+ if (!await ownedLoop(run.loopId)) return {
180
+ hasSnapshot: false,
181
+ files: []
182
+ };
183
+ const { computeRunDiff } = await import("./runDiff-CrZzjokj.mjs");
184
+ return computeRunDiff(data.runId);
185
+ });
186
+ var patchLoop_createServerFn_handler = createServerRpc({
187
+ id: "9befe6b8d67ccbbd7aa9b538bde2a161a9894761c8936761a9503fda1a88c0fc",
188
+ name: "patchLoop",
189
+ filename: "src/server/loopApi.ts"
190
+ }, (opts) => patchLoop.__executeServer(opts));
191
+ var patchLoop = createServerFn({ method: "POST" }).validator((d) => d).handler(patchLoop_createServerFn_handler, async ({ data }) => {
192
+ const { scheduler } = await backend();
193
+ const owned = await ownedLoop(data.id);
194
+ if (!owned) return { error: "not found" };
195
+ const p = data.patch;
196
+ {
197
+ const validated = validateLoopEdit(owned.loop, p);
198
+ if (!validated.ok) return { error: validated.detail };
199
+ const loop = await updateLoop(data.id, validated.value);
200
+ if (!loop) return { error: "not found" };
201
+ if (loop.enabled) scheduler.addLoop(loop);
202
+ else scheduler.removeLoop(loop.id);
203
+ return { ok: true };
204
+ }
205
+ });
206
+ var pauseLoop_createServerFn_handler = createServerRpc({
207
+ id: "95b7483b333d7649e70c848319417e83c2af6a0327bbcda2d0e331f626dffe05",
208
+ name: "pauseLoop",
209
+ filename: "src/server/loopApi.ts"
210
+ }, (opts) => pauseLoop.__executeServer(opts));
211
+ var pauseLoop = createServerFn({ method: "POST" }).validator((id) => id).handler(pauseLoop_createServerFn_handler, async ({ data: id }) => {
212
+ const { scheduler } = await backend();
213
+ if (!await ownedLoop(id)) return { error: "not found" };
214
+ if (!await pauseLoop$1(id)) return { error: "not found" };
215
+ scheduler.removeLoop(id);
216
+ return { ok: true };
217
+ });
218
+ var startLoop_createServerFn_handler = createServerRpc({
219
+ id: "5660ea82ea5ff2549e0ce2f8f070c54f3e9e24fee84d547601ef5d6ef49a4016",
220
+ name: "startLoop",
221
+ filename: "src/server/loopApi.ts"
222
+ }, (opts) => startLoop.__executeServer(opts));
223
+ var startLoop = createServerFn({ method: "POST" }).validator((id) => id).handler(startLoop_createServerFn_handler, async ({ data: id }) => {
224
+ const { scheduler } = await backend();
225
+ const owned = await ownedLoop(id);
226
+ if (!owned) return { error: "not found" };
227
+ if (owned.loop.deleteRequestedAt) return { error: "loop is being deleted" };
228
+ const loop = await startLoop$1(id);
229
+ if (!loop) return { error: "not found" };
230
+ scheduler.addLoop(loop);
231
+ return { ok: true };
232
+ });
233
+ var stopLoop_createServerFn_handler = createServerRpc({
234
+ id: "e233a461e4526dec3cc4cbaa891a7c3621d5967ce7f32b4fb17e9fb645857b9a",
235
+ name: "stopLoop",
236
+ filename: "src/server/loopApi.ts"
237
+ }, (opts) => stopLoop.__executeServer(opts));
238
+ var stopLoop = createServerFn({ method: "POST" }).validator((id) => id).handler(stopLoop_createServerFn_handler, async ({ data: id }) => {
239
+ const { scheduler } = await backend();
240
+ const owned = await ownedLoop(id);
241
+ if (!owned) return { error: "not found" };
242
+ if (await hasRunningRun(id)) {
243
+ if ((await getMachine(owned.loop.machineId))?.daemonProtocol !== 4) return { error: "Daemon upgrade required to stop a running process" };
244
+ }
245
+ const stopped = await stopLoop$1(id);
246
+ if (!stopped) return { error: "not found" };
247
+ scheduler.removeLoop(id);
248
+ return {
249
+ ok: true,
250
+ waiting: !!stopped.running
251
+ };
252
+ });
253
+ var deleteLoop_createServerFn_handler = createServerRpc({
254
+ id: "5e0d6b55f5629faac2f55a68661eeb82668b2be752192b16264ffb5cd1e6fabe",
255
+ name: "deleteLoop",
256
+ filename: "src/server/loopApi.ts"
257
+ }, (opts) => deleteLoop.__executeServer(opts));
258
+ var deleteLoop = createServerFn({ method: "POST" }).validator((id) => id).handler(deleteLoop_createServerFn_handler, async ({ data: id }) => {
259
+ const { scheduler } = await backend();
260
+ const owned = await ownedLoop(id);
261
+ if (!owned) return { error: "not found" };
262
+ const machine = await getMachine(owned.loop.machineId);
263
+ const unreachable = machinePresence(machine?.online, machine?.lastSeen) !== "online";
264
+ const actor = await requestScope();
265
+ const mayRetireAuthority = !owned.enforce || !!(actor.userId && owned.loop.teamId && (await getTeamMember(owned.loop.teamId, actor.userId))?.role === "owner");
266
+ if (!unreachable && await hasRunningRun(id) && machine?.daemonProtocol !== 4) return { error: "Daemon upgrade required to stop a running process" };
267
+ scheduler.removeLoop(id);
268
+ if (!await requestDeleteLoop(id)) return { error: "not found" };
269
+ if (unreachable && mayRetireAuthority) {
270
+ if (!await forceDeleteLoop$1(id)) return { error: "delete failed; server data was not deleted" };
271
+ const { logger } = await import("./logger-DdUWuMdh.mjs");
272
+ logger.child({ mod: "loop-lifecycle" }).warn({
273
+ action: "unreachable-delete",
274
+ loopId: id,
275
+ actorUserId: actor.userId,
276
+ machineId: owned.loop.machineId
277
+ }, "unreachable-machine delete: retired execution authority and removed server data");
278
+ return {
279
+ ok: true,
280
+ deleted: true
281
+ };
282
+ }
283
+ const deleted = await tryDeleteLoop(id);
284
+ return {
285
+ ok: true,
286
+ deleted,
287
+ waiting: !deleted
288
+ };
289
+ });
290
+ var FORCE_DELETE_CONFIRMATION = "delete-server-data-anyway";
291
+ /** Destructive uncertainty escape hatch. Team owners only; the explicit marker
292
+ * is the server-side half of the Dashboard's second confirmation. */
293
+ var forceDeleteLoop_createServerFn_handler = createServerRpc({
294
+ id: "199e1c98d1946048b76a18a86c6d252d87776e70fefa62e4af66089244acb9de",
295
+ name: "forceDeleteLoop",
296
+ filename: "src/server/loopApi.ts"
297
+ }, (opts) => forceDeleteLoop.__executeServer(opts));
298
+ var forceDeleteLoop = createServerFn({ method: "POST" }).validator((d) => d).handler(forceDeleteLoop_createServerFn_handler, async ({ data }) => {
299
+ const { scheduler } = await backend();
300
+ const owned = await ownedLoop(data.id);
301
+ if (!owned) return { error: "not found" };
302
+ if (!owned.loop.deleteRequestedAt) return { error: "delete must be requested first" };
303
+ if (data.confirmation !== FORCE_DELETE_CONFIRMATION) return { error: "force delete confirmation required" };
304
+ if (owned.enforce) {
305
+ if (!owned.loop.teamId) return { error: "only a team owner can force delete this loop" };
306
+ const actor = (await requestScope()).userId;
307
+ if (!actor || (await getTeamMember(owned.loop.teamId, actor))?.role !== "owner") return { error: "only a team owner can force delete this loop" };
308
+ }
309
+ scheduler.removeLoop(data.id);
310
+ if (!await forceDeleteLoop$1(data.id)) return { error: "force delete failed; server data was not deleted" };
311
+ const { logger } = await import("./logger-DdUWuMdh.mjs");
312
+ logger.child({ mod: "loop-lifecycle" }).warn({
313
+ action: "force-delete",
314
+ loopId: data.id,
315
+ actorUserId: (await requestScope()).userId,
316
+ machineId: owned.loop.machineId
317
+ }, "force-delete: destructive server authority removal");
318
+ return {
319
+ ok: true,
320
+ deleted: true
321
+ };
322
+ });
323
+ var runLoop_createServerFn_handler = createServerRpc({
324
+ id: "08565e35f6a3dd06ef25401de0343976c47f7ae319d3baed6320b56dd3718311",
325
+ name: "runLoop",
326
+ filename: "src/server/loopApi.ts"
327
+ }, (opts) => runLoop.__executeServer(opts));
328
+ var runLoop = createServerFn({ method: "POST" }).validator((id) => id).handler(runLoop_createServerFn_handler, async ({ data: id }) => {
329
+ const { scheduler } = await backend();
330
+ if (!await ownedLoop(id)) return { error: "not found" };
331
+ const queued = await scheduler.runNow(id);
332
+ if (!("run" in queued)) return { error: queued.reason };
333
+ return {
334
+ ok: true,
335
+ runId: queued.run.id,
336
+ queued: true,
337
+ coalesced: queued.state === "coalesced"
338
+ };
339
+ });
340
+ var stopRun_createServerFn_handler = createServerRpc({
341
+ id: "6850ba403da9dec5aff45794eb52636ca540ddec2d9e59f5c75ccbb852bfeacb",
342
+ name: "stopRun",
343
+ filename: "src/server/loopApi.ts"
344
+ }, (opts) => stopRun.__executeServer(opts));
345
+ var stopRun = createServerFn({ method: "POST" }).validator((id) => id).handler(stopRun_createServerFn_handler, async ({ data: id }) => {
346
+ await backend();
347
+ const run = await getRun(id);
348
+ const owned = run ? await ownedLoop(run.loopId) : void 0;
349
+ if (!run || !owned) return { error: "run not found" };
350
+ if (run.phase === "running" && (await getMachine(owned.loop.machineId))?.daemonProtocol !== 4) return { error: "Daemon upgrade required to stop a running process" };
351
+ const result = await requestRunCancel(run.loopId, id);
352
+ return result ? {
353
+ ok: true,
354
+ waiting: result.phase === "running"
355
+ } : { error: "run not found" };
356
+ });
357
+ var mintClaim_createServerFn_handler = createServerRpc({
358
+ id: "4646f52fb09b83c9c9cef34836f3c9d03416423c879d9e5ceffcafd9a71ecba6",
359
+ name: "mintClaim",
360
+ filename: "src/server/loopApi.ts"
361
+ }, (opts) => mintClaim.__executeServer(opts));
362
+ var mintClaim = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(mintClaim_createServerFn_handler, async ({ data: teamId }) => {
363
+ await backend();
364
+ const { mintDeviceToken, rememberConnectKey } = await import("./tokens-XngoyCU8.mjs");
365
+ const { userId, teamId: active } = await requestScope(teamId);
366
+ const owner = userId ?? "shared";
367
+ const token = mintDeviceToken();
368
+ await rememberConnectKey(token, {
369
+ userId: owner,
370
+ teamId: active
371
+ });
372
+ return { token };
373
+ });
374
+ var claimStatus_createServerFn_handler = createServerRpc({
375
+ id: "4b0db7d6c8f25383a3526598cb0c1881db6cf413e451e9478687c05666461347",
376
+ name: "claimStatus",
377
+ filename: "src/server/loopApi.ts"
378
+ }, (opts) => claimStatus.__executeServer(opts));
379
+ var claimStatus = createServerFn({ method: "GET" }).validator((token) => token).handler(claimStatus_createServerFn_handler, async ({ data: token }) => {
380
+ const r = (await backend()).gateway.claimStatus(token);
381
+ return r ? {
382
+ done: true,
383
+ id: r.loopId,
384
+ name: r.name,
385
+ agent: r.agent
386
+ } : { done: false };
387
+ });
388
+ //#endregion
389
+ export { canViewTeam_createServerFn_handler, claimStatus_createServerFn_handler, deleteLoop_createServerFn_handler, forceDeleteLoop_createServerFn_handler, getArtifact_createServerFn_handler, getArtifacts_createServerFn_handler, getAuthState_createServerFn_handler, getConfig_createServerFn_handler, getDefaultTeam_createServerFn_handler, getLoopDetail_createServerFn_handler, getRunDiff_createServerFn_handler, listLoops_createServerFn_handler, listMyTeams_createServerFn_handler, loadOlderRuns_createServerFn_handler, mintClaim_createServerFn_handler, patchLoop_createServerFn_handler, pauseLoop_createServerFn_handler, runLoop_createServerFn_handler, startLoop_createServerFn_handler, stopLoop_createServerFn_handler, stopRun_createServerFn_handler };
@@ -0,0 +1,110 @@
1
+ import { Lt as scheduleFromLoop, Ot as reconciliationStatesForRuns, Vt as statusDefinitionsFromLoop, W as getMachine, X as hasPendingRun, Z as hasRunningRun, pt as listRuns, u as MIN_DAEMON_VERSION, v as countRuns, w as daemonNeedsUpdate, xt as machinePresence } from "./boot-BbWxaF-z.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/loopProjection-BZ1_IYCr.js
3
+ /** Canonical client projections for persisted loops and runs. */
4
+ var SUMMARY_RUNS = 18;
5
+ function nextRun(loop) {
6
+ return [loop.nextRunAt, loop.nextCadenceAt].filter((v) => v != null).sort()[0] ?? null;
7
+ }
8
+ function toRunSummary(r, reconciliation) {
9
+ return {
10
+ id: r.id,
11
+ loopId: r.loopId,
12
+ ts: r.ts,
13
+ phase: r.phase,
14
+ ...reconciliation ? { reconciliation } : {},
15
+ requestedBy: r.requestedBy,
16
+ cancelRequested: r.cancelRequestedAt != null,
17
+ agent: r.agent ?? null,
18
+ status: r.status ?? null,
19
+ message: r.message ?? null,
20
+ durationMs: r.durationMs ?? null,
21
+ exitCode: r.exitCode ?? null,
22
+ finalText: r.finalText ?? null,
23
+ usage: r.usage ? {
24
+ inputTokens: r.usage.inputTokens,
25
+ outputTokens: r.usage.outputTokens,
26
+ cacheReadTokens: r.usage.cacheReadTokens,
27
+ cacheCreationTokens: r.usage.cacheCreationTokens
28
+ } : null,
29
+ error: r.error ?? null,
30
+ sessionId: r.sessionId ?? null,
31
+ reportIncident: r.reportIncident ?? null
32
+ };
33
+ }
34
+ async function toRunSummaries(loopId, rows) {
35
+ const states = await reconciliationStatesForRuns(loopId, rows.map((run) => run.id));
36
+ return rows.map((run) => toRunSummary(run, states.get(run.id)));
37
+ }
38
+ /** One live artifact_files row → compact UI metadata. */
39
+ function toArtifactSummary(row) {
40
+ return {
41
+ path: row.path,
42
+ size: row.size ?? null,
43
+ updatedAt: row.updatedAt,
44
+ binary: row.binary,
45
+ oversize: row.oversize
46
+ };
47
+ }
48
+ async function toLoopSummary(loop) {
49
+ const runs = await toRunSummaries(loop.id, await listRuns(loop.id, SUMMARY_RUNS));
50
+ return {
51
+ id: loop.id,
52
+ name: loop.name,
53
+ schedule: scheduleFromLoop(loop),
54
+ workdir: loop.workdir,
55
+ agent: loop.agent,
56
+ model: loop.model ?? null,
57
+ reasoningEffort: loop.reasoningEffort ?? null,
58
+ enabled: loop.enabled,
59
+ nextRun: nextRun(loop),
60
+ running: await hasRunningRun(loop.id),
61
+ queued: await hasPendingRun(loop.id),
62
+ reconciliationBlocking: runs.some((run) => run.reconciliation === "blocking"),
63
+ lastRunTs: runs.length ? runs[runs.length - 1].ts : null,
64
+ deleteRequestedAt: loop.deleteRequestedAt ?? null,
65
+ pauseCause: loop.pauseCause ?? null,
66
+ runs,
67
+ runCount: await countRuns(loop.id)
68
+ };
69
+ }
70
+ function toLoopFull(loop) {
71
+ return {
72
+ id: loop.id,
73
+ name: loop.name,
74
+ schedule: scheduleFromLoop(loop),
75
+ workdir: loop.workdir,
76
+ agent: loop.agent,
77
+ model: loop.model ?? null,
78
+ reasoningEffort: loop.reasoningEffort ?? null,
79
+ prompt: loop.prompt,
80
+ statusDefinitions: statusDefinitionsFromLoop(loop),
81
+ artifacts: loop.artifacts,
82
+ enabled: loop.enabled,
83
+ pauseCause: loop.pauseCause ?? null,
84
+ createdAt: loop.createdAt,
85
+ updatedAt: loop.updatedAt
86
+ };
87
+ }
88
+ async function toLoopDetail(loop) {
89
+ const fullRuns = (await toRunSummaries(loop.id, await listRuns(loop.id, 100))).reverse();
90
+ const m = await getMachine(loop.machineId);
91
+ const presence = machinePresence(m?.online, m?.lastSeen);
92
+ return {
93
+ loop: toLoopFull(loop),
94
+ summary: await toLoopSummary(loop),
95
+ machine: {
96
+ id: loop.machineId,
97
+ name: m?.name || "",
98
+ online: presence === "online",
99
+ presence,
100
+ lastSeen: m?.lastSeen ?? null,
101
+ daemonProtocol: m?.daemonProtocol ?? null,
102
+ daemonVersion: m?.daemonVersion ?? null,
103
+ needsUpdate: daemonNeedsUpdate(m?.daemonVersion),
104
+ requiredDaemonVersion: MIN_DAEMON_VERSION
105
+ },
106
+ runs: fullRuns
107
+ };
108
+ }
109
+ //#endregion
110
+ export { toRunSummaries as i, toLoopDetail as n, toLoopSummary as r, toArtifactSummary as t };