@kky42/pievo-server 2.4.1 → 2.4.4
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-Ci18Bitd.js +1 -0
- package/.output/public/assets/{SignIn-BdkKWOSs.js → SignIn-Czy-XJou.js} +1 -1
- package/.output/public/assets/{actionUi-BYBeYy7U.js → actionUi-DGJmNwsD.js} +1 -1
- package/.output/public/assets/app-CuZ0I3Mb.css +2 -0
- package/.output/public/assets/index-gJavUZIA.js +10 -0
- package/.output/public/assets/{invite._token-ZnVQqqq4.js → invite._token-BQUbjPMM.js} +1 -1
- package/.output/public/assets/invite._token-BUYUsIBj.js +1 -0
- package/.output/public/assets/lifecycleUi-C0DaC6NM.js +1 -0
- package/.output/public/assets/loops._loopId-BkEPvT1q.js +67 -0
- package/.output/public/assets/{loops._loopId_.runs._runId-CA0-q1y5.js → loops._loopId_.runs._runId-SM4sD1xB.js} +2 -2
- package/.output/public/assets/{preload-helper-CUIO87nJ.js → preload-helper-D1jXs0sN.js} +3 -3
- package/.output/public/assets/routes-4mIvs8LG.js +1 -0
- package/.output/public/assets/routes-B0svLfFq.js +1 -0
- package/.output/public/assets/t._teamId-BLO_bz6b.js +1 -0
- package/.output/public/assets/t._teamId-D-wGh4mo.js +1 -0
- package/.output/public/assets/{ui-DGOT8AoZ.js → ui-DGHTxOhC.js} +1 -1
- package/.output/server/_ssr/{DashboardView-D_hKsCsv.mjs → DashboardView-DqZLADCp.mjs} +70 -333
- package/.output/server/_ssr/{MachinesModal-DZ_9ErAU.mjs → MachinesModal-BsCfGuwp.mjs} +142 -9
- package/.output/server/_ssr/{SignIn-DjSrg0nO.mjs → SignIn-ffgDY0yf.mjs} +3 -3
- package/.output/server/_ssr/{SocialLinks-BTjsnVOm.mjs → SocialLinks-Bt7huqfS.mjs} +7 -13
- package/.output/server/_ssr/{actionUi-D15R8L7R.mjs → actionUi-DD7Cd7Le.mjs} +2 -2
- package/.output/server/_ssr/{artifactFiles-CV3OXxRD.mjs → artifactFiles-DHBXTtZn.mjs} +3 -3
- package/.output/server/_ssr/{artifactKind-ByzVa7fg.mjs → artifactKind-CwQ_Ddj6.mjs} +3 -3
- package/.output/server/_ssr/artifacts-BR3jj0NC.mjs +2 -0
- package/.output/server/_ssr/{auth-CPCDf6Wr.mjs → auth-C0zoZCGe.mjs} +9 -9
- package/.output/server/_ssr/boot-CdOO4xOo.mjs +2 -0
- package/.output/server/_ssr/{boot-BbWxaF-z.mjs → boot-sNlIkoLe.mjs} +66 -129
- package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-8MIh9jN1.mjs → bun-sqlite-dialect-BW9W1_Ps-DmlZWqO7.mjs} +2 -2
- package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-CcMQ01_d.mjs → d1-sqlite-dialect-BLC8LXE6-CCNzqZwZ.mjs} +2 -2
- package/.output/server/_ssr/db-CwLD-5w1.mjs +2 -0
- package/.output/server/_ssr/{dist-AxCsRawm.mjs → dist-B3SxDOpW.mjs} +2 -2
- package/.output/server/_ssr/{factory-S7MaMVC2.mjs → factory-Dv3Zopis.mjs} +2 -2
- package/.output/server/_ssr/{invite._token-B1UgMbNQ.mjs → invite._token-AvtAuDKv.mjs} +4 -12
- package/.output/server/_ssr/{invite._token-BliJIGk4.mjs → invite._token-CHR5K84a.mjs} +6 -14
- package/.output/server/_ssr/{invite._token-D296YVGd.mjs → invite._token-tw3mgvEo.mjs} +8 -16
- package/.output/server/_ssr/{kysely-adapter-DUdpqcCJ.mjs → kysely-adapter-nL7WKSgw.mjs} +1 -1
- package/.output/server/_ssr/lifecycleUi-DOr6Af13.mjs +51 -0
- package/.output/server/_ssr/logger-B8m8F1Qu.mjs +2 -0
- package/.output/server/_ssr/{loopApi-Dy8ztANM.mjs → loopApi-7YHXDl5g.mjs} +14 -61
- package/.output/server/_ssr/{loopProjection-BZ1_IYCr.mjs → loopProjection-eZvVobW7.mjs} +30 -5
- package/.output/server/_ssr/{loops._loopId-CKsAnxMl.mjs → loops._loopId-TEIcuqZU.mjs} +84 -112
- package/.output/server/_ssr/{loops._loopId_.runs._runId-a_SyY8rX.mjs → loops._loopId_.runs._runId-B4jXeonc.mjs} +3 -3
- package/.output/server/_ssr/{loops._loopId_.runs._runId-DG405pQs.mjs → loops._loopId_.runs._runId-BVQKe8xT.mjs} +6 -6
- package/.output/server/_ssr/{machineFns-BSaE7K88.mjs → machineFns-ByMsgG12.mjs} +3 -3
- package/.output/server/_ssr/{node-sqlite-dialect-rWwVyt2J.mjs → node-sqlite-dialect-CjNineno.mjs} +2 -2
- package/.output/server/_ssr/{router-lMkobh5r.mjs → router-DyhWcIzt.mjs} +65 -118
- package/.output/server/_ssr/{routes-DNCZrs8z.mjs → routes-BWLQNDn5.mjs} +2 -2
- package/.output/server/_ssr/{routes-ufPbrGHs.mjs → routes-Cz49hLy6.mjs} +5 -5
- package/.output/server/_ssr/{routes-CRHc9cLG.mjs → routes-DqIGr7p0.mjs} +5 -5
- package/.output/server/_ssr/runDiff-Ba8Lg1vg.mjs +2 -0
- package/.output/server/_ssr/ssr.mjs +39 -47
- package/.output/server/_ssr/store-Cujtg2QE.mjs +2 -0
- package/.output/server/_ssr/{t._teamId-BoBoYEHL.mjs → t._teamId-COoQSQtH.mjs} +5 -5
- package/.output/server/_ssr/{t._teamId-DcWOYjPf.mjs → t._teamId-Dms0PTMu.mjs} +2 -2
- package/.output/server/_ssr/{t._teamId-QD2nN0wn.mjs → t._teamId-xFPYdSPu.mjs} +5 -5
- package/.output/server/_ssr/{teamFns-BsmconJ1.mjs → teamFns-H438WnZC.mjs} +12 -30
- package/.output/server/_ssr/{teamFns-DcoVuWyH.mjs → teamFns-gilVwh7z.mjs} +2 -2
- package/.output/server/_ssr/tokens-DgG_Syq3.mjs +2 -0
- package/.output/server/_ssr/{ui-DmFKW2H_.mjs → ui-dMEI4sHj.mjs} +13 -9
- package/.output/server/_tanstack-start-manifest_v-UkU-Jq6w.mjs +86 -0
- package/.output/server/index.mjs +84 -84
- package/package.json +1 -2
- package/.output/public/assets/MachinesModal-CEddj7la.js +0 -1
- package/.output/public/assets/app-BAgHQVvr.css +0 -2
- package/.output/public/assets/index-BZLqD3JI.js +0 -12
- package/.output/public/assets/invite._token-BCLgmTO7.js +0 -1
- package/.output/public/assets/lifecycleUi-C7dwHtbw.js +0 -1
- package/.output/public/assets/loops._loopId-X8PSlgdB.js +0 -67
- package/.output/public/assets/routes-BjKcDy6D.js +0 -1
- package/.output/public/assets/routes-bfMcArTT.js +0 -1
- package/.output/public/assets/t._teamId-B75J8h0x.js +0 -1
- package/.output/public/assets/t._teamId-D7WVPMDr.js +0 -1
- package/.output/server/_ssr/artifacts-BhQvaGjF.mjs +0 -2
- package/.output/server/_ssr/boot-COHf8Gv3.mjs +0 -2
- package/.output/server/_ssr/db-dw61xIt1.mjs +0 -2
- package/.output/server/_ssr/lifecycleUi-Dad3hvhm.mjs +0 -37
- package/.output/server/_ssr/logger-DdUWuMdh.mjs +0 -2
- package/.output/server/_ssr/runDiff-CrZzjokj.mjs +0 -2
- package/.output/server/_ssr/store-CirPHuib.mjs +0 -2
- package/.output/server/_ssr/tokens-XngoyCU8.mjs +0 -2
- package/.output/server/_tanstack-start-manifest_v-Xd5bMpJe.mjs +0 -87
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/lifecycleUi-DOr6Af13.js
|
|
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
|
+
/** Derive product lifecycle state only from durable server facts. */
|
|
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
|
+
return "active";
|
|
11
|
+
}
|
|
12
|
+
/** Stable lifecycle badge shared by dashboard cards and loop detail. It shows
|
|
13
|
+
* only scheduling state and its durable pause cause; execution transients
|
|
14
|
+
* (queued/running/stopping) stay in the runs timeline and never replace it. */
|
|
15
|
+
function lifecyclePresentation(loop) {
|
|
16
|
+
if (loop.deleteRequestedAt != null) return {
|
|
17
|
+
label: "Deleting",
|
|
18
|
+
tone: "accent"
|
|
19
|
+
};
|
|
20
|
+
if (loop.enabled) return {
|
|
21
|
+
label: "Active",
|
|
22
|
+
tone: "success"
|
|
23
|
+
};
|
|
24
|
+
if (loop.pauseCause?.kind === "blocked") return {
|
|
25
|
+
label: "Paused · blocked",
|
|
26
|
+
tone: "attention"
|
|
27
|
+
};
|
|
28
|
+
if (loop.pauseCause?.kind === "failure-streak") return {
|
|
29
|
+
label: "Paused · failure streak",
|
|
30
|
+
tone: "attention"
|
|
31
|
+
};
|
|
32
|
+
if (loop.pauseCause?.kind === "owner") return {
|
|
33
|
+
label: "Paused · owner",
|
|
34
|
+
tone: "neutral"
|
|
35
|
+
};
|
|
36
|
+
return {
|
|
37
|
+
label: "Paused",
|
|
38
|
+
tone: "neutral"
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function daemonStopSupport(protocol) {
|
|
42
|
+
return protocol === 4 ? {
|
|
43
|
+
supported: true,
|
|
44
|
+
label: `Daemon protocol 4 · Stop supported`
|
|
45
|
+
} : {
|
|
46
|
+
supported: false,
|
|
47
|
+
label: `Daemon protocol ${protocol ?? "unknown"} · upgrade required`
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
export { lifecyclePresentation as i, daemonStopSupport as n, deriveLoopLifecycle as r, DAEMON_UPGRADE_REQUIRED as t };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { canAccessLoop, requestScope } from "./auth-
|
|
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, dt as listMachines, ft as listMachinesForTeam, ht as listRunsBefore, j as ensureServer, qt as updateLoop, ut as listLoops$1 } from "./boot-sNlIkoLe.mjs";
|
|
2
|
+
import { a as toRunSummaries, i as toLoopSummaries, r as toLoopDetail, t as sortLoopSummariesByRecentRun } from "./loopProjection-eZvVobW7.mjs";
|
|
3
|
+
import { canAccessLoop, requestScope } from "./auth-C0zoZCGe.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-7YHXDl5g.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-C0zoZCGe.mjs");
|
|
44
44
|
return { enabled: authEnabled };
|
|
45
45
|
});
|
|
46
46
|
var getConfig_createServerFn_handler = createServerRpc({
|
|
@@ -107,8 +107,8 @@ var listLoops = createServerFn({ method: "GET" }).validator((teamId) => teamId).
|
|
|
107
107
|
await backend();
|
|
108
108
|
const { enforce, userId, teamId: active } = await requestScope(teamId);
|
|
109
109
|
if (enforce && !userId) return [];
|
|
110
|
-
const
|
|
111
|
-
return await
|
|
110
|
+
const [loopRows, machines] = await Promise.all([listLoops$1(enforce ? active : void 0), enforce ? listMachinesForTeam(active) : listMachines()]);
|
|
111
|
+
return sortLoopSummariesByRecentRun(await toLoopSummaries(loopRows.sort((a, b) => a.createdAt < b.createdAt ? 1 : -1), machines));
|
|
112
112
|
});
|
|
113
113
|
var getLoopDetail_createServerFn_handler = createServerRpc({
|
|
114
114
|
id: "b050455aacc84dd2a2c9a45517826ad10f91d8f1545e87cc7015784cc7116a97",
|
|
@@ -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-DHBXTtZn.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-DHBXTtZn.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-Ba8Lg1vg.mjs");
|
|
184
184
|
return computeRunDiff(data.runId);
|
|
185
185
|
});
|
|
186
186
|
var patchLoop_createServerFn_handler = createServerRpc({
|
|
@@ -267,8 +267,8 @@ var deleteLoop = createServerFn({ method: "POST" }).validator((id) => id).handle
|
|
|
267
267
|
scheduler.removeLoop(id);
|
|
268
268
|
if (!await requestDeleteLoop(id)) return { error: "not found" };
|
|
269
269
|
if (unreachable && mayRetireAuthority) {
|
|
270
|
-
if (!await forceDeleteLoop
|
|
271
|
-
const { logger } = await import("./logger-
|
|
270
|
+
if (!await forceDeleteLoop(id)) return { error: "delete failed; server data was not deleted" };
|
|
271
|
+
const { logger } = await import("./logger-B8m8F1Qu.mjs");
|
|
272
272
|
logger.child({ mod: "loop-lifecycle" }).warn({
|
|
273
273
|
action: "unreachable-delete",
|
|
274
274
|
loopId: id,
|
|
@@ -287,39 +287,6 @@ var deleteLoop = createServerFn({ method: "POST" }).validator((id) => id).handle
|
|
|
287
287
|
waiting: !deleted
|
|
288
288
|
};
|
|
289
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
290
|
var runLoop_createServerFn_handler = createServerRpc({
|
|
324
291
|
id: "08565e35f6a3dd06ef25401de0343976c47f7ae319d3baed6320b56dd3718311",
|
|
325
292
|
name: "runLoop",
|
|
@@ -361,7 +328,7 @@ var mintClaim_createServerFn_handler = createServerRpc({
|
|
|
361
328
|
}, (opts) => mintClaim.__executeServer(opts));
|
|
362
329
|
var mintClaim = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(mintClaim_createServerFn_handler, async ({ data: teamId }) => {
|
|
363
330
|
await backend();
|
|
364
|
-
const { mintDeviceToken, rememberConnectKey } = await import("./tokens-
|
|
331
|
+
const { mintDeviceToken, rememberConnectKey } = await import("./tokens-DgG_Syq3.mjs");
|
|
365
332
|
const { userId, teamId: active } = await requestScope(teamId);
|
|
366
333
|
const owner = userId ?? "shared";
|
|
367
334
|
const token = mintDeviceToken();
|
|
@@ -371,19 +338,5 @@ var mintClaim = createServerFn({ method: "POST" }).validator((teamId) => teamId)
|
|
|
371
338
|
});
|
|
372
339
|
return { token };
|
|
373
340
|
});
|
|
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
341
|
//#endregion
|
|
389
|
-
export { canViewTeam_createServerFn_handler,
|
|
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 };
|
|
@@ -1,7 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/loopProjection-
|
|
1
|
+
import { G as getMachine, Ht as statusDefinitionsFromLoop, Q as hasRunningRun, Rt as scheduleFromLoop, St as machinePresence, T as daemonNeedsUpdate, Z as hasPendingRun, kt as reconciliationStatesForRuns, mt as listRuns, u as MIN_DAEMON_VERSION, y as countRuns } from "./boot-sNlIkoLe.mjs";
|
|
2
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/loopProjection-eZvVobW7.js
|
|
3
3
|
/** Canonical client projections for persisted loops and runs. */
|
|
4
4
|
var SUMMARY_RUNS = 18;
|
|
5
|
+
/** Dashboard order: loops with runs first, most recent run first. The incoming
|
|
6
|
+
* order remains the tie-breaker, so never-run loops keep listLoops' newest-created
|
|
7
|
+
* ordering and equal timestamps do not make cards jump between polls. */
|
|
8
|
+
function sortLoopSummariesByRecentRun(summaries) {
|
|
9
|
+
return summaries.toSorted((a, b) => {
|
|
10
|
+
if (a.lastRunTs && b.lastRunTs) return b.lastRunTs.localeCompare(a.lastRunTs);
|
|
11
|
+
if (a.lastRunTs) return -1;
|
|
12
|
+
if (b.lastRunTs) return 1;
|
|
13
|
+
return 0;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
5
16
|
function nextRun(loop) {
|
|
6
17
|
return [loop.nextRunAt, loop.nextCadenceAt].filter((v) => v != null).sort()[0] ?? null;
|
|
7
18
|
}
|
|
@@ -45,8 +56,9 @@ function toArtifactSummary(row) {
|
|
|
45
56
|
oversize: row.oversize
|
|
46
57
|
};
|
|
47
58
|
}
|
|
48
|
-
async function
|
|
59
|
+
async function toLoopSummaryWithMachine(loop, machine) {
|
|
49
60
|
const runs = await toRunSummaries(loop.id, await listRuns(loop.id, SUMMARY_RUNS));
|
|
61
|
+
const presence = machinePresence(machine?.online, machine?.lastSeen);
|
|
50
62
|
return {
|
|
51
63
|
id: loop.id,
|
|
52
64
|
name: loop.name,
|
|
@@ -55,6 +67,13 @@ async function toLoopSummary(loop) {
|
|
|
55
67
|
agent: loop.agent,
|
|
56
68
|
model: loop.model ?? null,
|
|
57
69
|
reasoningEffort: loop.reasoningEffort ?? null,
|
|
70
|
+
machine: {
|
|
71
|
+
id: loop.machineId,
|
|
72
|
+
name: machine?.name || "",
|
|
73
|
+
online: presence === "online",
|
|
74
|
+
presence,
|
|
75
|
+
lastSeen: machine?.lastSeen ?? null
|
|
76
|
+
},
|
|
58
77
|
enabled: loop.enabled,
|
|
59
78
|
nextRun: nextRun(loop),
|
|
60
79
|
running: await hasRunningRun(loop.id),
|
|
@@ -67,6 +86,12 @@ async function toLoopSummary(loop) {
|
|
|
67
86
|
runCount: await countRuns(loop.id)
|
|
68
87
|
};
|
|
69
88
|
}
|
|
89
|
+
/** Batch dashboard projection: machine rows are preloaded once, avoiding a
|
|
90
|
+
* machine lookup per loop on every dashboard poll. */
|
|
91
|
+
async function toLoopSummaries(loops, machines) {
|
|
92
|
+
const byId = new Map(machines.map((machine) => [machine.id, machine]));
|
|
93
|
+
return Promise.all(loops.map((loop) => toLoopSummaryWithMachine(loop, byId.get(loop.machineId))));
|
|
94
|
+
}
|
|
70
95
|
function toLoopFull(loop) {
|
|
71
96
|
return {
|
|
72
97
|
id: loop.id,
|
|
@@ -91,7 +116,7 @@ async function toLoopDetail(loop) {
|
|
|
91
116
|
const presence = machinePresence(m?.online, m?.lastSeen);
|
|
92
117
|
return {
|
|
93
118
|
loop: toLoopFull(loop),
|
|
94
|
-
summary: await
|
|
119
|
+
summary: await toLoopSummaryWithMachine(loop, m),
|
|
95
120
|
machine: {
|
|
96
121
|
id: loop.machineId,
|
|
97
122
|
name: m?.name || "",
|
|
@@ -107,4 +132,4 @@ async function toLoopDetail(loop) {
|
|
|
107
132
|
};
|
|
108
133
|
}
|
|
109
134
|
//#endregion
|
|
110
|
-
export { toRunSummaries as i,
|
|
135
|
+
export { toRunSummaries as a, toLoopSummaries as i, toArtifactSummary as n, toLoopDetail as r, sortLoopSummariesByRecentRun as t };
|
|
@@ -1,29 +1,27 @@
|
|
|
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-sNlIkoLe.mjs";
|
|
3
3
|
import { g as require_react, h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
4
|
-
import {
|
|
5
|
-
import { i as useFlash, n as FlashLine, r as LoadErrorCard, t as ConfirmBar } from "./actionUi-
|
|
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-dMEI4sHj.mjs";
|
|
5
|
+
import { i as useFlash, n as FlashLine, r as LoadErrorCard, t as ConfirmBar } from "./actionUi-DD7Cd7Le.mjs";
|
|
6
6
|
import { d as useNavigate, u as Link } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
7
|
-
import {
|
|
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-Bt7huqfS.mjs";
|
|
8
8
|
import { t as setActiveTeamCookie } from "./teamCookie-B7hLOIie.mjs";
|
|
9
|
-
import { t as SignIn } from "./SignIn-
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { n as artifactKind, t as Route } from "./artifactKind-
|
|
9
|
+
import { t as SignIn } from "./SignIn-ffgDY0yf.mjs";
|
|
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-BsCfGuwp.mjs";
|
|
12
|
+
import { n as artifactKind, t as Route } from "./artifactKind-CwQ_Ddj6.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-TEIcuqZU.js
|
|
16
16
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
17
17
|
var import_jsx_runtime = require_jsx_runtime();
|
|
18
|
-
/** Download URL for one artifact
|
|
19
|
-
*
|
|
18
|
+
/** Download URL for one artifact. Each path segment is encoded independently so
|
|
19
|
+
* nested artifact paths continue to match the catch-all route. */
|
|
20
20
|
function downloadHref(loopId, path) {
|
|
21
|
-
const
|
|
22
|
-
return `/api/artifact/${encodeURIComponent(loopId)}/${
|
|
21
|
+
const encodedPath = path.split("/").map(encodeURIComponent).join("/");
|
|
22
|
+
return `/api/artifact/${encodeURIComponent(loopId)}/${encodedPath}`;
|
|
23
23
|
}
|
|
24
|
-
/**
|
|
25
|
-
* but served with the real image content-type + `inline` disposition (see the
|
|
26
|
-
* route). Used as an <img> src; never for a document the browser navigates to. */
|
|
24
|
+
/** Hardened inline image URL for the same artifact bytes. */
|
|
27
25
|
function inlineHref(loopId, path) {
|
|
28
26
|
return `${downloadHref(loopId, path)}?view=inline`;
|
|
29
27
|
}
|
|
@@ -90,6 +88,24 @@ function MarkdownView({ content }) {
|
|
|
90
88
|
dangerouslySetInnerHTML: { __html: (0, import_react.useMemo)(() => renderMarkdown(content), [content]) }
|
|
91
89
|
});
|
|
92
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Shared pieces of the artifact content viewer. The Files panel uses this one
|
|
93
|
+
* dispatch so binary/oversize copy and type-appropriate rendering cannot drift.
|
|
94
|
+
*
|
|
95
|
+
* Display types (see `lib/artifactKind`):
|
|
96
|
+
* - HTML → a STRICT sandboxed iframe (`sandbox="allow-scripts"`, deliberately
|
|
97
|
+
* NO `allow-same-origin`): user-machine-synced markup renders richly
|
|
98
|
+
* but in an opaque origin, so its scripts can't read the app's
|
|
99
|
+
* cookies/session or reach `parent` - stored-XSS is contained by
|
|
100
|
+
* design. A Preview/Source toggle exposes the raw markup too.
|
|
101
|
+
* - image → an <img> pointed at the hardened inline route (`inlineHref`); the
|
|
102
|
+
* bytes are NEVER inlined into the app DOM (SVG is scriptable, so it
|
|
103
|
+
* rides as an image, which does not execute embedded scripts).
|
|
104
|
+
* - markdown → the shared markdown pipeline (Preview) with a raw Source toggle.
|
|
105
|
+
* - text → monospace source.
|
|
106
|
+
* Everything keeps a Download fallback; an oversize (metadata-only) artifact has
|
|
107
|
+
* no synced bytes to render, so it says so rather than showing an empty pane.
|
|
108
|
+
*/
|
|
93
109
|
/** A small monospace caption strip above a file's content (path · meta [· action]). */
|
|
94
110
|
function ViewerHead({ path, meta, action }) {
|
|
95
111
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
@@ -780,8 +796,7 @@ function LoopDetailView({ id }) {
|
|
|
780
796
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Loading, {})
|
|
781
797
|
});
|
|
782
798
|
const { loop, summary, runs } = detail;
|
|
783
|
-
const
|
|
784
|
-
const deleting = lifecycle === "deleting";
|
|
799
|
+
const deleting = deriveLoopLifecycle(summary) === "deleting";
|
|
785
800
|
const active = summary.enabled && !deleting;
|
|
786
801
|
const paused = !summary.enabled && !deleting;
|
|
787
802
|
const busy = pending != null;
|
|
@@ -823,74 +838,41 @@ function LoopDetailView({ id }) {
|
|
|
823
838
|
})]
|
|
824
839
|
})]
|
|
825
840
|
});
|
|
826
|
-
const
|
|
841
|
+
const configurationScheduleText = loop.schedule.mode === "cron" ? `${loop.schedule.cron} · ${loop.schedule.timezone} · overlap ${loop.schedule.overlap}` : `continuous · ${loop.schedule.delayMinutes}m after terminal`;
|
|
827
842
|
const model = loop.model || "default";
|
|
828
843
|
const effort = loop.reasoningEffort || "default";
|
|
844
|
+
const overviewRuns = older.length ? mergeRuns(summary.runs, older) : summary.runs;
|
|
845
|
+
const loadMore = async () => {
|
|
846
|
+
const oldest = overviewRuns[0];
|
|
847
|
+
if (!oldest) return 0;
|
|
848
|
+
const more = await loadOlderRuns({ data: {
|
|
849
|
+
loopId: id,
|
|
850
|
+
beforeTs: oldest.ts,
|
|
851
|
+
limit: 16
|
|
852
|
+
} });
|
|
853
|
+
if (more.length) setOlder((current) => mergeRuns(current, more));
|
|
854
|
+
return more.length;
|
|
855
|
+
};
|
|
829
856
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Shell, {
|
|
830
857
|
back,
|
|
831
858
|
children: [
|
|
832
859
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", {
|
|
833
|
-
className: "rounded-card border border-hairline bg-surface px-
|
|
834
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
}),
|
|
850
|
-
summary.queued && lifecycle === "active" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pill, {
|
|
851
|
-
tone: "outline",
|
|
852
|
-
children: "Queued"
|
|
853
|
-
}),
|
|
854
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pill, {
|
|
855
|
-
tone: "outline",
|
|
856
|
-
children: AGENT_LABEL[loop.agent]
|
|
857
|
-
}),
|
|
858
|
-
crossTeam && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pill, {
|
|
859
|
-
tone: "outline",
|
|
860
|
-
children: crossTeam.name
|
|
861
|
-
})
|
|
862
|
-
]
|
|
863
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
864
|
-
className: "mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-meta text-secondary",
|
|
865
|
-
children: [
|
|
866
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
867
|
-
className: "font-mono text-primary",
|
|
868
|
-
children: scheduleText
|
|
869
|
-
}),
|
|
870
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
871
|
-
className: "text-wire",
|
|
872
|
-
children: "·"
|
|
873
|
-
}),
|
|
874
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: ["next ", fmt(summary.nextRun)] }),
|
|
875
|
-
summary.nextRun && summary.enabled && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
876
|
-
className: "text-disabled",
|
|
877
|
-
children: [
|
|
878
|
-
"(",
|
|
879
|
-
until(summary.nextRun),
|
|
880
|
-
")"
|
|
881
|
-
]
|
|
882
|
-
}),
|
|
883
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
884
|
-
className: "text-wire",
|
|
885
|
-
children: "·"
|
|
886
|
-
}),
|
|
887
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
888
|
-
className: "inline-flex items-center gap-1.5",
|
|
889
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: `size-1.5 rounded-full ${online ? "bg-rubik-green" : asleep ? "bg-rubik-yellow" : "bg-disabled"}` }), detail.machine.name || "machine"]
|
|
890
|
-
})
|
|
891
|
-
]
|
|
892
|
-
})]
|
|
893
|
-
})
|
|
860
|
+
className: "rounded-card border border-hairline bg-surface px-[26px] pb-5 pt-[22px] shadow-card",
|
|
861
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoopOverview, {
|
|
862
|
+
loop: summary,
|
|
863
|
+
runs: overviewRuns,
|
|
864
|
+
onLoadMore: loadMore,
|
|
865
|
+
onPickRun: (run) => navigate({
|
|
866
|
+
to: "/loops/$loopId/runs/$runId",
|
|
867
|
+
params: {
|
|
868
|
+
loopId: id,
|
|
869
|
+
runId: run.id
|
|
870
|
+
}
|
|
871
|
+
}),
|
|
872
|
+
extraPill: crossTeam ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pill, {
|
|
873
|
+
tone: "outline",
|
|
874
|
+
children: crossTeam.name
|
|
875
|
+
}) : void 0
|
|
894
876
|
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
895
877
|
className: "mt-5 border-t border-hairline pt-4",
|
|
896
878
|
children: [
|
|
@@ -985,6 +967,27 @@ function LoopDetailView({ id }) {
|
|
|
985
967
|
]
|
|
986
968
|
})]
|
|
987
969
|
}),
|
|
970
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
971
|
+
className: "mt-6 grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(300px,360px)]",
|
|
972
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoopFilesPanel, {
|
|
973
|
+
loopId: id,
|
|
974
|
+
configuredPaths: loop.artifacts,
|
|
975
|
+
running
|
|
976
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RunsSection, {
|
|
977
|
+
loopId: id,
|
|
978
|
+
summary,
|
|
979
|
+
runs,
|
|
980
|
+
older,
|
|
981
|
+
onPickRun: (run) => navigate({
|
|
982
|
+
to: "/loops/$loopId/runs/$runId",
|
|
983
|
+
params: {
|
|
984
|
+
loopId: id,
|
|
985
|
+
runId: run.id
|
|
986
|
+
}
|
|
987
|
+
}),
|
|
988
|
+
onMore: loadMore
|
|
989
|
+
})]
|
|
990
|
+
}),
|
|
988
991
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
|
|
989
992
|
className: "mt-6 min-w-0 rounded-card border border-hairline bg-surface px-6 py-5 shadow-card",
|
|
990
993
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", {
|
|
@@ -997,7 +1000,7 @@ function LoopDetailView({ id }) {
|
|
|
997
1000
|
label: "Schedule",
|
|
998
1001
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", {
|
|
999
1002
|
className: "break-all font-mono",
|
|
1000
|
-
children:
|
|
1003
|
+
children: configurationScheduleText
|
|
1001
1004
|
})
|
|
1002
1005
|
}),
|
|
1003
1006
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Config, {
|
|
@@ -1065,37 +1068,6 @@ function LoopDetailView({ id }) {
|
|
|
1065
1068
|
]
|
|
1066
1069
|
})]
|
|
1067
1070
|
}),
|
|
1068
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
1069
|
-
className: "mt-6 grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(300px,360px)]",
|
|
1070
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoopFilesPanel, {
|
|
1071
|
-
loopId: id,
|
|
1072
|
-
configuredPaths: loop.artifacts,
|
|
1073
|
-
running
|
|
1074
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RunsSection, {
|
|
1075
|
-
loopId: id,
|
|
1076
|
-
summary,
|
|
1077
|
-
runs,
|
|
1078
|
-
older,
|
|
1079
|
-
onPickRun: (run) => navigate({
|
|
1080
|
-
to: "/loops/$loopId/runs/$runId",
|
|
1081
|
-
params: {
|
|
1082
|
-
loopId: id,
|
|
1083
|
-
runId: run.id
|
|
1084
|
-
}
|
|
1085
|
-
}),
|
|
1086
|
-
onMore: async () => {
|
|
1087
|
-
const oldest = (older.length ? mergeRuns(summary.runs, older) : summary.runs)[0];
|
|
1088
|
-
if (!oldest) return 0;
|
|
1089
|
-
const more = await loadOlderRuns({ data: {
|
|
1090
|
-
loopId: id,
|
|
1091
|
-
beforeTs: oldest.ts,
|
|
1092
|
-
limit: 16
|
|
1093
|
-
} });
|
|
1094
|
-
if (more.length) setOlder((current) => mergeRuns(current, more));
|
|
1095
|
-
return more.length;
|
|
1096
|
-
}
|
|
1097
|
-
})]
|
|
1098
|
-
}),
|
|
1099
1071
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(MachinesModal, {
|
|
1100
1072
|
open: machinesOpen,
|
|
1101
1073
|
onClose: () => setMachinesOpen(false)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { c as createFileRoute, s as lazyRouteComponent } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
2
|
-
import {
|
|
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-Bt7huqfS.mjs";
|
|
3
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-B4jXeonc.js
|
|
4
|
+
var $$splitComponentImporter = () => import("./loops._loopId_.runs._runId-BVQKe8xT.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,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 {
|
|
4
|
-
import { r as LoadErrorCard } from "./actionUi-
|
|
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-dMEI4sHj.mjs";
|
|
4
|
+
import { r as LoadErrorCard } from "./actionUi-DD7Cd7Le.mjs";
|
|
5
5
|
import { u as Link } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
6
|
-
import {
|
|
7
|
-
import { t as SignIn } from "./SignIn-
|
|
8
|
-
import { t as Route } from "./loops._loopId_.runs._runId-
|
|
9
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-
|
|
6
|
+
import { E as useSession, T as stopRun, _ as loadOlderRuns, m as getRunDiff, p as getLoopDetail } from "./SocialLinks-Bt7huqfS.mjs";
|
|
7
|
+
import { t as SignIn } from "./SignIn-ffgDY0yf.mjs";
|
|
8
|
+
import { t as Route } from "./loops._loopId_.runs._runId-B4jXeonc.mjs";
|
|
9
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-BVQKe8xT.js
|
|
10
10
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
11
11
|
var import_jsx_runtime = require_jsx_runtime();
|
|
12
12
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { requestScope } from "./auth-
|
|
1
|
+
import { Bt as sha256, C as createMachine$1, Ct as mintDeviceToken, G as getMachine, Jt as updateMachine, T as daemonNeedsUpdate, bt as loopsForMachine, dt as listMachines$1, ft as listMachinesForTeam, j as ensureServer, jt as rememberConnectKey, k as deleteMachine$1, u as MIN_DAEMON_VERSION, xt as machineIdFromToken } from "./boot-sNlIkoLe.mjs";
|
|
2
|
+
import { requestScope } from "./auth-C0zoZCGe.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-ByMsgG12.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
|
package/.output/server/_ssr/{node-sqlite-dialect-rWwVyt2J.mjs → node-sqlite-dialect-CjNineno.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-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/node-sqlite-dialect-
|
|
3
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/node-sqlite-dialect-CjNineno.js
|
|
4
4
|
var NodeSqliteAdapter = class {
|
|
5
5
|
get supportsCreateIfNotExists() {
|
|
6
6
|
return true;
|