@kky42/pievo-server 2.4.13 → 2.4.14
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/{SignIn-CDCdDD1a.js → SignIn-CIFwnZtF.js} +1 -1
- package/.output/public/assets/{actionUi-D8m1FDHO.js → actionUi-5PtES4q0.js} +1 -1
- package/.output/public/assets/app-DvHMhs7S.css +2 -0
- package/.output/public/assets/index-CRX2pu0W.js +10 -0
- package/.output/public/assets/loops._loopId-BsuV-Rmf.js +67 -0
- package/.output/public/assets/{loops._loopId_.runs._runId-CksSrEY7.js → loops._loopId_.runs._runId-DpK_fzmZ.js} +2 -2
- package/.output/public/assets/{preload-helper-Zcmr31XG.js → preload-helper-sAZOZb3G.js} +2 -2
- package/.output/public/assets/{routes-79D939J4.js → routes-Dm_3J2aV.js} +1 -1
- package/.output/public/assets/{routes-BYgl3Tmv.js → routes-DxF_s3cD.js} +1 -1
- package/.output/server/_ssr/{MachinesModal-DBIP648Z.mjs → MachinesModal-BaEtzycr.mjs} +10 -4
- package/.output/server/_ssr/{SignIn-Bp3uWaCQ.mjs → SignIn-sHQaBQJC.mjs} +3 -3
- package/.output/server/_ssr/{actionUi-C_WswNb1.mjs → actionUi-5HOCZnom.mjs} +4 -4
- package/.output/server/_ssr/{artifactFiles-BvVmixrs.mjs → artifactFiles-DO43wwXA.mjs} +4 -3
- package/.output/server/_ssr/{artifactKind-DRCbYHZU.mjs → artifactKind-DwDr8IYc.mjs} +3 -3
- package/.output/server/_ssr/artifacts-Cd7Qx3Qp.mjs +2 -0
- package/.output/server/_ssr/{auth-BV0MxVdo.mjs → auth-0AamrwHo.mjs} +9 -9
- package/.output/server/_ssr/{auth-client-RTpMpT4L.mjs → auth-client-lSMb_Idt.mjs} +2 -2
- package/.output/server/_ssr/boot-C472kLwY.mjs +3947 -0
- package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-D9KUBJ-L.mjs → bun-sqlite-dialect-BW9W1_Ps-DLIXocA0.mjs} +2 -2
- package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-CVHRzH1n.mjs → d1-sqlite-dialect-BLC8LXE6-BoFMIPr_.mjs} +2 -2
- package/.output/server/_ssr/db-BzvMQ2kx.mjs +2 -0
- package/.output/server/_ssr/{dist-D7UDVZ5G.mjs → dist-ClzqkwxD.mjs} +2 -2
- package/.output/server/_ssr/{factory-DYFx1fg-.mjs → factory-ixUjZqJn.mjs} +2 -2
- package/.output/server/_ssr/{kysely-adapter-CwdB7yBh.mjs → kysely-adapter-DkZbmKgV.mjs} +1 -1
- package/.output/server/_ssr/logger-DDjsYB2X.mjs +2 -0
- package/.output/server/_ssr/{loopApi-C4nN0msL.mjs → loopApi-DT751TJA.mjs} +11 -10
- package/.output/server/_ssr/{loopProjection-DMSNHux6.mjs → loopProjection-qaD2I48a.mjs} +5 -2
- package/.output/server/_ssr/loopTags-CXx5UdGf.mjs +3356 -0
- package/.output/server/_ssr/{loops._loopId-Q4pRYPip.mjs → loops._loopId-CXgw2Rz1.mjs} +132 -8
- package/.output/server/_ssr/{loops._loopId_.runs._runId-DNXVmCt5.mjs → loops._loopId_.runs._runId-Dk94Z0Jq.mjs} +3 -3
- package/.output/server/_ssr/{loops._loopId_.runs._runId-ty3AhkOi.mjs → loops._loopId_.runs._runId-SASSqOfy.mjs} +5 -5
- package/.output/server/_ssr/{machineFns-CkNms3zA.mjs → machineFns-BSrIgn3f.mjs} +4 -3
- package/.output/server/_ssr/{node-sqlite-dialect-B_g92oFK.mjs → node-sqlite-dialect-BbUqnnYv.mjs} +2 -2
- package/.output/server/_ssr/{router-DCNZ2xLm.mjs → router-BlLlhfJe.mjs} +20 -20
- package/.output/server/_ssr/{routes-BaanDO41.mjs → routes-Cr-9yDEH.mjs} +160 -36
- package/.output/server/_ssr/{routes-B3fulW5I.mjs → routes-DRBS4Zi4.mjs} +2 -2
- package/.output/server/_ssr/{routes-8JSF7bX_.mjs → routes-DTBltabU.mjs} +5 -5
- package/.output/server/_ssr/ssr.mjs +24 -24
- package/.output/server/_ssr/store-vDZ9INSa.mjs +2 -0
- package/.output/server/_ssr/tokens-BHiCElYD.mjs +2 -0
- package/.output/server/{_tanstack-start-manifest_v-DkmxsHDK.mjs → _tanstack-start-manifest_v-DxLIQ0cc.mjs} +10 -10
- package/.output/server/drizzle/0003_add_loop_tags.sql +5 -0
- package/.output/server/drizzle/meta/_journal.json +7 -0
- package/.output/server/index.mjs +48 -48
- package/drizzle/0003_add_loop_tags.sql +5 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/.output/public/assets/app-PPhgN9iN.css +0 -2
- package/.output/public/assets/index-c0XPWXuz.js +0 -10
- package/.output/public/assets/loops._loopId-D7i_BGiE.js +0 -67
- package/.output/server/_ssr/artifacts-CzDJLaa6.mjs +0 -2
- package/.output/server/_ssr/boot-CsLXrLEa.mjs +0 -2
- package/.output/server/_ssr/boot-U-CFI65B.mjs +0 -7193
- package/.output/server/_ssr/db-BTX-xORB.mjs +0 -2
- package/.output/server/_ssr/logger-CwiKSMp6.mjs +0 -2
- package/.output/server/_ssr/runDiff-D7CxAgYL.mjs +0 -2
- package/.output/server/_ssr/store-DSNbXxqz.mjs +0 -2
- package/.output/server/_ssr/tokens-DzUv7CCp.mjs +0 -2
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { o as __toESM } from "../_runtime.mjs";
|
|
2
|
-
import { s as CODING_AGENTS } from "./
|
|
2
|
+
import { Nn as validateLoopTags, s as CODING_AGENTS } from "./loopTags-CXx5UdGf.mjs";
|
|
3
3
|
import { g as require_react, h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
4
4
|
import { d as useNavigate, u as Link } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
5
|
-
import { E as stopLoop, O as useSession, S as runLoop, T as startLoop, b as patchLoop, c as deleteLoop, d as getArtifacts, i as OpenModeWarning, l as deriveLoopLifecycle, m as getLoopDetail, s as daemonStopSupport, t as DAEMON_UPGRADE_REQUIRED, u as getArtifact, v as loadOlderRuns, x as pauseLoop } from "./auth-client-
|
|
6
|
-
import {
|
|
7
|
-
import { a as Timeline, c as mergeRuns, n as MachinesModal, t as LoopOverview } from "./MachinesModal-
|
|
8
|
-
import { n as artifactKind, t as Route } from "./artifactKind-
|
|
9
|
-
import { t as SignIn } from "./SignIn-
|
|
5
|
+
import { E as stopLoop, O as useSession, S as runLoop, T as startLoop, b as patchLoop, c as deleteLoop, d as getArtifacts, i as OpenModeWarning, l as deriveLoopLifecycle, m as getLoopDetail, s as daemonStopSupport, t as DAEMON_UPGRADE_REQUIRED, u as getArtifact, v as loadOlderRuns, x as pauseLoop } from "./auth-client-lSMb_Idt.mjs";
|
|
6
|
+
import { A as tsShort, E as runPulseStyle, M as useFlash, O as sectionHeadCls, S as labelCls, _ as fmt, a as Loading, b as humanBytes, c as btn, d as btnQuiet, g as dur, i as LoadErrorCard, k as selectCls, l as btnDanger, m as dotLabel, n as ErrorBanner, p as dotColor, r as FlashLine, t as ConfirmBar, u as btnPrimary, w as rel, x as inputCls, y as focusRing } from "./actionUi-5HOCZnom.mjs";
|
|
7
|
+
import { a as Timeline, c as mergeRuns, n as MachinesModal, t as LoopOverview } from "./MachinesModal-BaEtzycr.mjs";
|
|
8
|
+
import { n as artifactKind, t as Route } from "./artifactKind-DwDr8IYc.mjs";
|
|
9
|
+
import { t as SignIn } from "./SignIn-sHQaBQJC.mjs";
|
|
10
10
|
import { t as purify } from "../_libs/dompurify.mjs";
|
|
11
11
|
import { t as g } from "../_libs/marked.mjs";
|
|
12
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId-
|
|
12
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId-CXgw2Rz1.js
|
|
13
13
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
14
14
|
var import_jsx_runtime = require_jsx_runtime();
|
|
15
15
|
/** Download URL for one artifact. Each path segment is encoded independently so
|
|
@@ -368,6 +368,8 @@ function initState(initial) {
|
|
|
368
368
|
const schedule = initial?.schedule;
|
|
369
369
|
return {
|
|
370
370
|
name: initial?.name ?? "",
|
|
371
|
+
tags: initial?.tags ?? [],
|
|
372
|
+
tagDraft: "",
|
|
371
373
|
mode: schedule?.mode ?? "cron",
|
|
372
374
|
cron: schedule?.mode === "cron" ? schedule.cron : "0 */3 * * *",
|
|
373
375
|
timezone: schedule?.mode === "cron" ? schedule.timezone : Intl.DateTimeFormat().resolvedOptions().timeZone || "UTC",
|
|
@@ -447,10 +449,37 @@ function TextArea({ label, value, onChange, rows = 4, mono, hint }) {
|
|
|
447
449
|
var LoopForm = (0, import_react.forwardRef)(function LoopForm({ initial }, ref) {
|
|
448
450
|
const [form, setForm] = (0, import_react.useState)(() => initState(initial));
|
|
449
451
|
const [error, setError] = (0, import_react.useState)(null);
|
|
452
|
+
const [tagError, setTagError] = (0, import_react.useState)(null);
|
|
453
|
+
const tagsLabelId = (0, import_react.useId)();
|
|
454
|
+
const tagsHintId = (0, import_react.useId)();
|
|
455
|
+
const tagsErrorId = (0, import_react.useId)();
|
|
456
|
+
const tagGroupRef = (0, import_react.useRef)(null);
|
|
457
|
+
const tagInputRef = (0, import_react.useRef)(null);
|
|
450
458
|
const set = (key, value) => setForm((current) => ({
|
|
451
459
|
...current,
|
|
452
460
|
[key]: value
|
|
453
461
|
}));
|
|
462
|
+
const commitTagDraft = () => {
|
|
463
|
+
const additions = form.tagDraft.trim() ? [form.tagDraft] : [];
|
|
464
|
+
if (!additions.length) {
|
|
465
|
+
set("tagDraft", "");
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
468
|
+
const result = validateLoopTags([...form.tags, ...additions]);
|
|
469
|
+
if (!result.ok) {
|
|
470
|
+
setTagError(result.detail);
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
setForm((current) => ({
|
|
474
|
+
...current,
|
|
475
|
+
tags: result.value,
|
|
476
|
+
tagDraft: ""
|
|
477
|
+
}));
|
|
478
|
+
setTagError(null);
|
|
479
|
+
if (result.value.length === 4) requestAnimationFrame(() => {
|
|
480
|
+
if (document.activeElement === document.body) tagGroupRef.current?.focus();
|
|
481
|
+
});
|
|
482
|
+
};
|
|
454
483
|
(0, import_react.useImperativeHandle)(ref, () => ({ read() {
|
|
455
484
|
const missing = [
|
|
456
485
|
["Name", form.name],
|
|
@@ -464,6 +493,12 @@ var LoopForm = (0, import_react.forwardRef)(function LoopForm({ initial }, ref)
|
|
|
464
493
|
setError(`${missing[0]} is required.`);
|
|
465
494
|
return null;
|
|
466
495
|
}
|
|
496
|
+
const tagResult = validateLoopTags([...form.tags, ...form.tagDraft.trim() ? [form.tagDraft] : []]);
|
|
497
|
+
if (!tagResult.ok) {
|
|
498
|
+
setTagError(tagResult.detail);
|
|
499
|
+
setError(null);
|
|
500
|
+
return null;
|
|
501
|
+
}
|
|
467
502
|
const delayMinutes = Number(form.delayMinutes);
|
|
468
503
|
if (form.mode === "continuous" && (!Number.isInteger(delayMinutes) || delayMinutes < 1)) {
|
|
469
504
|
setError("Continuous delay must be an integer of at least 1 minute.");
|
|
@@ -479,8 +514,10 @@ var LoopForm = (0, import_react.forwardRef)(function LoopForm({ initial }, ref)
|
|
|
479
514
|
delayMinutes
|
|
480
515
|
};
|
|
481
516
|
setError(null);
|
|
517
|
+
setTagError(null);
|
|
482
518
|
return {
|
|
483
519
|
name: form.name.trim(),
|
|
520
|
+
tags: tagResult.value,
|
|
484
521
|
schedule,
|
|
485
522
|
workdir: form.workdir.trim(),
|
|
486
523
|
agent: form.agent,
|
|
@@ -506,6 +543,79 @@ var LoopForm = (0, import_react.forwardRef)(function LoopForm({ initial }, ref)
|
|
|
506
543
|
value: form.name,
|
|
507
544
|
onChange: (value) => set("name", value)
|
|
508
545
|
}),
|
|
546
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
547
|
+
className: "min-w-0",
|
|
548
|
+
children: [
|
|
549
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
550
|
+
id: tagsLabelId,
|
|
551
|
+
className: labelCls,
|
|
552
|
+
children: "Tags"
|
|
553
|
+
}),
|
|
554
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
555
|
+
ref: tagGroupRef,
|
|
556
|
+
role: "group",
|
|
557
|
+
tabIndex: -1,
|
|
558
|
+
"aria-labelledby": tagsLabelId,
|
|
559
|
+
"aria-describedby": `${tagsHintId}${tagError ? ` ${tagsErrorId}` : ""}`,
|
|
560
|
+
"aria-invalid": tagError ? "true" : void 0,
|
|
561
|
+
className: "flex min-h-10 flex-wrap items-center gap-1.5 rounded-control border border-wire bg-surface px-2.5 py-1.5 outline-none transition-shadow focus-within:border-transparent focus-within:shadow-focus",
|
|
562
|
+
children: [form.tags.map((tag) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
563
|
+
className: "inline-flex h-6 max-w-full items-center gap-1 rounded-full bg-raised px-2.5 text-caption font-medium text-secondary",
|
|
564
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
565
|
+
className: "max-w-52 truncate",
|
|
566
|
+
title: tag,
|
|
567
|
+
children: tag
|
|
568
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
|
|
569
|
+
type: "button",
|
|
570
|
+
"aria-label": `Remove tag ${tag}`,
|
|
571
|
+
onClick: () => {
|
|
572
|
+
set("tags", form.tags.filter((value) => value !== tag));
|
|
573
|
+
setTagError(null);
|
|
574
|
+
requestAnimationFrame(() => (tagInputRef.current ?? tagGroupRef.current)?.focus());
|
|
575
|
+
},
|
|
576
|
+
className: `-mr-1 inline-flex size-6 shrink-0 cursor-pointer items-center justify-center rounded-full text-disabled transition-colors hover:bg-surface hover:text-primary ${focusRing}`,
|
|
577
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
578
|
+
"aria-hidden": true,
|
|
579
|
+
children: "×"
|
|
580
|
+
})
|
|
581
|
+
})]
|
|
582
|
+
}, tag)), form.tags.length < 4 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", {
|
|
583
|
+
ref: tagInputRef,
|
|
584
|
+
"aria-label": "Add tag",
|
|
585
|
+
value: form.tagDraft,
|
|
586
|
+
placeholder: form.tags.length ? "Add another…" : "Add a tag…",
|
|
587
|
+
onChange: (event) => {
|
|
588
|
+
set("tagDraft", event.target.value);
|
|
589
|
+
setTagError(null);
|
|
590
|
+
},
|
|
591
|
+
onKeyDown: (event) => {
|
|
592
|
+
if (event.nativeEvent.isComposing) return;
|
|
593
|
+
if (event.key === "Enter") {
|
|
594
|
+
event.preventDefault();
|
|
595
|
+
commitTagDraft();
|
|
596
|
+
} else if (event.key === "Backspace" && !form.tagDraft && form.tags.length) set("tags", form.tags.slice(0, -1));
|
|
597
|
+
},
|
|
598
|
+
onBlur: commitTagDraft,
|
|
599
|
+
className: "h-6 min-w-28 flex-1 bg-transparent px-1 text-sm text-primary outline-none placeholder:text-disabled"
|
|
600
|
+
})]
|
|
601
|
+
}),
|
|
602
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
603
|
+
id: tagsHintId,
|
|
604
|
+
className: hintCls,
|
|
605
|
+
children: [
|
|
606
|
+
"Up to ",
|
|
607
|
+
4,
|
|
608
|
+
". Press Enter to add."
|
|
609
|
+
]
|
|
610
|
+
}),
|
|
611
|
+
tagError && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
612
|
+
id: tagsErrorId,
|
|
613
|
+
role: "alert",
|
|
614
|
+
className: "mt-1 text-caption text-accent",
|
|
615
|
+
children: tagError
|
|
616
|
+
})
|
|
617
|
+
]
|
|
618
|
+
}),
|
|
509
619
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
510
620
|
className: "min-w-0",
|
|
511
621
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", {
|
|
@@ -971,6 +1081,20 @@ function LoopDetailView({ id }) {
|
|
|
971
1081
|
children: configurationScheduleText
|
|
972
1082
|
})
|
|
973
1083
|
}),
|
|
1084
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Config, {
|
|
1085
|
+
label: "Tags",
|
|
1086
|
+
children: loop.tags.length ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
1087
|
+
className: "flex flex-wrap gap-1.5",
|
|
1088
|
+
children: loop.tags.map((tag) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
1089
|
+
className: "inline-flex h-[22px] max-w-52 items-center truncate rounded-full bg-raised px-2.5 text-caption font-medium text-secondary",
|
|
1090
|
+
title: tag,
|
|
1091
|
+
children: tag
|
|
1092
|
+
}, tag))
|
|
1093
|
+
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
1094
|
+
className: "text-disabled",
|
|
1095
|
+
children: "None"
|
|
1096
|
+
})
|
|
1097
|
+
}),
|
|
974
1098
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Config, {
|
|
975
1099
|
label: "Working directory",
|
|
976
1100
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", {
|
|
@@ -1082,7 +1206,7 @@ function EditHead({ name, onBack }) {
|
|
|
1082
1206
|
}),
|
|
1083
1207
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
|
|
1084
1208
|
className: "mt-1.5 text-meta text-secondary",
|
|
1085
|
-
children: "Edit
|
|
1209
|
+
children: "Edit tags, schedule, execution settings, prompt, status definitions, and exact artifact paths."
|
|
1086
1210
|
})
|
|
1087
1211
|
] });
|
|
1088
1212
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { c as createFileRoute, s as lazyRouteComponent } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
2
|
-
import { f as getAuthState } from "./auth-client-
|
|
3
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-
|
|
4
|
-
var $$splitComponentImporter = () => import("./loops._loopId_.runs._runId-
|
|
2
|
+
import { f as getAuthState } from "./auth-client-lSMb_Idt.mjs";
|
|
3
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-Dk94Z0Jq.js
|
|
4
|
+
var $$splitComponentImporter = () => import("./loops._loopId_.runs._runId-SASSqOfy.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,11 +1,11 @@
|
|
|
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
3
|
import { u as Link } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
4
|
-
import { D as stopRun, O as useSession, h as getRunDiff, i as OpenModeWarning, m as getLoopDetail, v as loadOlderRuns } from "./auth-client-
|
|
5
|
-
import {
|
|
6
|
-
import { t as SignIn } from "./SignIn-
|
|
7
|
-
import { t as Route } from "./loops._loopId_.runs._runId-
|
|
8
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-
|
|
4
|
+
import { D as stopRun, O as useSession, h as getRunDiff, i as OpenModeWarning, m as getLoopDetail, v as loadOlderRuns } from "./auth-client-lSMb_Idt.mjs";
|
|
5
|
+
import { E as runPulseStyle, O as sectionHeadCls, _ as fmt, a as Loading, b as humanBytes, c as btn, g as dur, i as LoadErrorCard, l as btnDanger, o as Pill, s as StatusPill, v as fnum } from "./actionUi-5HOCZnom.mjs";
|
|
6
|
+
import { t as SignIn } from "./SignIn-sHQaBQJC.mjs";
|
|
7
|
+
import { t as Route } from "./loops._loopId_.runs._runId-Dk94Z0Jq.mjs";
|
|
8
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/loops._loopId_.runs._runId-SASSqOfy.js
|
|
9
9
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
10
10
|
var import_jsx_runtime = require_jsx_runtime();
|
|
11
11
|
/**
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Et as listMachinesForUser, G as forceDeleteMachine, Lt as mintDeviceToken, Nt as loopsForMachine, Pt as machineIdFromToken, Sn as sha256, Tt as listMachines$1, et as getMachine, j as createMachine$1, jn as updateMachine } from "./loopTags-CXx5UdGf.mjs";
|
|
2
|
+
import { a as daemonNeedsUpdate, n as MIN_DAEMON_VERSION, o as ensureServer } from "./boot-C472kLwY.mjs";
|
|
3
|
+
import { requestScope } from "./auth-0AamrwHo.mjs";
|
|
3
4
|
import { n as createServerFn } from "./ssr.mjs";
|
|
4
5
|
import { t as createServerRpc } from "./createServerRpc-BD8Xn_0_.mjs";
|
|
5
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/machineFns-
|
|
6
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/machineFns-BSrIgn3f.js
|
|
6
7
|
/** Open mode sees every machine; auth mode sees only the signed-in owner's rows. */
|
|
7
8
|
function machineInScope(machine, scope) {
|
|
8
9
|
return !scope.enforce || !!scope.userId && machine.userId === scope.userId;
|
package/.output/server/_ssr/{node-sqlite-dialect-B_g92oFK.mjs → node-sqlite-dialect-BbUqnnYv.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-0AamrwHo.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-BbUqnnYv.js
|
|
4
4
|
var NodeSqliteAdapter = class {
|
|
5
5
|
get supportsCreateIfNotExists() {
|
|
6
6
|
return true;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { j as sql } from "../_libs/drizzle-orm+postgres.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { c as readByteBody, f as validOptionalPollString, l as readJsonBody, m as validPollWireId, o as ensureServer, p as validPollCurrentRun, r as POLL_HTTP_BODY_FIELDS, t as MACHINE_BODY_CAP } from "./boot-C472kLwY.mjs";
|
|
3
3
|
import { h as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
4
4
|
import { c as createFileRoute, i as HeadContent, l as createRootRoute, o as createRouter, r as Scripts } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
5
|
-
import { r as imageMime, t as Route$12 } from "./artifactKind-
|
|
6
|
-
import { t as Route$13 } from "./loops._loopId_.runs._runId-
|
|
7
|
-
import { n as Route$14 } from "./routes-
|
|
8
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/router-
|
|
5
|
+
import { r as imageMime, t as Route$12 } from "./artifactKind-DwDr8IYc.mjs";
|
|
6
|
+
import { t as Route$13 } from "./loops._loopId_.runs._runId-Dk94Z0Jq.mjs";
|
|
7
|
+
import { n as Route$14 } from "./routes-Cr-9yDEH.mjs";
|
|
8
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/router-BlLlhfJe.js
|
|
9
9
|
var import_jsx_runtime = require_jsx_runtime();
|
|
10
|
-
var app_default = "/assets/app-
|
|
10
|
+
var app_default = "/assets/app-DvHMhs7S.css";
|
|
11
11
|
var Route$11 = createRootRoute({
|
|
12
12
|
head: () => ({
|
|
13
13
|
meta: [
|
|
@@ -167,7 +167,7 @@ var Route$10 = createFileRoute("/machine/report")({ server: { handlers: { POST:
|
|
|
167
167
|
const parsed = await readJsonBody(request, MACHINE_BODY_CAP);
|
|
168
168
|
if (parsed.kind === "too-large") return Response.json({ error: "body too large" }, { status: 413 });
|
|
169
169
|
const body = parsed.kind === "ok" && parsed.body && typeof parsed.body === "object" ? parsed.body : {};
|
|
170
|
-
const { getGateway } = await import("./boot-
|
|
170
|
+
const { getGateway } = await import("./boot-C472kLwY.mjs").then((n) => n.i).then((n) => n.t);
|
|
171
171
|
const r = await (await getGateway()).report(token, body);
|
|
172
172
|
return Response.json(r.body, { status: r.status });
|
|
173
173
|
} } } });
|
|
@@ -207,13 +207,13 @@ var Route$7 = createFileRoute("/api/machine/sync")({ server: { handlers: { POST:
|
|
|
207
207
|
const auth = request.headers.get("authorization") ?? "";
|
|
208
208
|
const token = auth.startsWith("Bearer ") ? auth.slice(7) : "";
|
|
209
209
|
if (!token) return Response.json({ error: "missing device token" }, { status: 401 });
|
|
210
|
-
const { SYNC_BODY_CAP, parseArtifactSyncBody } = await import("./artifacts-
|
|
210
|
+
const { SYNC_BODY_CAP, parseArtifactSyncBody } = await import("./artifacts-Cd7Qx3Qp.mjs");
|
|
211
211
|
const parsed = await readJsonBody(request, SYNC_BODY_CAP);
|
|
212
212
|
if (parsed.kind === "too-large") return Response.json({ error: "sync body too large" }, { status: 413 });
|
|
213
213
|
if (parsed.kind === "invalid") return Response.json({ error: "invalid JSON" }, { status: 400 });
|
|
214
214
|
const body = parseArtifactSyncBody(parsed.body);
|
|
215
215
|
if (!body) return Response.json({ error: "invalid sync body" }, { status: 400 });
|
|
216
|
-
const { getArtifactSync } = await import("./boot-
|
|
216
|
+
const { getArtifactSync } = await import("./boot-C472kLwY.mjs").then((n) => n.i).then((n) => n.t);
|
|
217
217
|
const r = await (await getArtifactSync()).sync(token, body);
|
|
218
218
|
return Response.json(r.body, { status: r.status });
|
|
219
219
|
} } } });
|
|
@@ -223,7 +223,7 @@ var Route$6 = createFileRoute("/api/machine/status")({ server: { handlers: { GET
|
|
|
223
223
|
const limited = machineRouteLimit(request, token || void 0);
|
|
224
224
|
if (limited) return limited;
|
|
225
225
|
if (!token) return Response.json({ error: "missing device token" }, { status: 401 });
|
|
226
|
-
const { getGateway } = await import("./boot-
|
|
226
|
+
const { getGateway } = await import("./boot-C472kLwY.mjs").then((n) => n.i).then((n) => n.t);
|
|
227
227
|
const r = await (await getGateway()).status(token);
|
|
228
228
|
return Response.json(r.body, { status: r.status });
|
|
229
229
|
} } } });
|
|
@@ -265,7 +265,7 @@ var Route$5 = createFileRoute("/api/machine/poll")({ server: { handlers: { POST:
|
|
|
265
265
|
if (parsed.kind !== "ok") return Response.json({ error: "invalid JSON body" }, { status: 400 });
|
|
266
266
|
const body = parsePollBody(parsed.body);
|
|
267
267
|
if (!body) return Response.json({ error: "unknown or invalid poll body fields" }, { status: 400 });
|
|
268
|
-
const { getGateway } = await import("./boot-
|
|
268
|
+
const { getGateway } = await import("./boot-C472kLwY.mjs").then((n) => n.i).then((n) => n.t);
|
|
269
269
|
const r = await (await getGateway()).pollV4Wait(token, gatewayPollRequest(body));
|
|
270
270
|
return Response.json(r.body, { status: r.status });
|
|
271
271
|
} } } });
|
|
@@ -292,7 +292,7 @@ var Route$4 = createFileRoute("/api/machine/cli")({ server: { handlers: { POST:
|
|
|
292
292
|
if (parsed.kind === "too-large") return Response.json({ error: "body too large" }, { status: 413 });
|
|
293
293
|
const body = parsed.kind === "ok" ? parseCliBody(parsed.body) : null;
|
|
294
294
|
if (!body) return Response.json({ error: "body must be exactly {argv:string[]}" }, { status: 400 });
|
|
295
|
-
const { getCliGateway } = await import("./boot-
|
|
295
|
+
const { getCliGateway } = await import("./boot-C472kLwY.mjs").then((n) => n.i).then((n) => n.t);
|
|
296
296
|
const r = await (await getCliGateway()).cli(token, body.argv);
|
|
297
297
|
return Response.json(r.body, { status: r.status });
|
|
298
298
|
} } } });
|
|
@@ -321,7 +321,7 @@ var Route$4 = createFileRoute("/api/machine/cli")({ server: { handlers: { POST:
|
|
|
321
321
|
var PROBE_TIMEOUT_MS = 5e3;
|
|
322
322
|
var Route$3 = createFileRoute("/api/health/db")({ server: { handlers: { GET: async () => {
|
|
323
323
|
try {
|
|
324
|
-
const { db } = await import("./db-
|
|
324
|
+
const { db } = await import("./db-BzvMQ2kx.mjs");
|
|
325
325
|
const ping = db.execute(sql`select 1`);
|
|
326
326
|
const timeout = new Promise((_, reject) => {
|
|
327
327
|
setTimeout(() => reject(/* @__PURE__ */ new Error(`db ping timed out after ${PROBE_TIMEOUT_MS}ms`)), PROBE_TIMEOUT_MS).unref?.();
|
|
@@ -340,8 +340,8 @@ var Route$3 = createFileRoute("/api/health/db")({ server: { handlers: { GET: asy
|
|
|
340
340
|
}
|
|
341
341
|
} } } });
|
|
342
342
|
var Route$2 = createFileRoute("/api/auth/$")({ server: { handlers: {
|
|
343
|
-
GET: async ({ request }) => (await import("./auth-
|
|
344
|
-
POST: async ({ request }) => (await import("./auth-
|
|
343
|
+
GET: async ({ request }) => (await import("./auth-0AamrwHo.mjs")).auth.handler(request),
|
|
344
|
+
POST: async ({ request }) => (await import("./auth-0AamrwHo.mjs")).auth.handler(request)
|
|
345
345
|
} } });
|
|
346
346
|
/**
|
|
347
347
|
* `decodeURIComponent` that returns null on malformed percent-encoding instead
|
|
@@ -375,12 +375,12 @@ var Route$1 = createFileRoute("/api/machine/blob/$hash")({ server: { handlers: {
|
|
|
375
375
|
if (!token) return Response.json({ error: "missing device token" }, { status: 401 });
|
|
376
376
|
const hash = safeDecode(new URL(request.url).pathname.split("/").pop() ?? "");
|
|
377
377
|
if (hash === null) return Response.json({ error: "bad hash" }, { status: 400 });
|
|
378
|
-
const { BLOB_CAP } = await import("./artifacts-
|
|
378
|
+
const { BLOB_CAP } = await import("./artifacts-Cd7Qx3Qp.mjs");
|
|
379
379
|
const body = await readByteBody(request, BLOB_CAP);
|
|
380
380
|
if (body.kind === "too-large") return Response.json({ error: "blob exceeds size cap" }, { status: 413 });
|
|
381
381
|
if (body.kind === "invalid") return Response.json({ error: "could not read blob body" }, { status: 400 });
|
|
382
382
|
const buf = Buffer.from(body.bytes.buffer, body.bytes.byteOffset, body.bytes.byteLength);
|
|
383
|
-
const { getArtifactSync } = await import("./boot-
|
|
383
|
+
const { getArtifactSync } = await import("./boot-C472kLwY.mjs").then((n) => n.i).then((n) => n.t);
|
|
384
384
|
const r = await (await getArtifactSync()).putBlob(token, hash, buf);
|
|
385
385
|
return Response.json(r.body, { status: r.status });
|
|
386
386
|
} } } });
|
|
@@ -415,11 +415,11 @@ var Route = createFileRoute("/api/artifact/$loopId/$")({ server: { handlers: { G
|
|
|
415
415
|
const segments = after.slice(slash + 1).split("/").map((s) => safeDecode(s));
|
|
416
416
|
if (segments.some((s) => s === null)) return Response.json({ error: "bad path" }, { status: 400 });
|
|
417
417
|
const relPath = segments.join("/");
|
|
418
|
-
const loop = await (await import("./store-
|
|
418
|
+
const loop = await (await import("./store-vDZ9INSa.mjs")).getLoop(loopId);
|
|
419
419
|
if (!loop) return Response.json({ error: "not found" }, { status: 404 });
|
|
420
|
-
const { requestScope, canAccessLoop } = await import("./auth-
|
|
420
|
+
const { requestScope, canAccessLoop } = await import("./auth-0AamrwHo.mjs");
|
|
421
421
|
if (!canAccessLoop(loop.userId, await requestScope())) return Response.json({ error: "not found" }, { status: 404 });
|
|
422
|
-
const { readLoopArtifactBytes } = await import("./artifactFiles-
|
|
422
|
+
const { readLoopArtifactBytes } = await import("./artifactFiles-DO43wwXA.mjs");
|
|
423
423
|
const r = await readLoopArtifactBytes(loopId, relPath);
|
|
424
424
|
if (r.status !== 200 || !r.bytes) return Response.json({ error: "not found" }, { status: r.status });
|
|
425
425
|
const filename = (r.filename || "file").replace(/["\\\r\n]/g, "_");
|