@kky42/pievo-server 2.4.2 → 2.4.5
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-LxqWuI5Z.js +1 -0
- package/.output/public/assets/{SignIn-0Tjqs-Ma.js → SignIn-Cf4HOpdF.js} +1 -1
- package/.output/public/assets/{actionUi-DpwGIGpw.js → actionUi-yYVvoOTn.js} +1 -1
- package/.output/public/assets/app-CuZ0I3Mb.css +2 -0
- package/.output/public/assets/index-0VPwUcZS.js +10 -0
- package/.output/public/assets/{invite._token-Btg_0aLp.js → invite._token-B0EKVyrU.js} +1 -1
- package/.output/public/assets/{invite._token-KMD2JAgE.js → invite._token-rUfzvFd9.js} +1 -1
- package/.output/public/assets/lifecycleUi-C0DaC6NM.js +1 -0
- package/.output/public/assets/loops._loopId-BGXJzKUQ.js +67 -0
- package/.output/public/assets/{loops._loopId_.runs._runId-DRCgXaCq.js → loops._loopId_.runs._runId-BL2fgDqc.js} +2 -2
- package/.output/public/assets/{preload-helper-DsxECZIS.js → preload-helper-Bs7oCAsw.js} +1 -1
- package/.output/public/assets/{routes-LDbnnQ3f.js → routes-4N6mrQK_.js} +1 -1
- package/.output/public/assets/routes-BfEn81Yx.js +1 -0
- package/.output/public/assets/{t._teamId-DUena1pV.js → t._teamId-CAUjvMZ6.js} +1 -1
- package/.output/public/assets/t._teamId-CBTSOgMp.js +1 -0
- package/.output/public/assets/{ui-Do4gqMyP.js → ui-s5IMg6RF.js} +1 -1
- package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
- package/.output/server/_ssr/{DashboardView-C2LdV6J0.mjs → DashboardView-DCxO1HHu.mjs} +14 -93
- package/.output/server/_ssr/{MachinesModal-BjkcVjjx.mjs → MachinesModal-CBpDG1jV.mjs} +158 -6
- package/.output/server/_ssr/{SignIn-DEGrvJvb.mjs → SignIn-DwHmFBg2.mjs} +3 -3
- package/.output/server/_ssr/{SocialLinks-Cm4H8pUJ.mjs → SocialLinks-y7JuqJqp.mjs} +4 -3
- package/.output/server/_ssr/{actionUi-DJBWuNwr.mjs → actionUi-DCNmrAjw.mjs} +2 -2
- package/.output/server/_ssr/{artifactFiles-DtpRidFZ.mjs → artifactFiles-1f04rZwG.mjs} +3 -3
- package/.output/server/_ssr/{artifactKind-FBYbgSuf.mjs → artifactKind-CmNkee8I.mjs} +3 -3
- package/.output/server/_ssr/{artifacts-BR3jj0NC.mjs → artifacts-DM3Q8kSN.mjs} +1 -1
- package/.output/server/_ssr/{auth-C0zoZCGe.mjs → auth-C_Xnj8JO.mjs} +9 -9
- package/.output/server/_ssr/{boot-sNlIkoLe.mjs → boot-D_THchbC.mjs} +16 -2
- package/.output/server/_ssr/{boot-CdOO4xOo.mjs → boot-DnVqzrBE.mjs} +1 -1
- package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-DmlZWqO7.mjs → bun-sqlite-dialect-BW9W1_Ps-mjhr2FKB.mjs} +2 -2
- package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-CCNzqZwZ.mjs → d1-sqlite-dialect-BLC8LXE6-57NKRt7v.mjs} +2 -2
- package/.output/server/_ssr/db-BUHGfj7t.mjs +2 -0
- package/.output/server/_ssr/{dist-B3SxDOpW.mjs → dist-xlBlQKer.mjs} +2 -2
- package/.output/server/_ssr/{factory-Dv3Zopis.mjs → factory-CUICkr5b.mjs} +2 -2
- package/.output/server/_ssr/{invite._token-dLKDJKVs.mjs → invite._token-C3ik1Xca.mjs} +6 -6
- package/.output/server/_ssr/{invite._token-CJ6-H-s3.mjs → invite._token-CGzJGIfm.mjs} +2 -2
- package/.output/server/_ssr/{invite._token-l1SjouDz.mjs → invite._token-CSENXkE5.mjs} +4 -4
- package/.output/server/_ssr/{kysely-adapter-nL7WKSgw.mjs → kysely-adapter-8WrOeuSs.mjs} +1 -1
- package/.output/server/_ssr/lifecycleUi-DOr6Af13.mjs +51 -0
- package/.output/server/_ssr/logger-CQdxLIT9.mjs +2 -0
- package/.output/server/_ssr/{loopApi-BKyFB4KM.mjs → loopApi-B7uUJlS3.mjs} +12 -12
- package/.output/server/_ssr/{loopProjection-B8a829ij.mjs → loopProjection-B30cdu8n.mjs} +34 -6
- package/.output/server/_ssr/{loops._loopId-DS16Phmq.mjs → loops._loopId-3GFocAep.mjs} +61 -105
- package/.output/server/_ssr/{loops._loopId_.runs._runId-BEJI6iK5.mjs → loops._loopId_.runs._runId-B2ONGiQe.mjs} +6 -6
- package/.output/server/_ssr/{loops._loopId_.runs._runId-CduETLqH.mjs → loops._loopId_.runs._runId-CeJuOVke.mjs} +3 -3
- package/.output/server/_ssr/{machineFns-ByMsgG12.mjs → machineFns-DslRixAv.mjs} +3 -3
- package/.output/server/_ssr/{node-sqlite-dialect-CjNineno.mjs → node-sqlite-dialect-D74sKAO_.mjs} +2 -2
- package/.output/server/_ssr/{router-CXyrnvx-.mjs → router-CAxR0CJG.mjs} +22 -22
- package/.output/server/_ssr/{routes-Wjexi35W.mjs → routes-BhM8_kf0.mjs} +5 -5
- package/.output/server/_ssr/{routes-DD94baie.mjs → routes-D5GHah06.mjs} +2 -2
- package/.output/server/_ssr/{routes-BulNEUEE.mjs → routes-DgjhPWRJ.mjs} +5 -5
- package/.output/server/_ssr/runDiff-BIYvi0EH.mjs +2 -0
- package/.output/server/_ssr/ssr.mjs +39 -39
- package/.output/server/_ssr/store-B_RNzP1r.mjs +2 -0
- package/.output/server/_ssr/{t._teamId-COuMKQ4r.mjs → t._teamId-259lg_JB.mjs} +5 -5
- package/.output/server/_ssr/{t._teamId-1CreIlPV.mjs → t._teamId-B6d1UVPx.mjs} +5 -5
- package/.output/server/_ssr/{t._teamId-Bd6-zZsy.mjs → t._teamId-CrZ7EkUL.mjs} +2 -2
- package/.output/server/_ssr/{teamFns-j2JKjorZ.mjs → teamFns-BEvVeIHP.mjs} +2 -2
- package/.output/server/_ssr/{teamFns-H438WnZC.mjs → teamFns-C2jguwv8.mjs} +3 -3
- package/.output/server/_ssr/tokens-BzwlaFxs.mjs +2 -0
- package/.output/server/_ssr/{ui-D5KWstlb.mjs → ui-BEPYdOmJ.mjs} +18 -8
- package/.output/server/_tanstack-start-manifest_v-HOdB50PD.mjs +86 -0
- package/.output/server/index.mjs +86 -86
- package/package.json +1 -1
- package/.output/public/assets/MachinesModal-CSbnrUER.js +0 -1
- package/.output/public/assets/app-CaZpuwOS.css +0 -2
- package/.output/public/assets/index-CaS_SmDq.js +0 -10
- package/.output/public/assets/lifecycleUi-C7dwHtbw.js +0 -1
- package/.output/public/assets/loops._loopId-D5usF3DO.js +0 -67
- package/.output/public/assets/routes-CtFgwdgW.js +0 -1
- package/.output/public/assets/t._teamId-D41xcbsF.js +0 -1
- package/.output/server/_ssr/db-CwLD-5w1.mjs +0 -2
- package/.output/server/_ssr/lifecycleUi-Dad3hvhm.mjs +0 -37
- package/.output/server/_ssr/logger-B8m8F1Qu.mjs +0 -2
- package/.output/server/_ssr/runDiff-Ba8Lg1vg.mjs +0 -2
- package/.output/server/_ssr/store-Cujtg2QE.mjs +0 -2
- package/.output/server/_ssr/tokens-DgG_Syq3.mjs +0 -2
- package/.output/server/_tanstack-start-manifest_v-3H7yBKLz.mjs +0 -85
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { o as __toESM } from "../_runtime.mjs";
|
|
2
|
-
import { St as machinePresence, tt as isOutdated } from "./boot-
|
|
2
|
+
import { St as machinePresence, tt as isOutdated } from "./boot-D_THchbC.mjs";
|
|
3
3
|
import { a as DialogClose, c as TooltipPopup, d as TooltipTrigger, f as TooltipRoot, g as require_react, h as require_jsx_runtime, i as DialogPopup, l as TooltipPositioner, n as DialogRoot, o as DialogBackdrop, r as DialogPortal, t as DialogTitle, u as TooltipPortal } from "../_libs/@base-ui/react+[...].mjs";
|
|
4
|
-
import { D as until, O as useHydrated, S as runPulseAnim, a as btn, d as dotColor, f as dotLabel, h as fmt, m as dur, o as btnDanger, p as dotOpacity, s as btnPrimary, t as ErrorBanner, v as inputCls, w as sectionHeadCls, x as rel, y as labelCls } from "./ui-D5KWstlb.mjs";
|
|
5
4
|
import { n as createServerFn } from "./ssr.mjs";
|
|
6
|
-
import { d as getConfig, o as createSsrRpc } from "./SocialLinks-
|
|
7
|
-
import {
|
|
8
|
-
|
|
5
|
+
import { d as getConfig, o as createSsrRpc } from "./SocialLinks-y7JuqJqp.mjs";
|
|
6
|
+
import { C as scheduleText, D as until, O as useHydrated, _ as inputCls, a as btn, b as rel, d as dotLabel, f as dotOpacity, h as fnum, m as fmt, o as btnDanger, p as dur, r as Pill, s as btnPrimary, t as ErrorBanner, u as dotColor, v as labelCls, w as sectionHeadCls, x as runPulseAnim, y as lastRunOf } from "./ui-BEPYdOmJ.mjs";
|
|
7
|
+
import { i as lifecyclePresentation, n as daemonStopSupport } from "./lifecycleUi-DOr6Af13.mjs";
|
|
8
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/MachinesModal-CBpDG1jV.js
|
|
9
9
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
10
10
|
var import_jsx_runtime = require_jsx_runtime();
|
|
11
11
|
/**
|
|
@@ -73,6 +73,66 @@ function mergeRuns(primary, secondary) {
|
|
|
73
73
|
out.sort((a, b) => a.ts < b.ts ? -1 : a.ts > b.ts ? 1 : 0);
|
|
74
74
|
return out;
|
|
75
75
|
}
|
|
76
|
+
function LoopMeta({ schedule, nextRun, enabled, machine, workdir, model, reasoningEffort }) {
|
|
77
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
78
|
+
className: "min-w-0 text-right text-meta text-secondary",
|
|
79
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
80
|
+
className: "flex flex-wrap items-center justify-end gap-x-2.5 gap-y-1",
|
|
81
|
+
children: [
|
|
82
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
83
|
+
title: schedule.mode === "cron" ? schedule.cron : void 0,
|
|
84
|
+
children: scheduleText(schedule)
|
|
85
|
+
}),
|
|
86
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
87
|
+
className: "text-wire",
|
|
88
|
+
children: "·"
|
|
89
|
+
}),
|
|
90
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: ["next ", fmt(nextRun)] }),
|
|
91
|
+
nextRun && enabled && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
92
|
+
className: "text-disabled",
|
|
93
|
+
children: [
|
|
94
|
+
"(",
|
|
95
|
+
until(nextRun),
|
|
96
|
+
")"
|
|
97
|
+
]
|
|
98
|
+
}),
|
|
99
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
100
|
+
className: "text-wire",
|
|
101
|
+
children: "·"
|
|
102
|
+
}),
|
|
103
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
104
|
+
className: "inline-flex items-center gap-1.5",
|
|
105
|
+
title: `${machine.name || "machine"} · ${machine.presence}`,
|
|
106
|
+
children: [
|
|
107
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
108
|
+
className: `size-1.5 rounded-full ${machine.presence === "online" ? "bg-rubik-green" : machine.presence === "asleep" ? "bg-rubik-yellow" : "bg-disabled"}`,
|
|
109
|
+
"aria-hidden": "true"
|
|
110
|
+
}),
|
|
111
|
+
machine.name || "machine",
|
|
112
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
113
|
+
className: "sr-only",
|
|
114
|
+
children: [
|
|
115
|
+
"(",
|
|
116
|
+
machine.presence,
|
|
117
|
+
")"
|
|
118
|
+
]
|
|
119
|
+
})
|
|
120
|
+
]
|
|
121
|
+
})
|
|
122
|
+
]
|
|
123
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
124
|
+
className: "mt-1 truncate",
|
|
125
|
+
title: workdir,
|
|
126
|
+
children: [
|
|
127
|
+
workdir,
|
|
128
|
+
" · Model: ",
|
|
129
|
+
model || "default",
|
|
130
|
+
" · Reasoning: ",
|
|
131
|
+
reasoningEffort || "default"
|
|
132
|
+
]
|
|
133
|
+
})]
|
|
134
|
+
});
|
|
135
|
+
}
|
|
76
136
|
var PAGE = 16;
|
|
77
137
|
var RAD = "rounded-[4px]";
|
|
78
138
|
var SEG = `h-5 w-[18px] shrink-0 ${RAD}`;
|
|
@@ -197,6 +257,98 @@ function Timeline({ loop, runs, total, onLoadMore, onPickRun }) {
|
|
|
197
257
|
]
|
|
198
258
|
});
|
|
199
259
|
}
|
|
260
|
+
var AGENT_LABEL = {
|
|
261
|
+
"claude-code": "Claude Code",
|
|
262
|
+
codex: "Codex"
|
|
263
|
+
};
|
|
264
|
+
var titleCls = "rounded-sm text-left text-[17px] font-semibold tracking-[-0.01em] text-display outline-none";
|
|
265
|
+
/** Shared recent-usage presentation for dashboard cards and loop details. */
|
|
266
|
+
function RecentUsage({ usage }) {
|
|
267
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
268
|
+
className: "ml-auto whitespace-nowrap",
|
|
269
|
+
children: [
|
|
270
|
+
"Last 7 days · ",
|
|
271
|
+
fnum(usage.tokenCount),
|
|
272
|
+
" tokens · ",
|
|
273
|
+
usage.runCount,
|
|
274
|
+
" runs"
|
|
275
|
+
]
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
/** The shared loop summary shown on both the dashboard and loop detail page. */
|
|
279
|
+
function LoopOverview({ loop, runs, onLoadMore, onPickRun, onOpen, extraPill }) {
|
|
280
|
+
const last = lastRunOf({
|
|
281
|
+
...loop,
|
|
282
|
+
runs
|
|
283
|
+
});
|
|
284
|
+
const lifecycle = lifecyclePresentation(loop);
|
|
285
|
+
const hydrated = useHydrated();
|
|
286
|
+
const newestRun = runs.at(-1);
|
|
287
|
+
const latestIncidentRun = newestRun?.reportIncident ? newestRun : void 0;
|
|
288
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
289
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
290
|
+
className: "mb-6 flex flex-wrap items-center gap-3",
|
|
291
|
+
children: [
|
|
292
|
+
onOpen ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
|
|
293
|
+
type: "button",
|
|
294
|
+
onClick: (event) => {
|
|
295
|
+
event.stopPropagation();
|
|
296
|
+
onOpen();
|
|
297
|
+
},
|
|
298
|
+
className: `${titleCls} cursor-pointer focus-visible:ring-2 focus-visible:ring-interactive focus-visible:ring-offset-4 focus-visible:ring-offset-surface`,
|
|
299
|
+
children: loop.name
|
|
300
|
+
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", {
|
|
301
|
+
className: titleCls,
|
|
302
|
+
children: loop.name
|
|
303
|
+
}),
|
|
304
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pill, {
|
|
305
|
+
tone: lifecycle.tone,
|
|
306
|
+
children: lifecycle.label
|
|
307
|
+
}),
|
|
308
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Pill, {
|
|
309
|
+
tone: "outline",
|
|
310
|
+
children: AGENT_LABEL[loop.agent]
|
|
311
|
+
}),
|
|
312
|
+
extraPill,
|
|
313
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
314
|
+
className: "ml-auto min-w-0",
|
|
315
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoopMeta, {
|
|
316
|
+
schedule: loop.schedule,
|
|
317
|
+
nextRun: loop.nextRun,
|
|
318
|
+
enabled: loop.enabled,
|
|
319
|
+
machine: loop.machine,
|
|
320
|
+
workdir: loop.workdir,
|
|
321
|
+
model: loop.model,
|
|
322
|
+
reasoningEffort: loop.reasoningEffort
|
|
323
|
+
})
|
|
324
|
+
})
|
|
325
|
+
]
|
|
326
|
+
}),
|
|
327
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Timeline, {
|
|
328
|
+
loop,
|
|
329
|
+
runs,
|
|
330
|
+
total: loop.runCount,
|
|
331
|
+
onLoadMore,
|
|
332
|
+
onPickRun
|
|
333
|
+
}),
|
|
334
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
335
|
+
className: "mt-[18px] flex items-center gap-2 text-meta text-secondary",
|
|
336
|
+
children: [
|
|
337
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [loop.runCount, " runs"] }),
|
|
338
|
+
last && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
|
|
339
|
+
"· last ",
|
|
340
|
+
dotLabel(last),
|
|
341
|
+
hydrated && ` · ${rel(last.ts)}`
|
|
342
|
+
] }),
|
|
343
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(RecentUsage, { usage: loop.recentUsage })
|
|
344
|
+
]
|
|
345
|
+
}),
|
|
346
|
+
latestIncidentRun?.reportIncident && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
347
|
+
className: "mt-1.5 text-meta text-secondary",
|
|
348
|
+
children: latestIncidentRun.phase === "error" ? "Last run failed · Terminal report rejected" : "Last run telemetry warning · Terminal report rejected"
|
|
349
|
+
})
|
|
350
|
+
] });
|
|
351
|
+
}
|
|
200
352
|
/** Shared modal shell — Base UI Dialog handles focus trap, Esc, and scroll lock. */
|
|
201
353
|
function Modal({ open, onClose, children, wide = false }) {
|
|
202
354
|
const pos = `-translate-y-1/2 max-h-[calc(100dvh-4rem)] ${wide ? "top-1/2 max-w-[62rem]" : "top-[46%] max-w-160"}`;
|
|
@@ -586,4 +738,4 @@ function MachinesModal({ open, onClose, teamId }) {
|
|
|
586
738
|
});
|
|
587
739
|
}
|
|
588
740
|
//#endregion
|
|
589
|
-
export {
|
|
741
|
+
export { ModalSection as a, listMachines as c, ModalHead as i, mergeRuns as l, MachinesModal as n, Timeline as o, Modal as r, daemonConnectCommand as s, LoopOverview as t };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/SignIn-
|
|
2
|
+
import { S as signIn, n as GitHubIcon, r as PievoLogo, t as GITHUB_URL } from "./SocialLinks-y7JuqJqp.mjs";
|
|
3
|
+
import { s as btnPrimary } from "./ui-BEPYdOmJ.mjs";
|
|
4
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/SignIn-DwHmFBg2.js
|
|
5
5
|
var import_jsx_runtime = require_jsx_runtime();
|
|
6
6
|
/**
|
|
7
7
|
* Sign-in CTA — shown by the auth gate when a GitHub OAuth app is configured and
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { o as __toESM } from "../_runtime.mjs";
|
|
2
|
-
import { D as defu,
|
|
2
|
+
import { D as defu, Kt as toKebabCase, L as getBaseURL, at as isSafeUrlScheme, g as capitalizeFirstLetter, x as createFetch } from "./boot-D_THchbC.mjs";
|
|
3
3
|
import { g as require_react, h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
4
4
|
import { n as createServerFn, r as getServerFnById, t as TSS_SERVER_FUNCTION } from "./ssr.mjs";
|
|
5
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/SocialLinks-
|
|
5
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/SocialLinks-y7JuqJqp.js
|
|
6
6
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
7
7
|
var import_jsx_runtime = require_jsx_runtime();
|
|
8
8
|
var createSsrRpc = (functionId) => {
|
|
@@ -57,7 +57,8 @@ var canViewTeam = createServerFn({ method: "GET" }).validator((teamId) => teamId
|
|
|
57
57
|
/** GET — the caller's default dashboard team as an id: the last-used cookie,
|
|
58
58
|
* validated, else the personal team. Backs the `/` → `/t/<id>` redirect. */
|
|
59
59
|
var getDefaultTeam = createServerFn({ method: "GET" }).handler(createSsrRpc("dc0ec955d0d53a150a3e9a4673f98f3509cfb4bd411c512079ae4e94c561b70c"));
|
|
60
|
-
/** GET — the signed-in user's loops as compact summaries (
|
|
60
|
+
/** GET — the signed-in user's loops as compact summaries (most recently run first;
|
|
61
|
+
* never-run loops remain newest-created first).
|
|
61
62
|
* Gate on ⇒ only the given/active team's loops; open mode ⇒ the full shared list.
|
|
62
63
|
* An explicit `teamId` (the `/t/<id>` route) scopes this request independent of
|
|
63
64
|
* the cookie, so different tabs on /t/A and /t/B list different teams at once. */
|
|
@@ -1,7 +1,7 @@
|
|
|
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 { a as btn, o as btnDanger, s as btnPrimary } from "./ui-
|
|
4
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/actionUi-
|
|
3
|
+
import { a as btn, o as btnDanger, s as btnPrimary } from "./ui-BEPYdOmJ.mjs";
|
|
4
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/actionUi-DCNmrAjw.js
|
|
5
5
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
6
6
|
var import_jsx_runtime = require_jsx_runtime();
|
|
7
7
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { F as getArtifactFile, I as getArtifactSync,
|
|
2
|
-
import {
|
|
3
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/artifactFiles-
|
|
1
|
+
import { F as getArtifactFile, I as getArtifactSync, Rt as safeRelPath, lt as listArtifacts } from "./boot-D_THchbC.mjs";
|
|
2
|
+
import { n as toArtifactSummary } from "./loopProjection-B30cdu8n.mjs";
|
|
3
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/artifactFiles-1f04rZwG.js
|
|
4
4
|
/**
|
|
5
5
|
* Server-side reads over a loop's current exact artifacts. Pure helpers
|
|
6
6
|
* (no request/session context) so they're shared by the lazy server fns
|
|
@@ -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/artifactKind-
|
|
4
|
-
var $$splitComponentImporter = () => import("./loops._loopId-
|
|
2
|
+
import { i as authClient, u as getAuthState } from "./SocialLinks-y7JuqJqp.mjs";
|
|
3
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/artifactKind-CmNkee8I.js
|
|
4
|
+
var $$splitComponentImporter = () => import("./loops._loopId-3GFocAep.mjs");
|
|
5
5
|
/**
|
|
6
6
|
* Loop detail page — `/loops/$loopId`: a loop header and action toolbar, the
|
|
7
7
|
* exact artifact Files panel, and the runs timeline. The view owns its own
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Tt as parseArtifactSyncBody, f as SYNC_BODY_CAP, i as BLOB_CAP } from "./boot-
|
|
1
|
+
import { Tt as parseArtifactSyncBody, f as SYNC_BODY_CAP, i as BLOB_CAP } from "./boot-D_THchbC.mjs";
|
|
2
2
|
export { BLOB_CAP, SYNC_BODY_CAP, parseArtifactSyncBody };
|
|
@@ -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, D as defu, E as db, Gt as teamIdForUser, H as getHost, K as getOrigin, L as getBaseURL, Lt as resolveBaseURL, M as ensureTeam, N as env, R as getBooleanEnvVar, a as BetterAuthError, b as createDefu, c as ENV, ct as kAPIErrorHeaderSymbol, et as isDynamicBaseURLConfig, g as capitalizeFirstLetter, h as betterFetch, it as isRequestLike, 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, tn as wildcardMatch, wt as normalizePathname, yt as loginGateEnabled } from "./boot-D_THchbC.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-CUICkr5b.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-C_Xnj8JO.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-mjhr2FKB.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-D74sKAO_.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-57NKRt7v.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-xlBlQKer.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-8WrOeuSs.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-8WrOeuSs.mjs");
|
|
36547
36547
|
return kyselyAdapter(kysely, {
|
|
36548
36548
|
type: databaseType || "sqlite",
|
|
36549
36549
|
debugLogs: opts.database && "debugLogs" in opts.database ? opts.database.debugLogs : false,
|
|
@@ -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-D_THchbC.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) {
|
|
@@ -2814,6 +2814,20 @@ async function countRuns(loopId) {
|
|
|
2814
2814
|
const r = (await db.select({ n: sql`count(*)` }).from(runs).where(eq(runs.loopId, loopId)))[0];
|
|
2815
2815
|
return Number(r?.n ?? 0);
|
|
2816
2816
|
}
|
|
2817
|
+
/** Run count and reported input + output tokens in a bounded recent window. */
|
|
2818
|
+
async function recentLoopUsage(loopId, since) {
|
|
2819
|
+
const row = (await db.select({
|
|
2820
|
+
runCount: sql`count(*)`,
|
|
2821
|
+
tokenCount: sql`coalesce(sum(
|
|
2822
|
+
coalesce((${runs.usage} ->> 'inputTokens')::bigint, 0) +
|
|
2823
|
+
coalesce((${runs.usage} ->> 'outputTokens')::bigint, 0)
|
|
2824
|
+
), 0)`
|
|
2825
|
+
}).from(runs).where(and(eq(runs.loopId, loopId), sql`${runs.ts} >= ${since}`)))[0];
|
|
2826
|
+
return {
|
|
2827
|
+
runCount: Number(row?.runCount ?? 0),
|
|
2828
|
+
tokenCount: Number(row?.tokenCount ?? 0)
|
|
2829
|
+
};
|
|
2830
|
+
}
|
|
2817
2831
|
/** Open runs (pending/running) — used by the timeout-reclaim sweep. */
|
|
2818
2832
|
async function openRuns() {
|
|
2819
2833
|
return db.select().from(runs).where(inArray(runs.phase, ["pending", "running"]));
|
|
@@ -7583,4 +7597,4 @@ async function getCliGateway() {
|
|
|
7583
7597
|
return (await ensureServer()).cliGateway;
|
|
7584
7598
|
}
|
|
7585
7599
|
//#endregion
|
|
7586
|
-
export { isDevelopment as $,
|
|
7600
|
+
export { isDevelopment as $, validPollWireId as $t, deleteTeamCascade as A, reconciliationStatesForRuns as At, getEnvVar as B, setTeamMemberRoleGuarded as Bt, createMachine as C, mintDeviceToken as Ct, defu as D, readByteBody as Dt, db as E, pauseLoop as Et, getArtifactFile as F, requestDeleteLoop as Ft, getMachine as G, teamIdForUser as Gt, getHost as H, startLoop as Ht, getArtifactSync as I, requestRunCancel as It, getRun as J, updateLoop as Jt, getOrigin as K, toKebabCase as Kt, getBaseURL as L, resolveBaseURL as Lt, ensureTeam as M, rememberConnectKey as Mt, env as N, removeTeamMemberGuarded as Nt, deleteInvite as O, readJsonBody as Ot, forceDeleteLoop as P, renameTeam as Pt, hasRunningRun as Q, validPollCurrentRun as Qt, getBooleanEnvVar as R, safeRelPath as Rt, createInvite as S, machinePresence as St, daemonNeedsUpdate as T, parseArtifactSyncBody as Tt, getInvite as U, statusDefinitionsFromLoop as Ut, getGateway as V, sha256 as Vt, getLoop as W, stopLoop as Wt, getTeamMember as X, userByEmail as Xt, getTeam as Y, updateMachine as Yt, hasPendingRun as Z, validOptionalPollString as Zt, computeRunDiff as _, listTeamsForUser as _t, BetterAuthError as a, isSafeUrlScheme as at, createDefu as b, loopsForMachine as bt, ENV as c, kAPIErrorHeaderSymbol as ct, POLL_HTTP_BODY_FIELDS as d, listMachines as dt, validateLoopEdit 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, ensureServer as j, redeemInviteAtomic as jt, deleteMachine as k, recentLoopUsage 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, tryDeleteLoop as qt, BASE_ERROR_CODES as r, isProduction as rt, CODING_AGENTS as s, isTest as st, APIError as t, wildcardMatch as tn, isOutdated as tt, MIN_DAEMON_VERSION as u, listLoops as ut, countLoopsForTeam as v, logger as vt, createTeam as w, normalizePathname as wt, createFetch as x, machineIdFromToken as xt, countRuns as y, loginGateEnabled as yt, getCliGateway as z, scheduleFromLoop 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-D_THchbC.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-C_Xnj8JO.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-mjhr2FKB.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-C_Xnj8JO.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-57NKRt7v.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-CUICkr5b.mjs";
|
|
2
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/dist-xlBlQKer.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, N as env, a as BetterAuthError } from "./boot-
|
|
2
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/factory-
|
|
1
|
+
import { B as getEnvVar, N as env, a as BetterAuthError } from "./boot-D_THchbC.mjs";
|
|
2
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/factory-CUICkr5b.js
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
5
5
|
var __exportAll = (all, no_symbols) => {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { o as __toESM } from "../_runtime.mjs";
|
|
2
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
3
|
import { d as useNavigate } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
5
|
-
import { E as useSession, r as PievoLogo } from "./SocialLinks-
|
|
4
|
+
import { E as useSession, r as PievoLogo } from "./SocialLinks-y7JuqJqp.mjs";
|
|
5
|
+
import { s as btnPrimary } from "./ui-BEPYdOmJ.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-BEvVeIHP.mjs";
|
|
8
|
+
import { t as Route } from "./invite._token-CSENXkE5.mjs";
|
|
9
|
+
import { t as SignIn } from "./SignIn-DwHmFBg2.mjs";
|
|
10
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/invite._token-C3ik1Xca.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,7 +1,7 @@
|
|
|
1
1
|
import { h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
2
|
-
import { r as LoadErrorCard } from "./actionUi-DJBWuNwr.mjs";
|
|
3
2
|
import { f as useRouter } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
4
|
-
|
|
3
|
+
import { r as LoadErrorCard } from "./actionUi-DCNmrAjw.mjs";
|
|
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
|
|
7
7
|
* never bypass the login allowlist; open mode has no invite identity to redeem. */
|
|
@@ -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-
|
|
4
|
-
var $$splitErrorComponentImporter = () => import("./invite._token-
|
|
5
|
-
var $$splitComponentImporter = () => import("./invite._token-
|
|
2
|
+
import { i as authClient, u as getAuthState } from "./SocialLinks-y7JuqJqp.mjs";
|
|
3
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/invite._token-CSENXkE5.js
|
|
4
|
+
var $$splitErrorComponentImporter = () => import("./invite._token-CGzJGIfm.mjs");
|
|
5
|
+
var $$splitComponentImporter = () => import("./invite._token-C3ik1Xca.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,2 +1,2 @@
|
|
|
1
|
-
import { r as kyselyAdapter, t as createKyselyAdapter } from "./auth-
|
|
1
|
+
import { r as kyselyAdapter, t as createKyselyAdapter } from "./auth-C_Xnj8JO.mjs";
|
|
2
2
|
export { createKyselyAdapter, kyselyAdapter };
|
|
@@ -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 { Et as pauseLoop$1, Ft as requestDeleteLoop, G as getMachine, Ht as startLoop$1, It as requestRunCancel, J as getRun, Jt as updateLoop, P as forceDeleteLoop, Q as hasRunningRun, St as machinePresence, W as getLoop, Wt as stopLoop$1, X as getTeamMember, Y as getTeam, _t as listTeamsForUser, dt as listMachines, en as validateLoopEdit, ft as listMachinesForTeam, ht as listRunsBefore, j as ensureServer, qt as tryDeleteLoop, ut as listLoops$1 } from "./boot-D_THchbC.mjs";
|
|
2
|
+
import { a as toRunSummaries, i as toLoopSummaries, r as toLoopDetail, t as sortLoopSummariesByRecentRun } from "./loopProjection-B30cdu8n.mjs";
|
|
3
|
+
import { canAccessLoop, requestScope } from "./auth-C_Xnj8JO.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-B7uUJlS3.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-C_Xnj8JO.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-1f04rZwG.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-1f04rZwG.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-BIYvi0EH.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-CQdxLIT9.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-BzwlaFxs.mjs");
|
|
332
332
|
const { userId, teamId: active } = await requestScope(teamId);
|
|
333
333
|
const owner = userId ?? "shared";
|
|
334
334
|
const token = mintDeviceToken();
|