@kky42/pievo-server 2.3.0 → 2.4.2
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.
- package/.output/nitro.json +1 -1
- package/.output/public/assets/MachinesModal-CSbnrUER.js +1 -0
- package/.output/public/assets/SignIn-0Tjqs-Ma.js +1 -0
- package/.output/public/assets/actionUi-DpwGIGpw.js +1 -0
- package/.output/public/assets/app-CaZpuwOS.css +2 -0
- package/.output/public/assets/index-CaS_SmDq.js +10 -0
- package/.output/public/assets/invite._token-Btg_0aLp.js +1 -0
- package/.output/public/assets/invite._token-KMD2JAgE.js +1 -0
- package/.output/public/assets/lifecycleUi-C7dwHtbw.js +1 -0
- package/.output/public/assets/loops._loopId-D5usF3DO.js +67 -0
- package/.output/public/assets/loops._loopId_.runs._runId-DRCgXaCq.js +3 -0
- package/.output/public/assets/preload-helper-DsxECZIS.js +5 -0
- package/.output/public/assets/routes-CtFgwdgW.js +1 -0
- package/.output/public/assets/routes-LDbnnQ3f.js +1 -0
- package/.output/public/assets/t._teamId-D41xcbsF.js +1 -0
- package/.output/public/assets/t._teamId-DUena1pV.js +1 -0
- package/.output/public/assets/ui-Do4gqMyP.js +1 -0
- package/.output/server/_libs/@base-ui/react+[...].mjs +4130 -4130
- package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
- package/.output/server/_libs/drizzle-orm+postgres.mjs +28 -1
- package/.output/server/_ssr/DashboardView-C2LdV6J0.mjs +914 -0
- package/.output/server/_ssr/{notifyFns-DuPR1zd7.mjs → MachinesModal-BjkcVjjx.mjs} +55 -35
- package/.output/server/_ssr/{SignIn-RmpWm9uy.mjs → SignIn-DEGrvJvb.mjs} +10 -24
- package/.output/server/_ssr/SocialLinks-Cm4H8pUJ.mjs +1044 -0
- package/.output/server/_ssr/{actionUi-BN55TNYE.mjs → actionUi-DJBWuNwr.mjs} +3 -3
- package/.output/server/_ssr/{artifactFiles-BCaIIrrT.mjs → artifactFiles-DtpRidFZ.mjs} +7 -8
- package/.output/server/_ssr/{artifactKind-BW0isV8L.mjs → artifactKind-FBYbgSuf.mjs} +27 -2
- package/.output/server/_ssr/artifacts-BR3jj0NC.mjs +2 -0
- package/.output/server/_ssr/{auth-30Z4lV1w.mjs → auth-C0zoZCGe.mjs} +16 -19
- package/.output/server/_ssr/boot-CdOO4xOo.mjs +2 -0
- package/.output/server/_ssr/{boot-3BNKujyp.mjs → boot-sNlIkoLe.mjs} +1331 -3927
- package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-_7tfuNRi.mjs → bun-sqlite-dialect-BW9W1_Ps-DmlZWqO7.mjs} +2 -2
- package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-ucDUbeBk.mjs → d1-sqlite-dialect-BLC8LXE6-CCNzqZwZ.mjs} +2 -2
- package/.output/server/_ssr/db-CwLD-5w1.mjs +2 -0
- package/.output/server/_ssr/{dist-Cd6nlLlO.mjs → dist-B3SxDOpW.mjs} +2 -2
- package/.output/server/_ssr/{factory-CWWwV7XZ.mjs → factory-Dv3Zopis.mjs} +2 -2
- package/.output/server/_ssr/invite._token-CJ6-H-s3.mjs +20 -0
- package/.output/server/_ssr/{invite._token-SdWXemIc.mjs → invite._token-dLKDJKVs.mjs} +9 -17
- package/.output/server/_ssr/{invite._token-BKlz0R2f.mjs → invite._token-l1SjouDz.mjs} +6 -15
- package/.output/server/_ssr/{kysely-adapter-C8iS51DB.mjs → kysely-adapter-nL7WKSgw.mjs} +1 -1
- package/.output/server/_ssr/{lifecycleUi-DgBQAYzp.mjs → lifecycleUi-Dad3hvhm.mjs} +11 -11
- package/.output/server/_ssr/logger-B8m8F1Qu.mjs +2 -0
- package/.output/server/_ssr/loopApi-BKyFB4KM.mjs +342 -0
- package/.output/server/_ssr/{adapters-BoLkOf1T.mjs → loopProjection-B8a829ij.mjs} +25 -55
- package/.output/server/_ssr/loops._loopId-DS16Phmq.mjs +1271 -0
- package/.output/server/_ssr/{loops._loopId_.runs._runId-PUGBrD5q.mjs → loops._loopId_.runs._runId-BEJI6iK5.mjs} +23 -74
- package/.output/server/_ssr/{loops._loopId_.runs._runId-Ymy4lwee.mjs → loops._loopId_.runs._runId-CduETLqH.mjs} +4 -5
- package/.output/server/_ssr/{machineFns-BZ9puxDt.mjs → machineFns-ByMsgG12.mjs} +3 -5
- package/.output/server/_ssr/{node-sqlite-dialect-D_3JmkMo.mjs → node-sqlite-dialect-CjNineno.mjs} +2 -2
- package/.output/server/_ssr/router-CXyrnvx-.mjs +565 -0
- package/.output/server/_ssr/{routes-ClZEdsnB.mjs → routes-BulNEUEE.mjs} +6 -10
- package/.output/server/_ssr/{routes-ComqHvCL.mjs → routes-DD94baie.mjs} +3 -3
- package/.output/server/_ssr/{routes-D5jJJ-30.mjs → routes-Wjexi35W.mjs} +6 -6
- package/.output/server/_ssr/runDiff-Ba8Lg1vg.mjs +2 -0
- package/.output/server/_ssr/ssr.mjs +60 -100
- package/.output/server/_ssr/store-Cujtg2QE.mjs +2 -0
- package/.output/server/_ssr/{t._teamId-BgHV_KFP.mjs → t._teamId-1CreIlPV.mjs} +7 -11
- package/.output/server/_ssr/{t._teamId-DDERNgfn.mjs → t._teamId-Bd6-zZsy.mjs} +4 -4
- package/.output/server/_ssr/{t._teamId-DRJvKHZn.mjs → t._teamId-COuMKQ4r.mjs} +7 -7
- package/.output/server/_ssr/{teamFns-Bp81UO-x.mjs → teamFns-H438WnZC.mjs} +12 -30
- package/.output/server/_ssr/{teamFns-bm82twd5.mjs → teamFns-j2JKjorZ.mjs} +2 -2
- package/.output/server/_ssr/tokens-DgG_Syq3.mjs +2 -0
- package/.output/server/_ssr/{ui-Ww2tTM2u.mjs → ui-D5KWstlb.mjs} +26 -48
- package/.output/server/{_tanstack-start-manifest_v-DwKENYCN.mjs → _tanstack-start-manifest_v-3H7yBKLz.mjs} +25 -35
- package/{drizzle/0000_round_marauders.sql → .output/server/drizzle/0000_baseline.sql} +102 -44
- package/.output/server/drizzle/meta/_journal.json +3 -115
- package/.output/server/index.mjs +83 -132
- package/{.output/server/drizzle/0000_round_marauders.sql → drizzle/0000_baseline.sql} +102 -44
- package/drizzle/meta/_journal.json +3 -115
- package/package.json +2 -11
- package/scripts/pievo-server.mjs +3 -1
- package/scripts/server-cli-lib.mjs +23 -16
- package/.output/public/assets/CodeField-dOzyFQNH.js +0 -34
- package/.output/public/assets/LoopView-DjVHUyrR.js +0 -59
- package/.output/public/assets/Modal-CCRvx959.js +0 -1
- package/.output/public/assets/SignIn-Qxw5zDFq.js +0 -1
- package/.output/public/assets/actionUi-CXxhzYe2.js +0 -1
- package/.output/public/assets/app-D1cij_NJ.css +0 -2
- package/.output/public/assets/artifactView-Cd5wWPil.js +0 -66
- package/.output/public/assets/index-BRN_CQ8U.js +0 -12
- package/.output/public/assets/invite._token-BIxr8DlP.js +0 -1
- package/.output/public/assets/invite._token-j2BTCeG1.js +0 -1
- package/.output/public/assets/jsx-runtime-BseJUIpC.js +0 -1
- package/.output/public/assets/lifecycleUi-Qy_8beQK.js +0 -1
- package/.output/public/assets/loopApi-CT1mMhlb.js +0 -3
- package/.output/public/assets/loops._loopId-BRBQzioy.js +0 -4
- package/.output/public/assets/loops._loopId_.runs._runId-CMnOJkem.js +0 -3
- package/.output/public/assets/notifyFns-DYD4EKaG.js +0 -1
- package/.output/public/assets/preload-helper-DFkkpP6W.js +0 -3
- package/.output/public/assets/routes-3nuEJGdo.js +0 -1
- package/.output/public/assets/routes-DORLim-C.js +0 -1
- package/.output/public/assets/t._teamId-F5f4K8kd.js +0 -1
- package/.output/public/assets/t._teamId-XfE_S1Fo.js +0 -1
- package/.output/public/assets/ui-Dhsx6SW0.js +0 -1
- package/.output/public/assets/useRouter-DsjH8G0p.js +0 -1
- package/.output/server/_libs/@codemirror/autocomplete+[...].mjs +0 -19713
- package/.output/server/_libs/@codemirror/lang-css+[...].mjs +0 -2636
- package/.output/server/_libs/@codemirror/lang-html+[...].mjs +0 -2247
- package/.output/server/_libs/@codemirror/lang-json+[...].mjs +0 -79
- package/.output/server/_libs/@reduxjs/toolkit+[...].mjs +0 -1736
- package/.output/server/_libs/@uiw/codemirror-extensions-basic-setup+[...].mjs +0 -76
- package/.output/server/_libs/babel__runtime.mjs +0 -30
- package/.output/server/_libs/clsx.mjs +0 -16
- package/.output/server/_libs/codemirror__commands.mjs +0 -1725
- package/.output/server/_libs/codemirror__lint.mjs +0 -565
- package/.output/server/_libs/codemirror__search.mjs +0 -1138
- package/.output/server/_libs/codemirror__theme-one-dark.mjs +0 -161
- package/.output/server/_libs/d3-array.mjs +0 -231
- package/.output/server/_libs/d3-color.mjs +0 -330
- package/.output/server/_libs/d3-format.mjs +0 -252
- package/.output/server/_libs/d3-interpolate.mjs +0 -163
- package/.output/server/_libs/d3-path.mjs +0 -77
- package/.output/server/_libs/d3-scale+[...].mjs +0 -1907
- package/.output/server/_libs/d3-shape.mjs +0 -818
- package/.output/server/_libs/decimal.js-light.mjs +0 -884
- package/.output/server/_libs/dom-serializer+[...].mjs +0 -708
- package/.output/server/_libs/domhandler.mjs +0 -461
- package/.output/server/_libs/domutils.mjs +0 -868
- package/.output/server/_libs/es-toolkit.mjs +0 -1737
- package/.output/server/_libs/eventemitter3.mjs +0 -236
- package/.output/server/_libs/html-dom-parser+htmlparser2.mjs +0 -1560
- package/.output/server/_libs/html-react-parser+[...].mjs +0 -1360
- package/.output/server/_libs/react-is.mjs +0 -48
- package/.output/server/_libs/react-redux+[...].mjs +0 -205
- package/.output/server/_libs/recharts+victory-vendor.mjs +0 -17303
- package/.output/server/_libs/uiw__codemirror-themes.mjs +0 -32
- package/.output/server/_libs/uiw__react-codemirror.mjs +0 -354
- package/.output/server/_ssr/CodeField-B7oOmmwH.mjs +0 -143
- package/.output/server/_ssr/DashboardView-BF7PciP7.mjs +0 -2736
- package/.output/server/_ssr/LoopPlaybook-DC7QVvPY.mjs +0 -2105
- package/.output/server/_ssr/LoopView-DwSrm9Ja.mjs +0 -1300
- package/.output/server/_ssr/Modal-MaCG52Pv.mjs +0 -49
- package/.output/server/_ssr/artifactView-iuPsp5aa.mjs +0 -304
- package/.output/server/_ssr/artifacts-jQ-bfdhI.mjs +0 -2
- package/.output/server/_ssr/boot-CsEFT53K.mjs +0 -2
- package/.output/server/_ssr/db-CXownd1H.mjs +0 -2
- package/.output/server/_ssr/invite._token-CWl6kipD.mjs +0 -28
- package/.output/server/_ssr/logger-Gy-47z3k.mjs +0 -2
- package/.output/server/_ssr/loopApi-8_KgBapr.mjs +0 -109
- package/.output/server/_ssr/loopApi-ABi9SgWS.mjs +0 -564
- package/.output/server/_ssr/loops._loopId-SON_t43g.mjs +0 -30
- package/.output/server/_ssr/loops._loopId-p1KWsvMM.mjs +0 -1477
- package/.output/server/_ssr/notifyFns-BUCePuF3.mjs +0 -118
- package/.output/server/_ssr/router-Czxvra6l.mjs +0 -685
- package/.output/server/_ssr/runDiff--qLtU4FI.mjs +0 -2
- package/.output/server/_ssr/store-40eVzW1S.mjs +0 -2
- package/.output/server/_ssr/tokens-CbfoRC_s.mjs +0 -2
- package/.output/server/drizzle/0001_naive_silver_fox.sql +0 -25
- package/.output/server/drizzle/0002_funny_sage.sql +0 -12
- package/.output/server/drizzle/0003_optimal_slapstick.sql +0 -102
- package/.output/server/drizzle/0004_remove_grok_agent.sql +0 -5
- package/.output/server/drizzle/0005_heavy_gauntlet.sql +0 -8
- package/.output/server/drizzle/0006_tranquil_sharon_carter.sql +0 -1
- package/.output/server/drizzle/0007_faulty_starbolt.sql +0 -30
- package/.output/server/drizzle/0008_durable_lifecycle_evidence.sql +0 -15
- package/.output/server/drizzle/0009_ordinary_electro.sql +0 -1
- package/.output/server/drizzle/0010_workable_rage.sql +0 -14
- package/.output/server/drizzle/0011_steep_marvel_zombies.sql +0 -3
- package/.output/server/drizzle/0012_blocked_run_status.sql +0 -12
- package/.output/server/drizzle/0013_drop_run_outcome.sql +0 -2
- package/.output/server/drizzle/0014_luxuriant_scrambler.sql +0 -5
- package/.output/server/drizzle/0015_run_history_foundation.sql +0 -43
- package/.output/server/drizzle/0016_plural_machine_runs.sql +0 -4
- package/.output/server/drizzle/meta/0000_snapshot.json +0 -1333
- package/.output/server/drizzle/meta/0001_snapshot.json +0 -1498
- package/.output/server/drizzle/meta/0002_snapshot.json +0 -1576
- package/.output/server/drizzle/meta/0003_snapshot.json +0 -1666
- package/.output/server/drizzle/meta/0005_snapshot.json +0 -1666
- package/.output/server/drizzle/meta/0006_snapshot.json +0 -1672
- package/.output/server/drizzle/meta/0007_snapshot.json +0 -1787
- package/.output/server/drizzle/meta/0009_snapshot.json +0 -1793
- package/.output/server/drizzle/meta/0010_snapshot.json +0 -1891
- package/.output/server/drizzle/meta/0011_snapshot.json +0 -1872
- package/drizzle/0001_naive_silver_fox.sql +0 -25
- package/drizzle/0002_funny_sage.sql +0 -12
- package/drizzle/0003_optimal_slapstick.sql +0 -102
- package/drizzle/0004_remove_grok_agent.sql +0 -5
- package/drizzle/0005_heavy_gauntlet.sql +0 -8
- package/drizzle/0006_tranquil_sharon_carter.sql +0 -1
- package/drizzle/0007_faulty_starbolt.sql +0 -30
- package/drizzle/0008_durable_lifecycle_evidence.sql +0 -15
- package/drizzle/0009_ordinary_electro.sql +0 -1
- package/drizzle/0010_workable_rage.sql +0 -14
- package/drizzle/0011_steep_marvel_zombies.sql +0 -3
- package/drizzle/0012_blocked_run_status.sql +0 -12
- package/drizzle/0013_drop_run_outcome.sql +0 -2
- package/drizzle/0014_luxuriant_scrambler.sql +0 -5
- package/drizzle/0015_run_history_foundation.sql +0 -43
- package/drizzle/0016_plural_machine_runs.sql +0 -4
- package/drizzle/meta/0000_snapshot.json +0 -1333
- package/drizzle/meta/0001_snapshot.json +0 -1498
- package/drizzle/meta/0002_snapshot.json +0 -1576
- package/drizzle/meta/0003_snapshot.json +0 -1666
- package/drizzle/meta/0005_snapshot.json +0 -1666
- package/drizzle/meta/0006_snapshot.json +0 -1672
- package/drizzle/meta/0007_snapshot.json +0 -1787
- package/drizzle/meta/0009_snapshot.json +0 -1793
- package/drizzle/meta/0010_snapshot.json +0 -1891
- package/drizzle/meta/0011_snapshot.json +0 -1872
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as DefaultQueryCompiler, o as CompiledQuery, s as sql$1 } from "./auth-
|
|
1
|
+
import { n as DefaultQueryCompiler, o as CompiledQuery, s as sql$1 } from "./auth-C0zoZCGe.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-
|
|
3
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/bun-sqlite-dialect-BW9W1_Ps-DmlZWqO7.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-
|
|
1
|
+
import { a as SqliteQueryCompiler, i as SqliteAdapter } from "./auth-C0zoZCGe.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-
|
|
3
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/d1-sqlite-dialect-BLC8LXE6-CCNzqZwZ.js
|
|
4
4
|
var D1SqliteAdapter = class extends SqliteAdapter {};
|
|
5
5
|
var D1SqliteDriver = class {
|
|
6
6
|
#config;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as logger, o as createAdapterFactory } from "./factory-
|
|
2
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/dist-
|
|
1
|
+
import { _ as logger, o as createAdapterFactory } from "./factory-Dv3Zopis.mjs";
|
|
2
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/dist-B3SxDOpW.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 {
|
|
2
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/factory-
|
|
1
|
+
import { B as getEnvVar, N as env, a as BetterAuthError } from "./boot-sNlIkoLe.mjs";
|
|
2
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/factory-Dv3Zopis.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) => {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
2
|
+
import { r as LoadErrorCard } from "./actionUi-DJBWuNwr.mjs";
|
|
3
|
+
import { f as useRouter } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
4
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/invite._token-CJ6-H-s3.js
|
|
5
|
+
var import_jsx_runtime = require_jsx_runtime();
|
|
6
|
+
/** Redeem a team invite after normal gated sign-in. Invites grant membership but
|
|
7
|
+
* never bypass the login allowlist; open mode has no invite identity to redeem. */
|
|
8
|
+
function LoadError({ error }) {
|
|
9
|
+
const router = useRouter();
|
|
10
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("main", {
|
|
11
|
+
className: "mx-auto max-w-[1180px] px-8 pt-12",
|
|
12
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoadErrorCard, {
|
|
13
|
+
title: "Couldn't open this invite.",
|
|
14
|
+
detail: String(error),
|
|
15
|
+
onRetry: () => void router.invalidate()
|
|
16
|
+
})
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { LoadError as errorComponent };
|
|
@@ -1,25 +1,17 @@
|
|
|
1
1
|
import { o as __toESM } from "../_runtime.mjs";
|
|
2
|
-
import { g as
|
|
3
|
-
import {
|
|
2
|
+
import { g as require_react, h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
3
|
+
import { s as btnPrimary } from "./ui-D5KWstlb.mjs";
|
|
4
4
|
import { d as useNavigate } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
5
|
-
import {
|
|
5
|
+
import { E as useSession, r as PievoLogo } from "./SocialLinks-Cm4H8pUJ.mjs";
|
|
6
6
|
import { t as setActiveTeamCookie } from "./teamCookie-B7hLOIie.mjs";
|
|
7
|
-
import { c as redeemTeamInvite } from "./teamFns-
|
|
8
|
-
import { t as Route } from "./invite._token-
|
|
9
|
-
import { t as SignIn } from "./SignIn-
|
|
10
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/invite._token-
|
|
7
|
+
import { c as redeemTeamInvite } from "./teamFns-j2JKjorZ.mjs";
|
|
8
|
+
import { t as Route } from "./invite._token-l1SjouDz.mjs";
|
|
9
|
+
import { t as SignIn } from "./SignIn-DEGrvJvb.mjs";
|
|
10
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/invite._token-dLKDJKVs.js
|
|
11
11
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
12
12
|
var import_jsx_runtime = require_jsx_runtime();
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
* the link the owner shared; if signed out (under the gate) they hit the normal
|
|
16
|
-
* gated GitHub sign-in and return here — the invite NEVER bypasses the login
|
|
17
|
-
* allowlist (decision 3), it only grants membership once they already have an
|
|
18
|
-
* account. On redeem we navigate to the team's dashboard.
|
|
19
|
-
*
|
|
20
|
-
* Open mode has no identities, so an invite is meaningless there — it renders a
|
|
21
|
-
* calm explanation rather than a broken redeem.
|
|
22
|
-
*/
|
|
13
|
+
/** Redeem a team invite after normal gated sign-in. Invites grant membership but
|
|
14
|
+
* never bypass the login allowlist; open mode has no invite identity to redeem. */
|
|
23
15
|
function Shell({ children }) {
|
|
24
16
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
25
17
|
className: "mx-auto mt-32 max-w-sm text-center",
|
|
@@ -1,19 +1,10 @@
|
|
|
1
1
|
import { c as createFileRoute, s as lazyRouteComponent } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var $$
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* Invite-link redeem (`/invite/<token>`, design §4 option B). The recipient opens
|
|
9
|
-
* the link the owner shared; if signed out (under the gate) they hit the normal
|
|
10
|
-
* gated GitHub sign-in and return here — the invite NEVER bypasses the login
|
|
11
|
-
* allowlist (decision 3), it only grants membership once they already have an
|
|
12
|
-
* account. On redeem we navigate to the team's dashboard.
|
|
13
|
-
*
|
|
14
|
-
* Open mode has no identities, so an invite is meaningless there — it renders a
|
|
15
|
-
* calm explanation rather than a broken redeem.
|
|
16
|
-
*/
|
|
2
|
+
import { i as authClient, u as getAuthState } from "./SocialLinks-Cm4H8pUJ.mjs";
|
|
3
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/invite._token-l1SjouDz.js
|
|
4
|
+
var $$splitErrorComponentImporter = () => import("./invite._token-CJ6-H-s3.mjs");
|
|
5
|
+
var $$splitComponentImporter = () => import("./invite._token-dLKDJKVs.mjs");
|
|
6
|
+
/** Redeem a team invite after normal gated sign-in. Invites grant membership but
|
|
7
|
+
* never bypass the login allowlist; open mode has no invite identity to redeem. */
|
|
17
8
|
var Route = createFileRoute("/invite/$token")({
|
|
18
9
|
ssr: false,
|
|
19
10
|
loader: async ({ params }) => {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { r as kyselyAdapter, t as createKyselyAdapter } from "./auth-
|
|
1
|
+
import { r as kyselyAdapter, t as createKyselyAdapter } from "./auth-C0zoZCGe.mjs";
|
|
2
2
|
export { createKyselyAdapter, kyselyAdapter };
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/lifecycleUi-
|
|
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(
|
|
5
|
-
if (
|
|
6
|
-
const running =
|
|
7
|
-
if (!
|
|
8
|
-
if (!
|
|
9
|
-
if (!
|
|
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 ===
|
|
13
|
+
return protocol === 4 ? {
|
|
14
14
|
supported: true,
|
|
15
|
-
label: `Daemon protocol
|
|
15
|
+
label: `Daemon protocol 4 · Stop supported`
|
|
16
16
|
} : {
|
|
17
17
|
supported: false,
|
|
18
18
|
label: `Daemon protocol ${protocol ?? "unknown"} · upgrade required`
|
|
@@ -22,8 +22,8 @@ function daemonStopSupport(protocol) {
|
|
|
22
22
|
function lifecycleDisplay(detail) {
|
|
23
23
|
const state = deriveLoopLifecycle(detail.summary);
|
|
24
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.running);
|
|
26
|
-
if (running && detail.machine.daemonProtocol !==
|
|
25
|
+
const running = detail.summary.runs.find((run) => run.phase === "running");
|
|
26
|
+
if (running && detail.machine.daemonProtocol !== 4) return DAEMON_UPGRADE_REQUIRED;
|
|
27
27
|
if (state === "stopping" && running && !detail.machine.online) return `Stopping · waiting for ${detail.machine.name || "machine"}`;
|
|
28
28
|
switch (state) {
|
|
29
29
|
case "deleting": return "Deleting";
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { $t as validateLoopEdit, Et as pauseLoop$1, Ft as requestRunCancel, G as getMachine, J as getRun, Kt as tryDeleteLoop, P as forceDeleteLoop, Pt as requestDeleteLoop, Q as hasRunningRun, St as machinePresence, Ut as stopLoop$1, Vt as startLoop$1, W as getLoop, X as getTeamMember, Y as getTeam, _t as listTeamsForUser, ht as listRunsBefore, j as ensureServer, qt as updateLoop, ut as listLoops$1 } from "./boot-sNlIkoLe.mjs";
|
|
2
|
+
import { i as toRunSummaries, n as toLoopDetail, r as toLoopSummary } from "./loopProjection-B8a829ij.mjs";
|
|
3
|
+
import { canAccessLoop, requestScope } from "./auth-C0zoZCGe.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-BKyFB4KM.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-C0zoZCGe.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-DtpRidFZ.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-DtpRidFZ.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-Ba8Lg1vg.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(id)) return { error: "delete failed; server data was not deleted" };
|
|
271
|
+
const { logger } = await import("./logger-B8m8F1Qu.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 runLoop_createServerFn_handler = createServerRpc({
|
|
291
|
+
id: "08565e35f6a3dd06ef25401de0343976c47f7ae319d3baed6320b56dd3718311",
|
|
292
|
+
name: "runLoop",
|
|
293
|
+
filename: "src/server/loopApi.ts"
|
|
294
|
+
}, (opts) => runLoop.__executeServer(opts));
|
|
295
|
+
var runLoop = createServerFn({ method: "POST" }).validator((id) => id).handler(runLoop_createServerFn_handler, async ({ data: id }) => {
|
|
296
|
+
const { scheduler } = await backend();
|
|
297
|
+
if (!await ownedLoop(id)) return { error: "not found" };
|
|
298
|
+
const queued = await scheduler.runNow(id);
|
|
299
|
+
if (!("run" in queued)) return { error: queued.reason };
|
|
300
|
+
return {
|
|
301
|
+
ok: true,
|
|
302
|
+
runId: queued.run.id,
|
|
303
|
+
queued: true,
|
|
304
|
+
coalesced: queued.state === "coalesced"
|
|
305
|
+
};
|
|
306
|
+
});
|
|
307
|
+
var stopRun_createServerFn_handler = createServerRpc({
|
|
308
|
+
id: "6850ba403da9dec5aff45794eb52636ca540ddec2d9e59f5c75ccbb852bfeacb",
|
|
309
|
+
name: "stopRun",
|
|
310
|
+
filename: "src/server/loopApi.ts"
|
|
311
|
+
}, (opts) => stopRun.__executeServer(opts));
|
|
312
|
+
var stopRun = createServerFn({ method: "POST" }).validator((id) => id).handler(stopRun_createServerFn_handler, async ({ data: id }) => {
|
|
313
|
+
await backend();
|
|
314
|
+
const run = await getRun(id);
|
|
315
|
+
const owned = run ? await ownedLoop(run.loopId) : void 0;
|
|
316
|
+
if (!run || !owned) return { error: "run not found" };
|
|
317
|
+
if (run.phase === "running" && (await getMachine(owned.loop.machineId))?.daemonProtocol !== 4) return { error: "Daemon upgrade required to stop a running process" };
|
|
318
|
+
const result = await requestRunCancel(run.loopId, id);
|
|
319
|
+
return result ? {
|
|
320
|
+
ok: true,
|
|
321
|
+
waiting: result.phase === "running"
|
|
322
|
+
} : { error: "run not found" };
|
|
323
|
+
});
|
|
324
|
+
var mintClaim_createServerFn_handler = createServerRpc({
|
|
325
|
+
id: "4646f52fb09b83c9c9cef34836f3c9d03416423c879d9e5ceffcafd9a71ecba6",
|
|
326
|
+
name: "mintClaim",
|
|
327
|
+
filename: "src/server/loopApi.ts"
|
|
328
|
+
}, (opts) => mintClaim.__executeServer(opts));
|
|
329
|
+
var mintClaim = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(mintClaim_createServerFn_handler, async ({ data: teamId }) => {
|
|
330
|
+
await backend();
|
|
331
|
+
const { mintDeviceToken, rememberConnectKey } = await import("./tokens-DgG_Syq3.mjs");
|
|
332
|
+
const { userId, teamId: active } = await requestScope(teamId);
|
|
333
|
+
const owner = userId ?? "shared";
|
|
334
|
+
const token = mintDeviceToken();
|
|
335
|
+
await rememberConnectKey(token, {
|
|
336
|
+
userId: owner,
|
|
337
|
+
teamId: active
|
|
338
|
+
});
|
|
339
|
+
return { token };
|
|
340
|
+
});
|
|
341
|
+
//#endregion
|
|
342
|
+
export { canViewTeam_createServerFn_handler, deleteLoop_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 };
|