@kky42/pievo-server 2.4.6 → 2.4.8
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-ClNm1IAU.js +1 -0
- package/.output/public/assets/{index-BqiDqbyu.js → index-DM5pYU2E.js} +3 -3
- package/.output/public/assets/{invite._token-C7wSLe5z.js → invite._token-CjcTZgvV.js} +1 -1
- package/.output/public/assets/{loops._loopId-DEMMNA_5.js → loops._loopId-1WUV1NQv.js} +2 -2
- package/.output/public/assets/{loops._loopId_.runs._runId-DgThODTl.js → loops._loopId_.runs._runId-BgUc4GIy.js} +2 -2
- package/.output/public/assets/{routes-C581U2Ac.js → routes-DTmJ-YqP.js} +1 -1
- package/.output/public/assets/{t._teamId-D8prt2QZ.js → t._teamId-BmUhbnOU.js} +1 -1
- package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
- package/.output/server/_ssr/{DashboardView-CDGLNgi_.mjs → DashboardView-DTfEhixr.mjs} +8 -8
- package/.output/server/_ssr/{MachinesModal-BkHx2efW.mjs → MachinesModal-D54Uza6A.mjs} +45 -17
- package/.output/server/_ssr/{SignIn-DwHmFBg2.mjs → SignIn-C2JkrSfV.mjs} +2 -2
- package/.output/server/_ssr/{SocialLinks-y7JuqJqp.mjs → SocialLinks-dPCmZWvC.mjs} +2 -2
- package/.output/server/_ssr/{artifactFiles-1f04rZwG.mjs → artifactFiles-DBu2yk9a.mjs} +3 -3
- package/.output/server/_ssr/{artifactKind-DCMrrjl8.mjs → artifactKind-CJMjNtSC.mjs} +3 -3
- package/.output/server/_ssr/artifacts-8JYBE5zx.mjs +2 -0
- package/.output/server/_ssr/{auth-C_Xnj8JO.mjs → auth-b1o4lrGO.mjs} +22 -9
- package/.output/server/_ssr/{boot-D_THchbC.mjs → boot-CEPRQU5M.mjs} +48 -37
- package/.output/server/_ssr/{boot-DnVqzrBE.mjs → boot-dZdGfkZm.mjs} +1 -1
- package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-mjhr2FKB.mjs → bun-sqlite-dialect-BW9W1_Ps-D2QuIuwp.mjs} +2 -2
- package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-57NKRt7v.mjs → d1-sqlite-dialect-BLC8LXE6-CdT8qARs.mjs} +2 -2
- package/.output/server/_ssr/db-CJUmGnnY.mjs +2 -0
- package/.output/server/_ssr/{dist-xlBlQKer.mjs → dist-E-fSrrAE.mjs} +2 -2
- package/.output/server/_ssr/{factory-CUICkr5b.mjs → factory-CzRRgvct.mjs} +2 -2
- package/.output/server/_ssr/invite._token-CGzJGIfm.mjs +1 -1
- package/.output/server/_ssr/{invite._token-CSENXkE5.mjs → invite._token-DDDd3vNf.mjs} +3 -3
- package/.output/server/_ssr/{invite._token-C3ik1Xca.mjs → invite._token-ZthOtmu9.mjs} +6 -6
- package/.output/server/_ssr/{kysely-adapter-8WrOeuSs.mjs → kysely-adapter-cB-XpVsU.mjs} +1 -1
- package/.output/server/_ssr/logger-Co0_q7fy.mjs +2 -0
- package/.output/server/_ssr/{loopApi-B7uUJlS3.mjs → loopApi-DxDYnPI7.mjs} +10 -10
- package/.output/server/_ssr/{loopProjection-B30cdu8n.mjs → loopProjection-CeH1HELf.mjs} +2 -2
- package/.output/server/_ssr/{loops._loopId-Dx0u0aw-.mjs → loops._loopId-BTAKWGvT.mjs} +8 -8
- package/.output/server/_ssr/{loops._loopId_.runs._runId-B2ONGiQe.mjs → loops._loopId_.runs._runId-BGl_4tUK.mjs} +5 -5
- package/.output/server/_ssr/{loops._loopId_.runs._runId-CeJuOVke.mjs → loops._loopId_.runs._runId-BRzoEUe1.mjs} +3 -3
- package/.output/server/_ssr/{machineFns-DslRixAv.mjs → machineFns-Bmh_4hnx.mjs} +21 -7
- package/.output/server/_ssr/{node-sqlite-dialect-D74sKAO_.mjs → node-sqlite-dialect-C8O4zOiM.mjs} +2 -2
- package/.output/server/_ssr/{router-DvhSmRzV.mjs → router-Vpcd2SDx.mjs} +21 -21
- package/.output/server/_ssr/{routes-CKoFPECd.mjs → routes-BczmJLuq.mjs} +5 -5
- package/.output/server/_ssr/routes-D5GHah06.mjs +1 -1
- package/.output/server/_ssr/{routes-Dr2NUhk0.mjs → routes-DBCYbmLW.mjs} +4 -4
- package/.output/server/_ssr/runDiff-Ce1DhI7z.mjs +2 -0
- package/.output/server/_ssr/ssr.mjs +39 -39
- package/.output/server/_ssr/store-BpbKfvFY.mjs +2 -0
- package/.output/server/_ssr/{t._teamId-xSDQfJUD.mjs → t._teamId-COKCNxP7.mjs} +4 -4
- package/.output/server/_ssr/t._teamId-CrZ7EkUL.mjs +1 -1
- package/.output/server/_ssr/{t._teamId-94LkBNB8.mjs → t._teamId-D0Y3DqcE.mjs} +5 -5
- package/.output/server/_ssr/{teamFns-BEvVeIHP.mjs → teamFns-BMR5TRJw.mjs} +2 -2
- package/.output/server/_ssr/{teamFns-C2jguwv8.mjs → teamFns-DctV7gTn.mjs} +3 -3
- package/.output/server/_ssr/tokens-BP8ltV6J.mjs +2 -0
- package/.output/server/{_tanstack-start-manifest_v-CjVWGjiv.mjs → _tanstack-start-manifest_v-CevOnXtc.mjs} +11 -11
- package/.output/server/index.mjs +60 -60
- package/package.json +1 -1
- package/.output/public/assets/MachinesModal-zPwcC1mr.js +0 -1
- package/.output/server/_ssr/artifacts-DM3Q8kSN.mjs +0 -2
- package/.output/server/_ssr/db-BUHGfj7t.mjs +0 -2
- package/.output/server/_ssr/logger-CQdxLIT9.mjs +0 -2
- package/.output/server/_ssr/runDiff-BIYvi0EH.mjs +0 -2
- package/.output/server/_ssr/store-B_RNzP1r.mjs +0 -2
- package/.output/server/_ssr/tokens-BzwlaFxs.mjs +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { C as notInArray, S as ne, _ as isNotNull, b as lt, d as and, f as eq, g as inArray, h as ilike, j as sql, l as asc, m as gte, p as gt, s as count, u as desc, v as isNull$1, w as or, x as lte, y as like } from "../_libs/drizzle-orm+postgres.mjs";
|
|
2
|
-
import { $ as isDevelopment, B as getEnvVar, D as defu, E as db,
|
|
3
|
-
import { C as withSpan, S as shouldPublishLog, _ as logger, a as __getBetterAuthGlobal, b as runWithTransaction, c as createRandomStringGenerator, d as getAuthTables, f as getBetterAuthVersion, g as initGetModelName, h as initGetFieldName, l as generateId$2, m as import_src, n as ATTR_HOOK_TYPE, o as createAdapterFactory, p as getCurrentAdapter, r as ATTR_OPERATION_ID, s as createLogger, t as ATTR_CONTEXT, u as getAsyncLocalStorage, v as queueAfterTransactionHook, x as safeJSONParse, y as runWithAdapter } from "./factory-
|
|
2
|
+
import { $ as isDevelopment, B as getEnvVar, Ct as normalizePathname, D as defu, E as db, H as getHost, It as resolveBaseURL, K as getOrigin, L as getBaseURL, M as env, R as getBooleanEnvVar, Wt as teamIdForUser, a as BetterAuthError, b as createDefu, c as ENV, ct as kAPIErrorHeaderSymbol, en as wildcardMatch, et as isDynamicBaseURLConfig, g as capitalizeFirstLetter, h as betterFetch, it as isRequestLike, j as ensureTeam, n as APIError$1, o as BetterCallError, ot as isTeamMember, p as ValidationError$1, q as getProtocol, r as BASE_ERROR_CODES, rt as isProduction, st as isTest, t as APIError } from "./boot-CEPRQU5M.mjs";
|
|
3
|
+
import { C as withSpan, S as shouldPublishLog, _ as logger, a as __getBetterAuthGlobal, b as runWithTransaction, c as createRandomStringGenerator, d as getAuthTables, f as getBetterAuthVersion, g as initGetModelName, h as initGetFieldName, l as generateId$2, m as import_src, n as ATTR_HOOK_TYPE, o as createAdapterFactory, p as getCurrentAdapter, r as ATTR_OPERATION_ID, s as createLogger, t as ATTR_CONTEXT, u as getAsyncLocalStorage, v as queueAfterTransactionHook, x as safeJSONParse, y as runWithAdapter } from "./factory-CzRRgvct.mjs";
|
|
4
4
|
import { randomBytes, scrypt } from "node:crypto";
|
|
5
5
|
import fs from "node:fs";
|
|
6
6
|
import path from "node:path";
|
|
@@ -1700,7 +1700,7 @@ var JOIN_TYPE_SQL = freeze({
|
|
|
1700
1700
|
Using: "using"
|
|
1701
1701
|
});
|
|
1702
1702
|
//#endregion
|
|
1703
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/auth-
|
|
1703
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/auth-b1o4lrGO.js
|
|
1704
1704
|
/**
|
|
1705
1705
|
* @internal
|
|
1706
1706
|
*/
|
|
@@ -15993,7 +15993,7 @@ var createKyselyAdapter = async (config) => {
|
|
|
15993
15993
|
if ("getConnection" in db) dialect = new MysqlDialect(db);
|
|
15994
15994
|
if ("connect" in db) dialect = new PostgresDialect({ pool: db });
|
|
15995
15995
|
if ("fileControl" in db) {
|
|
15996
|
-
const { BunSqliteDialect } = await import("./bun-sqlite-dialect-BW9W1_Ps-
|
|
15996
|
+
const { BunSqliteDialect } = await import("./bun-sqlite-dialect-BW9W1_Ps-D2QuIuwp.mjs");
|
|
15997
15997
|
dialect = new BunSqliteDialect({ database: db });
|
|
15998
15998
|
}
|
|
15999
15999
|
if ("createSession" in db) {
|
|
@@ -16009,12 +16009,12 @@ var createKyselyAdapter = async (config) => {
|
|
|
16009
16009
|
if (error !== null && typeof error === "object" && "code" in error && error.code !== "ERR_UNKNOWN_BUILTIN_MODULE") throw error;
|
|
16010
16010
|
}
|
|
16011
16011
|
if (DatabaseSync && db instanceof DatabaseSync) {
|
|
16012
|
-
const { NodeSqliteDialect } = await import("./node-sqlite-dialect-
|
|
16012
|
+
const { NodeSqliteDialect } = await import("./node-sqlite-dialect-C8O4zOiM.mjs");
|
|
16013
16013
|
dialect = new NodeSqliteDialect({ database: db });
|
|
16014
16014
|
}
|
|
16015
16015
|
}
|
|
16016
16016
|
if ("batch" in db && "exec" in db && "prepare" in db) {
|
|
16017
|
-
const { D1SqliteDialect } = await import("./d1-sqlite-dialect-BLC8LXE6-
|
|
16017
|
+
const { D1SqliteDialect } = await import("./d1-sqlite-dialect-BLC8LXE6-CdT8qARs.mjs");
|
|
16018
16018
|
dialect = new D1SqliteDialect({ database: db });
|
|
16019
16019
|
}
|
|
16020
16020
|
return {
|
|
@@ -36526,7 +36526,7 @@ async function getBaseAdapter(options, handleDirectDatabase) {
|
|
|
36526
36526
|
acc[key] = [];
|
|
36527
36527
|
return acc;
|
|
36528
36528
|
}, {});
|
|
36529
|
-
const { memoryAdapter } = await import("./dist-
|
|
36529
|
+
const { memoryAdapter } = await import("./dist-E-fSrrAE.mjs");
|
|
36530
36530
|
adapter = memoryAdapter(memoryDB)(options);
|
|
36531
36531
|
} else if (typeof options.database === "function") adapter = options.database(options);
|
|
36532
36532
|
else adapter = await handleDirectDatabase(options);
|
|
@@ -36540,10 +36540,10 @@ async function getBaseAdapter(options, handleDirectDatabase) {
|
|
|
36540
36540
|
}
|
|
36541
36541
|
async function getAdapter(options) {
|
|
36542
36542
|
return getBaseAdapter(options, async (opts) => {
|
|
36543
|
-
const { createKyselyAdapter } = await import("./kysely-adapter-
|
|
36543
|
+
const { createKyselyAdapter } = await import("./kysely-adapter-cB-XpVsU.mjs");
|
|
36544
36544
|
const { kysely, databaseType, transaction } = await createKyselyAdapter(opts);
|
|
36545
36545
|
if (!kysely) throw new BetterAuthError("Failed to initialize database adapter");
|
|
36546
|
-
const { kyselyAdapter } = await import("./kysely-adapter-
|
|
36546
|
+
const { kyselyAdapter } = await import("./kysely-adapter-cB-XpVsU.mjs");
|
|
36547
36547
|
return kyselyAdapter(kysely, {
|
|
36548
36548
|
type: databaseType || "sqlite",
|
|
36549
36549
|
debugLogs: opts.database && "debugLogs" in opts.database ? opts.database.debugLogs : false,
|
|
@@ -38278,6 +38278,19 @@ var drizzleAdapter = (db, config) => {
|
|
|
38278
38278
|
};
|
|
38279
38279
|
};
|
|
38280
38280
|
/**
|
|
38281
|
+
* The GitHub login-gate condition, in ONE place. `auth.ts` derives its load-time
|
|
38282
|
+
* `authEnabled` const from this; the machine-enrollment guard (`gateway/index.ts`
|
|
38283
|
+
* `poll`) calls it LIVE so the gated-vs-open behavior can be exercised in a test
|
|
38284
|
+
* (which sets the env vars per-case) without pulling betterAuth into the machine
|
|
38285
|
+
* hot path. Leaf module — no imports, no side effects.
|
|
38286
|
+
*
|
|
38287
|
+
* The gate is ON exactly when a GitHub OAuth app is configured (both id + secret).
|
|
38288
|
+
* OFF ⇒ open/dev mode (single shared workspace, anonymous self-registration).
|
|
38289
|
+
*/
|
|
38290
|
+
function loginGateEnabled() {
|
|
38291
|
+
return !!(process.env.GITHUB_CLIENT_ID?.trim() && process.env.GITHUB_CLIENT_SECRET?.trim());
|
|
38292
|
+
}
|
|
38293
|
+
/**
|
|
38281
38294
|
* Better Auth with GitHub social login. Supplying the GitHub OAuth credentials
|
|
38282
38295
|
* enables authentication; `PIEVO_ALLOWED_LOGINS` optionally narrows who may sign
|
|
38283
38296
|
* in. Authenticated data is team-scoped, while `userId` retains creator/owner
|
|
@@ -11,7 +11,7 @@ import { fileURLToPath } from "node:url";
|
|
|
11
11
|
import path from "node:path";
|
|
12
12
|
import os from "node:os";
|
|
13
13
|
import fs$1 from "node:fs/promises";
|
|
14
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/boot-
|
|
14
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/boot-CEPRQU5M.js
|
|
15
15
|
var import_pino = /* @__PURE__ */ __toESM(require_pino());
|
|
16
16
|
var import_pino_pretty = /* @__PURE__ */ __toESM(require_pino_pretty());
|
|
17
17
|
function defineErrorCodes(codes) {
|
|
@@ -1978,7 +1978,7 @@ async function countLoopsForTeam(teamId) {
|
|
|
1978
1978
|
async function getLoop(id) {
|
|
1979
1979
|
return (await db.select().from(loops).where(eq(loops.id, id)))[0];
|
|
1980
1980
|
}
|
|
1981
|
-
/** Loops bound to a machine —
|
|
1981
|
+
/** Loops bound to a machine — used by machine cascade authorization and UI counts. */
|
|
1982
1982
|
async function loopsForMachine(machineId) {
|
|
1983
1983
|
return db.select().from(loops).where(eq(loops.machineId, machineId));
|
|
1984
1984
|
}
|
|
@@ -2001,7 +2001,10 @@ async function createLoop(input) {
|
|
|
2001
2001
|
createdAt: ts,
|
|
2002
2002
|
updatedAt: ts
|
|
2003
2003
|
};
|
|
2004
|
-
return
|
|
2004
|
+
return db.transaction(async (tx) => {
|
|
2005
|
+
if (!(await tx.select({ id: machines.id }).from(machines).where(eq(machines.id, input.machineId)).for("key share"))[0]) throw new Error(`machine ${input.machineId} does not exist`);
|
|
2006
|
+
return (await tx.insert(loops).values(row).returning())[0];
|
|
2007
|
+
});
|
|
2005
2008
|
}
|
|
2006
2009
|
/** Allocate the next 1-based history number. Every caller already holds the
|
|
2007
2010
|
* owning loop row lock, so the counter and run transition share one commit. */
|
|
@@ -2202,20 +2205,21 @@ async function tryDeleteLoop(id) {
|
|
|
2202
2205
|
return deleteLoopDataTx(tx, id);
|
|
2203
2206
|
});
|
|
2204
2207
|
}
|
|
2208
|
+
async function forceDeleteLoopTx(tx, id) {
|
|
2209
|
+
if (!(await tx.select().from(loops).where(eq(loops.id, id)).for("update"))[0]) return false;
|
|
2210
|
+
await tx.update(runLeases).set({
|
|
2211
|
+
state: "retired",
|
|
2212
|
+
expiresAt: null
|
|
2213
|
+
}).where(and(eq(runLeases.loopId, id), inArray(runLeases.state, [
|
|
2214
|
+
"active",
|
|
2215
|
+
"terminal-grace",
|
|
2216
|
+
"reconciliation-only",
|
|
2217
|
+
"retired"
|
|
2218
|
+
])));
|
|
2219
|
+
return deleteLoopDataTx(tx, id);
|
|
2220
|
+
}
|
|
2205
2221
|
async function forceDeleteLoop(id) {
|
|
2206
|
-
return db.transaction(
|
|
2207
|
-
if (!(await tx.select().from(loops).where(eq(loops.id, id)).for("update"))[0]) return false;
|
|
2208
|
-
await tx.update(runLeases).set({
|
|
2209
|
-
state: "retired",
|
|
2210
|
-
expiresAt: null
|
|
2211
|
-
}).where(and(eq(runLeases.loopId, id), inArray(runLeases.state, [
|
|
2212
|
-
"active",
|
|
2213
|
-
"terminal-grace",
|
|
2214
|
-
"reconciliation-only",
|
|
2215
|
-
"retired"
|
|
2216
|
-
])));
|
|
2217
|
-
return deleteLoopDataTx(tx, id);
|
|
2218
|
-
});
|
|
2222
|
+
return db.transaction((tx) => forceDeleteLoopTx(tx, id));
|
|
2219
2223
|
}
|
|
2220
2224
|
async function enqueueRunTx(tx, loop, request, at) {
|
|
2221
2225
|
if (loop.deleteRequestedAt) return {
|
|
@@ -2885,8 +2889,25 @@ async function updateMachine(id, patch) {
|
|
|
2885
2889
|
await db.update(machines).set(patch).where(eq(machines.id, id));
|
|
2886
2890
|
return getMachine(id);
|
|
2887
2891
|
}
|
|
2888
|
-
|
|
2889
|
-
|
|
2892
|
+
/** Atomically retire all loop authority, remove server-owned machine data, revoke
|
|
2893
|
+
* enrollment, and delete the machine. `allowedTeamIds` is supplied by the
|
|
2894
|
+
* authenticated owner flow; a concurrent loop from another team aborts safely. */
|
|
2895
|
+
async function forceDeleteMachine(id, allowedTeamIds) {
|
|
2896
|
+
return db.transaction(async (tx) => {
|
|
2897
|
+
if (!(await tx.select({ id: machines.id }).from(machines).where(eq(machines.id, id)).for("update"))[0]) return { state: "not-found" };
|
|
2898
|
+
const ownedLoops = await tx.select().from(loops).where(eq(loops.machineId, id)).for("update");
|
|
2899
|
+
if (allowedTeamIds) {
|
|
2900
|
+
const allowed = new Set(allowedTeamIds);
|
|
2901
|
+
if (ownedLoops.some((loop) => !allowed.has(loop.teamId))) return { state: "forbidden" };
|
|
2902
|
+
}
|
|
2903
|
+
for (const loop of ownedLoops) if (!await forceDeleteLoopTx(tx, loop.id)) throw new Error(`failed to delete loop ${loop.id}`);
|
|
2904
|
+
await tx.delete(connectKeys).where(eq(connectKeys.machineId, id));
|
|
2905
|
+
await tx.delete(machines).where(eq(machines.id, id));
|
|
2906
|
+
return {
|
|
2907
|
+
state: "deleted",
|
|
2908
|
+
loopIds: ownedLoops.map((loop) => loop.id)
|
|
2909
|
+
};
|
|
2910
|
+
});
|
|
2890
2911
|
}
|
|
2891
2912
|
async function setMachineOnline(id, online) {
|
|
2892
2913
|
await db.update(machines).set({
|
|
@@ -3308,19 +3329,6 @@ async function countRunSnapshots() {
|
|
|
3308
3329
|
const r = (await db.select({ n: sql`count(*)` }).from(runSnapshots))[0];
|
|
3309
3330
|
return Number(r?.n ?? 0);
|
|
3310
3331
|
}
|
|
3311
|
-
/**
|
|
3312
|
-
* The GitHub login-gate condition, in ONE place. `auth.ts` derives its load-time
|
|
3313
|
-
* `authEnabled` const from this; the machine-enrollment guard (`gateway/index.ts`
|
|
3314
|
-
* `poll`) calls it LIVE so the gated-vs-open behavior can be exercised in a test
|
|
3315
|
-
* (which sets the env vars per-case) without pulling betterAuth into the machine
|
|
3316
|
-
* hot path. Leaf module — no imports, no side effects.
|
|
3317
|
-
*
|
|
3318
|
-
* The gate is ON exactly when a GitHub OAuth app is configured (both id + secret).
|
|
3319
|
-
* OFF ⇒ open/dev mode (single shared workspace, anonymous self-registration).
|
|
3320
|
-
*/
|
|
3321
|
-
function loginGateEnabled() {
|
|
3322
|
-
return !!(process.env.GITHUB_CLIENT_ID?.trim() && process.env.GITHUB_CLIENT_SECRET?.trim());
|
|
3323
|
-
}
|
|
3324
3332
|
/** Server-side artifact-sync helpers: path safety, byte caps, and hashing. */
|
|
3325
3333
|
/** Per-file byte cap. At or under ⇒ bytes sync; over ⇒ metadata-only (no bytes). */
|
|
3326
3334
|
var BLOB_CAP = 10 * 1024 * 1024;
|
|
@@ -5074,11 +5082,11 @@ var MachineGateway = class {
|
|
|
5074
5082
|
let machine = auth.machine;
|
|
5075
5083
|
if (!machine) {
|
|
5076
5084
|
const owner = await getDeviceOwner(machineId);
|
|
5077
|
-
if (
|
|
5085
|
+
if (owner == null) return {
|
|
5078
5086
|
status: 401,
|
|
5079
5087
|
body: { error: "unknown device token — connect this machine first" }
|
|
5080
5088
|
};
|
|
5081
|
-
const ownerId = owner
|
|
5089
|
+
const ownerId = owner;
|
|
5082
5090
|
const teamId = teamIdForUser(ownerId);
|
|
5083
5091
|
await ensureTeam(teamId, ownerId === "shared" ? "Shared Workspace" : "Personal Team", ownerId === "shared" ? null : ownerId);
|
|
5084
5092
|
machine = await createMachine({
|
|
@@ -5233,6 +5241,8 @@ var MachineGateway = class {
|
|
|
5233
5241
|
if (!machine) return {
|
|
5234
5242
|
status: 200,
|
|
5235
5243
|
body: {
|
|
5244
|
+
registered: false,
|
|
5245
|
+
claimValid: await readClaimIntent(deviceToken) !== void 0,
|
|
5236
5246
|
online: false,
|
|
5237
5247
|
name: null,
|
|
5238
5248
|
lastSeen: null,
|
|
@@ -5249,6 +5259,7 @@ var MachineGateway = class {
|
|
|
5249
5259
|
return {
|
|
5250
5260
|
status: 200,
|
|
5251
5261
|
body: {
|
|
5262
|
+
registered: true,
|
|
5252
5263
|
online,
|
|
5253
5264
|
name: machine.name || null,
|
|
5254
5265
|
lastSeen: machine.lastSeen ?? null,
|
|
@@ -5876,7 +5887,7 @@ function loopCell(rec, field) {
|
|
|
5876
5887
|
/** Render the typed loop list. Columns are the default set
|
|
5877
5888
|
* plus any `--fields` extras (validated + resolved by `listLoops`). */
|
|
5878
5889
|
function renderLoopsText(loops, fields) {
|
|
5879
|
-
if (!loops.length) return doc(countLine(0), emptyList("loops"), helpBlock(["Run `pievo new --json '{...}'` to create your first loop", "Run `pievo daemon
|
|
5890
|
+
if (!loops.length) return doc(countLine(0), emptyList("loops"), helpBlock(["Run `pievo new --json '{...}'` to create your first loop", "Run `pievo daemon connect` if this machine isn't connected yet"]));
|
|
5880
5891
|
return doc(countLine(loops.length), listBlock("loops", fields, loops.map((l) => fields.map((f) => loopCell(l, f)))), helpBlock(["Run `pievo show <id>` to see a loop's full config", "Run `pievo log <id>` to see a loop's recent runs"]));
|
|
5881
5892
|
}
|
|
5882
5893
|
/** One run's result cell, derived from phase + status. */
|
|
@@ -7266,13 +7277,13 @@ async function recentMachineRuns(loops, n) {
|
|
|
7266
7277
|
* loop list, recent runs, and a `help[]`. `presence` null ⇒ the machine is not
|
|
7267
7278
|
* registered → a DEFINITIVE "not connected" state (never empty, never an error). */
|
|
7268
7279
|
function renderHomeText(ctx, presence, here, elsewhere, recent) {
|
|
7269
|
-
const machineLine = presence === null ? "machine: not connected — run `pievo daemon
|
|
7280
|
+
const machineLine = presence === null ? "machine: not connected — run `pievo daemon connect`" : `machine: ${[
|
|
7270
7281
|
presence,
|
|
7271
7282
|
ctx.pid ? `daemon pid ${ctx.pid}` : null,
|
|
7272
7283
|
ctx.server
|
|
7273
7284
|
].filter(Boolean).join(" · ")}`;
|
|
7274
7285
|
const binLineText = ctx.bin ? kvLine("bin", ctx.bin) : "bin: (not on PATH — run `npm install -g @kky42/pievo@latest`)";
|
|
7275
|
-
if (presence === null) return doc(binLineText, kvLine("description", HOME_DESCRIPTION), machineLine, helpBlock(["Run `pievo daemon
|
|
7286
|
+
if (presence === null) return doc(binLineText, kvLine("description", HOME_DESCRIPTION), machineLine, helpBlock(["Run `pievo daemon connect --server-url <url> --connect-key <dk_…>` to connect this machine", "Run `pievo --help` to see every command"]));
|
|
7276
7287
|
const loopsName = elsewhere > 0 ? "loops here" : "loops";
|
|
7277
7288
|
const loopsBlock = here.length ? listBlock(loopsName, [
|
|
7278
7289
|
"name",
|
|
@@ -7597,4 +7608,4 @@ async function getCliGateway() {
|
|
|
7597
7608
|
return (await ensureServer()).cliGateway;
|
|
7598
7609
|
}
|
|
7599
7610
|
//#endregion
|
|
7600
|
-
export { isDevelopment as $,
|
|
7611
|
+
export { isDevelopment as $, validateLoopEdit as $t, ensureServer as A, redeemInviteAtomic as At, getEnvVar as B, sha256 as Bt, createMachine as C, normalizePathname as Ct, defu as D, readJsonBody as Dt, db as E, readByteBody as Et, getArtifactFile as F, requestRunCancel as Ft, getMachine as G, toKebabCase as Gt, getHost as H, statusDefinitionsFromLoop as Ht, getArtifactSync as I, resolveBaseURL as It, getRun as J, updateMachine as Jt, getOrigin as K, tryDeleteLoop as Kt, getBaseURL as L, safeRelPath as Lt, env as M, removeTeamMemberGuarded as Mt, forceDeleteLoop as N, renameTeam as Nt, deleteInvite as O, recentLoopUsage as Ot, forceDeleteMachine as P, requestDeleteLoop as Pt, hasRunningRun as Q, validPollWireId as Qt, getBooleanEnvVar as R, scheduleFromLoop as Rt, createInvite as S, mintDeviceToken as St, daemonNeedsUpdate as T, pauseLoop as Tt, getInvite as U, stopLoop as Ut, getGateway as V, startLoop as Vt, getLoop as W, teamIdForUser as Wt, getTeamMember as X, validOptionalPollString as Xt, getTeam as Y, userByEmail as Yt, hasPendingRun as Z, validPollCurrentRun as Zt, computeRunDiff as _, listTeamsForUser as _t, BetterAuthError as a, isSafeUrlScheme as at, createDefu as b, machineIdFromToken as bt, ENV as c, kAPIErrorHeaderSymbol as ct, POLL_HTTP_BODY_FIELDS as d, listMachines as dt, wildcardMatch as en, isDynamicBaseURLConfig as et, SYNC_BODY_CAP as f, listMachinesForTeam as ft, capitalizeFirstLetter as g, listTeamMembers as gt, betterFetch as h, listRunsBefore as ht, BLOB_CAP as i, isRequestLike as it, ensureTeam as j, rememberConnectKey as jt, deleteTeamCascade as k, reconciliationStatesForRuns as kt, MACHINE_BODY_CAP as l, listArtifacts as lt, addTeamMember as m, listRuns as mt, APIError$1 as n, isPersonalTeam as nt, BetterCallError as o, isTeamMember as ot, ValidationError$1 as p, listPendingInvites as pt, getProtocol as q, updateLoop as qt, BASE_ERROR_CODES as r, isProduction as rt, CODING_AGENTS as s, isTest as st, APIError as t, isOutdated as tt, MIN_DAEMON_VERSION as u, listLoops as ut, countLoopsForTeam as v, logger as vt, createTeam as w, parseArtifactSyncBody as wt, createFetch as x, machinePresence as xt, countRuns as y, loopsForMachine as yt, getCliGateway as z, setTeamMemberRoleGuarded as zt };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { I as getArtifactSync, V as getGateway, z as getCliGateway } from "./boot-
|
|
1
|
+
import { I as getArtifactSync, V as getGateway, z as getCliGateway } from "./boot-CEPRQU5M.mjs";
|
|
2
2
|
export { getArtifactSync, getCliGateway, getGateway };
|
|
@@ -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-b1o4lrGO.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-D2QuIuwp.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-b1o4lrGO.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-CdT8qARs.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-CzRRgvct.mjs";
|
|
2
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/dist-E-fSrrAE.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 { B as getEnvVar,
|
|
2
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/factory-
|
|
1
|
+
import { B as getEnvVar, M as env, a as BetterAuthError } from "./boot-CEPRQU5M.mjs";
|
|
2
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/factory-CzRRgvct.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,6 +1,6 @@
|
|
|
1
1
|
import { h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
2
|
-
import { f as useRouter } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
3
2
|
import { r as LoadErrorCard } from "./actionUi-DCNmrAjw.mjs";
|
|
3
|
+
import { f as useRouter } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
4
4
|
//#region node_modules/.nitro/vite/services/ssr/assets/invite._token-CGzJGIfm.js
|
|
5
5
|
var import_jsx_runtime = require_jsx_runtime();
|
|
6
6
|
/** Redeem a team invite after normal gated sign-in. Invites grant membership but
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { c as createFileRoute, s as lazyRouteComponent } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
2
|
-
import { i as authClient, u as getAuthState } from "./SocialLinks-
|
|
3
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/invite._token-
|
|
2
|
+
import { i as authClient, u as getAuthState } from "./SocialLinks-dPCmZWvC.mjs";
|
|
3
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/invite._token-DDDd3vNf.js
|
|
4
4
|
var $$splitErrorComponentImporter = () => import("./invite._token-CGzJGIfm.mjs");
|
|
5
|
-
var $$splitComponentImporter = () => import("./invite._token-
|
|
5
|
+
var $$splitComponentImporter = () => import("./invite._token-ZthOtmu9.mjs");
|
|
6
6
|
/** Redeem a team invite after normal gated sign-in. Invites grant membership but
|
|
7
7
|
* never bypass the login allowlist; open mode has no invite identity to redeem. */
|
|
8
8
|
var Route = createFileRoute("/invite/$token")({
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { o as __toESM } from "../_runtime.mjs";
|
|
2
2
|
import { g as require_react, h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
3
|
-
import { d as useNavigate } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
4
|
-
import { E as useSession, r as PievoLogo } from "./SocialLinks-y7JuqJqp.mjs";
|
|
5
3
|
import { s as btnPrimary } from "./ui-BEPYdOmJ.mjs";
|
|
4
|
+
import { d as useNavigate } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
5
|
+
import { E as useSession, r as PievoLogo } from "./SocialLinks-dPCmZWvC.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-BMR5TRJw.mjs";
|
|
8
|
+
import { t as Route } from "./invite._token-DDDd3vNf.mjs";
|
|
9
|
+
import { t as SignIn } from "./SignIn-C2JkrSfV.mjs";
|
|
10
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/invite._token-ZthOtmu9.js
|
|
11
11
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
12
12
|
var import_jsx_runtime = require_jsx_runtime();
|
|
13
13
|
/** Redeem a team invite after normal gated sign-in. Invites grant membership but
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { r as kyselyAdapter, t as createKyselyAdapter } from "./auth-
|
|
1
|
+
import { r as kyselyAdapter, t as createKyselyAdapter } from "./auth-b1o4lrGO.mjs";
|
|
2
2
|
export { createKyselyAdapter, kyselyAdapter };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as toRunSummaries, i as toLoopSummaries, r as toLoopDetail, t as sortLoopSummariesByRecentRun } from "./loopProjection-
|
|
3
|
-
import { canAccessLoop, requestScope } from "./auth-
|
|
1
|
+
import { $t as validateLoopEdit, A as ensureServer, Ft as requestRunCancel, G as getMachine, J as getRun, Kt as tryDeleteLoop, N as forceDeleteLoop, Pt as requestDeleteLoop, Q as hasRunningRun, Tt as pauseLoop$1, Ut as stopLoop$1, Vt as startLoop$1, W as getLoop, X as getTeamMember, Y as getTeam, _t as listTeamsForUser, dt as listMachines, ft as listMachinesForTeam, ht as listRunsBefore, qt as updateLoop, ut as listLoops$1, xt as machinePresence } from "./boot-CEPRQU5M.mjs";
|
|
2
|
+
import { a as toRunSummaries, i as toLoopSummaries, r as toLoopDetail, t as sortLoopSummariesByRecentRun } from "./loopProjection-CeH1HELf.mjs";
|
|
3
|
+
import { canAccessLoop, requestScope } from "./auth-b1o4lrGO.mjs";
|
|
4
4
|
import { n as createServerFn } from "./ssr.mjs";
|
|
5
5
|
import { t as createServerRpc } from "./createServerRpc-BD8Xn_0_.mjs";
|
|
6
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/loopApi-
|
|
6
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/loopApi-DxDYnPI7.js
|
|
7
7
|
/**
|
|
8
8
|
* Server functions backing the dashboard. They run server-side (createServerFn
|
|
9
9
|
* → RPC) and call the IN-PROCESS scheduler + store directly — the scheduler
|
|
@@ -40,7 +40,7 @@ var getAuthState_createServerFn_handler = createServerRpc({
|
|
|
40
40
|
filename: "src/server/loopApi.ts"
|
|
41
41
|
}, (opts) => getAuthState.__executeServer(opts));
|
|
42
42
|
var getAuthState = createServerFn({ method: "GET" }).handler(getAuthState_createServerFn_handler, async () => {
|
|
43
|
-
const { authEnabled } = await import("./auth-
|
|
43
|
+
const { authEnabled } = await import("./auth-b1o4lrGO.mjs");
|
|
44
44
|
return { enabled: authEnabled };
|
|
45
45
|
});
|
|
46
46
|
var getConfig_createServerFn_handler = createServerRpc({
|
|
@@ -150,7 +150,7 @@ var getArtifacts_createServerFn_handler = createServerRpc({
|
|
|
150
150
|
var getArtifacts = createServerFn({ method: "GET" }).validator((d) => d).handler(getArtifacts_createServerFn_handler, async ({ data }) => {
|
|
151
151
|
await backend();
|
|
152
152
|
if (!await ownedLoop(data.loopId)) return [];
|
|
153
|
-
const { listLoopArtifacts } = await import("./artifactFiles-
|
|
153
|
+
const { listLoopArtifacts } = await import("./artifactFiles-DBu2yk9a.mjs");
|
|
154
154
|
return listLoopArtifacts(data.loopId);
|
|
155
155
|
});
|
|
156
156
|
var getArtifact_createServerFn_handler = createServerRpc({
|
|
@@ -161,7 +161,7 @@ var getArtifact_createServerFn_handler = createServerRpc({
|
|
|
161
161
|
var getArtifact = createServerFn({ method: "GET" }).validator((d) => d).handler(getArtifact_createServerFn_handler, async ({ data }) => {
|
|
162
162
|
await backend();
|
|
163
163
|
if (!await ownedLoop(data.loopId)) return { error: "file not found" };
|
|
164
|
-
const { readLoopArtifact } = await import("./artifactFiles-
|
|
164
|
+
const { readLoopArtifact } = await import("./artifactFiles-DBu2yk9a.mjs");
|
|
165
165
|
return readLoopArtifact(data.loopId, data.path);
|
|
166
166
|
});
|
|
167
167
|
var getRunDiff_createServerFn_handler = createServerRpc({
|
|
@@ -180,7 +180,7 @@ var getRunDiff = createServerFn({ method: "GET" }).validator((d) => d).handler(g
|
|
|
180
180
|
hasSnapshot: false,
|
|
181
181
|
files: []
|
|
182
182
|
};
|
|
183
|
-
const { computeRunDiff } = await import("./runDiff-
|
|
183
|
+
const { computeRunDiff } = await import("./runDiff-Ce1DhI7z.mjs");
|
|
184
184
|
return computeRunDiff(data.runId);
|
|
185
185
|
});
|
|
186
186
|
var patchLoop_createServerFn_handler = createServerRpc({
|
|
@@ -268,7 +268,7 @@ var deleteLoop = createServerFn({ method: "POST" }).validator((id) => id).handle
|
|
|
268
268
|
if (!await requestDeleteLoop(id)) return { error: "not found" };
|
|
269
269
|
if (unreachable && mayRetireAuthority) {
|
|
270
270
|
if (!await forceDeleteLoop(id)) return { error: "delete failed; server data was not deleted" };
|
|
271
|
-
const { logger } = await import("./logger-
|
|
271
|
+
const { logger } = await import("./logger-Co0_q7fy.mjs");
|
|
272
272
|
logger.child({ mod: "loop-lifecycle" }).warn({
|
|
273
273
|
action: "unreachable-delete",
|
|
274
274
|
loopId: id,
|
|
@@ -328,7 +328,7 @@ var mintClaim_createServerFn_handler = createServerRpc({
|
|
|
328
328
|
}, (opts) => mintClaim.__executeServer(opts));
|
|
329
329
|
var mintClaim = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(mintClaim_createServerFn_handler, async ({ data: teamId }) => {
|
|
330
330
|
await backend();
|
|
331
|
-
const { mintDeviceToken, rememberConnectKey } = await import("./tokens-
|
|
331
|
+
const { mintDeviceToken, rememberConnectKey } = await import("./tokens-BP8ltV6J.mjs");
|
|
332
332
|
const { userId, teamId: active } = await requestScope(teamId);
|
|
333
333
|
const owner = userId ?? "shared";
|
|
334
334
|
const token = mintDeviceToken();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/loopProjection-
|
|
1
|
+
import { G as getMachine, Ht as statusDefinitionsFromLoop, Ot as recentLoopUsage, Q as hasRunningRun, Rt as scheduleFromLoop, T as daemonNeedsUpdate, Z as hasPendingRun, kt as reconciliationStatesForRuns, mt as listRuns, u as MIN_DAEMON_VERSION, xt as machinePresence, y as countRuns } from "./boot-CEPRQU5M.mjs";
|
|
2
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/loopProjection-CeH1HELf.js
|
|
3
3
|
/** Canonical client projections for persisted loops and runs. */
|
|
4
4
|
var SUMMARY_RUNS = 18;
|
|
5
5
|
var RECENT_USAGE_WINDOW_MS = 10080 * 60 * 1e3;
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { o as __toESM } from "../_runtime.mjs";
|
|
2
|
-
import { s as CODING_AGENTS } from "./boot-
|
|
2
|
+
import { s as CODING_AGENTS } from "./boot-CEPRQU5M.mjs";
|
|
3
3
|
import { g as require_react, h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
4
|
-
import { d as useNavigate, u as Link } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
5
|
-
import { C as startLoop, E as useSession, _ as loadOlderRuns, b as pauseLoop, c as getArtifact, l as getArtifacts, p as getLoopDetail, s as deleteLoop, w as stopLoop, x as runLoop, y as patchLoop } from "./SocialLinks-y7JuqJqp.mjs";
|
|
6
4
|
import { E as tsShort, S as runPulseStyle, T as selectCls, _ as inputCls, a as btn, b as rel, c as btnQuiet, d as dotLabel, g as humanBytes, m as fmt, n as Loading, o as btnDanger, p as dur, r as Pill, s as btnPrimary, t as ErrorBanner, u as dotColor, v as labelCls, w as sectionHeadCls } from "./ui-BEPYdOmJ.mjs";
|
|
7
|
-
import { t as setActiveTeamCookie } from "./teamCookie-B7hLOIie.mjs";
|
|
8
|
-
import { t as SignIn } from "./SignIn-DwHmFBg2.mjs";
|
|
9
5
|
import { i as useFlash, n as FlashLine, r as LoadErrorCard, t as ConfirmBar } from "./actionUi-DCNmrAjw.mjs";
|
|
6
|
+
import { d as useNavigate, u as Link } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
7
|
+
import { C as startLoop, E as useSession, _ as loadOlderRuns, b as pauseLoop, c as getArtifact, l as getArtifacts, p as getLoopDetail, s as deleteLoop, w as stopLoop, x as runLoop, y as patchLoop } from "./SocialLinks-dPCmZWvC.mjs";
|
|
8
|
+
import { t as setActiveTeamCookie } from "./teamCookie-B7hLOIie.mjs";
|
|
9
|
+
import { t as SignIn } from "./SignIn-C2JkrSfV.mjs";
|
|
10
10
|
import { n as daemonStopSupport, r as deriveLoopLifecycle, t as DAEMON_UPGRADE_REQUIRED } from "./lifecycleUi-DOr6Af13.mjs";
|
|
11
|
-
import { l as mergeRuns, n as MachinesModal, o as Timeline, t as LoopOverview } from "./MachinesModal-
|
|
12
|
-
import { n as artifactKind, t as Route } from "./artifactKind-
|
|
11
|
+
import { l as mergeRuns, n as MachinesModal, o as Timeline, t as LoopOverview } from "./MachinesModal-D54Uza6A.mjs";
|
|
12
|
+
import { n as artifactKind, t as Route } from "./artifactKind-CJMjNtSC.mjs";
|
|
13
13
|
import { t as purify } from "../_libs/dompurify.mjs";
|
|
14
14
|
import { t as g } from "../_libs/marked.mjs";
|
|
15
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId-
|
|
15
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId-BTAKWGvT.js
|
|
16
16
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
17
17
|
var import_jsx_runtime = require_jsx_runtime();
|
|
18
18
|
/** Download URL for one artifact. Each path segment is encoded independently so
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { o as __toESM } from "../_runtime.mjs";
|
|
2
2
|
import { g as require_react, h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
3
|
-
import { u as Link } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
4
|
-
import { E as useSession, T as stopRun, _ as loadOlderRuns, m as getRunDiff, p as getLoopDetail } from "./SocialLinks-y7JuqJqp.mjs";
|
|
5
3
|
import { S as runPulseStyle, a as btn, g as humanBytes, h as fnum, i as StatusPill, m as fmt, n as Loading, o as btnDanger, p as dur, r as Pill, w as sectionHeadCls } from "./ui-BEPYdOmJ.mjs";
|
|
6
|
-
import { t as SignIn } from "./SignIn-DwHmFBg2.mjs";
|
|
7
4
|
import { r as LoadErrorCard } from "./actionUi-DCNmrAjw.mjs";
|
|
8
|
-
import {
|
|
9
|
-
|
|
5
|
+
import { u as Link } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
6
|
+
import { E as useSession, T as stopRun, _ as loadOlderRuns, m as getRunDiff, p as getLoopDetail } from "./SocialLinks-dPCmZWvC.mjs";
|
|
7
|
+
import { t as SignIn } from "./SignIn-C2JkrSfV.mjs";
|
|
8
|
+
import { t as Route } from "./loops._loopId_.runs._runId-BRzoEUe1.mjs";
|
|
9
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-BGl_4tUK.js
|
|
10
10
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
11
11
|
var import_jsx_runtime = require_jsx_runtime();
|
|
12
12
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { c as createFileRoute, s as lazyRouteComponent } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
2
|
-
import { i as authClient, u as getAuthState } from "./SocialLinks-
|
|
3
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-
|
|
4
|
-
var $$splitComponentImporter = () => import("./loops._loopId_.runs._runId-
|
|
2
|
+
import { i as authClient, u as getAuthState } from "./SocialLinks-dPCmZWvC.mjs";
|
|
3
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-BRzoEUe1.js
|
|
4
|
+
var $$splitComponentImporter = () => import("./loops._loopId_.runs._runId-BGl_4tUK.mjs");
|
|
5
5
|
/**
|
|
6
6
|
* Run detail PAGE — `/loops/$loopId/runs/$runId`. A standalone page (the trailing
|
|
7
7
|
* `_` on the `$loopId` segment opts it out of the loop page's component so the run
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { C as createMachine$1,
|
|
2
|
-
import { requestScope } from "./auth-
|
|
1
|
+
import { A as ensureServer, Bt as sha256, C as createMachine$1, G as getMachine, Jt as updateMachine, P as forceDeleteMachine, St as mintDeviceToken, T as daemonNeedsUpdate, X as getTeamMember, bt as machineIdFromToken, dt as listMachines$1, ft as listMachinesForTeam, jt as rememberConnectKey, u as MIN_DAEMON_VERSION, yt as loopsForMachine } from "./boot-CEPRQU5M.mjs";
|
|
2
|
+
import { requestScope } from "./auth-b1o4lrGO.mjs";
|
|
3
3
|
import { n as createServerFn } from "./ssr.mjs";
|
|
4
4
|
import { t as createServerRpc } from "./createServerRpc-BD8Xn_0_.mjs";
|
|
5
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/machineFns-
|
|
5
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/machineFns-Bmh_4hnx.js
|
|
6
6
|
/**
|
|
7
7
|
* Whether a machine is visible/actionable in the request scope. Mirrors
|
|
8
8
|
* listMachines: open mode sees everything; otherwise the requester must own the
|
|
@@ -245,7 +245,7 @@ var deleteMachine_createServerFn_handler = createServerRpc({
|
|
|
245
245
|
filename: "src/server/machineFns.ts"
|
|
246
246
|
}, (opts) => deleteMachine.__executeServer(opts));
|
|
247
247
|
var deleteMachine = createServerFn({ method: "POST" }).validator((id) => id).handler(deleteMachine_createServerFn_handler, async ({ data: id }) => {
|
|
248
|
-
await ensureServer();
|
|
248
|
+
const { scheduler } = await ensureServer();
|
|
249
249
|
const { scope, machine } = await scopedMachine(id);
|
|
250
250
|
if (scope.enforce && !scope.userId) return {
|
|
251
251
|
ok: false,
|
|
@@ -256,11 +256,25 @@ var deleteMachine = createServerFn({ method: "POST" }).validator((id) => id).han
|
|
|
256
256
|
error: "machine not found"
|
|
257
257
|
};
|
|
258
258
|
const loops = await loopsForMachine(id);
|
|
259
|
-
|
|
259
|
+
let allowedTeamIds = scope.enforce ? [] : void 0;
|
|
260
|
+
if (scope.enforce && loops.length > 0) {
|
|
261
|
+
allowedTeamIds = [...new Set(loops.map((loop) => loop.teamId))];
|
|
262
|
+
if ((await Promise.all(allowedTeamIds.map((teamId) => getTeamMember(teamId, scope.userId)))).some((membership) => membership?.role !== "owner")) return {
|
|
263
|
+
ok: false,
|
|
264
|
+
error: "Only an owner of every affected team can delete this machine and its loops."
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
const deleted = await forceDeleteMachine(id, allowedTeamIds);
|
|
268
|
+
if (deleted.state === "forbidden") return {
|
|
260
269
|
ok: false,
|
|
261
|
-
error:
|
|
270
|
+
error: "Machine loops changed while deleting; review them and try again."
|
|
271
|
+
};
|
|
272
|
+
if (deleted.state === "not-found") return {
|
|
273
|
+
ok: false,
|
|
274
|
+
error: "machine not found"
|
|
262
275
|
};
|
|
263
|
-
|
|
276
|
+
for (const loopId of deleted.loopIds) scheduler.removeLoop(loopId);
|
|
277
|
+
return { ok: true };
|
|
264
278
|
});
|
|
265
279
|
//#endregion
|
|
266
280
|
export { createMachine_createServerFn_handler, deleteMachine_createServerFn_handler, finalizeMachine_createServerFn_handler, listMachines_createServerFn_handler, machineStatus_createServerFn_handler };
|
package/.output/server/_ssr/{node-sqlite-dialect-D74sKAO_.mjs → node-sqlite-dialect-C8O4zOiM.mjs}
RENAMED
|
@@ -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-b1o4lrGO.mjs";
|
|
2
2
|
import { n as DEFAULT_MIGRATION_TABLE, t as DEFAULT_MIGRATION_LOCK_TABLE } from "./kysely-migration-tables-JkVUjPF_-bPAX9LR_.mjs";
|
|
3
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/node-sqlite-dialect-
|
|
3
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/node-sqlite-dialect-C8O4zOiM.js
|
|
4
4
|
var NodeSqliteAdapter = class {
|
|
5
5
|
get supportsCreateIfNotExists() {
|
|
6
6
|
return true;
|