@kky42/pievo-server 2.3.0 → 2.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.output/nitro.json +1 -1
- package/.output/public/assets/MachinesModal-CSbnrUER.js +1 -0
- package/.output/public/assets/SignIn-0Tjqs-Ma.js +1 -0
- package/.output/public/assets/actionUi-DpwGIGpw.js +1 -0
- package/.output/public/assets/app-CaZpuwOS.css +2 -0
- package/.output/public/assets/index-CaS_SmDq.js +10 -0
- package/.output/public/assets/invite._token-Btg_0aLp.js +1 -0
- package/.output/public/assets/invite._token-KMD2JAgE.js +1 -0
- package/.output/public/assets/lifecycleUi-C7dwHtbw.js +1 -0
- package/.output/public/assets/loops._loopId-D5usF3DO.js +67 -0
- package/.output/public/assets/loops._loopId_.runs._runId-DRCgXaCq.js +3 -0
- package/.output/public/assets/preload-helper-DsxECZIS.js +5 -0
- package/.output/public/assets/routes-CtFgwdgW.js +1 -0
- package/.output/public/assets/routes-LDbnnQ3f.js +1 -0
- package/.output/public/assets/t._teamId-D41xcbsF.js +1 -0
- package/.output/public/assets/t._teamId-DUena1pV.js +1 -0
- package/.output/public/assets/ui-Do4gqMyP.js +1 -0
- package/.output/server/_libs/@base-ui/react+[...].mjs +4130 -4130
- package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
- package/.output/server/_libs/drizzle-orm+postgres.mjs +28 -1
- package/.output/server/_ssr/DashboardView-C2LdV6J0.mjs +914 -0
- package/.output/server/_ssr/{notifyFns-DuPR1zd7.mjs → MachinesModal-BjkcVjjx.mjs} +55 -35
- package/.output/server/_ssr/{SignIn-RmpWm9uy.mjs → SignIn-DEGrvJvb.mjs} +10 -24
- package/.output/server/_ssr/SocialLinks-Cm4H8pUJ.mjs +1044 -0
- package/.output/server/_ssr/{actionUi-BN55TNYE.mjs → actionUi-DJBWuNwr.mjs} +3 -3
- package/.output/server/_ssr/{artifactFiles-BCaIIrrT.mjs → artifactFiles-DtpRidFZ.mjs} +7 -8
- package/.output/server/_ssr/{artifactKind-BW0isV8L.mjs → artifactKind-FBYbgSuf.mjs} +27 -2
- package/.output/server/_ssr/artifacts-BR3jj0NC.mjs +2 -0
- package/.output/server/_ssr/{auth-30Z4lV1w.mjs → auth-C0zoZCGe.mjs} +16 -19
- package/.output/server/_ssr/boot-CdOO4xOo.mjs +2 -0
- package/.output/server/_ssr/{boot-3BNKujyp.mjs → boot-sNlIkoLe.mjs} +1331 -3927
- package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-_7tfuNRi.mjs → bun-sqlite-dialect-BW9W1_Ps-DmlZWqO7.mjs} +2 -2
- package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-ucDUbeBk.mjs → d1-sqlite-dialect-BLC8LXE6-CCNzqZwZ.mjs} +2 -2
- package/.output/server/_ssr/db-CwLD-5w1.mjs +2 -0
- package/.output/server/_ssr/{dist-Cd6nlLlO.mjs → dist-B3SxDOpW.mjs} +2 -2
- package/.output/server/_ssr/{factory-CWWwV7XZ.mjs → factory-Dv3Zopis.mjs} +2 -2
- package/.output/server/_ssr/invite._token-CJ6-H-s3.mjs +20 -0
- package/.output/server/_ssr/{invite._token-SdWXemIc.mjs → invite._token-dLKDJKVs.mjs} +9 -17
- package/.output/server/_ssr/{invite._token-BKlz0R2f.mjs → invite._token-l1SjouDz.mjs} +6 -15
- package/.output/server/_ssr/{kysely-adapter-C8iS51DB.mjs → kysely-adapter-nL7WKSgw.mjs} +1 -1
- package/.output/server/_ssr/{lifecycleUi-DgBQAYzp.mjs → lifecycleUi-Dad3hvhm.mjs} +11 -11
- package/.output/server/_ssr/logger-B8m8F1Qu.mjs +2 -0
- package/.output/server/_ssr/loopApi-BKyFB4KM.mjs +342 -0
- package/.output/server/_ssr/{adapters-BoLkOf1T.mjs → loopProjection-B8a829ij.mjs} +25 -55
- package/.output/server/_ssr/loops._loopId-DS16Phmq.mjs +1271 -0
- package/.output/server/_ssr/{loops._loopId_.runs._runId-PUGBrD5q.mjs → loops._loopId_.runs._runId-BEJI6iK5.mjs} +23 -74
- package/.output/server/_ssr/{loops._loopId_.runs._runId-Ymy4lwee.mjs → loops._loopId_.runs._runId-CduETLqH.mjs} +4 -5
- package/.output/server/_ssr/{machineFns-BZ9puxDt.mjs → machineFns-ByMsgG12.mjs} +3 -5
- package/.output/server/_ssr/{node-sqlite-dialect-D_3JmkMo.mjs → node-sqlite-dialect-CjNineno.mjs} +2 -2
- package/.output/server/_ssr/router-CXyrnvx-.mjs +565 -0
- package/.output/server/_ssr/{routes-ClZEdsnB.mjs → routes-BulNEUEE.mjs} +6 -10
- package/.output/server/_ssr/{routes-ComqHvCL.mjs → routes-DD94baie.mjs} +3 -3
- package/.output/server/_ssr/{routes-D5jJJ-30.mjs → routes-Wjexi35W.mjs} +6 -6
- package/.output/server/_ssr/runDiff-Ba8Lg1vg.mjs +2 -0
- package/.output/server/_ssr/ssr.mjs +60 -100
- package/.output/server/_ssr/store-Cujtg2QE.mjs +2 -0
- package/.output/server/_ssr/{t._teamId-BgHV_KFP.mjs → t._teamId-1CreIlPV.mjs} +7 -11
- package/.output/server/_ssr/{t._teamId-DDERNgfn.mjs → t._teamId-Bd6-zZsy.mjs} +4 -4
- package/.output/server/_ssr/{t._teamId-DRJvKHZn.mjs → t._teamId-COuMKQ4r.mjs} +7 -7
- package/.output/server/_ssr/{teamFns-Bp81UO-x.mjs → teamFns-H438WnZC.mjs} +12 -30
- package/.output/server/_ssr/{teamFns-bm82twd5.mjs → teamFns-j2JKjorZ.mjs} +2 -2
- package/.output/server/_ssr/tokens-DgG_Syq3.mjs +2 -0
- package/.output/server/_ssr/{ui-Ww2tTM2u.mjs → ui-D5KWstlb.mjs} +26 -48
- package/.output/server/{_tanstack-start-manifest_v-DwKENYCN.mjs → _tanstack-start-manifest_v-3H7yBKLz.mjs} +25 -35
- package/{drizzle/0000_round_marauders.sql → .output/server/drizzle/0000_baseline.sql} +102 -44
- package/.output/server/drizzle/meta/_journal.json +3 -115
- package/.output/server/index.mjs +83 -132
- package/{.output/server/drizzle/0000_round_marauders.sql → drizzle/0000_baseline.sql} +102 -44
- package/drizzle/meta/_journal.json +3 -115
- package/package.json +2 -11
- package/scripts/pievo-server.mjs +3 -1
- package/scripts/server-cli-lib.mjs +23 -16
- package/.output/public/assets/CodeField-dOzyFQNH.js +0 -34
- package/.output/public/assets/LoopView-DjVHUyrR.js +0 -59
- package/.output/public/assets/Modal-CCRvx959.js +0 -1
- package/.output/public/assets/SignIn-Qxw5zDFq.js +0 -1
- package/.output/public/assets/actionUi-CXxhzYe2.js +0 -1
- package/.output/public/assets/app-D1cij_NJ.css +0 -2
- package/.output/public/assets/artifactView-Cd5wWPil.js +0 -66
- package/.output/public/assets/index-BRN_CQ8U.js +0 -12
- package/.output/public/assets/invite._token-BIxr8DlP.js +0 -1
- package/.output/public/assets/invite._token-j2BTCeG1.js +0 -1
- package/.output/public/assets/jsx-runtime-BseJUIpC.js +0 -1
- package/.output/public/assets/lifecycleUi-Qy_8beQK.js +0 -1
- package/.output/public/assets/loopApi-CT1mMhlb.js +0 -3
- package/.output/public/assets/loops._loopId-BRBQzioy.js +0 -4
- package/.output/public/assets/loops._loopId_.runs._runId-CMnOJkem.js +0 -3
- package/.output/public/assets/notifyFns-DYD4EKaG.js +0 -1
- package/.output/public/assets/preload-helper-DFkkpP6W.js +0 -3
- package/.output/public/assets/routes-3nuEJGdo.js +0 -1
- package/.output/public/assets/routes-DORLim-C.js +0 -1
- package/.output/public/assets/t._teamId-F5f4K8kd.js +0 -1
- package/.output/public/assets/t._teamId-XfE_S1Fo.js +0 -1
- package/.output/public/assets/ui-Dhsx6SW0.js +0 -1
- package/.output/public/assets/useRouter-DsjH8G0p.js +0 -1
- package/.output/server/_libs/@codemirror/autocomplete+[...].mjs +0 -19713
- package/.output/server/_libs/@codemirror/lang-css+[...].mjs +0 -2636
- package/.output/server/_libs/@codemirror/lang-html+[...].mjs +0 -2247
- package/.output/server/_libs/@codemirror/lang-json+[...].mjs +0 -79
- package/.output/server/_libs/@reduxjs/toolkit+[...].mjs +0 -1736
- package/.output/server/_libs/@uiw/codemirror-extensions-basic-setup+[...].mjs +0 -76
- package/.output/server/_libs/babel__runtime.mjs +0 -30
- package/.output/server/_libs/clsx.mjs +0 -16
- package/.output/server/_libs/codemirror__commands.mjs +0 -1725
- package/.output/server/_libs/codemirror__lint.mjs +0 -565
- package/.output/server/_libs/codemirror__search.mjs +0 -1138
- package/.output/server/_libs/codemirror__theme-one-dark.mjs +0 -161
- package/.output/server/_libs/d3-array.mjs +0 -231
- package/.output/server/_libs/d3-color.mjs +0 -330
- package/.output/server/_libs/d3-format.mjs +0 -252
- package/.output/server/_libs/d3-interpolate.mjs +0 -163
- package/.output/server/_libs/d3-path.mjs +0 -77
- package/.output/server/_libs/d3-scale+[...].mjs +0 -1907
- package/.output/server/_libs/d3-shape.mjs +0 -818
- package/.output/server/_libs/decimal.js-light.mjs +0 -884
- package/.output/server/_libs/dom-serializer+[...].mjs +0 -708
- package/.output/server/_libs/domhandler.mjs +0 -461
- package/.output/server/_libs/domutils.mjs +0 -868
- package/.output/server/_libs/es-toolkit.mjs +0 -1737
- package/.output/server/_libs/eventemitter3.mjs +0 -236
- package/.output/server/_libs/html-dom-parser+htmlparser2.mjs +0 -1560
- package/.output/server/_libs/html-react-parser+[...].mjs +0 -1360
- package/.output/server/_libs/react-is.mjs +0 -48
- package/.output/server/_libs/react-redux+[...].mjs +0 -205
- package/.output/server/_libs/recharts+victory-vendor.mjs +0 -17303
- package/.output/server/_libs/uiw__codemirror-themes.mjs +0 -32
- package/.output/server/_libs/uiw__react-codemirror.mjs +0 -354
- package/.output/server/_ssr/CodeField-B7oOmmwH.mjs +0 -143
- package/.output/server/_ssr/DashboardView-BF7PciP7.mjs +0 -2736
- package/.output/server/_ssr/LoopPlaybook-DC7QVvPY.mjs +0 -2105
- package/.output/server/_ssr/LoopView-DwSrm9Ja.mjs +0 -1300
- package/.output/server/_ssr/Modal-MaCG52Pv.mjs +0 -49
- package/.output/server/_ssr/artifactView-iuPsp5aa.mjs +0 -304
- package/.output/server/_ssr/artifacts-jQ-bfdhI.mjs +0 -2
- package/.output/server/_ssr/boot-CsEFT53K.mjs +0 -2
- package/.output/server/_ssr/db-CXownd1H.mjs +0 -2
- package/.output/server/_ssr/invite._token-CWl6kipD.mjs +0 -28
- package/.output/server/_ssr/logger-Gy-47z3k.mjs +0 -2
- package/.output/server/_ssr/loopApi-8_KgBapr.mjs +0 -109
- package/.output/server/_ssr/loopApi-ABi9SgWS.mjs +0 -564
- package/.output/server/_ssr/loops._loopId-SON_t43g.mjs +0 -30
- package/.output/server/_ssr/loops._loopId-p1KWsvMM.mjs +0 -1477
- package/.output/server/_ssr/notifyFns-BUCePuF3.mjs +0 -118
- package/.output/server/_ssr/router-Czxvra6l.mjs +0 -685
- package/.output/server/_ssr/runDiff--qLtU4FI.mjs +0 -2
- package/.output/server/_ssr/store-40eVzW1S.mjs +0 -2
- package/.output/server/_ssr/tokens-CbfoRC_s.mjs +0 -2
- package/.output/server/drizzle/0001_naive_silver_fox.sql +0 -25
- package/.output/server/drizzle/0002_funny_sage.sql +0 -12
- package/.output/server/drizzle/0003_optimal_slapstick.sql +0 -102
- package/.output/server/drizzle/0004_remove_grok_agent.sql +0 -5
- package/.output/server/drizzle/0005_heavy_gauntlet.sql +0 -8
- package/.output/server/drizzle/0006_tranquil_sharon_carter.sql +0 -1
- package/.output/server/drizzle/0007_faulty_starbolt.sql +0 -30
- package/.output/server/drizzle/0008_durable_lifecycle_evidence.sql +0 -15
- package/.output/server/drizzle/0009_ordinary_electro.sql +0 -1
- package/.output/server/drizzle/0010_workable_rage.sql +0 -14
- package/.output/server/drizzle/0011_steep_marvel_zombies.sql +0 -3
- package/.output/server/drizzle/0012_blocked_run_status.sql +0 -12
- package/.output/server/drizzle/0013_drop_run_outcome.sql +0 -2
- package/.output/server/drizzle/0014_luxuriant_scrambler.sql +0 -5
- package/.output/server/drizzle/0015_run_history_foundation.sql +0 -43
- package/.output/server/drizzle/0016_plural_machine_runs.sql +0 -4
- package/.output/server/drizzle/meta/0000_snapshot.json +0 -1333
- package/.output/server/drizzle/meta/0001_snapshot.json +0 -1498
- package/.output/server/drizzle/meta/0002_snapshot.json +0 -1576
- package/.output/server/drizzle/meta/0003_snapshot.json +0 -1666
- package/.output/server/drizzle/meta/0005_snapshot.json +0 -1666
- package/.output/server/drizzle/meta/0006_snapshot.json +0 -1672
- package/.output/server/drizzle/meta/0007_snapshot.json +0 -1787
- package/.output/server/drizzle/meta/0009_snapshot.json +0 -1793
- package/.output/server/drizzle/meta/0010_snapshot.json +0 -1891
- package/.output/server/drizzle/meta/0011_snapshot.json +0 -1872
- package/drizzle/0001_naive_silver_fox.sql +0 -25
- package/drizzle/0002_funny_sage.sql +0 -12
- package/drizzle/0003_optimal_slapstick.sql +0 -102
- package/drizzle/0004_remove_grok_agent.sql +0 -5
- package/drizzle/0005_heavy_gauntlet.sql +0 -8
- package/drizzle/0006_tranquil_sharon_carter.sql +0 -1
- package/drizzle/0007_faulty_starbolt.sql +0 -30
- package/drizzle/0008_durable_lifecycle_evidence.sql +0 -15
- package/drizzle/0009_ordinary_electro.sql +0 -1
- package/drizzle/0010_workable_rage.sql +0 -14
- package/drizzle/0011_steep_marvel_zombies.sql +0 -3
- package/drizzle/0012_blocked_run_status.sql +0 -12
- package/drizzle/0013_drop_run_outcome.sql +0 -2
- package/drizzle/0014_luxuriant_scrambler.sql +0 -5
- package/drizzle/0015_run_history_foundation.sql +0 -43
- package/drizzle/0016_plural_machine_runs.sql +0 -4
- package/drizzle/meta/0000_snapshot.json +0 -1333
- package/drizzle/meta/0001_snapshot.json +0 -1498
- package/drizzle/meta/0002_snapshot.json +0 -1576
- package/drizzle/meta/0003_snapshot.json +0 -1666
- package/drizzle/meta/0005_snapshot.json +0 -1666
- package/drizzle/meta/0006_snapshot.json +0 -1672
- package/drizzle/meta/0007_snapshot.json +0 -1787
- package/drizzle/meta/0009_snapshot.json +0 -1793
- package/drizzle/meta/0010_snapshot.json +0 -1891
- package/drizzle/meta/0011_snapshot.json +0 -1872
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { c as DialogRoot, d as DialogClose, f as DialogBackdrop, g as require_jsx_runtime, l as DialogPortal, s as DialogTitle, u as DialogPopup } from "../_libs/@base-ui/react+[...].mjs";
|
|
2
|
-
import { O as sectionHeadCls } from "./ui-Ww2tTM2u.mjs";
|
|
3
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/Modal-MaCG52Pv.js
|
|
4
|
-
var import_jsx_runtime = require_jsx_runtime();
|
|
5
|
-
/** Shared modal shell — Base UI Dialog handles focus trap, Esc, scroll lock.
|
|
6
|
-
* Content-height, optically centered — sized for the small form/compose dialogs
|
|
7
|
-
* (the old `detail`/`wide` variants died with the modal-era job/run views). */
|
|
8
|
-
function Modal({ open, onClose, children, wide = false }) {
|
|
9
|
-
const pos = `-translate-y-1/2 max-h-[calc(100dvh-4rem)] ${wide ? "top-1/2 max-w-[62rem]" : "top-[46%] max-w-160"}`;
|
|
10
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogRoot, {
|
|
11
|
-
open,
|
|
12
|
-
onOpenChange: (o) => !o && onClose(),
|
|
13
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DialogPortal, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogBackdrop, { className: "fixed inset-0 z-[900] bg-black/25 backdrop-blur-[8px] transition-opacity duration-200 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0 dark:bg-black/45" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogPopup, {
|
|
14
|
-
className: `glass-strong fixed left-1/2 z-[901] w-full -translate-x-1/2 overflow-auto rounded-sheet px-[26px] pb-7 pt-6 outline-none transition-opacity duration-200 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0 ${pos}`,
|
|
15
|
-
children
|
|
16
|
-
})] })
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
function ModalHead({ title, sub }) {
|
|
20
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
21
|
-
className: "flex items-start justify-between gap-3",
|
|
22
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogTitle, {
|
|
23
|
-
className: "text-[20px] font-semibold tracking-[-0.015em] text-display",
|
|
24
|
-
children: title
|
|
25
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogClose, {
|
|
26
|
-
"aria-label": "Close",
|
|
27
|
-
className: "-mr-1 shrink-0 cursor-pointer rounded-full border-none bg-transparent px-1.5 py-0.5 text-[15px] leading-none text-disabled transition-colors hover:text-display focus-visible:text-display focus-visible:outline-none",
|
|
28
|
-
children: "✕"
|
|
29
|
-
})]
|
|
30
|
-
}), sub != null && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
31
|
-
className: "mt-1.5 text-meta text-secondary",
|
|
32
|
-
children: sub
|
|
33
|
-
})] });
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Section divider heading - sentence case, hierarchy from weight + color.
|
|
37
|
-
* `action` drops an optional control (e.g. Copy) flush-right on the divider.
|
|
38
|
-
*/
|
|
39
|
-
function ModalSection({ children, action }) {
|
|
40
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
41
|
-
className: "mb-2.5 mt-6 flex items-end justify-between gap-3 border-b border-hairline pb-1.5",
|
|
42
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", {
|
|
43
|
-
className: sectionHeadCls,
|
|
44
|
-
children
|
|
45
|
-
}), action]
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
//#endregion
|
|
49
|
-
export { ModalHead as n, ModalSection as r, Modal as t };
|
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
import { o as __toESM } from "../_runtime.mjs";
|
|
2
|
-
import { g as require_jsx_runtime, h as require_react } from "../_libs/@base-ui/react+[...].mjs";
|
|
3
|
-
import { o as getArtifact } from "./loopApi-8_KgBapr.mjs";
|
|
4
|
-
import { t as artifactKind } from "./artifactKind-BW0isV8L.mjs";
|
|
5
|
-
import { t as purify } from "../_libs/dompurify.mjs";
|
|
6
|
-
import { t as g } from "../_libs/marked.mjs";
|
|
7
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/artifactView-iuPsp5aa.js
|
|
8
|
-
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
9
|
-
var import_jsx_runtime = require_jsx_runtime();
|
|
10
|
-
/** Download URL for one artifact - the path is segment-encoded so a nested path
|
|
11
|
-
* (`data/raw.json`) round-trips and can't be mistaken for extra route segments. */
|
|
12
|
-
function downloadHref(loopId, path) {
|
|
13
|
-
const enc = path.split("/").map(encodeURIComponent).join("/");
|
|
14
|
-
return `/api/artifact/${encodeURIComponent(loopId)}/${enc}`;
|
|
15
|
-
}
|
|
16
|
-
/** Inline render URL for an image artifact - the same bytes as `downloadHref`
|
|
17
|
-
* but served with the real image content-type + `inline` disposition (see the
|
|
18
|
-
* route). Used as an <img> src; never for a document the browser navigates to. */
|
|
19
|
-
function inlineHref(loopId, path) {
|
|
20
|
-
return `${downloadHref(loopId, path)}?view=inline`;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Shared markdown → sanitized HTML pipeline: marked (GFM) → DOMPurify (an
|
|
24
|
-
* allowlisted prose subset, NO script/handlers). ONE sanitizer config for every
|
|
25
|
-
* markdown surface (including the Files viewer's `TaskFileView`) so the allowlist
|
|
26
|
-
* can't drift between them. Render the output under
|
|
27
|
-
* the `.taskmd` styles.
|
|
28
|
-
*/
|
|
29
|
-
var MD_SANITIZE = {
|
|
30
|
-
ALLOWED_TAGS: [
|
|
31
|
-
"h1",
|
|
32
|
-
"h2",
|
|
33
|
-
"h3",
|
|
34
|
-
"h4",
|
|
35
|
-
"h5",
|
|
36
|
-
"h6",
|
|
37
|
-
"p",
|
|
38
|
-
"br",
|
|
39
|
-
"hr",
|
|
40
|
-
"strong",
|
|
41
|
-
"b",
|
|
42
|
-
"em",
|
|
43
|
-
"i",
|
|
44
|
-
"del",
|
|
45
|
-
"s",
|
|
46
|
-
"code",
|
|
47
|
-
"pre",
|
|
48
|
-
"blockquote",
|
|
49
|
-
"ul",
|
|
50
|
-
"ol",
|
|
51
|
-
"li",
|
|
52
|
-
"a",
|
|
53
|
-
"span",
|
|
54
|
-
"table",
|
|
55
|
-
"thead",
|
|
56
|
-
"tbody",
|
|
57
|
-
"tr",
|
|
58
|
-
"th",
|
|
59
|
-
"td",
|
|
60
|
-
"img"
|
|
61
|
-
],
|
|
62
|
-
ALLOWED_ATTR: [
|
|
63
|
-
"href",
|
|
64
|
-
"title",
|
|
65
|
-
"target",
|
|
66
|
-
"rel",
|
|
67
|
-
"src",
|
|
68
|
-
"alt"
|
|
69
|
-
]
|
|
70
|
-
};
|
|
71
|
-
/** Markdown string → sanitized HTML string (safe for dangerouslySetInnerHTML). */
|
|
72
|
-
function renderMarkdown(content) {
|
|
73
|
-
return purify.sanitize(g.parse(content, {
|
|
74
|
-
async: false,
|
|
75
|
-
gfm: true
|
|
76
|
-
}), MD_SANITIZE);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Renders markdown (a loop's task file, or any `.md` artifact) as a calm,
|
|
80
|
-
* formatted document instead of a raw mono dump. Pipeline: the shared
|
|
81
|
-
* `renderMarkdown` (marked GFM → DOMPurify allowlist) → `.taskmd` styles.
|
|
82
|
-
* Bare prose only — the host (the unified Files viewer) owns the surface,
|
|
83
|
-
* padding cadence, and scroll.
|
|
84
|
-
*/
|
|
85
|
-
function TaskFileView({ content }) {
|
|
86
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
87
|
-
className: "taskmd px-5 py-4",
|
|
88
|
-
dangerouslySetInnerHTML: { __html: (0, import_react.useMemo)(() => renderMarkdown(content), [content]) }
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Shared pieces of the artifact content viewer - one source for the Files
|
|
93
|
-
* panel's detail pane AND the dashboard artifact primitives (`<loop-embed>`,
|
|
94
|
-
* `<loop-calendar>`'s and `<loop-kanban>`'s detail), so the caption strip, the
|
|
95
|
-
* binary/oversize copy, and the type-appropriate render can't drift between
|
|
96
|
-
* surfaces.
|
|
97
|
-
*
|
|
98
|
-
* Display types (see `lib/artifactKind`):
|
|
99
|
-
* - HTML → a STRICT sandboxed iframe (`sandbox="allow-scripts"`, deliberately
|
|
100
|
-
* NO `allow-same-origin`): user-machine-synced markup renders richly
|
|
101
|
-
* but in an opaque origin, so its scripts can't read the app's
|
|
102
|
-
* cookies/session or reach `parent` - stored-XSS is contained by
|
|
103
|
-
* design. A Preview/Source toggle exposes the raw markup too.
|
|
104
|
-
* - image → an <img> pointed at the hardened inline route (`inlineHref`); the
|
|
105
|
-
* bytes are NEVER inlined into the app DOM (SVG is scriptable, so it
|
|
106
|
-
* rides as an image, which does not execute embedded scripts).
|
|
107
|
-
* - markdown → the shared markdown pipeline (Preview) with a raw Source toggle.
|
|
108
|
-
* - text → monospace source.
|
|
109
|
-
* Everything keeps a Download fallback; an oversize (metadata-only) artifact has
|
|
110
|
-
* no synced bytes to render, so it says so rather than showing an empty pane.
|
|
111
|
-
*/
|
|
112
|
-
var isMarkdown = (path) => artifactKind(path) === "markdown";
|
|
113
|
-
/** A small monospace caption strip above a file's content (path · meta [· action]). */
|
|
114
|
-
function ViewerHead({ path, meta, action }) {
|
|
115
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
116
|
-
className: "sticky top-0 z-10 flex flex-wrap items-center gap-x-2 gap-y-1 border-b border-hairline bg-surface px-5 py-2.5",
|
|
117
|
-
children: [
|
|
118
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
119
|
-
className: "break-all font-mono text-label text-primary",
|
|
120
|
-
children: path
|
|
121
|
-
}),
|
|
122
|
-
meta && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
123
|
-
className: "font-mono text-caption text-disabled",
|
|
124
|
-
children: ["· ", meta]
|
|
125
|
-
}),
|
|
126
|
-
action && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
127
|
-
className: "ml-auto shrink-0",
|
|
128
|
-
children: action
|
|
129
|
-
})
|
|
130
|
-
]
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
/** The binary / oversize body - download affordance or the metadata-only note. */
|
|
134
|
-
function BinaryNotice({ loopId, path, oversize }) {
|
|
135
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
136
|
-
className: "px-5 py-8 text-body text-secondary",
|
|
137
|
-
children: oversize ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
138
|
-
className: "text-disabled",
|
|
139
|
-
children: "Too large to preview - stored as metadata only (no synced bytes)."
|
|
140
|
-
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
141
|
-
"Binary file - not previewable.",
|
|
142
|
-
" ",
|
|
143
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
|
|
144
|
-
href: downloadHref(loopId, path),
|
|
145
|
-
download: true,
|
|
146
|
-
className: "text-interactive underline underline-offset-2 transition-colors hover:text-display",
|
|
147
|
-
children: "Download"
|
|
148
|
-
})
|
|
149
|
-
] })
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
/** The viewer's action strip: a Preview/Source toggle (renderable types only)
|
|
153
|
-
* plus an always-present Download. Sits just under the content head. */
|
|
154
|
-
function ViewerActions({ loopId, path, mode, onMode, showToggle }) {
|
|
155
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
156
|
-
className: "flex items-center gap-2 border-b border-hairline bg-surface px-5 py-1.5",
|
|
157
|
-
children: [showToggle && mode && onMode && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
158
|
-
className: "inline-flex overflow-hidden rounded-control border border-hairline",
|
|
159
|
-
children: ["preview", "source"].map((m) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
|
|
160
|
-
type: "button",
|
|
161
|
-
onClick: () => onMode(m),
|
|
162
|
-
className: `cursor-pointer border-none px-2.5 py-0.5 text-caption font-medium transition-colors ${mode === m ? "bg-raised text-display" : "bg-transparent text-secondary hover:text-display"}`,
|
|
163
|
-
children: m === "preview" ? "Preview" : "Source"
|
|
164
|
-
}, m))
|
|
165
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
|
|
166
|
-
href: downloadHref(loopId, path),
|
|
167
|
-
download: true,
|
|
168
|
-
className: "ml-auto shrink-0 text-caption font-medium text-interactive underline underline-offset-2 transition-colors hover:text-display",
|
|
169
|
-
children: "Download ↓"
|
|
170
|
-
})]
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Rendered HTML in a STRICT sandbox. `sandbox="allow-scripts"` WITHOUT
|
|
175
|
-
* `allow-same-origin` is the load-bearing isolation: the frame gets an opaque
|
|
176
|
-
* origin, so document.cookie is empty, storage is inaccessible, and `parent`
|
|
177
|
-
* access throws a cross-origin SecurityError - synced markup can render (styles
|
|
178
|
-
* + its own scripts run) yet can't touch the app's session or DOM. `srcDoc`
|
|
179
|
-
* keeps the bytes off any navigable app-origin URL. Bounded height with internal
|
|
180
|
-
* scroll; a white backdrop matches what report HTML expects regardless of theme.
|
|
181
|
-
*/
|
|
182
|
-
function HtmlPreview({ html }) {
|
|
183
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("iframe", {
|
|
184
|
-
title: "Rendered HTML artifact (sandboxed)",
|
|
185
|
-
srcDoc: html,
|
|
186
|
-
sandbox: "allow-scripts",
|
|
187
|
-
referrerPolicy: "no-referrer",
|
|
188
|
-
className: "h-[min(70vh,620px)] w-full border-0 bg-white"
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
/** An image artifact, rendered from the hardened inline route (never inlined
|
|
192
|
-
* into the app DOM). Falls back to a download prompt if the bytes won't load. */
|
|
193
|
-
function ImageView({ loopId, file }) {
|
|
194
|
-
const [failed, setFailed] = (0, import_react.useState)(false);
|
|
195
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
196
|
-
className: "min-w-0",
|
|
197
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ViewerActions, {
|
|
198
|
-
loopId,
|
|
199
|
-
path: file.path,
|
|
200
|
-
showToggle: false
|
|
201
|
-
}), failed ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
202
|
-
className: "px-5 py-8 text-body text-secondary",
|
|
203
|
-
children: [
|
|
204
|
-
"Couldn't load this image.",
|
|
205
|
-
" ",
|
|
206
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
|
|
207
|
-
href: downloadHref(loopId, file.path),
|
|
208
|
-
download: true,
|
|
209
|
-
className: "text-interactive underline underline-offset-2 transition-colors hover:text-display",
|
|
210
|
-
children: "Download"
|
|
211
|
-
}),
|
|
212
|
-
" ",
|
|
213
|
-
"instead."
|
|
214
|
-
]
|
|
215
|
-
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
216
|
-
className: "flex justify-center overflow-auto px-5 py-6",
|
|
217
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
|
|
218
|
-
src: inlineHref(loopId, file.path),
|
|
219
|
-
alt: file.path,
|
|
220
|
-
onError: () => setFailed(true),
|
|
221
|
-
className: "max-w-full rounded-control border border-hairline bg-white object-contain"
|
|
222
|
-
})
|
|
223
|
-
})]
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
/** A text-bearing artifact (html / markdown / plain text): fetch the bytes, then
|
|
227
|
-
* render per its kind with a Preview/Source toggle (html + markdown) + download. */
|
|
228
|
-
function TextArtifactView({ loopId, file, kind }) {
|
|
229
|
-
const [loaded, setLoaded] = (0, import_react.useState)({ loading: true });
|
|
230
|
-
const [mode, setMode] = (0, import_react.useState)("preview");
|
|
231
|
-
(0, import_react.useEffect)(() => {
|
|
232
|
-
let alive = true;
|
|
233
|
-
setLoaded({ loading: true });
|
|
234
|
-
getArtifact({ data: {
|
|
235
|
-
loopId,
|
|
236
|
-
path: file.path
|
|
237
|
-
} }).then((c) => alive && setLoaded(c)).catch((e) => alive && setLoaded({ error: String(e) }));
|
|
238
|
-
return () => {
|
|
239
|
-
alive = false;
|
|
240
|
-
};
|
|
241
|
-
}, [
|
|
242
|
-
loopId,
|
|
243
|
-
file.path,
|
|
244
|
-
file.updatedAt
|
|
245
|
-
]);
|
|
246
|
-
if ("loading" in loaded) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
247
|
-
className: "px-5 py-6 text-body text-disabled",
|
|
248
|
-
children: "Loading…"
|
|
249
|
-
});
|
|
250
|
-
if ("binary" in loaded) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BinaryNotice, {
|
|
251
|
-
loopId,
|
|
252
|
-
path: file.path,
|
|
253
|
-
oversize: loaded.oversize
|
|
254
|
-
});
|
|
255
|
-
if ("error" in loaded) return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
256
|
-
className: "px-5 py-6 text-body text-accent",
|
|
257
|
-
children: ["Couldn't load this file - ", loaded.error]
|
|
258
|
-
});
|
|
259
|
-
const text = loaded.text || "(empty file)";
|
|
260
|
-
const renderable = kind === "html" || kind === "markdown";
|
|
261
|
-
const showSource = !renderable || mode === "source";
|
|
262
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
263
|
-
className: "min-w-0",
|
|
264
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ViewerActions, {
|
|
265
|
-
loopId,
|
|
266
|
-
path: file.path,
|
|
267
|
-
mode,
|
|
268
|
-
onMode: setMode,
|
|
269
|
-
showToggle: renderable
|
|
270
|
-
}), kind === "html" && !showSource ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(HtmlPreview, { html: loaded.text || "" }) : kind === "markdown" && !showSource ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TaskFileView, { content: text }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", {
|
|
271
|
-
className: "m-0 overflow-x-auto whitespace-pre-wrap px-5 py-4 font-mono text-label leading-relaxed text-secondary",
|
|
272
|
-
children: text
|
|
273
|
-
})]
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* One artifact's content body, dispatched by display kind (see `artifactKind`).
|
|
278
|
-
* Oversize → metadata-only note (no bytes); image → hardened <img>; other binary
|
|
279
|
-
* → download; text-bearing → the fetch-and-render viewer.
|
|
280
|
-
*/
|
|
281
|
-
function ArtifactBody({ loopId, file }) {
|
|
282
|
-
const kind = artifactKind(file.path);
|
|
283
|
-
if (file.oversize) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BinaryNotice, {
|
|
284
|
-
loopId,
|
|
285
|
-
path: file.path,
|
|
286
|
-
oversize: true
|
|
287
|
-
});
|
|
288
|
-
if (kind === "image") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ImageView, {
|
|
289
|
-
loopId,
|
|
290
|
-
file
|
|
291
|
-
}, `${file.path}:${file.updatedAt ?? ""}`);
|
|
292
|
-
if (file.binary) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BinaryNotice, {
|
|
293
|
-
loopId,
|
|
294
|
-
path: file.path,
|
|
295
|
-
oversize: false
|
|
296
|
-
});
|
|
297
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TextArtifactView, {
|
|
298
|
-
loopId,
|
|
299
|
-
file,
|
|
300
|
-
kind
|
|
301
|
-
}, file.path);
|
|
302
|
-
}
|
|
303
|
-
//#endregion
|
|
304
|
-
export { isMarkdown as i, TaskFileView as n, ViewerHead as r, ArtifactBody as t };
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { g as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
2
|
-
import { f as useRouter } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
3
|
-
import { r as LoadErrorCard } from "./actionUi-BN55TNYE.mjs";
|
|
4
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/invite._token-CWl6kipD.js
|
|
5
|
-
var import_jsx_runtime = require_jsx_runtime();
|
|
6
|
-
/**
|
|
7
|
-
* Invite-link redeem (`/invite/<token>`, design §4 option B). The recipient opens
|
|
8
|
-
* the link the owner shared; if signed out (under the gate) they hit the normal
|
|
9
|
-
* gated GitHub sign-in and return here — the invite NEVER bypasses the login
|
|
10
|
-
* allowlist (decision 3), it only grants membership once they already have an
|
|
11
|
-
* account. On redeem we navigate to the team's dashboard.
|
|
12
|
-
*
|
|
13
|
-
* Open mode has no identities, so an invite is meaningless there — it renders a
|
|
14
|
-
* calm explanation rather than a broken redeem.
|
|
15
|
-
*/
|
|
16
|
-
function LoadError({ error }) {
|
|
17
|
-
const router = useRouter();
|
|
18
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("main", {
|
|
19
|
-
className: "mx-auto max-w-[1180px] px-8 pt-12",
|
|
20
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoadErrorCard, {
|
|
21
|
-
title: "Couldn't open this invite.",
|
|
22
|
-
detail: String(error),
|
|
23
|
-
onRetry: () => void router.invalidate()
|
|
24
|
-
})
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
//#endregion
|
|
28
|
-
export { LoadError as errorComponent };
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { n as createServerFn, r as getServerFnById, t as TSS_SERVER_FUNCTION } from "./ssr.mjs";
|
|
2
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/loopApi-8_KgBapr.js
|
|
3
|
-
var createSsrRpc = (functionId) => {
|
|
4
|
-
const url = "/_serverFn/" + functionId;
|
|
5
|
-
const serverFnMeta = { id: functionId };
|
|
6
|
-
const fn = async (...args) => {
|
|
7
|
-
return (await getServerFnById(functionId, { origin: "server" }))(...args);
|
|
8
|
-
};
|
|
9
|
-
return Object.assign(fn, {
|
|
10
|
-
url,
|
|
11
|
-
serverFnMeta,
|
|
12
|
-
[TSS_SERVER_FUNCTION]: true
|
|
13
|
-
});
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* Server functions backing the dashboard. They run server-side (createServerFn
|
|
17
|
-
* → RPC) and call the IN-PROCESS scheduler + store directly — the scheduler
|
|
18
|
-
* lives in this same TanStack process (booted on first call via ensureServer).
|
|
19
|
-
* The machine-facing endpoints (poll / agent-api / report) are sibling server
|
|
20
|
-
* routes in this same process, so one process owns the single scheduler.
|
|
21
|
-
*
|
|
22
|
-
* Shared workspace (v1): no per-user filtering — every signed-in user sees all
|
|
23
|
-
* loops/machines. `userId` is creator attribution only.
|
|
24
|
-
*/
|
|
25
|
-
/**
|
|
26
|
-
* Resolve a loop and authorize the request against its owner. Returns the loop,
|
|
27
|
-
* or undefined when it's missing OR (gate on) owned by a different user — callers
|
|
28
|
-
* treat both as "not found" so existence never leaks across users.
|
|
29
|
-
*/
|
|
30
|
-
/** Whether the auth gate is active (a GitHub OAuth app is configured). */
|
|
31
|
-
var getAuthState = createServerFn({ method: "GET" }).handler(createSsrRpc("b8119d5fe6ca1ed9f609702aa2133b5ac5337030c0bdcf92dc7eba889d6bd2e6"));
|
|
32
|
-
/**
|
|
33
|
-
* Client config. `pievoCli` is the CLI invocation prefix the skill + connect
|
|
34
|
-
* dialog use for every verb (`daemon start`, `new`, …) — defaults to the globally
|
|
35
|
-
* installed `pievo`. Set PIEVO_CLI locally to a runnable command that points at the in-repo
|
|
36
|
-
* daemon, e.g. `tsx /abs/packages/daemon/src/cli.ts` or
|
|
37
|
-
* `node /abs/packages/daemon/dist/cli.js`, so loops created from THIS server tell
|
|
38
|
-
* Claude Code to run your local code instead of the registry build.
|
|
39
|
-
*/
|
|
40
|
-
var getConfig = createServerFn({ method: "GET" }).handler(createSsrRpc("cbb6a1b09b309459bbba3dc3851ae85fc468658b3cda77e22b6c6f3e28b65af4"));
|
|
41
|
-
/** GET — the teams this user may view (for the header switcher) + the active
|
|
42
|
-
* selection. A user gets only their memberships (usually one ⇒ no dropdown).
|
|
43
|
-
* Open mode ⇒ empty. An explicit `teamId` (the `/t/<id>` route) pins the active
|
|
44
|
-
* selection for THIS request — so the switcher highlights the tab's own team,
|
|
45
|
-
* not the cookie's. */
|
|
46
|
-
var listMyTeams = createServerFn({ method: "GET" }).validator((teamId) => teamId).handler(createSsrRpc("0fe12e769203c42f432a927b9cbf13a967a0f9db567b61843598f734afb4f5c6"));
|
|
47
|
-
/** GET — whether the caller may view the given dashboard team (`/t/<id>` loader
|
|
48
|
-
* gate). Enumeration-safe: a team the caller isn't a member of returns false, so
|
|
49
|
-
* the loader throws the same generic not-found as a missing loop — never
|
|
50
|
-
* confirming the team exists. Open mode ⇒ always true (single shared workspace). */
|
|
51
|
-
var canViewTeam = createServerFn({ method: "GET" }).validator((teamId) => teamId).handler(createSsrRpc("7cc22b3a0f6b1c4c73463c3401e981ad42caf6487b479b738ee5aeacb11710da"));
|
|
52
|
-
/** GET — the caller's default dashboard team as an id: the last-used cookie,
|
|
53
|
-
* validated, else the personal team. Backs the `/` → `/t/<id>` redirect. */
|
|
54
|
-
var getDefaultTeam = createServerFn({ method: "GET" }).handler(createSsrRpc("dc0ec955d0d53a150a3e9a4673f98f3509cfb4bd411c512079ae4e94c561b70c"));
|
|
55
|
-
/** GET — the signed-in user's loops as compact summaries (newest first).
|
|
56
|
-
* Gate on ⇒ only the given/active team's loops; open mode ⇒ the full shared list.
|
|
57
|
-
* An explicit `teamId` (the `/t/<id>` route) scopes this request independent of
|
|
58
|
-
* the cookie, so different tabs on /t/A and /t/B list different teams at once. */
|
|
59
|
-
var listJobs = createServerFn({ method: "GET" }).validator((teamId) => teamId).handler(createSsrRpc("5a11dda4e2d3b0b097890c35ad7d447ff7245721b2ddc7f08787402446ef0919"));
|
|
60
|
-
/** GET — full detail (job + summary + reversed runs). */
|
|
61
|
-
var getJobDetail = createServerFn({ method: "GET" }).validator((id) => id).handler(createSsrRpc("0411aadd2c067b141180921284fb90f371fdeaf031baae51ae289b596e909da8"));
|
|
62
|
-
/** GET — one older page of a loop's runs (cursor = `beforeTs`), for the card
|
|
63
|
-
* timeline's lazy "+N" paging. Chronological (oldest-first), capped. */
|
|
64
|
-
var loadOlderRuns = createServerFn({ method: "GET" }).validator((d) => d).handler(createSsrRpc("85fdf73d4fee43aed762f93c5d47d33200fbff39e2d082647dc921f610d32698"));
|
|
65
|
-
/** GET — the latest 100 successful exec rows needed by dashboard charts. This is a
|
|
66
|
-
* compact, authorized read: role filtering happens before the fixed limit, and
|
|
67
|
-
* messages/provider telemetry never ride the response. */
|
|
68
|
-
var getChartRuns = createServerFn({ method: "GET" }).validator((d) => d).handler(createSsrRpc("bdf2cf0a884a9dccf99323b84675f048164a726f8347a2b6578a4ed1a350712e"));
|
|
69
|
-
/** GET — the loop's current live-synced files (metadata only; path-sorted). */
|
|
70
|
-
var getArtifacts = createServerFn({ method: "GET" }).validator((d) => d).handler(createSsrRpc("b18bbec3d06dfc77714e1e527dfb9172fd7575a64a6c0d6e73ba6dc658dccf0d"));
|
|
71
|
-
/** GET — one artifact's content: decoded text, or a binary/oversize marker the
|
|
72
|
-
* UI turns into a download link (bytes stream from the /api/artifact route). */
|
|
73
|
-
var getArtifact = createServerFn({ method: "GET" }).validator((d) => d).handler(createSsrRpc("ed10d5fe79208e5e0e4e18e4a17b18d7f7db4dd16204c00c3ac90c4644668841"));
|
|
74
|
-
/** GET — a run's per-file diff vs the previous run (Phase 3). Lazy by runId like
|
|
75
|
-
* computed on the server at read time (no stored diffs). Old runs
|
|
76
|
-
* with no snapshot return `hasSnapshot: false` for the degrade copy. */
|
|
77
|
-
var getRunDiff = createServerFn({ method: "GET" }).validator((d) => d).handler(createSsrRpc("08c28b892712a1b491b120b74c7dcb81761988d31ccea60216d1807b73c1182c"));
|
|
78
|
-
var listTemplates = createServerFn({ method: "GET" }).handler(createSsrRpc("3155d050a38c0e160018b462404acd048bfbed9e15166920b4bba09ed72ba817"));
|
|
79
|
-
var patchJob = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("606503961026f5ed240adadfdee20ac0af65ac9dbb67209257ff1fdb9c642324"));
|
|
80
|
-
/** Dedicated lifecycle operations. Dashboard callers never synthesize these
|
|
81
|
-
* transitions with patchJob: each delegates to the loop-locked store operation. */
|
|
82
|
-
var pauseJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("4c664fb177d6aae868b6baeab69348cff67d74d905cc6cf779c43cb37139b0aa"));
|
|
83
|
-
var startJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("7732cf412e02d47d9ac3933f09510503ea08428df967d44267ba47bea10d4cc4"));
|
|
84
|
-
var stopJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("934749369c5760593935c24bfa6f2041d3e82ea02fb7a13dfa7fd32940ac395d"));
|
|
85
|
-
/** Delete is one confirmed operation. Reachable machines get the graceful
|
|
86
|
-
* Stop-and-wait path; a machine already offline at click time cannot acknowledge
|
|
87
|
-
* Stop, so retire its execution authority and remove server data immediately.
|
|
88
|
-
* Local files are never touched by either path. */
|
|
89
|
-
var deleteJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("c3ccf6ce71809a0cdaf481b15b5fdc5db3a453a508e5841a62034cb1915a7f92"));
|
|
90
|
-
createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("0cb2218861830aae4338b814b3819e15100942beab970bc4c188f88b8cb6bc7e"));
|
|
91
|
-
var runJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("0c9031f2f6a9ac0b1c60075833169755ef1815324918d1426c966ac8db563798"));
|
|
92
|
-
var evolveJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("8a11b8d76ad42203a4bf128db0b8e0f2d6c947300dbee7a51498418404f211cd"));
|
|
93
|
-
/** Agent-first steer: durably queue an owner instruction. A pending steer is
|
|
94
|
-
* updated in place; a steer already running gets one follow-up. */
|
|
95
|
-
var requestSteer = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("38b831a8de4883e3d877f2169eaebde5864a2f256b1c5c790fa669702968cff9"));
|
|
96
|
-
/** Dedicated Stop-run operation. Pending work cancels immediately; running work
|
|
97
|
-
* records intent and stays Running until the daemon reports its actual result. */
|
|
98
|
-
var stopRun = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("6850ba403da9dec5aff45794eb52636ca540ddec2d9e59f5c75ccbb852bfeacb"));
|
|
99
|
-
/**
|
|
100
|
-
* Mint a fresh claim token for a New-loop dialog. It's shown in the paste
|
|
101
|
-
* snippet and used by Claude Code as (a) this machine's device token if the
|
|
102
|
-
* machine is new, and (b) the loop's `claim` so the dialog can correlate the
|
|
103
|
-
* created loop. No machine row is created here — the daemon self-registers.
|
|
104
|
-
*/
|
|
105
|
-
var mintClaim = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(createSsrRpc("4646f52fb09b83c9c9cef34836f3c9d03416423c879d9e5ceffcafd9a71ecba6"));
|
|
106
|
-
/** Poll a claim while the New-loop dialog waits for Claude Code to create the loop. */
|
|
107
|
-
var claimStatus = createServerFn({ method: "GET" }).validator((token) => token).handler(createSsrRpc("4b0db7d6c8f25383a3526598cb0c1881db6cf413e451e9478687c05666461347"));
|
|
108
|
-
//#endregion
|
|
109
|
-
export { startJob as C, runJob as S, stopRun as T, loadOlderRuns as _, evolveJob as a, pauseJob as b, getAuthState as c, getDefaultTeam as d, getJobDetail as f, listTemplates as g, listMyTeams as h, deleteJob as i, getChartRuns as l, listJobs as m, claimStatus as n, getArtifact as o, getRunDiff as p, createSsrRpc as r, getArtifacts as s, canViewTeam as t, getConfig as u, mintClaim as v, stopJob as w, requestSteer as x, patchJob as y };
|